Fetched data cache, img hash
This commit is contained in:
parent
d4725ce5cf
commit
a6cc701fc2
50
server.py
50
server.py
|
@ -17,7 +17,7 @@ import timeout as tmo
|
|||
# Simple config
|
||||
GET_ONLY_FOR_VIP = True
|
||||
POST_ONLY_FOR_VIP = True
|
||||
VERSION = "20240430.1"
|
||||
VERSION = "20240430.2"
|
||||
|
||||
CHARSET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||
|
||||
|
@ -133,9 +133,9 @@ def resolve_logs(tries = 3, backup = True, backup_name = None):
|
|||
def parse_request(r):
|
||||
try:
|
||||
results = json.loads(r)
|
||||
for field in ['type', 'id', 'uid', 'answers', 'correct', 'all']:
|
||||
if field not in results:
|
||||
return 400
|
||||
# for field in ['type', 'id', 'uid', 'answers', 'correct', 'all']:
|
||||
# if field not in results:
|
||||
# return 400
|
||||
rtype = results['type']
|
||||
test_id = results['id']
|
||||
user_id = results['uid']
|
||||
|
@ -166,26 +166,26 @@ def parse_request(r):
|
|||
contributors = set(list(contributors) + [user_id])
|
||||
db.write('contributors', contributors)
|
||||
return 202
|
||||
case "add_vip":
|
||||
if user_id not in vip:
|
||||
return 403
|
||||
vip = set(list(vip) + [results['user']])
|
||||
db.write('users.vip', vip)
|
||||
case "del_vip":
|
||||
if user_id not in vip:
|
||||
return 403
|
||||
vip.remove(results['user'])
|
||||
db.write('users.vip', vip)
|
||||
case "add_blacklist":
|
||||
if user_id not in vip:
|
||||
return 403
|
||||
blacklist = set(list(blacklist) + [results['user']])
|
||||
db.write('users.blacklist', blacklist)
|
||||
case "del_blacklist":
|
||||
if user_id not in vip:
|
||||
return 403
|
||||
blacklist.remove(results['user'])
|
||||
db.write('users.blacklist', blacklist)
|
||||
# case "add_vip":
|
||||
# if user_id not in vip:
|
||||
# return 403
|
||||
# vip = set(list(vip) + [results['user']])
|
||||
# db.write('users.vip', vip)
|
||||
# case "del_vip":
|
||||
# if user_id not in vip:
|
||||
# return 403
|
||||
# vip.remove(results['user'])
|
||||
# db.write('users.vip', vip)
|
||||
# case "add_blacklist":
|
||||
# if user_id not in vip:
|
||||
# return 403
|
||||
# blacklist = set(list(blacklist) + [results['user']])
|
||||
# db.write('users.blacklist', blacklist)
|
||||
# case "del_blacklist":
|
||||
# if user_id not in vip:
|
||||
# return 403
|
||||
# blacklist.remove(results['user'])
|
||||
# db.write('users.blacklist', blacklist)
|
||||
case _:
|
||||
raise KeyError()
|
||||
except KeyError:
|
||||
|
@ -306,7 +306,7 @@ def run_http_server(httpd):
|
|||
try:
|
||||
httpd.serve_forever()
|
||||
except:
|
||||
pass
|
||||
httpd.server_close()
|
||||
|
||||
def run(server_class=HTTPServer, handler_class=S, port=8000):
|
||||
server_address = ('127.0.0.1', port)
|
||||
|
|
38
user.js
38
user.js
|
@ -2,7 +2,7 @@
|
|||
// @name Sorryops
|
||||
// @name:ru Сориупс
|
||||
// @namespace https://git.disroot.org/electromagneticcyclone/sorryops
|
||||
// @version 20240430.1
|
||||
// @version 20240430.2
|
||||
// @description Collect and reuse ORIOKS test answers
|
||||
// @description:ru Скрипт для сбора и переиспользования ответов на тесты ОРИОКС
|
||||
// @icon https://orioks.miet.ru/favicon.ico
|
||||
|
@ -25,7 +25,7 @@
|
|||
// ==/UserScript==
|
||||
|
||||
/* Version */
|
||||
const VERSION = "20240430.1";
|
||||
const VERSION = "20240430.2";
|
||||
/* End Version */
|
||||
|
||||
/* Charset */
|
||||
|
@ -277,7 +277,11 @@ function send_to_server(results) {
|
|||
|
||||
function fetch_from_server(path, func) {
|
||||
var server = config.get('server');
|
||||
if (server != '') {
|
||||
var fetched_data = GM_getValue('fetched_data');
|
||||
if (fetched_data == undefined) {
|
||||
fetched_data = {};
|
||||
}
|
||||
if (server != '' && Object.keys(fetched_data).length == 0) {
|
||||
GM_xmlhttpRequest({
|
||||
method: 'GET',
|
||||
url: 'https://' + server + '/' + path + '?uid=' + config.get('user_id'),
|
||||
|
@ -286,7 +290,9 @@ function fetch_from_server(path, func) {
|
|||
if (!text.includes("{")) {
|
||||
func({});
|
||||
} else {
|
||||
func(JSON.parse(text));
|
||||
fetched_data = JSON.parse(text);
|
||||
GM_setValue('fetched_data', fetched_data);
|
||||
func(fetched_data);
|
||||
}
|
||||
},
|
||||
onerror: function (e) {
|
||||
|
@ -300,7 +306,7 @@ function fetch_from_server(path, func) {
|
|||
}
|
||||
});
|
||||
} else {
|
||||
func({});
|
||||
func(fetched_data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -352,7 +358,7 @@ window.onkeydown = (e) => {
|
|||
|
||||
// const success = -1487162948;
|
||||
var answers = [];
|
||||
var variant, hash, type, correct, incorrect;
|
||||
var variant, hash, type, correct, incorrect, version;
|
||||
var testID = (() => {
|
||||
var url = document.URL;
|
||||
url = url.slice(url.indexOf("idKM=") + 5);
|
||||
|
@ -497,7 +503,12 @@ function update_variant() {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (chosen_answer == correct) {
|
||||
if (version != VERSION && version !== undefined) {
|
||||
status = "<span style='color: red;'>Скрипт устарел</span>";
|
||||
} else if (version === undefined) {
|
||||
status = "<span style='color: red;'>Нет соединения</span>";
|
||||
location.reload();
|
||||
} else if (chosen_answer == correct) {
|
||||
status = "<span style='color: green;'>Верно</span>";
|
||||
} else if (incorrect.includes(chosen_answer)) {
|
||||
status = "<span style='color: red;'>Неверно</span>";
|
||||
|
@ -539,7 +550,8 @@ function update_variant() {
|
|||
|
||||
function test_form_handler(server_data) {
|
||||
var i, key, answer, sorry_val;
|
||||
var version = server_data.version;
|
||||
var complicated_hash_f = false;
|
||||
version = server_data.version;
|
||||
if (version !== VERSION && version !== undefined) {
|
||||
console.warn("Sorryops is outdated");
|
||||
server_data = {};
|
||||
|
@ -562,11 +574,17 @@ function test_form_handler(server_data) {
|
|||
}
|
||||
}
|
||||
type = boxes[0].type;
|
||||
for (i = 0; i < boxes.length; i++) {
|
||||
if (boxes[i].parentNode.innerHTML.includes("<img")) {
|
||||
complicated_hash_f = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (type) {
|
||||
case 'checkbox':
|
||||
case 'radio': {
|
||||
for (i = 0; i < boxes.length; i++) {
|
||||
boxes[i].hash = hashCode(boxes[i].parentNode.innerText, true);
|
||||
boxes[i].hash = hashCode(complicated_hash_f ? boxes[i].parentNode.innerHTML : boxes[i].parentNode.innerText, true);
|
||||
objects_hash[boxes[i].hash] = boxes[i];
|
||||
objects_value[boxes[i].value] = boxes[i];
|
||||
}
|
||||
|
@ -671,7 +689,6 @@ function test_form_handler(server_data) {
|
|||
answers[possible_answers[chosen_answer]].click();
|
||||
} else if (type === 'checkbox') {
|
||||
var combs = comb(charset.slice(0, answers.length), incorrect);
|
||||
console.log(combs);
|
||||
var pick = combs[Math.floor(Math.random() * combs.length)];
|
||||
for (i = 0; i < answers.length; i++) {
|
||||
if(pick.includes(answers[i].sorry_value)) {
|
||||
|
@ -755,6 +772,7 @@ function result_page_handler() {
|
|||
correct: correct,
|
||||
all: all,
|
||||
});
|
||||
GM_setValue('fetched_data', {});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue