aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addons/ismitmlinkFX/bg.js62
1 files changed, 53 insertions, 9 deletions
diff --git a/addons/ismitmlinkFX/bg.js b/addons/ismitmlinkFX/bg.js
index a28f9624..264b2804 100644
--- a/addons/ismitmlinkFX/bg.js
+++ b/addons/ismitmlinkFX/bg.js
@@ -1,4 +1,4 @@
-let localUse = false,
+let localUse = -1,
localDB = [],
timr, memcache = {},
forcePurge = false,
@@ -1082,9 +1082,9 @@ function get_realdomain(w) {
return wa[1] + '.' + wa[0];
}
function is_hostile(f) {
- if (localUse) {
+ if (localUse >= 1) {
return new Promise((g, b) => {
- g(localDB.includes(f) ? true : false);
+ g(localDB.includes(get_realdomain(f)) ? true : false);
});
}
return new Promise((g, b) => {
@@ -1171,7 +1171,7 @@ function forget_cache() {
'mul': (g.mul != undefined ? g.mul : 'eo')
});
browser.storage.local.set({
- 'opd': (g.opd == 'n' ? 'n' : 'y')
+ 'opd': (g.opd != undefined ? g.opd : 'y')
});
browser.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
@@ -1189,7 +1189,17 @@ function forget_cache() {
}, 1814400000);
}
browser.storage.local.get(['lastU', 'lastV', 'ldb', 'opd']).then(g => {
- localUse = (g.opd == 'n') ? true : false;
+ switch (g.opd) {
+ case 'n':
+ localUse = 1;
+ break;
+ case 'l':
+ localUse = 2;
+ break;
+ default:
+ localUse = -1;
+ break;
+ }
localDB = JSON.parse(g.ldb || '[]');
if (g.lastU) {
if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
@@ -1218,7 +1228,7 @@ browser.storage.local.get(['lastU', 'lastV', 'ldb', 'opd']).then(g => {
'mul': (g.mul != undefined ? g.mul : 'eo')
});
browser.storage.local.set({
- 'opd': (g.opd == 'n' ? 'n' : 'y')
+ 'opd': (g.opd != undefined ? g.opd : 'y')
});
browser.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
@@ -1261,7 +1271,7 @@ browser.storage.local.get(['lastU', 'lastV', 'ldb', 'opd']).then(g => {
'mul': (g.mul != undefined ? g.mul : 'eo')
});
browser.storage.local.set({
- 'opd': (g.opd == 'n' ? 'n' : 'y')
+ 'opd': (g.opd != undefined ? g.opd : 'y')
});
browser.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
@@ -1278,6 +1288,34 @@ browser.storage.local.get(['lastU', 'lastV', 'ldb', 'opd']).then(g => {
forget_cache();
}, 1814400000);
});
+browser.webRequest.onResponseStarted.addListener(r => {
+ if (localUse == 2) {
+ let ismitm = false,
+ hn, rh = r.responseHeaders;
+ for (let i = 0; i < rh.length; i++) {
+ hn = rh[i]['name'].toLowerCase();
+ if (hn == 'cf-ray' || hn == 'cf-cache-status') {
+ ismitm = true;
+ break;
+ }
+ }
+ if (ismitm) {
+ let enemy = get_realdomain((new URL(r.url)).hostname);
+ if (enemy.length >= 4 && !localDB.includes(enemy)) {
+ localDB.push(enemy);
+ browser.storage.local.set({
+ 'ldb': JSON.stringify(localDB)
+ });
+ browser.storage.local.set({
+ [enemy]: 'y'
+ });
+ }
+ }
+ }
+}, {
+ urls: ['http://*/*', 'https://*/*'],
+ types: ['main_frame', 'sub_frame', 'script']
+}, ['responseHeaders']);
browser.runtime.onMessage.addListener((requests, sender, sendResponse) => {
if (requests) {
if (requests === 'clear') {
@@ -1290,13 +1328,19 @@ browser.runtime.onMessage.addListener((requests, sender, sendResponse) => {
browser.storage.local.set({
'opd': 'y'
});
- localUse = false;
+ localUse = -1;
break;
case 'dbmode,s0':
browser.storage.local.set({
'opd': 'n'
});
- localUse = true;
+ localUse = 1;
+ break;
+ case 'dbmode,s2':
+ browser.storage.local.set({
+ 'opd': 'l'
+ });
+ localUse = 2;
break;
case 'dbmode,cl':
browser.storage.local.set({