feat(extension): initial commit
This commit is contained in:
commit
e020bcebec
3 changed files with 70 additions and 0 deletions
23
extension/manifest.json
Normal file
23
extension/manifest.json
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
|
||||||
|
{
|
||||||
|
"manifest_version":2,
|
||||||
|
"name": "aci",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "aci",
|
||||||
|
"content_scripts":[
|
||||||
|
{
|
||||||
|
"matches": ["*://checkin.york.ac.uk/selfregistration"],
|
||||||
|
"js": ["src/content.js"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"permissions": [
|
||||||
|
"webRequest",
|
||||||
|
"*://aci-api.ashhhleyyy.dev/*",
|
||||||
|
"*://checkin.york.ac.uk/*"
|
||||||
|
],
|
||||||
|
"background": {
|
||||||
|
"scripts": ["src/background.js"],
|
||||||
|
"persistent": false,
|
||||||
|
"type": "module"
|
||||||
|
}
|
||||||
|
}
|
46
extension/src/background.js
Normal file
46
extension/src/background.js
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
console.log('i am a background script');
|
||||||
|
|
||||||
|
const codeCache = new Map();
|
||||||
|
|
||||||
|
function extractActivityId(url) {
|
||||||
|
const m = url.match(/^https:\/\/checkin\.york\.ac\.uk\/api\/selfregistration\/([0-9]+)\/present$/m);
|
||||||
|
return m[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
function interceptSubmit(details) {
|
||||||
|
const activityId = extractActivityId(details.url);
|
||||||
|
const codeCorrect = details.statusCode >= 200 && details.statusCode <= 299;
|
||||||
|
if (!codeCache.has(activityId)) {
|
||||||
|
console.error('we did not manage to log a code for activity', activityId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const code = codeCache.get(activityId);
|
||||||
|
codeCache.delete(activityId);
|
||||||
|
console.log('request for activity', activityId, 'the code', code, 'was', codeCorrect ? 'correct' : 'incorrect');
|
||||||
|
}
|
||||||
|
|
||||||
|
function interceptCode(details) {
|
||||||
|
const activityId = extractActivityId(details.url);
|
||||||
|
const body = details.requestBody;
|
||||||
|
if (body.error) {
|
||||||
|
console.error('failed to obtain request body', body.error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!body.formData) {
|
||||||
|
console.error('request body did not have form data');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!body.formData['code']) {
|
||||||
|
console.error('request did not contain a code');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const code = body.formData['code'][0];
|
||||||
|
codeCache.set(activityId, code);
|
||||||
|
}
|
||||||
|
|
||||||
|
browser.webRequest.onBeforeRequest.addListener(interceptCode, {
|
||||||
|
urls: ['https://checkin.york.ac.uk/api/selfregistration/*/present'],
|
||||||
|
}, ['requestBody']);
|
||||||
|
browser.webRequest.onCompleted.addListener(interceptSubmit, {
|
||||||
|
urls: ['https://checkin.york.ac.uk/api/selfregistration/*/present'],
|
||||||
|
});
|
1
extension/src/content.js
Normal file
1
extension/src/content.js
Normal file
|
@ -0,0 +1 @@
|
||||||
|
console.log('hello');
|
Loading…
Reference in a new issue