about summary refs log tree commit diff stats
path: root/src/assets/javascripts/search.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/search.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/search.js')
-rw-r--r--src/assets/javascripts/search.js300
1 files changed, 256 insertions, 44 deletions
diff --git a/src/assets/javascripts/search.js b/src/assets/javascripts/search.js
index 5a91ff89..7644ad4b 100644
--- a/src/assets/javascripts/search.js
+++ b/src/assets/javascripts/search.js
@@ -5,8 +5,12 @@ import utils from './utils.js'
 const targets = [
   /^https?:\/{2}search\.libredirect\.invalid/,
 ];
+// Ill optimise all of assets/javascripts at a later date. For now, I'll just add librex and optimse options javascript
+const frontends = new Array("searx", "searxng", "whoogle", "librex")
+const protocols = new Array("normal", "tor", "i2p", "loki")
 
-let redirects = {
+const redirects = {}
+  /*
   "searx": {
     "normal": [],
     "tor": [],
@@ -22,7 +26,27 @@ let redirects = {
     "tor": [],
     "i2p": []
   }
-};
+  */
+//};
+
+//let tmp = "{"
+
+for (let i = 0; i < frontends.length; i++) {
+  //redirects.frontends[i] = {}
+  //redirects.push(frontends[i])
+  //tmp = frontends[i]
+  //tmp = tmp + '\n"' + frontends[i] + '": {'
+  redirects[frontends[i]] = {}
+  for (let x = 0; x < protocols.length; x++) {
+    //redirects.frontends[i].protocols = []
+    //tmp = tmp + '\n"' + protocols[x] + '": [],'
+    redirects[frontends[i]][protocols[x]] = []
+  }
+  //tmp = tmp + "\n},"
+}
+//tmp = tmp + "\n}"
+
+//const redirects = JSON.parse(tmp)
 
 function setRedirects(val) {
   browser.storage.local.get('cloudflareBlackList', r => {
@@ -30,6 +54,7 @@ function setRedirects(val) {
     searxNormalRedirectsChecks = [...redirects.searx.normal];
     searxngNormalRedirectsChecks = [...redirects.searxng.normal];
     whoogleNormalRedirectsChecks = [...redirects.whoogle.normal];
+    librexNormalRedirectsChecks = [...redirects.librex.normal];
     for (const instance of r.cloudflareBlackList) {
       const a = searxNormalRedirectsChecks.indexOf(instance);
       if (a > -1) searxNormalRedirectsChecks.splice(a, 1);
@@ -39,12 +64,16 @@ function setRedirects(val) {
 
       const c = whoogleNormalRedirectsChecks.indexOf(instance);
       if (c > -1) whoogleNormalRedirectsChecks.splice(c, 1);
+
+      const d = librexNormalRedirectsChecks.indexOf(instance);
+      if (d > -1) librexNormalRedirectsChecks.splice(d, 1);
     }
     browser.storage.local.set({
       searchRedirects: redirects,
       searxNormalRedirectsChecks,
       searxngNormalRedirectsChecks,
       whoogleNormalRedirectsChecks,
+      librexNormalRedirectsChecks,
     });
   })
 }
@@ -53,25 +82,36 @@ let
   disableSearch,
   searchFrontend,
   searchRedirects,
-  searchProtocol,
+  protocol,
+  protocolFallback,
   whoogleNormalRedirectsChecks,
   whoogleNormalCustomRedirects,
   whoogleTorRedirectsChecks,
   whoogleTorCustomRedirects,
   whoogleI2pRedirectsChecks,
   whoogleI2pCustomRedirects,
+  whoogleLokiCustomRedirects,
   searxNormalRedirectsChecks,
   searxNormalCustomRedirects,
   searxTorRedirectsChecks,
   searxTorCustomRedirects,
   searxI2pRedirectsChecks,
   searxI2pCustomRedirects,
+  searxLokiCustomRedirects,
   searxngNormalRedirectsChecks,
   searxngNormalCustomRedirects,
   searxngTorRedirectsChecks,
   searxngTorCustomRedirects,
   searxngI2pRedirectsChecks,
-  searxngI2pCustomRedirects;
+  searxngI2pCustomRedirects,
+  searxngLokiCustomRedirects,
+  librexNormalRedirectsChecks,
+  librexNormalCustomRedirects,
+  librexTorRedirectsChecks,
+  librexTorCustomRedirects,
+  librexI2pRedirectsChecks,
+  librexI2pCustomRedirects,
+  librexLokiCustomRedirects;
 
 function init() {
   return new Promise(async resolve => {
@@ -80,49 +120,71 @@ function init() {
         "disableSearch",
         "searchFrontend",
         "searchRedirects",
-        "searchProtocol",
+        "protocol",
+        "protocolFallback",
         "whoogleNormalRedirectsChecks",
         "whoogleNormalCustomRedirects",
         "whoogleTorRedirectsChecks",
         "whoogleTorCustomRedirects",
         "whoogleI2pRedirectsChecks",
         "whoogleI2pCustomRedirects",
+        "whoogleLokiCustomRedirects",
         "searxNormalRedirectsChecks",
         "searxNormalCustomRedirects",
         "searxTorRedirectsChecks",
         "searxTorCustomRedirects",
         "searxI2pRedirectsChecks",
         "searxI2pCustomRedirects",
+        "searxLokiCustomRedirects",
         "searxngNormalRedirectsChecks",
         "searxngNormalCustomRedirects",
         "searxngTorRedirectsChecks",
         "searxngTorCustomRedirects",
         "searxngI2pRedirectsChecks",
         "searxngI2pCustomRedirects",
+        "searxngLokiCustomRedirects",
+        "librexNormalRedirectsChecks",
+        "librexNormalCustomRedirects",
+        "librexTorRedirectsChecks",
+        "librexTorCustomRedirects",
+        "librexI2pRedirectsChecks",
+        "librexI2pCustomRedirects",
+        "librexLokiCustomRedirects"
       ],
       r => {
         disableSearch = r.disableSearch;
         searchFrontend = r.searchFrontend;
         searchRedirects = r.searchRedirects;
-        searchProtocol = r.searchProtocol;
+        protocol = r.protocol;
+        protocolFallback = r.protocolFallback;
         whoogleNormalRedirectsChecks = r.whoogleNormalRedirectsChecks;
         whoogleNormalCustomRedirects = r.whoogleNormalCustomRedirects;
         whoogleTorRedirectsChecks = r.whoogleTorRedirectsChecks;
         whoogleTorCustomRedirects = r.whoogleTorCustomRedirects;
         whoogleI2pRedirectsChecks = r.whoogleI2pRedirectsChecks;
         whoogleI2pCustomRedirects = r.whoogleI2pCustomRedirects;
+        whoogleLokiCustomRedirects = r.whoogleLokiCustomRedirects;
         searxNormalRedirectsChecks = r.searxNormalRedirectsChecks;
         searxNormalCustomRedirects = r.searxNormalCustomRedirects;
         searxTorRedirectsChecks = r.searxTorRedirectsChecks;
         searxTorCustomRedirects = r.searxTorCustomRedirects;
         searxI2pRedirectsChecks = r.searxI2pRedirectsChecks;
         searxI2pCustomRedirects = r.searxI2pCustomRedirects;
+        searxLokiCustomRedirects = r.searxLokiCustomRedirects;
         searxngNormalRedirectsChecks = r.searxngNormalRedirectsChecks;
         searxngNormalCustomRedirects = r.searxngNormalCustomRedirects;
         searxngTorRedirectsChecks = r.searxngTorRedirectsChecks;
         searxngTorCustomRedirects = r.searxngTorCustomRedirects;
         searxngI2pRedirectsChecks = r.searxngI2pRedirectsChecks;
         searxngI2pCustomRedirects = r.searxngI2pCustomRedirects;
+        searxngLokiCustomRedirects = r.searxngLokiCustomRedirects;
+        librexNormalRedirectsChecks = r.librexNormalRedirectsChecks;
+        librexNormalCustomRedirects = r.librexNormalCustomRedirects;
+        librexTorRedirectsChecks = r.librexTorRedirectsChecks;
+        librexTorCustomRedirects = r.librexTorCustomRedirects;
+        librexI2pRedirectsChecks = r.librexI2pRedirectsChecks;
+        librexI2pCustomRedirects = r.librexI2pCustomRedirects;
+        librexLokiCustomRedirects = r.librexLokiCustomRedirects;
         resolve();
       }
     )
@@ -143,13 +205,17 @@ function initSearxCookies(test, from) {
       ...searxTorCustomRedirects,
       ...searxI2pRedirectsChecks,
       ...searxI2pCustomRedirects,
+      ...searxLokiCustomRedirects
     ].includes(protocolHost)) { resolve(); return; }
 
     if (!test) {
-      let checkedInstances;
-      if (searchProtocol == 'normal') checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects];
-      else if (searchProtocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects];
-      else if (searchProtocol == 'i2p') checkedInstances = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects];
+      let checkedInstances = [];
+      if (protocol == 'loki') checkedInstances = [...searxLokiCustomRedirects];
+      else if (protocol == 'i2p') checkedInstances = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks];
+      else if (protocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects];
+      if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+        checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects];
+      }
       await utils.copyCookie('searx', from, checkedInstances, 'advanced_search');
       await utils.copyCookie('searx', from, checkedInstances, 'autocomplete');
       await utils.copyCookie('searx', from, checkedInstances, 'categories');
@@ -176,9 +242,13 @@ function pasteSearxCookies() {
   return new Promise(async resolve => {
     await init();
     if (disableSearch || searchFrontend != 'searx') { resolve(); return; }
-    let checkedInstances;
-    if (searchProtocol == 'normal') checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects]
-    else if (searchProtocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects]
+    let checkedInstances = [];
+    if (protocol == 'loki') checkedInstances = [...searxLokiCustomRedirects];
+    else if (protocol == 'i2p') checkedInstances = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks];
+    else if (protocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects];
+    if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+      checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects];
+    }
     utils.getCookiesFromStorage('searx', checkedInstances, 'advanced_search');
     utils.getCookiesFromStorage('searx', checkedInstances, 'autocomplete');
     utils.getCookiesFromStorage('searx', checkedInstances, 'categories');
@@ -211,13 +281,17 @@ function initSearxngCookies(test, from) {
       ...searxngTorCustomRedirects,
       ...searxngI2pRedirectsChecks,
       ...searxngI2pCustomRedirects,
+      ...searxngLokiCustomRedirects,
     ].includes(protocolHost)) { resolve(); return; }
 
     if (!test) {
-      let checkedInstances;
-      if (searchProtocol == 'normal') checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects];
-      else if (searchProtocol == 'tor') checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects];
-      else if (searchProtocol == 'i2p') checkedInstances = [...searxngI2pRedirectsChecks, ...searxngI2pCustomRedirects];
+      let checkedInstances = [];
+      if (protocol == 'loki') checkedInstances = [...searxngLokiCustomRedirects];
+      else if (protocol == 'i2p') checkedInstances = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks];
+      else if (protocol == 'tor') checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects];
+      if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+        checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects];
+      }
       await utils.copyCookie('searxng', from, checkedInstances, 'autocomplete');
       await utils.copyCookie('searxng', from, checkedInstances, 'categories');
       await utils.copyCookie('searxng', from, checkedInstances, 'disabled_engines');
@@ -245,10 +319,14 @@ function initSearxngCookies(test, from) {
 function pasteSearxngCookies() {
   return new Promise(async resolve => {
     await init();
-    if (disableSearch || searchFrontend != 'searxng', searchProtocol === undefined) { resolve(); return; }
-    let checkedInstances;
-    if (searchProtocol == 'normal') checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects]
-    else if (searchProtocol == 'tor') checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects]
+    if (disableSearch || searchFrontend != 'searxng', protocol === undefined) { resolve(); return; }
+    let checkedInstances = [];
+    if (protocol == 'loki') checkedInstances = [...searxngLokiCustomRedirects];
+    else if (protocol == 'i2p') checkedInstances = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks];
+    else if (protocol == 'tor') checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects];
+    if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+      checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects];
+    }
     utils.getCookiesFromStorage('searxng', checkedInstances, 'autocomplete');
     utils.getCookiesFromStorage('searxng', checkedInstances, 'categories');
     utils.getCookiesFromStorage('searxng', checkedInstances, 'disabled_engines');
@@ -272,6 +350,63 @@ function pasteSearxngCookies() {
   })
 }
 
+function initLibrexCookies(test, from) {
+  return new Promise(async resolve => {
+    await init();
+    let protocolHost = utils.protocolHost(from);
+    if (![
+      ...librexNormalRedirectsChecks,
+      ...librexNormalCustomRedirects,
+      ...librexTorRedirectsChecks,
+      ...librexTorCustomRedirects,
+      ...librexI2pRedirectsChecks,
+      ...librexI2pCustomRedirects,
+      ...librexLokiCustomRedirects
+    ].includes(protocolHost)) { resolve(); return; }
+
+    if(!test) {
+      let checkedInstances = [];
+      if (protocol == 'loki') checkedInstances = [...librexLokiCustomRedirects];
+      else if (protocol == 'i2p') checkedInstances = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks];
+      else if (protocol == 'tor') checkedInstances = [...librexTorRedirectsChecks, ...librexTorCustomRedirects];
+      if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+        checkedInstances = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects];
+      }
+      await utils.copyCookie('librex', from, checkedInstances, 'bibliogram');
+      await utils.copyCookie('librex', from, checkedInstances, 'disable_special');
+      await utils.copyCookie('librex', from, checkedInstances, 'invidious');
+      await utils.copyCookie('librex', from, checkedInstances, 'libreddit');
+      await utils.copyCookie('librex', from, checkedInstances, 'nitter');
+      await utils.copyCookie('librex', from, checkedInstances, 'proxitok');
+      await utils.copyCookie('librex', from, checkedInstances, 'theme');
+      await utils.copyCookie('librex', from, checkedInstances, 'wikiless');
+    }
+    resolve(true);
+  })
+}
+
+function pasteLibrexCookies() {
+  return new Promise(async resolve => {
+    await init();
+    if (disableSearch || searchFrontend != 'librex', protocol === undefined) { resolve(); return; }
+    let checkedInstances = [];
+    if (protocol == 'loki') checkedInstances = [...librexLokiCustomRedirects];
+    else if (protocol == 'i2p') checkedInstances = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks];
+    else if (protocol == 'tor') checkedInstances = [...librexTorRedirectsChecks, ...librexTorCustomRedirects];
+    if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+      checkedInstances = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects];
+    }
+    utils.getCookiesFromStorage('librex', checkedInstances, 'bibliogram');
+    utils.getCookiesFromStorage('librex', checkedInstances, 'disable_special');
+    utils.getCookiesFromStorage('librex', checkedInstances, 'invidious');
+    utils.getCookiesFromStorage('librex', checkedInstances, 'libreddit');
+    utils.getCookiesFromStorage('librex', checkedInstances, 'nitter');
+    utils.getCookiesFromStorage('librex', checkedInstances, 'proxitok');
+    utils.getCookiesFromStorage('librex', checkedInstances, 'theme');
+    utils.getCookiesFromStorage('librex', checkedInstances, 'wikiless');
+    resolve();
+  })
+}
 
 function redirect(url, disableOverride) {
   if (disableSearch && !disableOverride) return;
@@ -281,32 +416,57 @@ function redirect(url, disableOverride) {
   let randomInstance;
   let path;
   if (searchFrontend == 'searx') {
-    let instancesList;
-    if (searchProtocol == 'normal') instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects];
-    else if (searchProtocol == 'tor') instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects];
-    else if (searchProtocol == 'i2p') instancesList = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects];
-    if (instancesList.length === 0) return;
+    let instancesList = [];
+    if (protocol == 'loki') instancesList = [...searxLokiCustomRedirects];
+    else if (protocol == 'i2p') instancesList = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks];
+    else if (protocol == 'tor') instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects];
+    if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+        instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects];
+    }
+    if (instancesList.length === 0) { return; }
+
     randomInstance = utils.getRandomInstance(instancesList)
     path = "/";
   }
   else if (searchFrontend == 'searxng') {
-    let instancesList;
-    if (searchProtocol == 'normal') instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects];
-    else if (searchProtocol == 'tor') instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects];
-    else if (searchProtocol == 'i2p') instancesList = [...searxngI2pRedirectsChecks, ...searxngI2pCustomRedirects];
-    if (instancesList.length === 0) return;
+    let instancesList = [];
+    if (protocol == 'loki') instancesList = [...searxngLokiCustomRedirects];
+    else if (protocol == 'i2p') instancesList = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks];
+    else if (protocol == 'tor') instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects];
+    if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+        instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects];
+    }
+    if (instancesList.length === 0) { return; }
+
     randomInstance = utils.getRandomInstance(instancesList)
     path = "/";
   }
   else if (searchFrontend == 'whoogle') {
-    let instancesList;
-    if (searchProtocol == 'normal') instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects];
-    if (searchProtocol == 'tor') instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects];
-    if (searchProtocol == 'i2p') instancesList = [...whoogleI2pRedirectsChecks, ...whoogleI2pCustomRedirects];
-    if (instancesList.length === 0) return;
+    let instancesList = [];
+    if (protocol == 'loki') instancesList = [...whoogleLokiCustomRedirects];
+    else if (protocol == 'i2p') instancesList = [...whoogleI2pCustomRedirects, ...whoogleI2pRedirectsChecks];
+    else if (protocol == 'tor') instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects];
+    if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+        instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects];
+    }
+    if (instancesList.length === 0) { return; }
+
     randomInstance = utils.getRandomInstance(instancesList)
     path = "/search";
   }
+  else if (searchFrontend == 'librex') {
+    let instancesList = [];
+    if (protocol == 'loki') instancesList = [...librexLokiCustomRedirects];
+    else if (protocol == 'i2p') instancesList = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks];
+    else if (protocol == 'tor') instancesList = [...librexTorRedirectsChecks, ...librexTorCustomRedirects];
+    if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+        instancesList = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects];
+    }
+    if (instancesList.length === 0) { return; }
+
+    randomInstance = utils.getRandomInstance(instancesList)
+    path = "/search.php";
+  }
 
   if (
     ((url.hostname.includes('google') || url.hostname.includes('bing')) && !url.searchParams.has('q')) ||
@@ -345,36 +505,57 @@ function switchInstance(url, disableOverride) {
       ...searchRedirects.whoogle.tor,
       ...searchRedirects.whoogle.i2p,
 
+      ...searchRedirects.librex.normal,
+      ...searchRedirects.librex.tor,
+      ...searchRedirects.librex.i2p,
+
       ...searxNormalCustomRedirects,
       ...searxTorCustomRedirects,
       ...searxI2pCustomRedirects,
+      ...searxLokiCustomRedirects,
 
       ...searxngNormalCustomRedirects,
       ...searxngTorCustomRedirects,
       ...searxngI2pCustomRedirects,
+      ...searxngLokiCustomRedirects,
 
       ...whoogleNormalCustomRedirects,
       ...whoogleTorCustomRedirects,
       ...whoogleI2pCustomRedirects,
+      ...whoogleLokiCustomRedirects,
+
+      ...librexNormalCustomRedirects,
+      ...librexTorCustomRedirects,
+      ...librexI2pCustomRedirects,
+      ...librexLokiCustomRedirects
     ].includes(protocolHost)) { resolve(); return; }
 
     let instancesList;
-    if (searchProtocol == 'normal') {
-      if (searchFrontend == 'searx') instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects];
-      else if (searchFrontend == 'searxng') instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects];
-      else if (searchFrontend == 'whoogle') instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects];
+    
+    if (protocol == 'loki') {
+      if (searchFrontend == 'searx') instancesList = [...searxLokiCustomRedirects];
+      else if (searchFrontend == 'searxng') instancesList = [...searxngLokiCustomRedirects];
+      else if (searchFrontend == 'whoogle') instancesList = [...whoogleLokiCustomRedirects];
+      else if (searchFrontend == 'librex') instancesList = [...librexLokiCustomRedirects];
     }
-    else if (searchProtocol == 'tor') {
+    else if (protocol == 'tor') {
       if (searchFrontend == 'searx') instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects];
       else if (searchFrontend == 'searxng') instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects];
       else if (searchFrontend == 'whoogle') instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects];
+      else if (searchFrontend == 'librex') instancesList = [...librexTorRedirectsChecks, ...librexTorCustomRedirects];
     }
-    else if (searchProtocol == 'i2p') {
+    else if (protocol == 'i2p') {
       if (searchFrontend == 'searx') instancesList = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects];
       else if (searchFrontend == 'searxng') instancesList = [...searxngI2pRedirectsChecks, ...searxngI2pCustomRedirects];
       else if (searchFrontend == 'whoogle') instancesList = [...whoogleI2pRedirectsChecks, ...whoogleI2pCustomRedirects];
+      else if (searchFrontend == 'librex') instancesList = [...librexI2pRedirectsChecks, ...librexI2pCustomRedirects];
+    }
+    if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+      if (searchFrontend == 'searx') instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects];
+      else if (searchFrontend == 'searxng') instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects];
+      else if (searchFrontend == 'whoogle') instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects];
+      else if (searchFrontend == 'librex') instancesList = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects];
     }
-
     const i = instancesList.indexOf(protocolHost);
     if (i > -1) instancesList.splice(i, 1);
     if (instancesList.length === 0) { resolve(); return; }
@@ -388,14 +569,20 @@ function initDefaults() {
   return new Promise(async resolve => {
     fetch('/instances/data.json').then(response => response.text()).then(async data => {
       let dataJson = JSON.parse(data);
+      /*
       redirects.searx = dataJson.searx;
       redirects.searxng = dataJson.searxng;
       redirects.whoogle = dataJson.whoogle;
+      */
+      for (let i = 0; i < frontends.length; i++) {
+        redirects[frontends[i]] = dataJson[frontends[i]]
+      }
 
       browser.storage.local.get('cloudflareBlackList', async r => {
         whoogleNormalRedirectsChecks = [...redirects.whoogle.normal];
         searxNormalRedirectsChecks = [...redirects.searx.normal];
         searxngNormalRedirectsChecks = [...redirects.searxng.normal];
+        librexNormalRedirectsChecks = [...redirects.librex.normal];
         for (const instance of r.cloudflareBlackList) {
           let i;
 
@@ -407,13 +594,15 @@ function initDefaults() {
 
           i = searxngNormalRedirectsChecks.indexOf(instance);
           if (i > -1) searxngNormalRedirectsChecks.splice(i, 1);
+
+          i = librexNormalRedirectsChecks.indexOf(instance);
+          if (i > -1) librexNormalRedirectsChecks.splice(i, 1)
         }
         browser.storage.local.set({
           disableSearch: false,
           searchFrontend: 'searxng',
           searchRedirects: redirects,
           searxngCustomSettings: false,
-          searchProtocol: 'normal',
 
           whoogleNormalRedirectsChecks: whoogleNormalRedirectsChecks,
           whoogleNormalCustomRedirects: [],
@@ -424,6 +613,9 @@ function initDefaults() {
           whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p],
           whoogleI2pCustomRedirects: [],
 
+          whoogleLokiRedirectsChecks: [...redirects.whoogle.loki],
+          whoogleLokiCustomRedirects: [],
+
           searxNormalRedirectsChecks: searxNormalRedirectsChecks,
           searxNormalCustomRedirects: [],
 
@@ -433,6 +625,9 @@ function initDefaults() {
           searxI2pRedirectsChecks: [...redirects.searx.i2p],
           searxI2pCustomRedirects: [],
 
+          searxLokiRedirectsChecks: [...redirects.searx.loki],
+          searxLokiCustomRedirects: [],
+
           searxngNormalRedirectsChecks: searxngNormalRedirectsChecks,
           searxngNormalCustomRedirects: [],
 
@@ -441,6 +636,21 @@ function initDefaults() {
 
           searxngI2pRedirectsChecks: [...redirects.searxng.i2p],
           searxngI2pCustomRedirects: [],
+
+          searxngLokiRedirectsChecks: [...redirects.searxng.loki],
+          searxngLokiCustomRedirects: [],
+
+          librexNormalRedirectsChecks: librexNormalRedirectsChecks,
+          librexNormalCustomRedirects: [],
+
+          librexTorRedirectsChecks: [...redirects.librex.tor],
+          librexTorCustomRedirects: [],
+
+          librexI2pRedirectsChecks: [...redirects.librex.i2p],
+          librexI2pCustomRedirects: [],
+
+          librexLokiRedirectsChecks: [...redirects.librex.loki],
+          librexLokiCustomRedirects: []
         }, () => resolve())
       })
     })
@@ -453,6 +663,8 @@ export default {
   pasteSearxCookies,
   initSearxngCookies,
   pasteSearxngCookies,
+  initLibrexCookies,
+  pasteLibrexCookies,
   redirect,
   initDefaults,
   switchInstance,