Fetched data cache, img hash

This commit is contained in:
Egor Guslyancev 2024-04-30 15:46:53 -03:00
parent d4725ce5cf
commit a6cc701fc2
GPG Key ID: D7E709AA465A55F9
2 changed files with 53 additions and 35 deletions

View File

@ -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
View File

@ -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', {});
});
}