about summary refs log tree commit diff stats
path: root/src/assets/javascripts/medium.js
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-07-24 11:34:39 +0300
committerManeraKai <manerakai@protonmail.com>2022-07-24 11:34:39 +0300
commitccfcccd53ed6a7a5cc56adc0d7f027e475f0665a (patch)
treebe58876ebca99733cf54a297d22e2117a176f001 /src/assets/javascripts/medium.js
parentMerge pull request 'No more trailing slashes' (#9) from BobIsMyManager/libred... (diff)
parentfix some typos (diff)
downloadlibredirect-ccfcccd53ed6a7a5cc56adc0d7f027e475f0665a.zip
Merge branch 'BobIsMyManager-librex'
Diffstat (limited to 'src/assets/javascripts/medium.js')
-rw-r--r--src/assets/javascripts/medium.js70
1 files changed, 51 insertions, 19 deletions
diff --git a/src/assets/javascripts/medium.js b/src/assets/javascripts/medium.js
index 5d688b23..ddd955c1 100644
--- a/src/assets/javascripts/medium.js
+++ b/src/assets/javascripts/medium.js
@@ -1,7 +1,6 @@
 window.browser = window.browser || window.chrome;
 import utils from './utils.js'
 
-
 const targets = [
   // /(?:.*\.)*(?<!(link\.|cdn\-images\-\d+\.))medium\.com(\/.*)?$/,
   /^medium\.com/,
@@ -28,12 +27,18 @@ const targets = [
   /^ writingcooperative\.com /,
 ];
 
-let redirects = {
-  "scribe": {
-    "normal": [],
-    "tor": []
-  }
-};
+const frontends = new Array("scribe")
+const protocols = new Array("normal", "tor", "i2p", "loki")
+
+let redirects = {};
+
+for (let i = 0; i < frontends.length; i++) {
+    redirects[frontends[i]] = {}
+    for (let x = 0; x < protocols.length; x++) {
+        redirects[frontends[i]][protocols[x]] = []
+    }
+}
+
 function setRedirects(val) {
   browser.storage.local.get('cloudflareBlackList', r => {
     redirects.scribe = val;
@@ -56,7 +61,10 @@ let
   scribeNormalCustomRedirects,
   scribeTorRedirectsChecks,
   scribeTorCustomRedirects,
-  mediumProtocol;
+  scribeI2pCustomRedirects,
+  scribeLokiCustomRedirects,
+  protocol,
+  protocolFallback;
 
 function init() {
   return new Promise(resolve => {
@@ -68,7 +76,10 @@ function init() {
         "scribeNormalCustomRedirects",
         "scribeTorRedirectsChecks",
         "scribeTorCustomRedirects",
-        "mediumProtocol"
+        "scribeI2pCustomRedirects",
+        "scribeLokiCustomRedirects",
+        "protocol",
+        "protocolFallback"
       ],
       r => {
         disableMedium = r.disableMedium;
@@ -77,7 +88,10 @@ function init() {
         scribeNormalCustomRedirects = r.scribeNormalCustomRedirects;
         scribeTorRedirectsChecks = r.scribeTorRedirectsChecks;
         scribeTorCustomRedirects = r.scribeTorCustomRedirects;
-        mediumProtocol = r.mediumProtocol;
+        scribeI2pCustomRedirects = r.scribeI2pCustomRedirects;
+        scribeLokiCustomRedirects = r.scribeLokiCustomRedirects;
+        protocol = r.protocol;
+        protocolFallback = r.protocolFallback;
         resolve();
       }
     )
@@ -97,15 +111,21 @@ function redirect(url, type, initiator, disableOverride) {
       ...mediumRedirects.scribe.tor,
       ...scribeNormalCustomRedirects,
       ...scribeTorCustomRedirects,
+      ...scribeI2pCustomRedirects,
+      ...scribeLokiCustomRedirects
     ].includes(initiator.origin))) return;
 
   if (!targets.some(rx => rx.test(url.host))) return;
   if (/^\/(@[a-zA-Z.]{0,}(\/|)$)/.test(url.pathname)) return;
 
-  let instancesList;
-  if (mediumProtocol == 'normal') instancesList = [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects];
-  else if (mediumProtocol == 'tor') instancesList = [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects];
-  if (instancesList.length === 0) return;
+  let instancesList = [];
+  if (protocol == 'loki') instancesList = [...scribeLokiCustomRedirects];
+  else if (protocol == 'i2p') instancesList = [...scribeI2pCustomRedirects];
+  else if (protocol == 'tor') instancesList = [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects];
+  if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+    instancesList = [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects];
+  }
+  if (instancesList.length === 0) { return; }
 
   const randomInstance = utils.getRandomInstance(instancesList)
   return `${randomInstance}${url.pathname}${url.search}`;
@@ -122,12 +142,18 @@ function switchInstance(url, disableOverride) {
 
       ...scribeNormalCustomRedirects,
       ...scribeTorCustomRedirects,
+      ...scribeI2pCustomRedirects,
+      ...scribeLokiCustomRedirects
     ];
     if (!all.includes(protocolHost)) { resolve(); return; }
 
-    let instancesList;
-    if (mediumProtocol == 'normal') instancesList = [...scribeNormalCustomRedirects, ...scribeNormalRedirectsChecks];
-    else if (mediumProtocol == 'tor') instancesList = [...scribeTorCustomRedirects, ...scribeTorRedirectsChecks];
+    let instancesList = [];
+    if (protocol == 'loki') instancesList = [...scribeLokiCustomRedirects];
+    else if (protocol == 'i2p') instancesList = [...scribeI2pCustomRedirects];
+    else if (protocol == 'tor') instancesList = [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects];
+    if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+      instancesList = [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects];
+    }
 
     const i = instancesList.indexOf(protocolHost);
     if (i > -1) instancesList.splice(i, 1);
@@ -142,7 +168,9 @@ function initDefaults() {
   return new Promise(resolve => {
     fetch('/instances/data.json').then(response => response.text()).then(data => {
       let dataJson = JSON.parse(data);
-      redirects.scribe = dataJson.scribe;
+      for (let i = 0; i < frontends.length; i++) {
+        redirects[frontends[i]] = dataJson[frontends[i]]
+      }
       browser.storage.local.get('cloudflareBlackList',
         async r => {
           scribeNormalRedirectsChecks = [...redirects.scribe.normal];
@@ -160,7 +188,11 @@ function initDefaults() {
             scribeTorRedirectsChecks: [...redirects.scribe.tor],
             scribeTorCustomRedirects: [],
 
-            mediumProtocol: "normal",
+            scribeI2pRedirectsChecks: [...redirects.scribe.i2p],
+            scribeI2pCustomRedirects: [],
+
+            scribeLokiRedirectsChecks: [...redirects.scribe.loki],
+            scribeLokiCustomRedirects: []
           }, () => resolve())
         })
     })