about summary refs log tree commit diff stats
path: root/src/assets/javascripts/twitter.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/twitter.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/twitter.js')
-rw-r--r--src/assets/javascripts/twitter.js89
1 files changed, 64 insertions, 25 deletions
diff --git a/src/assets/javascripts/twitter.js b/src/assets/javascripts/twitter.js
index bd674aba..0a851923 100644
--- a/src/assets/javascripts/twitter.js
+++ b/src/assets/javascripts/twitter.js
@@ -9,12 +9,17 @@ const targets = [
   /^https?:\/{2}t\.co/
 ];
 
-let redirects = {
-  "nitter": {
-    "normal": [],
-    "tor": []
-  },
-};
+const frontends = new Array("nitter")
+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', 'authenticateBlackList'], r => {
@@ -34,36 +39,45 @@ function setRedirects(val) {
 
 let
   disableTwitter,
-  twitterProtocol,
+  protocol,
+  protocolFallback,
   twitterRedirects,
   twitterRedirectType,
   nitterNormalRedirectsChecks,
   nitterNormalCustomRedirects,
   nitterTorRedirectsChecks,
-  nitterTorCustomRedirects;
+  nitterTorCustomRedirects,
+  nitterI2pCustomRedirects,
+  nitterLokiCustomRedirects;
 
 function init() {
   return new Promise(async resolve => {
     browser.storage.local.get(
       [
         "disableTwitter",
-        "twitterProtocol",
+        "protocol",
+        "protocolFallback",
         "twitterRedirects",
         "twitterRedirectType",
         "nitterNormalRedirectsChecks",
         "nitterNormalCustomRedirects",
         "nitterTorRedirectsChecks",
         "nitterTorCustomRedirects",
+        "nitterI2pCustomRedirects",
+        "nitterLokiCustomRedirects"
       ],
       r => {
         disableTwitter = r.disableTwitter;
-        twitterProtocol = r.twitterProtocol;
+        protocol = r.protocol;
+        protocolFallback = r.protocolFallback;
         twitterRedirects = r.twitterRedirects;
         twitterRedirectType = r.twitterRedirectType;
         nitterNormalRedirectsChecks = r.nitterNormalRedirectsChecks;
         nitterNormalCustomRedirects = r.nitterNormalCustomRedirects;
         nitterTorRedirectsChecks = r.nitterTorRedirectsChecks;
         nitterTorCustomRedirects = r.nitterTorCustomRedirects;
+        nitterI2pCustomRedirects = r.nitterI2pCustomRedirects;
+        nitterLokiCustomRedirects = r.nitterLokiCustomRedirects;
         resolve();
       }
     )
@@ -79,6 +93,8 @@ function all() {
     ...nitterTorRedirectsChecks,
     ...nitterNormalCustomRedirects,
     ...nitterTorCustomRedirects,
+    ...nitterI2pCustomRedirects,
+    ...nitterLokiCustomRedirects
   ];
 }
 
@@ -90,9 +106,13 @@ function redirect(url, type, initiator, disableOverride) {
   if (twitterRedirectType == 'sub_frame' && type == "main_frame") return;
   if (twitterRedirectType == 'main_frame' && type != "main_frame") return;
 
-  let instancesList;
-  if (twitterProtocol == 'normal') instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects];
-  else if (twitterProtocol == 'tor') instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects];
+  let instancesList = [];
+  if (protocol == 'loki') instancesList = [...nitterI2pCustomRedirects];
+  else if (protocol == 'i2p') instancesList = [...nitterLokiCustomRedirects];
+  else if (protocol == 'tor') instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects];
+  if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+    instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects];
+  }
   if (instancesList.length === 0) return;
 
   const randomInstance = utils.getRandomInstance(instancesList);
@@ -125,9 +145,13 @@ function switchInstance(url, disableOverride) {
     if (disableTwitter && !disableOverride) { resolve(); return; }
     const protocolHost = utils.protocolHost(url);
     if (!all().includes(protocolHost)) { resolve(); return; }
-    let instancesList;
-    if (twitterProtocol == 'normal') instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects];
-    else if (twitterProtocol == 'tor') instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects];
+    let instancesList = [];
+    if (protocol == 'loki') instancesList = [...nitterI2pCustomRedirects];
+    else if (protocol == 'i2p') instancesList = [...nitterLokiCustomRedirects];
+    else if (protocol == 'tor') instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects];
+    if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+      instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects];
+    }
 
     let index = instancesList.indexOf(protocolHost);
     if (index > -1) instancesList.splice(index, 1);
@@ -164,9 +188,13 @@ function initNitterCookies(test, from) {
     if (!all().includes(protocolHost)
     ) { resolve(); return; }
     if (!test) {
-      let checkedInstances;
-      if (twitterProtocol == 'normal') checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]
-      else if (twitterProtocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]
+      let checkedInstances = [];
+      if (protocol == 'loki') checkedInstances = [...nitterI2pCustomRedirects];
+      else if (protocol == 'i2p') checkedInstances = [...nitterLokiCustomRedirects];
+      else if (protocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects];
+      if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+        checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects];
+      }
       await utils.copyCookie('nitter', from, checkedInstances, 'theme');
       await utils.copyCookie('nitter', from, checkedInstances, 'infiniteScroll');
       await utils.copyCookie('nitter', from, checkedInstances, 'stickyProfile');
@@ -194,10 +222,14 @@ function initNitterCookies(test, from) {
 function pasteNitterCookies() {
   return new Promise(async resolve => {
     await init();
-    if (disableTwitter || twitterProtocol === undefined) { resolve(); return; }
-    let checkedInstances;
-    if (twitterProtocol == 'normal') checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]
-    else if (twitterProtocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]
+    if (disableTwitter || protocol === undefined) { resolve(); return; }
+    let checkedInstances = [];
+    if (protocol == 'loki') checkedInstances = [...nitterI2pCustomRedirects];
+    else if (protocol == 'i2p') checkedInstances = [...nitterLokiCustomRedirects];
+    else if (protocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects];
+    if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+      checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects];
+    }
     utils.getCookiesFromStorage('nitter', checkedInstances, 'theme');
     utils.getCookiesFromStorage('nitter', checkedInstances, 'infiniteScroll');
     utils.getCookiesFromStorage('nitter', checkedInstances, 'stickyProfile');
@@ -226,7 +258,9 @@ function initDefaults() {
   return new Promise(resolve => {
     fetch('/instances/data.json').then(response => response.text()).then(data => {
       let dataJson = JSON.parse(data);
-      redirects.nitter = dataJson.nitter;
+      for (let i = 0; i < frontends.length; i++) {
+        redirects[frontends[i]] = dataJson[frontends[i]]
+      }
       browser.storage.local.get(['cloudflareBlackList', 'authenticateBlackList'], async r => {
         nitterNormalRedirectsChecks = [...redirects.nitter.normal];
         for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList]) {
@@ -236,7 +270,6 @@ function initDefaults() {
         browser.storage.local.set({
           disableTwitter: false,
           twitterRedirects: redirects,
-          twitterProtocol: "normal",
           twitterRedirectType: "both",
 
           nitterNormalRedirectsChecks: nitterNormalRedirectsChecks,
@@ -244,6 +277,12 @@ function initDefaults() {
 
           nitterTorRedirectsChecks: [...redirects.nitter.tor],
           nitterTorCustomRedirects: [],
+
+          nitterI2pRedirectsChecks: [...redirects.nitter.i2p],
+          nitterI2pCustomRedirects: [],
+
+          nitterLokiRedirectsChecks: [...redirects.nitter.loki],
+          nitterLokiCustomRedirects: []
         }, () => resolve());
       })
     })