feat(extension): support fetching codes from reject via proxy

This commit is contained in:
Ashhhleyyy 2024-03-08 17:13:55 +00:00
parent 238961799d
commit 0bee055a14
Signed by: ash
GPG key ID: 83B789081A0878FB
5 changed files with 70 additions and 5 deletions

View file

@ -11,6 +11,7 @@
}
],
"permissions": [
"storage",
"webRequest",
"*://aci-api.ashhhleyyy.dev/*",
"*://checkin.york.ac.uk/*"
@ -22,6 +23,9 @@
"browser_action": {
"default_popup": "src/popup.html"
},
"options_ui": {
"page": "src/config.html"
},
"browser_specific_settings": {
"gecko": {
"update_url": "https://git.ashhhleyyy.dev/ash/aci/raw/branch/main/addon_updates.json",

View file

@ -0,0 +1,12 @@
(async function() {
const rejectCheckbox = document.querySelector('#enable-reject');
chrome.storage.sync.get('enable_reject', (data) => {
rejectCheckbox.checked = data.enable_reject;
});
rejectCheckbox.addEventListener('change', async function() {
await chrome.storage.sync.set({
enable_reject: rejectCheckbox.checked,
});
});
rejectCheckbox.disabled = false;
})();

22
extension/src/config.html Normal file
View file

@ -0,0 +1,22 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Checkin Codes</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="ash.css">
<script src="config-page.js" defer></script>
</head>
<body>
<div class="page-container">
<main class="content" id="root">
<label>
<input id="enable-reject" type="checkbox" disabled>
Enable fetching codes from rejectdopamine.com (3rd party service)
</label>
</main>
</div>
</body>
</html>

View file

@ -1,2 +1,2 @@
this.SERVER_URL = 'https://aci-api.ashhhleyyy.dev';
//this.SERVER_URL = 'http://localhost:8000';
//this.SERVER_URL = 'https://aci-api.ashhhleyyy.dev';
this.SERVER_URL = 'http://localhost:8000';

View file

@ -1,4 +1,4 @@
(async function() {
chrome.storage.sync.get(['enable_reject'], async function(config) {
const root = document.querySelector('#root');
function codeTable(codes) {
@ -97,12 +97,39 @@
message(`Something went wrong: ${e}`);
console.error(e);
});
removeLoading();
if (!res.ok) {
removeLoading();
message('Server returned error code ' + res.status + ': ' + res.statusText, true);
return;
}
const activity = await res.json();
if (config.enable_reject) {
const rejectRes = await fetch(SERVER_URL + '/3p-proxy/reject?' + query).catch((e) => {
message(`Something went wrong: ${e}`);
console.error(e);
});
if (!rejectRes.ok) {
message('Warning: failed to fetch codes from reject');
} else {
const extraActivity = await rejectRes.json();
for (const code of extraActivity.codes) {
let found = false;
for (const code2 of activity.codes) {
if (code.code === code2.code) {
code2.score += code.score;
found = true;
break;
}
}
if (!found) {
activity.codes.push(code);
}
}
}
}
removeLoading();
if (activity.codes.length === 0) {
message('No codes are available right now :/');
} else {
@ -133,4 +160,4 @@
}
}
}
})();
});