about summary refs log tree commit diff stats
path: root/src/assets/javascripts/reuters.js
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-06-11 15:39:22 +0300
committerManeraKai <manerakai@protonmail.com>2022-06-11 15:39:22 +0300
commitcd285222c76e864387d4bb74df6aeb64b61d9363 (patch)
tree8b32867aa38af6183623e054f189fe36a6a428d7 /src/assets/javascripts/reuters.js
parentFixed typo in instagram settings tab #298 (diff)
downloadlibredirect-cd285222c76e864387d4bb74df6aeb64b61d9363.zip
Added Neuters #231
Diffstat (limited to 'src/assets/javascripts/reuters.js')
-rw-r--r--src/assets/javascripts/reuters.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/assets/javascripts/reuters.js b/src/assets/javascripts/reuters.js
new file mode 100644
index 00000000..9afb67a9
--- /dev/null
+++ b/src/assets/javascripts/reuters.js
@@ -0,0 +1,106 @@
+window.browser = window.browser || window.chrome;
+
+import utils from './utils.js'
+
+const targets = [
+    /^https?:\/{2}(www\.|)reuters\.com.*/
+];
+
+let redirects = {
+    "neuters": {
+        "normal": [
+            'https://neuters.de',
+        ],
+        "tor": []
+    }
+}
+
+let
+    disableReuters,
+    reutersProtocol,
+    reutersRedirects,
+    neutersNormalRedirectsChecks,
+    neutersNormalCustomRedirects,
+    neutersTorRedirectsChecks,
+    neutersTorCustomRedirects;
+
+function init() {
+    return new Promise(async resolve => {
+        browser.storage.local.get(
+            [
+                "disableReuters",
+                "reutersProtocol",
+                "reutersRedirects",
+                "neutersNormalRedirectsChecks",
+                "neutersNormalCustomRedirects",
+                "neutersTorRedirectsChecks",
+                "neutersTorCustomRedirects",
+            ],
+            r => {
+                disableReuters = r.disableReuters;
+                reutersProtocol = r.reutersProtocol;
+                reutersRedirects = r.reutersRedirects;
+                neutersNormalRedirectsChecks = r.neutersNormalRedirectsChecks;
+                neutersNormalCustomRedirects = r.neutersNormalCustomRedirects;
+                neutersTorRedirectsChecks = r.neutersTorRedirectsChecks;
+                neutersTorCustomRedirects = r.neutersTorCustomRedirects;
+                resolve();
+            }
+        )
+    })
+}
+
+init();
+browser.storage.onChanged.addListener(init)
+
+function redirect(url, type, initiator) {
+    if (disableReuters) return;
+    if (type != "main_frame") return;
+    const all = [
+        ...reutersRedirects.neuters.normal,
+        ...neutersNormalCustomRedirects
+    ];
+    if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return;
+    if (!targets.some(rx => rx.test(url.href))) return;
+
+    let instancesList;
+    if (reutersProtocol == 'normal') instancesList = [...neutersNormalRedirectsChecks, ...neutersNormalCustomRedirects];
+    if (reutersProtocol == 'tor') instancesList = [...neutersTorRedirectsChecks, ...neutersTorCustomRedirects];
+    if (instancesList.length === 0) return;
+
+    const randomInstance = utils.getRandomInstance(instancesList);
+    // stolen from https://addons.mozilla.org/en-US/firefox/addon/reuters-redirect/
+    if (
+        url.pathname.startsWith('/article/') ||
+        url.pathname.startsWith('/pf/') ||
+        url.pathname.startsWith('/arc/') ||
+        url.pathname.startsWith('/resizer/')
+    )
+        return null;
+    else if (url.pathname.endsWith('/'))
+        return `${randomInstance}${url.pathname}`;
+    else
+        return `${randomInstance}${url.pathname}/`;
+}
+
+function initDefaults() {
+    return new Promise(resolve => {
+        browser.storage.local.set({
+            disableReuters: false,
+            reutersProtocol: "normal",
+
+            reutersRedirects: redirects,
+
+            neutersNormalRedirectsChecks: [...redirects.neuters.normal],
+            neutersNormalCustomRedirects: [],
+
+            neutersTorRedirectsChecks: [...redirects.neuters.tor],
+            neutersTorCustomRedirects: [],
+        }, () => resolve());
+    });
+}
+
+export default {
+    redirect,
+    initDefaults
+};