Skip to content

Commit 7e95e40

Browse files
committed
Refine try feature
1 parent 26589c3 commit 7e95e40

File tree

2 files changed

+56
-94
lines changed

2 files changed

+56
-94
lines changed

pyarmor/try/client.js

Lines changed: 49 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@ const on_start_build = () => {
1111
resultModal.querySelector('.modal-body > div.alert:nth-child(1)').classList.remove('d-none')
1212
resultModal.querySelector('.modal-body > div.alert:nth-child(2)').classList.add('d-none')
1313
resultModal.querySelector('.modal-body > div.alert:nth-child(3)').classList.add('d-none')
14-
resultModal.querySelector('.modal-footer > button:nth-child(2)').classList.add('d-none')
1514

1615
taskId = 0
17-
taskStatus = 2
16+
taskStatus = 0
1817
elapseSeconds = 0
1918
count_time()
2019
}
@@ -27,38 +26,33 @@ const on_server_error = (errmsg) => {
2726
}
2827

2928
const start_build = (target) => {
30-
const url = webapi
3129
const scriptName = document.getElementById('scriptName').value
3230
const pyver = document.getElementById('pythonVersion').value
3331
const content = document.getElementById('scriptContent').value
3432

35-
const data = {
33+
const paras = {
3634
script: scriptName,
3735
pyver: pyver,
38-
source: content,
3936
target: target,
4037
}
38+
const url = make_url(webapi, paras)
4139

4240
const onsuccess = (task) => {
4341
taskId = task.id
44-
taskStatus = task.status
45-
if (taskStatus == 2)
46-
on_start_build()
47-
else
48-
on_task_error('${taskStatus}')
42+
taskStatus = task.state
43+
if (taskStatus >= 10) {
44+
query_task()
45+
}
4946
}
5047

51-
send_request('GET', url, data, onsuccess, on_task_error)
48+
send_request('POST', url, content, onsuccess, on_task_error)
5249
}
5350

54-
const make_url = (method, url, data) => {
55-
if (method === "GET" && data) {
56-
const paras = []
57-
for (const prop in data)
58-
paras.push(`${prop}=${data[prop]}`)
59-
return `${url}?${paras.join('&')}`
60-
}
61-
return url
51+
const make_url = (url, data) => {
52+
const paras = []
53+
for (const prop in data)
54+
paras.push(`${prop}=${data[prop]}`)
55+
return `${url}?${paras.join('&')}`
6256
}
6357

6458
const on_task_error = (errmsg) => {
@@ -68,17 +62,18 @@ const on_task_error = (errmsg) => {
6862

6963
const send_request = (method, url, data, onsuccess, onerror) => {
7064

71-
const req = new Request(make_url(method, url, data))
65+
const req = new Request(url)
7266
const headers = new Headers()
7367

7468
// 只是为了开发测试使用, admin 用户和密码
7569
// 'WWW-Authenticate': 'Basic YWRtaW46YWRtaW4='
70+
headers.append('Authorization', 'Basic YWRtaW46YWRtaW4=')
7671

7772
// flyuser 用户的密码 "(thxjv!t8-F9*9j!q=)"
78-
const username = `flyuser-pyarmor`
79-
const basicauth = btoa(`${username}:(thxjv!t8-F9*9j!q=)`)
73+
// const username = `flyuser-pyarmor`
74+
// const basicauth = btoa(`${username}:(thxjv!t8-F9*9j!q=)`)
8075
// headers.append('Authorization', `Basic ${basicauth}`)
81-
headers.append('Authorization', 'Basic YWRtaW46YWRtaW4=')
76+
// headers.append("Content-Type", "application/octet-stream")
8277

8378
if (method === 'POST' || method === 'PUT')
8479
headers.append("Content-Type", "application/json")
@@ -98,93 +93,62 @@ const send_request = (method, url, data, onsuccess, onerror) => {
9893
})
9994

10095
.then((data) => {
101-
onsuccess(data)
96+
if (data.err) {
97+
throw new Error(data.errmsg)
98+
}
99+
else
100+
onsuccess(data)
102101
})
103102

104103
.catch((err) => {
105-
console.log(err)
106104
onerror(err)
107105
})
108106
}
109107

110-
111-
const request_download = (onsuccess, onerror) => {
112-
const headers = new Headers()
113-
const username = `flyuser-pyarmor`
114-
const basicauth = btoa(`${username}:(thxjv!t8-F9*9j!q=)`)
115-
headers.append('Authorization', `Basic ${basicauth}`)
116-
headers.append("Content-Type", "application/json")
117-
118-
const url = webapi
119-
const body = JSON.stringify({
120-
pk: taskId,
121-
action: "download",
122-
})
123-
const method = "POsT"
124-
const options = {
125-
mode: "cors",
126-
headers: headers,
127-
method: method,
128-
body: body,
129-
}
130-
131-
fetch(url, options)
132-
133-
.then((response) => {
134-
if (!response.ok) {
135-
throw new Error(`${response.status}`)
136-
}
137-
return response.blob()
138-
})
139-
140-
.then((response) => {
141-
const href = URL.createObjectURL(response)
142-
onsuccess(href)
143-
})
144-
145-
.catch((err) => onerror(err))
146-
}
147-
148-
const download_script = (script) => {
149-
const onsuccess = (href) => {
150-
const a = document.createElement('a')
151-
a.href = href
152-
a.setAttribute('download', `${script}`)
153-
a.click()
154-
URL.revokeObjectURL(href)
155-
}
156-
request_download(onsuccess, on_task_error)
108+
const enable_download_link = (data) => {
109+
const scriptName = document.getElementById('scriptName').value
110+
const blob = new Blob([data])
111+
const a = resultModal.querySelector('.modal-body > div.alert:nth-child(3) > a')
112+
a.href = URL.createObjectURL(blob)
113+
a.download = scriptName
114+
resultModal.querySelector('.modal-body > div.alert:nth-child(1)').classList.add('d-none')
115+
resultModal.querySelector('.modal-body > div.alert:nth-child(2)').classList.add('d-none')
116+
resultModal.querySelector('.modal-body > div.alert:nth-child(3)').classList.remove('d-none')
117+
console.log(data)
157118
}
158119

159120
const query_task = () => {
160-
const url = webapi
161-
const data = {
162-
pk: taskId,
163-
action: 'query',
121+
if (taskId === 0)
122+
return
123+
124+
const paras = {
125+
pk: taskId
164126
}
127+
const url = make_url(webapi, paras)
165128

166129
const onsuccess = (task) => {
167130
taskId = task.id
168-
taskStatus = task.status
131+
taskStatus = task.state
169132
if (taskStatus == 10) {
170-
resultModal.querySelector('.modal-footer > button:nth-child(3)').classList.remove('d-none')
133+
enable_download_link(task.data)
171134
}
172135
else if (taskStatus > 10) {
173-
on_task_error('${taskStatus}')
136+
on_task_error(`${taskStatus}`)
174137
}
175-
else if (taskStatus != 2) {
176-
on_task_error('${taskStatus}')
138+
else if (taskStatus != 2 && taskStatus != 0) {
139+
on_task_error(`${taskStatus}`)
177140
}
178141
}
179142

180-
send_request('GET', url, data, onsuccess, on_task_error)
143+
send_request('GET', url, null, onsuccess, on_task_error)
181144
}
182145

183146
const count_time = () => {
184147
elapseSeconds += 1
185148
document.getElementById('worktime').innerHTML = `${elapseSeconds}`
186-
if (taskStatus == 2) {
187-
query_task()
149+
if (taskStatus < 10) {
150+
if (elapseSeconds % 5 === 0)
151+
query_task()
188152
setTimeout(count_time, 1000)
189153
}
190154
}
@@ -195,6 +159,7 @@ if (resultModal) {
195159
const button = event.relatedTarget
196160
// Extract info from data-bs-* attributes
197161
const target = button.getAttribute('data-bs-whatever')
162+
on_start_build()
198163
start_build(target)
199164
})
200165

@@ -204,10 +169,6 @@ if (resultModal) {
204169
modal.show()
205170
}
206171
})
207-
208-
resultModal.querySelector('.modal-footer > button:nth-child(2)').addEventListener('click', event => {
209-
download_script(document.getElementById('scriptName').value)
210-
})
211172
}
212173

213174
if (confirmModal) {

pyarmor/try/zh/index.html

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ <h3 class="m-3">Pyarmor 高级功能沙盒</h3>
7474
<textarea class="form-control"
7575
placeholder="Leave a comment here"
7676
id="scriptContent"
77-
style="height: 30rem"></textarea>
77+
max-length="8096"
78+
min-length="1"
79+
style="height: 30rem">print('Hello world!')</textarea>
7880
<label for="scriptContent">脚本内容(最大8K)</label>
7981
</div>
8082
</div>
@@ -117,7 +119,10 @@ <h3 class="m-3">Pyarmor 高级功能沙盒</h3>
117119
</div>
118120
<div class="alert alert-primary d-flex align-items-center d-none"
119121
role="alert">
120-
加密脚本已经生成,请点击下载按钮
122+
加密脚本已经生成,请点击
123+
<a href="#"
124+
download="foo.py"
125+
class="btn btn-info">这里下载</a>
121126
</div>
122127
</div>
123128
<div class="modal-footer">
@@ -126,10 +131,6 @@ <h3 class="m-3">Pyarmor 高级功能沙盒</h3>
126131
data-bs-dismiss="modal">
127132
关闭
128133
</button>
129-
<button type="button"
130-
class="btn btn-outline-secondary mx-5 d-none">
131-
下载
132-
</button>
133134
</div>
134135
</div>
135136
</div>

0 commit comments

Comments
 (0)