diff --git a/.gitignore b/.gitignore
index f6fc62d..09e0ce2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ web-ext-artifacts/
nod
node_modules
package-lock.json
+.vscode
\ No newline at end of file
diff --git a/.woodpecker/instances.yml b/.woodpecker/instances.yml
index 96fe59f..43df0cd 100644
--- a/.woodpecker/instances.yml
+++ b/.woodpecker/instances.yml
@@ -6,18 +6,16 @@ pipeline:
event: cron
commands:
- python -m pip install --upgrade pip
- - pip install requests bs4 colorama
+ - pip install requests colorama
- python src/instances/get_instances.py
+ # SSH configuration
+ - mkdir ~/.ssh
+ - ssh-keyscan -t ed25519 codeberg.org >> ~/.ssh/known_hosts
+ - eval `ssh-agent`
+ - echo "$TOKEN" | tr -d '\r' | ssh-add -
# Git configuration
- git config --global user.email $MAIL
- git config --global user.name "Woodpecker CI"
- git commit -am "updated instances"
- - mkdir ~/.ssh
- - ssh-keyscan -t ed25519 codeberg.org >> ~/.ssh/known_hosts
- git remote set-url origin git@codeberg.org:libredirect/libredirect.git
- #- echo $TOKEN > key
- #- chmod 0600 key
- - eval `ssh-agent`
- - echo "$TOKEN" | tr -d '\r' | ssh-add -
- #- ssh-add key
- git push --set-upstream origin master
diff --git a/README.md b/README.md
index c97a20f..cc6ba93 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
A web extension that redirects YouTube, Twitter, Instagram... requests to alternative privacy friendly frontends and backends.
-[![Matrix Badge](https://img.shields.io/matrix/libredirect:matrix.org?label=matrix%20chat)](https://matrix.to/#/#libredirect-space:matrix.org)
+[![Matrix Badge](https://img.shields.io/matrix/libredirect:matrix.org?label=matrix%20chat)](https://matrix.to/#/#libredirect:matrix.org)
[![Firefox users Badge](https://img.shields.io/amo/users/libredirect?label=Firefox%20users)](https://addons.mozilla.org/firefox/addon/libredirect/)
[![LibrePay Badge](https://img.shields.io/liberapay/gives/libredirect?label=Liberapay)](https://liberapay.com/LibRedirect)
@@ -26,7 +26,7 @@ Imgur => [Rimgo](https://codeberg.org/video-prize-ranch/rimgo)\
Wikipedia => [Wikiless](https://codeberg.org/orenom/wikiless)\
Medium => [Scribe](https://sr.ht/~edwardloveall/scribe/)\
Quora => [Quetre](https://github.com/zyachel/quetre)\
-IMDb => [Libremdb](https://github.com/zyachel/libremdb)\
+IMDb => [libremdb](https://github.com/zyachel/libremdb)\
PeerTube => [SimpleerTube](https://git.sr.ht/~metalune/simpleweb_peertube)\
LBRY/Odysee => [Librarian](https://codeberg.org/librarian/librarian), [LBRY Desktop](https://lbry.com/get)\
Search => [SearXNG](https://github.com/searxng/searxng), [SearX](https://searx.github.io/searx/), [Whoogle](https://benbusby.com/projects/whoogle-search/), [LibreX](https://github.com/hnhx/librex/)\
@@ -36,13 +36,14 @@ Send Files => [Send](https://gitlab.com/timvisee/send)
**Note**: The Extension will be using random instances by default. You can modify this and add custom instances too.
-# Please read the [FAQ](https://libredirect.github.io/faq.html) if you have any questions!
+# Please read the [FAQ](https://libredirect.codeberg.page/faq.html) if you have any questions!
## Donate
[![Liberapay](./img/liberapay.svg)](https://liberapay.com/LibRedirect)
[![Patreon](./img/patreon.svg)](https://patreon.com/LibRedirect)
-[![Buy me a coffee](./img/bmc.svg)](https://www.buymeacoffee.com/libredirect)
+[![Buy me a coffee](./img/bmc.svg)](https://www.buymeacoffee.com/libredirect)
+
BTC: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q\
BCH: qqz5vfnrngk0tjy73q2688qzw4wnllnuzqfndflhl8\
@@ -51,8 +52,9 @@ XMR: 4AM5CVfaGsnEXQQjZSzJvaWufe7pT86ubcZPr83fCjb2Hn3iwcForTWFy2Z3ugXcufUwHaGcucf
## Mirror Repos
-[![GitHub](https://raw.githubusercontent.com/ManeraKai/manerakai/main/icons/github.svg)](https://github.com/libredirect/libredirect/)
[![Codeberg](https://raw.githubusercontent.com/ManeraKai/manerakai/main/icons/codeberg.svg)](https://codeberg.org/LibRedirect/libredirect)
+[![GitHub](https://raw.githubusercontent.com/ManeraKai/manerakai/main/icons/github.svg)](https://github.com/libredirect/libredirect/)
+
## Translate
@@ -69,21 +71,19 @@ npm update
npm install
```
-If you are modifying any files ending with .pug, the pug cli needs to be installed with the following command (with root privileges):
+If you are modifying `config.json` or any files ending with .ejs, you need to run the following command to render html:
```
-npm install -g pug-cli
+npm run ejs
```
-and then run `npm run pug` to generate pages in the background.
-
-### Build
+### Build the extention zip archive:
```
npm run build
```
-### Test
+### Run automated tests
```
npm run test
@@ -117,4 +117,4 @@ select `load unpacked extension`\
select `src` folder
[Privacy Policy](Privacy-Policy.md)\
-Credits: [Privacy Redirect](https://github.com/SimonBrazell/privacy-redirect)
+Forked from [Privacy Redirect](https://github.com/SimonBrazell/privacy-redirect)
diff --git a/img/Open-Collective.png b/img/Open-Collective.png
new file mode 100644
index 0000000..d667bab
Binary files /dev/null and b/img/Open-Collective.png differ
diff --git a/package.json b/package.json
index 50872aa..74bb60b 100644
--- a/package.json
+++ b/package.json
@@ -9,23 +9,22 @@
"start": "web-ext run --browser-console --source-dir ./src/",
"build": "web-ext build --overwrite-dest --source-dir ./src/",
"test": "web-ext lint --source-dir ./src/ || true",
- "pug": "pug ./src/pages/options/*.pug ./src/pages/popup/ -P -w",
- "prettier": "npx prettier --write .",
- "instances": "python3 src/instances/get_instances.py; git update-index --assume-unchanged src/instances/blacklist.json src/instances/data.json"
+ "instances": "python3 src/instances/get_instances.py; git update-index --assume-unchanged src/instances/blacklist.json src/instances/data.json",
+ "ejs": "npx ejs src/pages/options/index.ejs -f src/config/config.json -o src/pages/options/index.html; npx ejs src/pages/popup/popup.ejs -f src/config/config.json -o src/pages/popup/popup.html"
},
"repository": {
"type": "git",
- "url": "git+https://github.com/LibRedirect/LibRedirect.git"
+ "url": "git+https://codeberg.org/LibRedirect/LibRedirect.git"
},
"author": "LibRedirect",
"license": "GPL-3.0-only",
"bugs": {
- "url": "https://github.com/LibRedirect/LibRedirect/issues"
+ "url": "https://codeberg.org/LibRedirect/LibRedirect/issues"
},
- "homepage": "https://libredirect.github.io",
+ "homepage": "https://libredirect.codeberg.page",
"devDependencies": {
"prettier": "2.7.1",
- "web-ext": "^6.7.0"
+ "web-ext": "^7.2.0"
},
"dependencies": {
"buffer": "^6.0.3",
diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json
index d4217ad..3887856 100644
--- a/src/_locales/en/messages.json
+++ b/src/_locales/en/messages.json
@@ -210,5 +210,13 @@
},
"lbryDesktop": {
"message": "LBRY Desktop"
+ },
+ "toggleTab": {
+ "message": "Toggle redirects in this tab",
+ "description": "Used in context menus when right clicking on a page/tab"
+ },
+ "redirectLink": {
+ "message": "Attempt to redirect this hyperlink",
+ "description": "Used in context menus when right clicking on a hyperlink"
}
}
diff --git a/src/_locales/filter.py b/src/_locales/filter.py
index 581bb36..0d5fb44 100644
--- a/src/_locales/filter.py
+++ b/src/_locales/filter.py
@@ -1,12 +1,4 @@
-import requests
import json
-from urllib.parse import urlparse
-from bs4 import BeautifulSoup
-import re
-from colorama import Fore, Back, Style
-from urllib.parse import urlparse
-import socket
-import subprocess
ar_json = {}
diff --git a/src/_locales/pt_BR/messages.json b/src/_locales/pt_BR/messages.json
index 4f15250..3f6e316 100644
--- a/src/_locales/pt_BR/messages.json
+++ b/src/_locales/pt_BR/messages.json
@@ -1,4 +1,4 @@
-{
+
"youtube": {
"message": "YouTube",
"description": "Utilizado na página de configurações"
@@ -18,8 +18,9 @@
"message": "Twitter",
"description": "Utilizado na página de configurações"
},
- "i2p": {
- "message": "I2P"
+ "extensionDescription": {
+ "message": "Uma extensão para os navegadores de internet que redireciona os sítios/sites populares para interfaces gráficas e interfaces de textos alternativos e amigáveis à sua privacidade",
+ "description": "Descrição da extensão"
},
"switchInstance": {
"message": "Trocar a Instância",
@@ -49,6 +50,18 @@
"message": "Enviar Arquivos",
"description": "Utilizado na página de configurações"
},
+ "youtube": {
+ "message": "YouTube",
+ "description": "Utilizado na página de configurações"
+ },
+ "instagram": {
+ "message": "Instagram",
+ "description": "Utilizado na página de configurações"
+ },
+ "twitter": {
+ "message": "Twitter",
+ "description": "Utilizado na página de configurações"
+ },
"reddit": {
"message": "Reddit",
"description": "Utilizado na página de configurações"
@@ -198,6 +211,9 @@
"copied": {
"message": "Copiado"
},
+ "unifySettings": {
+ "message": "Unificar as Configurações"
+ },
"lbry": {
"message": "LBRY"
},
@@ -208,8 +224,7 @@
"message": "Uma extensão para os navegadores de internet que redireciona os sítios/sites populares para interfaces gráficas e interfaces de textos alternativas e amigáveis que respeitam sua privacidade",
"description": "Descrição da Extensão"
},
- "instagram": {
- "message": "Instagram",
- "description": "Utilizado na página de configurações"
+ "protocolFallback": {
+ "message": "Retornar ao normal se não houver outras instâncias disponíveis para o protocolo atual"
}
}
diff --git a/src/assets/images/about-icon.svg b/src/assets/images/about-icon.svg
new file mode 100644
index 0000000..551255e
--- /dev/null
+++ b/src/assets/images/about-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/images/fandom-icon.svg b/src/assets/images/fandom-icon.svg
new file mode 100644
index 0000000..0cd873b
--- /dev/null
+++ b/src/assets/images/fandom-icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/general-icon.svg b/src/assets/images/general-icon.svg
new file mode 100644
index 0000000..55c5f8b
--- /dev/null
+++ b/src/assets/images/general-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/images/imdb.svg b/src/assets/images/imdb-icon.svg
similarity index 100%
rename from src/assets/images/imdb.svg
rename to src/assets/images/imdb-icon.svg
diff --git a/src/assets/images/imgur.png b/src/assets/images/imgur-icon.png
similarity index 100%
rename from src/assets/images/imgur.png
rename to src/assets/images/imgur-icon.png
diff --git a/src/assets/images/instance-icon.svg b/src/assets/images/instance-icon.svg
new file mode 100644
index 0000000..6b034c6
--- /dev/null
+++ b/src/assets/images/instance-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/images/maps-icon.svg b/src/assets/images/maps-icon.svg
new file mode 100644
index 0000000..c66a89d
--- /dev/null
+++ b/src/assets/images/maps-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/images/medium-icon.svg b/src/assets/images/medium-icon.svg
new file mode 100644
index 0000000..7261248
--- /dev/null
+++ b/src/assets/images/medium-icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/assets/images/quora.png b/src/assets/images/quora-icon.png
similarity index 100%
rename from src/assets/images/quora.png
rename to src/assets/images/quora-icon.png
diff --git a/src/assets/images/reuters.svg b/src/assets/images/reuters-icon.svg
similarity index 100%
rename from src/assets/images/reuters.svg
rename to src/assets/images/reuters-icon.svg
diff --git a/src/assets/images/search-icon.svg b/src/assets/images/search-icon.svg
new file mode 100644
index 0000000..cb73ff1
--- /dev/null
+++ b/src/assets/images/search-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/images/send-icon.svg b/src/assets/images/send-icon.svg
deleted file mode 100644
index 2ed80a0..0000000
--- a/src/assets/images/send-icon.svg
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
diff --git a/src/assets/images/sendFiles-icon.svg b/src/assets/images/sendFiles-icon.svg
new file mode 100644
index 0000000..5557664
--- /dev/null
+++ b/src/assets/images/sendFiles-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/images/translate-icon.svg b/src/assets/images/translate-icon.svg
new file mode 100644
index 0000000..30f9c1b
--- /dev/null
+++ b/src/assets/images/translate-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/images/youtube-music-icon.png b/src/assets/images/youtubeMusic-icon.png
similarity index 100%
rename from src/assets/images/youtube-music-icon.png
rename to src/assets/images/youtubeMusic-icon.png
diff --git a/src/assets/javascripts/frontend.js b/src/assets/javascripts/frontend.js
deleted file mode 100644
index ab71cc0..0000000
--- a/src/assets/javascripts/frontend.js
+++ /dev/null
@@ -1,143 +0,0 @@
-class FrontEnd {
- constructor({ enable, frontends, frontend, redirect }) {
- this.redirects = {}
- this.enable = enable
- this.frontend = frontend
- this.protocol = "normal"
- this.protocolFallback = true
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- data = JSON.parse(data)
- fetch("/instances/blacklist.json")
- .then(response => response.text())
- .then(async blackList => {
- blackList = JSON.parse(blackList)
- for (const frontend in frontends) {
- this.redirects[frontend] = {}
-
- this.redirects[frontend].cookies = [...frontends[frontend].cookies]
-
- for (const protocol in data[frontend]) {
- this.redirects[frontend][protocol] = {}
-
- this.redirects[frontend][protocol].all = [...data[frontend][protocol]]
-
- this.redirects[frontend][protocol].custom = []
-
- this.redirects[frontend][protocol].checked = [...data[frontend][protocol]]
- for (const instance of blackList.cloudflare) {
- const a = this.redirects[frontend][protocol].checked.indexOf(instance)
- if (a > -1) this.redirects[frontend][protocol].checked.splice(a, 1)
- }
- for (const instance of blackList.offline) {
- const a = this.redirects[frontend][protocol].checked.indexOf(instance)
- if (a > -1) this.redirects[frontend][protocol].checked.splice(a, 1)
- }
- }
- }
- })
- })
- this.unifyCookies = from =>
- new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(from)
- const list = [...this.redirects[this.frontend][this.protocol]]
- if (![...list.checked, ...list.custom].includes(protocolHost)) {
- resolve()
- return
- }
- for (const cookie of this.redirects[this.frontend].cookies) {
- await utils.copyCookie(frontend, protocolHost, [...list.checked, list.custom], cookie)
- }
- resolve(true)
- })
-
- this.switchInstance = (url, disableOverride) => {
- if (!this.enable && !disableOverride) return
-
- const protocolHost = utils.protocolHost(url)
-
- const list = [...this.redirects[this.frontend][this.protocol]]
- if (!list.all.includes(protocolHost)) return
-
- let userList = [...list.checked, ...list.custom]
- if (userList.length === 0 && this.protocolFallback) userList = [...list.normal.all]
-
- const i = userList.indexOf(protocolHost)
- if (i > -1) userList.splice(i, 1)
- if (userList.length === 0) return
-
- const randomInstance = utils.getRandomInstance(userList)
- return `${randomInstance}${url.pathname}${url.search}`
- }
-
- this.redirect = (url, type, initiator, disableOverride) => {
- const result = redirect(url, type, initiator, disableOverride)
- if (result == "BYPASSTAB") return "BYPASSTAB"
- if (result) {
- const list = [...this.redirects[this.frontend][this.protocol]]
- let userList = [...list.checked, ...list.custom]
- const randomInstance = utils.getRandomInstance(userList)
- return `${randomInstance}${result.pathname}${result.search}`
- }
- }
-
- let init = () => new Promise(async resolve => {})
- }
-}
-
-let Reddit = new FrontEnd({
- enable: true,
- frontends: {
- libreddit: { cookies: ["theme", "front_page", "layout", "wide", "post_sort", "comment_sort", "show_nsfw", "autoplay_videos", "use_hls", "hide_hls_notification", "subscriptions", "filters"] },
- teddit: {
- cookies: [
- "collapse_child_comments",
- "domain_instagram",
- "domain_twitter",
- "domain_youtube",
- "flairs",
- "highlight_controversial",
- "nsfw_enabled",
- "post_media_max_height",
- "show_upvoted_percentage",
- "show_upvotes",
- "theme",
- "videos_muted",
- ],
- },
- },
- frontend: "libreddit",
- redirect: (url, type, initiator, disableOverride) => {
- if (this.enable && !disableOverride) return
-
- const targets = [/^https?:\/{2}(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, /^https?:\/{2}(i\.|preview\.)redd\.it/]
- if (!targets.some(rx => rx.test(url.href))) return
-
- if (initiator && all().includes(initiator.origin)) return "BYPASSTAB"
- if (!["main_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return
-
- const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/
- if (url.pathname.match(bypassPaths)) return
-
- const protocolHost = utils.protocolHost(url)
-
- if (url.host === "i.redd.it") {
- if (this.frontend == "libreddit") return `${protocolHost}/img${url.pathname}${url.search}`
- if (this.frontend == "teddit") return `${protocolHost}/pics/w:null_${url.pathname.substring(1)}${url.search}`
- } else if (url.host === "redd.it") {
- // https://redd.it/foo => https://libredd.it/comments/foo
- if (this.frontend == "libreddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) return `${protocolHost}/comments${url.pathname}${url.search}`
- // https://redd.it/foo => https://teddit.net/comments/foo
- if (this.frontend == "teddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) return `${protocolHost}/comments${url.pathname}${url.search}`
- } else if (url.host === "preview.redd.it") {
- if (this.frontend == "libreddit") return `${protocolHost}/preview/pre${url.pathname}${url.search}`
- if (this.frontend == "teddit") return
- } else {
- return `${url.href}`
- }
- },
-})
-
-export default {}
diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js
index a8360bd..6eb0a45 100644
--- a/src/assets/javascripts/general.js
+++ b/src/assets/javascripts/general.js
@@ -1,17 +1,20 @@
"use strict"
window.browser = window.browser || window.chrome
+let exceptions
+
function isException(url) {
for (const item of exceptions.url) if (item == `${url.protocol}//${url.host}`) return true
for (const item of exceptions.regex) if (new RegExp(item).test(url.href)) return true
return false
}
-let exceptions
-
function init() {
- browser.storage.local.get("exceptions", r => {
- exceptions = r.exceptions
+ return new Promise(resolve => {
+ browser.storage.local.get("options", r => {
+ if (r.options) exceptions = r.options.exceptions
+ resolve()
+ })
})
}
@@ -22,46 +25,26 @@ async function initDefaults() {
return new Promise(resolve =>
browser.storage.local.set(
{
- exceptions: {
- url: [],
- regex: [],
+ options: {
+ exceptions: {
+ url: [],
+ regex: [],
+ },
+ theme: "detect",
+ popupServices: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"],
+ autoRedirect: false,
+ firstPartyIsolate: false,
+ network: "clearnet",
+ networkFallback: true,
+ latencyThreshold: 1000,
},
- theme: "DEFAULT",
- popupFrontends: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"],
- autoRedirect: false,
- firstPartyIsolate: false,
- protocol: "normal",
- protocolFallback: true,
- latencyThreshold: 1000,
},
() => resolve()
)
)
}
-const allPopupFrontends = [
- "youtube",
- "youtubeMusic",
- "twitter",
- "instagram",
- "tiktok",
- "imgur",
- "reddit",
- "search",
- "translate",
- "maps",
- "wikipedia",
- "medium",
- "quora",
- "imdb",
- "reuters",
- "peertube",
- "lbry",
- "sendTargets",
-]
-
export default {
isException,
initDefaults,
- allPopupFrontends,
}
diff --git a/src/assets/javascripts/get-localstorage.js b/src/assets/javascripts/get-localstorage.js
new file mode 100644
index 0000000..6674040
--- /dev/null
+++ b/src/assets/javascripts/get-localstorage.js
@@ -0,0 +1,15 @@
+window.browser = window.browser || window.chrome
+
+browser.storage.local.get(["localstorage", "tmp"], r => {
+ let localstorageJson = r.localstorage
+ const frontend = r.tmp[0]
+ const items = r.tmp[1]
+ localstorageJson[frontend] = {}
+
+ for (const item of items) {
+ let tmp = localStorage.getItem(item)
+ if (tmp) localstorageJson[frontend][item] = tmp
+ }
+
+ browser.storage.local.set({ localstorage: localstorageJson })
+})
diff --git a/src/assets/javascripts/imdb.js b/src/assets/javascripts/imdb.js
deleted file mode 100644
index 604e9a9..0000000
--- a/src/assets/javascripts/imdb.js
+++ /dev/null
@@ -1,221 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = [/^https?:\/{2}(?:www\.|)imdb\.com.*/]
-
-const frontends = new Array("libremdb")
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.libremdb = val
- libremdbNormalRedirectsChecks = [...redirects.libremdb.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = libremdbNormalRedirectsChecks.indexOf(instance)
- if (a > -1) libremdbNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- imdbRedirects: redirects,
- libremdbNormalRedirectsChecks,
- libremdbTorRedirectsChecks: [...redirects.libremdb.tor],
- libremdbI2pRedirectsChecks: [...redirects.libremdb.i2p],
- libremdbLokiRedirectsChecks: [...redirects.libremdb.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableImdb,
- protocol,
- protocolFallback,
- imdbRedirects,
- libremdbNormalRedirectsChecks,
- libremdbNormalCustomRedirects,
- libremdbTorRedirectsChecks,
- libremdbTorCustomRedirects,
- libremdbI2pCustomRedirects,
- libremdbLokiCustomRedirects
-
-function init() {
- return new Promise(async resolve => {
- browser.storage.local.get(
- [
- "disableImdb",
- "protocol",
- "protocolFallback",
- "imdbRedirects",
- "libremdbNormalRedirectsChecks",
- "libremdbNormalCustomRedirects",
- "libremdbTorRedirectsChecks",
- "libremdbTorCustomRedirects",
- "libremdbI2pCustomRedirects",
- "libremdbLokiCustomRedirects",
- ],
- r => {
- disableImdb = r.disableImdb
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- imdbRedirects = r.imdbRedirects
- libremdbNormalRedirectsChecks = r.libremdbNormalRedirectsChecks
- libremdbNormalCustomRedirects = r.libremdbNormalCustomRedirects
- libremdbTorRedirectsChecks = r.libremdbTorRedirectsChecks
- libremdbTorCustomRedirects = r.libremdbTorCustomRedirects
- libremdbI2pCustomRedirects = r.libremdbI2pCustomRedirects
- libremdbLokiCustomRedirects = r.libremdbLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableImdb && !disableOverride) return
- if (url.pathname == "/") return
- if (type != "main_frame") return
- const all = [...imdbRedirects.libremdb.normal, ...libremdbNormalCustomRedirects]
- if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return
- if (!targets.some(rx => rx.test(url.href))) return
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...libremdbLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...libremdbI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...libremdbTorRedirectsChecks, ...libremdbTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...libremdbNormalRedirectsChecks, ...libremdbNormalCustomRedirects]
- }
- if (instancesList.length === 0) {
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- return `${randomInstance}${url.pathname}`
-}
-
-function reverse(url) {
- return new Promise(async resolve => {
- await init()
- let protocolHost = utils.protocolHost(url)
- const all = [
- ...imdbRedirects.libremdb.normal,
- ...imdbRedirects.libremdb.tor,
- ...libremdbNormalCustomRedirects,
- ...libremdbTorCustomRedirects,
- ...libremdbI2pCustomRedirects,
- ...libremdbLokiCustomRedirects,
- ]
- if (!all.includes(protocolHost)) {
- resolve()
- return
- }
-
- resolve(`https://imdb.com${url.pathname}${url.search}`)
- })
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableImdb && !disableOverride) {
- resolve()
- return
- }
- let protocolHost = utils.protocolHost(url)
- const all = [
- ...imdbRedirects.libremdb.tor,
- ...imdbRedirects.libremdb.normal,
-
- ...libremdbNormalCustomRedirects,
- ...libremdbTorCustomRedirects,
- ...libremdbI2pCustomRedirects,
- ...libremdbLokiCustomRedirects,
- ]
- if (!all.includes(protocolHost)) {
- resolve()
- return
- }
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...libremdbLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...libremdbI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...libremdbTorRedirectsChecks, ...libremdbTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...libremdbNormalRedirectsChecks, ...libremdbNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- libremdbNormalRedirectsChecks = [...redirects.libremdb.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = libremdbNormalRedirectsChecks.indexOf(instance)
- if (a > -1) libremdbNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableImdb: true,
- imdbRedirects: redirects,
-
- libremdbNormalRedirectsChecks,
- libremdbNormalCustomRedirects: [],
-
- libremdbTorRedirectsChecks: [...redirects.libremdb.tor],
- libremdbTorCustomRedirects: [],
-
- libremdbI2pRedirectsChecks: [],
- libremdbI2pCustomRedirects: [],
-
- libremdbLokiRedirectsChecks: [],
- libremdbLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
-
- redirect,
- reverse,
- switchInstance,
-
- initDefaults,
-}
diff --git a/src/assets/javascripts/imgur.js b/src/assets/javascripts/imgur.js
deleted file mode 100644
index 24e8cb8..0000000
--- a/src/assets/javascripts/imgur.js
+++ /dev/null
@@ -1,221 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = /^https?:\/{2}([im]\.)?imgur\.(com|io)(\/|$)/
-
-const frontends = new Array("rimgo")
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.rimgo = val
- rimgoNormalRedirectsChecks = [...redirects.rimgo.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = rimgoNormalRedirectsChecks.indexOf(instance)
- if (a > -1) rimgoNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- imgurRedirects: redirects,
- rimgoNormalRedirectsChecks,
- rimgoTorRedirectsChecks: [...redirects.rimgo.tor],
- rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p],
- rimgoLokiRedirectsChecks: [...redirects.rimgo.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableImgur,
- imgurRedirects,
- protocol,
- protocolFallback,
- rimgoNormalRedirectsChecks,
- rimgoNormalCustomRedirects,
- rimgoTorRedirectsChecks,
- rimgoTorCustomRedirects,
- rimgoI2pRedirectsChecks,
- rimgoI2pCustomRedirects,
- rimgoLokiCustomRedirects
-
-function init() {
- return new Promise(async resolve => {
- browser.storage.local.get(
- [
- "disableImgur",
- "imgurRedirects",
- "protocol",
- "protocolFallback",
- "rimgoNormalRedirectsChecks",
- "rimgoNormalCustomRedirects",
- "rimgoTorRedirectsChecks",
- "rimgoTorCustomRedirects",
- "rimgoI2pRedirectsChecks",
- "rimgoI2pCustomRedirects",
- "rimgoLokiCustomRedirects",
- ],
- r => {
- disableImgur = r.disableImgur
- imgurRedirects = r.imgurRedirects
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- rimgoNormalRedirectsChecks = r.rimgoNormalRedirectsChecks
- rimgoNormalCustomRedirects = r.rimgoNormalCustomRedirects
- rimgoTorRedirectsChecks = r.rimgoTorRedirectsChecks
- rimgoTorCustomRedirects = r.rimgoTorCustomRedirects
- rimgoI2pRedirectsChecks = r.rimgoI2pRedirectsChecks
- rimgoI2pCustomRedirects = r.rimgoI2pCustomRedirects
- rimgoLokiCustomRedirects = r.rimgoLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-// https://imgur.com/gallery/s4WXQmn
-// https://imgur.com/a/H8M4rcp
-// https://imgur.com/gallery/gYiQLWy
-// https://imgur.com/gallery/cTRwaJU
-// https://i.imgur.com/CFSQArP.jpeg
-
-function all() {
- return [
- ...imgurRedirects.rimgo.normal,
- ...imgurRedirects.rimgo.tor,
- ...imgurRedirects.rimgo.i2p,
- ...rimgoNormalCustomRedirects,
- ...rimgoTorCustomRedirects,
- ...rimgoI2pCustomRedirects,
- ...rimgoLokiCustomRedirects,
- ]
-}
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableImgur && !disableOverride) return
- if (url.pathname == "/" && !disableOverride) return
- if (!["main_frame", "sub_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return
- if (initiator && (all().includes(initiator.origin) || targets.test(initiator.host))) return
- if (!targets.test(url.href)) return
- if (url.pathname.includes("delete/")) return
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...rimgoLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...rimgoI2pCustomRedirects, ...rimgoI2pRedirectsChecks]
- else if (protocol == "tor") instancesList = [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects]
- }
- if (instancesList.length === 0) {
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- return `${randomInstance}${url.pathname}${url.search}`
-}
-
-function reverse(url) {
- return new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
- resolve(`https://imgur.com${url.pathname}${url.search}`)
- })
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableImgur && !disableOverride) {
- resolve()
- return
- }
- let protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
- let instancesList = []
- if (protocol == "loki") instancesList = [...rimgoLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...rimgoI2pCustomRedirects, ...rimgoI2pRedirectsChecks]
- else if (protocol == "tor") instancesList = [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- rimgoNormalRedirectsChecks = [...redirects.rimgo.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = rimgoNormalRedirectsChecks.indexOf(instance)
- if (a > -1) rimgoNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableImgur: false,
- imgurRedirects: redirects,
-
- rimgoNormalRedirectsChecks: rimgoNormalRedirectsChecks,
- rimgoNormalCustomRedirects: [],
-
- rimgoTorRedirectsChecks: [...redirects.rimgo.tor],
- rimgoTorCustomRedirects: [],
-
- rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p],
- rimgoI2pCustomRedirects: [],
-
- rimgoLokiRedirectsChecks: [...redirects.rimgo.loki],
- rimgoLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- redirect,
- reverse,
- initDefaults,
- switchInstance,
-}
diff --git a/src/assets/javascripts/instagram.js b/src/assets/javascripts/instagram.js
deleted file mode 100644
index bc580de..0000000
--- a/src/assets/javascripts/instagram.js
+++ /dev/null
@@ -1,249 +0,0 @@
-window.browser = window.browser || window.chrome
-import utils from "./utils.js"
-
-const targets = ["instagram.com", "www.instagram.com"]
-
-const frontends = new Array("bibliogram")
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- redirects.bibliogram = val
- bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = bibliogramNormalRedirectsChecks.indexOf(instance)
- if (a > -1) bibliogramNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- instagramRedirects: redirects,
- bibliogramNormalRedirectsChecks,
- bibliogramTorRedirectsChecks: [...redirects.bibliogram.tor],
- bibliogramI2pRedirectsChecks: [...redirects.bibliogram.i2p],
- bibliogramLokiRedirectsChecks: [...redirects.bibliogram.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableInstagram,
- protocol,
- protocolFallback,
- instagramRedirects,
- bibliogramNormalRedirectsChecks,
- bibliogramTorRedirectsChecks,
- bibliogramNormalCustomRedirects,
- bibliogramTorCustomRedirects,
- bibliogramI2pCustomRedirects,
- bibliogramLokiCustomRedirects
-
-function init() {
- return new Promise(async resolve => {
- browser.storage.local.get(
- [
- "disableInstagram",
- "protocol",
- "protocolFallback",
- "instagramRedirects",
- "bibliogramNormalRedirectsChecks",
- "bibliogramTorRedirectsChecks",
- "bibliogramNormalCustomRedirects",
- "bibliogramTorCustomRedirects",
- "bibliogramI2pCustomRedirects",
- "bibliogramLokiCustomRedirects",
- ],
- r => {
- disableInstagram = r.disableInstagram
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- instagramRedirects = r.instagramRedirects
- bibliogramNormalRedirectsChecks = r.bibliogramNormalRedirectsChecks
- bibliogramTorRedirectsChecks = r.bibliogramTorRedirectsChecks
- bibliogramNormalCustomRedirects = r.bibliogramNormalCustomRedirects
- bibliogramTorCustomRedirects = r.bibliogramTorCustomRedirects
- bibliogramI2pCustomRedirects = r.bibliogramI2pCustomRedirects
- bibliogramLokiCustomRedirects = r.bibliogramLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function initBibliogramPreferences(test, from) {
- return new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(from)
- if (
- ![
- ...bibliogramNormalRedirectsChecks,
- ...bibliogramTorRedirectsChecks,
- ...bibliogramNormalCustomRedirects,
- ...bibliogramTorCustomRedirects,
- ...bibliogramI2pCustomRedirects,
- ...bibliogramLokiCustomRedirects,
- ].includes(protocolHost)
- ) {
- resolve()
- return
- }
-
- if (!test) {
- let checkedInstances = []
- if (protocol == "loki") checkedInstances = [...bibliogramLokiCustomRedirects]
- else if (protocol == "i2p") checkedInstances = [...bibliogramI2pCustomRedirects]
- else if (protocol == "tor") checkedInstances = [...bibliogramTorRedirectsChecks, ...bibliogramTorCustomRedirects]
- if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects]
- }
- await utils.getPreferencesFromToken("bibliogram", from, checkedInstances, "settings", "settings.json")
- }
- resolve(true)
- })
-}
-
-function all() {
- return [
- ...bibliogramNormalRedirectsChecks,
- ...bibliogramTorRedirectsChecks,
- ...bibliogramNormalCustomRedirects,
- ...bibliogramTorCustomRedirects,
- ...bibliogramI2pCustomRedirects,
- ...bibliogramLokiCustomRedirects,
- ]
-}
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableInstagram && !disableOverride) return
- if (!targets.includes(url.host)) return
- if (initiator && all().includes(initiator.origin)) return "BYPASSTAB"
- if (!["main_frame", "sub_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return
-
- const bypassPaths = [/about/, /explore/, /support/, /press/, /api/, /privacy/, /safety/, /admin/, /\/(accounts\/|embeds?.js)/]
- if (bypassPaths.some(rx => rx.test(url.pathname))) return
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...bibliogramLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...bibliogramI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...bibliogramTorRedirectsChecks, ...bibliogramTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects]
- }
- if (instancesList.length === 0) {
- return
- }
- let randomInstance = utils.getRandomInstance(instancesList)
-
- const reservedPaths = ["u", "p", "privacy"]
- if (url.pathname === "/" || reservedPaths.includes(url.pathname.split("/")[1])) return `${randomInstance}${url.pathname}${url.search}`
- if (url.pathname.startsWith("/reel") || url.pathname.startsWith("/tv")) return `${randomInstance}/p${url.pathname.replace(/\/reel|\/tv/i, "")}${url.search}`
- else return `${randomInstance}/u${url.pathname}${url.search}` // Likely a user profile, redirect to '/u/...'
-}
-
-function reverse(url) {
- return new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
-
- if (url.pathname.startsWith("/p")) resolve(`https://instagram.com${url.pathname.replace("/p", "")}${url.search}`)
- if (url.pathname.startsWith("/u")) resolve(`https://instagram.com${url.pathname.replace("/u", "")}${url.search}`)
- resolve(`https://instagram.com${url.pathname}${url.search}`)
- })
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableInstagram && !disableOverride) {
- resolve()
- return
- }
- let protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...bibliogramLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...bibliogramI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...bibliogramTorRedirectsChecks, ...bibliogramTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = bibliogramNormalRedirectsChecks.indexOf(instance)
- if (a > -1) bibliogramNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set({
- disableInstagram: false,
- instagramRedirects: redirects,
-
- bibliogramNormalRedirectsChecks,
- bibliogramNormalCustomRedirects: [],
-
- bibliogramTorRedirectsChecks: [...redirects.bibliogram.tor],
- bibliogramTorCustomRedirects: [],
-
- bibliogramI2pRedirectsChecks: [...redirects.bibliogram.i2p],
- bibliogramI2pCustomRedirects: [],
-
- bibliogramLokiRedirectsChecks: [...redirects.bibliogram.loki],
- bibliogramLokiCustomRedirects: [],
- })
- resolve()
- })
- })
- })
-}
-
-export default {
- setRedirects,
- initBibliogramPreferences,
- reverse,
- redirect,
- initDefaults,
- switchInstance,
-}
diff --git a/src/assets/javascripts/lbry.js b/src/assets/javascripts/lbry.js
deleted file mode 100644
index 698517a..0000000
--- a/src/assets/javascripts/lbry.js
+++ /dev/null
@@ -1,223 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = [/^https?:\/{2}odysee\.com/]
-
-const frontends = new Array("librarian")
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.librarian = val
- librarianNormalRedirectsChecks = [...redirects.librarian.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = librarianNormalRedirectsChecks.indexOf(instance)
- if (a > -1) librarianNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- lbryTargetsRedirects: redirects,
- librarianNormalRedirectsChecks,
- librarianTorRedirectsChecks: [...redirects.librarian.tor],
- librarianI2pRedirectsChecks: [...redirects.librarian.i2p],
- librarianLokiRedirectsChecks: [...redirects.librarian.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableLbryTargets,
- lbryFrontend,
- protocol,
- protocolFallback,
- lbryTargetsRedirects,
- lbryRedirectType,
- librarianNormalRedirectsChecks,
- librarianNormalCustomRedirects,
- librarianTorRedirectsChecks,
- librarianTorCustomRedirects,
- librarianI2pRedirectsChecks,
- librarianI2pCustomRedirects,
- librarianLokiCustomRedirects
-
-function init() {
- return new Promise(resolve => {
- browser.storage.local.get(
- [
- "disableLbryTargets",
- "lbryFrontend",
- "protocol",
- "protocolFallback",
- "lbryTargetsRedirects",
- "lbryRedirectType",
- "librarianNormalRedirectsChecks",
- "librarianNormalCustomRedirects",
- "librarianTorRedirectsChecks",
- "librarianTorCustomRedirects",
- "librarianI2pRedirectsChecks",
- "librarianI2pCustomRedirects",
- "librarianLokiCustomRedirects",
- ],
- r => {
- disableLbryTargets = r.disableLbryTargets
- lbryFrontend = r.lbryFrontend
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- lbryTargetsRedirects = r.lbryTargetsRedirects
- lbryRedirectType = r.lbryRedirectType
- librarianNormalRedirectsChecks = r.librarianNormalRedirectsChecks
- librarianNormalCustomRedirects = r.librarianNormalCustomRedirects
- librarianTorRedirectsChecks = r.librarianTorRedirectsChecks
- librarianTorCustomRedirects = r.librarianTorCustomRedirects
- librarianI2pRedirectsChecks = r.librarianI2pRedirectsChecks
- librarianI2pCustomRedirects = r.librarianI2pCustomRedirects
- librarianLokiCustomRedirects = r.librarianLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-init()
-browser.storage.onChanged.addListener(init)
-
-function all() {
- return [...redirects.librarian.normal, ...redirects.librarian.tor, ...librarianNormalCustomRedirects, ...librarianTorCustomRedirects, ...librarianI2pCustomRedirects, ...librarianLokiCustomRedirects]
-}
-
-function getInstancesList() {
- let tmpList = []
- switch (protocol) {
- case "loki":
- tmpList = [...librarianLokiCustomRedirects]
- break
- case "i2p":
- tmpList = [...librarianI2pRedirectsChecks, ...librarianI2pCustomRedirects]
- break
- case "tor":
- tmpList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects]
- }
- if ((tmpList.length === 0 && protocolFallback) || protocol == "normal") {
- tmpList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects]
- }
- return tmpList
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableLbryTargets && !disableOverride) {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...librarianLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...librarianI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableLbryTargets && !disableOverride) return
- if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return
- if (!targets.some(rx => rx.test(url.href))) return
- if (type == "sub_frame" && lbryRedirectType == "main_frame") return
-
- const instancesList = getInstancesList()
- switch (type) {
- case "main_frame":
- switch (lbryFrontend) {
- case "librarian":
- if (instancesList.length === 0) return
- const randomInstance = utils.getRandomInstance(instancesList)
- return `${randomInstance}${url.pathname}${url.search}`
- case "lbryDesktop":
- if (type == "main_frame") {
- return url.href.replace(/^https?:\/{2}odysee\.com\//, "lbry://").replace(/:(?=[a-zA-Z0-9])/g, "#")
- }
- }
- case "sub_frame":
- if (instancesList.length === 0) return
- const randomInstance = utils.getRandomInstance(instancesList)
- return `${randomInstance}${url.pathname}${url.search}`.replace(/\/(?=[a-f0-9]{40})/, ":")
- }
-}
-
-function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- librarianNormalRedirectsChecks = [...redirects.librarian.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = librarianNormalRedirectsChecks.indexOf(instance)
- if (a > -1) librarianNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableLbryTargets: true,
- lbryFrontend: "librarian",
- lbryTargetsRedirects: redirects,
- lbryRedirectType: "both",
-
- librarianNormalRedirectsChecks,
- librarianNormalCustomRedirects: [],
-
- librarianTorRedirectsChecks: [...redirects.librarian.tor],
- librarianTorCustomRedirects: [],
-
- librarianI2pRedirectsChecks: [...redirects.librarian.i2p],
- librarianI2pCustomRedirects: [],
-
- librarianLokiRedirectsChecks: [...redirects.librarian.loki],
- librarianLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- switchInstance,
- redirect,
- initDefaults,
-}
diff --git a/src/assets/javascripts/maps.js b/src/assets/javascripts/maps.js
deleted file mode 100644
index 6911c9b..0000000
--- a/src/assets/javascripts/maps.js
+++ /dev/null
@@ -1,309 +0,0 @@
-"use strict"
-
-window.browser = window.browser || window.chrome
-import utils from "./utils.js"
-
-const targets = /^https?:\/{2}(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/
-
-const frontends = new Array("facil")
-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]] = []
- }
-}
-
-redirects.osm = {}
-redirects.osm.normal = ["https://www.openstreetmap.org"]
-
-function setRedirects(val) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.facil = val
- facilNormalRedirectsChecks = [...redirects.facil.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = facilNormalRedirectsChecks.indexOf(instance)
- if (a > -1) facilNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- mapsRedirects: redirects,
- facilNormalRedirectsChecks,
- facilTorRedirectsChecks: [...redirects.facil.tor],
- facilI2pRedirectsChecks: [...redirects.facil.i2p],
- facilLokiRedirectsChecks: [...redirects.facil.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableMaps,
- mapsFrontend,
- protocol,
- protocolFallback,
- facilNormalRedirectsChecks,
- facilNormalCustomRedirects,
- facilTorRedirectsChecks,
- facilTorCustomRedirects,
- facilI2pRedirectsChecks,
- facilI2pCustomRedirects,
- facilLokiRedirectsChecks,
- facilLokiCustomRedirects
-
-function init() {
- browser.storage.local.get(
- [
- "disableMaps",
- "mapsFrontend",
- "protocol",
- "protocolFallback",
- "facilNormalRedirectsChecks",
- "facilNormalCustomRedirects",
- "facilTorRedirectsChecks",
- "facilTorCustomRedirects",
- "facilI2pRedirectsChecks",
- "facilI2pCustomRedirects",
- "facilLokiRedirectsChecks",
- "facilLokiCustomRedirects",
- ],
- r => {
- disableMaps = r.disableMaps
- mapsFrontend = r.mapsFrontend
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- facilNormalRedirectsChecks = r.facilNormalRedirectsChecks
- facilNormalCustomRedirects = r.facilNormalCustomRedirects
- facilTorRedirectsChecks = r.facilTorRedirectsChecks
- facilTorCustomRedirects = r.facilTorCustomRedirects
- facilI2pRedirectsChecks = r.facilI2pRedirectsChecks
- facilI2pCustomRedirects = r.facilI2pCustomRedirects
- facilLokiRedirectsChecks = r.facilLokiRedirectsChecks
- facilLokiCustomRedirects = r.facilLokiCustomRedirects
- }
- )
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function redirect(url, initiator) {
- if (disableMaps) return
- if (initiator && initiator.host === "earth.google.com") return
- if (!url.href.match(targets)) return
- const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/
- const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/
- const placeRegex = /\/place\/(.*)\//
- const travelModes = {
- driving: "fossgis_osrm_car",
- walking: "fossgis_osrm_foot",
- bicycling: "fossgis_osrm_bike",
- transit: "fossgis_osrm_car", // not implemented on OSM, default to car.
- }
- const travelModesFacil = {
- driving: "car",
- walking: "pedestrian",
- bicycling: "bicycle",
- transit: "car", // not implemented on Facil, default to car.
- }
- const osmLayers = {
- none: "S",
- transit: "T",
- traffic: "S", // not implemented on OSM, default to standard.
- bicycling: "C",
- }
- function addressToLatLng(address) {
- const xmlhttp = new XMLHttpRequest()
- xmlhttp.open("GET", `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`, false)
- xmlhttp.send()
- if (xmlhttp.status === 200) {
- const json = JSON.parse(xmlhttp.responseText)[0]
- if (json) {
- console.log("json", json)
- return [`${json.lat},${json.lon}`, `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`]
- }
- }
- console.info("Error: Status is " + xmlhttp.status)
- }
-
- let instancesList
- switch (mapsFrontend) {
- case "osm":
- instancesList = [...redirects.osm.normal]
- break
- case "facil":
- switch (protocol) {
- case "loki":
- instancesList = [...facilLokiRedirectsChecks, ...facilLokiCustomRedirects]
- break
- case "i2p":
- instancesList = [...facilI2pRedirectsChecks, ...facilI2pCustomRedirects]
- break
- case "tor":
- instancesList = [...facilTorRedirectsChecks, ...facilTorCustomRedirects]
- }
- if ((instancesList == "" && protocolFallback) || protocol == "normal") {
- instancesList = [...facilNormalRedirectsChecks, ...facilNormalCustomRedirects]
- }
- }
- const randomInstance = utils.getRandomInstance(instancesList)
-
- let mapCentre = "#"
- let prefs = {}
-
- if (url.pathname.match(mapCentreRegex)) {
- // Set map centre if present
- var [, lat, lon, zoom] = url.pathname.match(mapCentreRegex)
- } else if (url.searchParams.has("center")) {
- var [lat, lon] = url.searchParams.get("center").split(",")
- var zoom = url.searchParams.get("zoom") ?? "17"
- }
-
- if (lat && lon && zoom) {
- if (mapsFrontend == "osm") mapCentre = `#map=${zoom}/${lat}/${lon}`
- if (mapsFrontend == "facil") mapCentre = `#${zoom}/${lat}/${lon}`
- }
-
- if (url.searchParams.get("layer")) prefs.layers = osmLayers[url.searchParams.get("layer")]
-
- if (url.pathname.includes("/embed")) {
- // Handle Google Maps Embed API
- // https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France
- console.log("embed life")
-
- let query = ""
- if (url.searchParams.has("q")) query = url.searchParams.get("q")
- else if (url.searchParams.has("query")) query = url.searchParams.has("query")
- else if (url.searchParams.has("pb"))
- try {
- query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1]
- } catch (error) {
- console.error(error)
- } // Unable to find map marker in URL.
-
- let [coords, boundingbox] = addressToLatLng(query)
- prefs.bbox = boundingbox
- prefs.marker = coords
- prefs.layer = "mapnik"
- let prefsEncoded = new URLSearchParams(prefs).toString()
- if (mapsFrontend == "osm") return `${randomInstance}/export/embed.html?${prefsEncoded}`
- if (mapsFrontend == "facil") return `${randomInstance}/#q=${query}`
- } else if (url.pathname.includes("/dir")) {
- // Handle Google Maps Directions
- // https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling
-
- let travMod = url.searchParams.get("travelmode")
- if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod]
-
- let orgVal = url.searchParams.get("origin")
- let destVal = url.searchParams.get("destination")
-
- let org
- addressToLatLng(orgVal, a => (org = a))
- let dest
- addressToLatLng(destVal, a => (dest = a))
- prefs.route = `${org};${dest}`
-
- let prefsEncoded = new URLSearchParams(prefs).toString()
- if (mapsFrontend == "osm") return `${randomInstance}/directions?${prefsEncoded}${mapCentre}`
- if (mapsFrontend == "facil") return `${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModesFacil[travMod]}`
- } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) {
- // Get marker from data attribute
- // https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948
- console.log("data life")
-
- let [, mlat, mlon] = url.pathname.match(dataLatLngRegex)
-
- if (mapsFrontend == "osm") return `${randomInstance}/search?query=${mlat}%2C${mlon}`
- if (mapsFrontend == "facil") return `${randomInstance}/#q=${mlat}%2C${mlon}`
- } else if (url.searchParams.has("ll")) {
- // Get marker from ll param
- // https://maps.google.com/?ll=38.882147,-76.99017
- console.log("ll life")
-
- const [mlat, mlon] = url.searchParams.get("ll").split(",")
-
- if (mapsFrontend == "osm") return `${randomInstance}/search?query=${mlat}%2C${mlon}`
- if (mapsFrontend == "facil") return `${randomInstance}/#q=${mlat}%2C${mlon}`
- } else if (url.searchParams.has("viewpoint")) {
- // Get marker from viewpoint param.
- // https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80
- console.log("viewpoint life")
-
- const [mlat, mlon] = url.searchParams.get("viewpoint").split(",")
-
- if (mapsFrontend == "osm") return `${randomInstance}/search?query=${mlat}%2C${mlon}`
- if (mapsFrontend == "facil") return `${randomInstance}/#q=${mlat}%2C${mlon}`
- } else {
- // Use query as search if present.
- console.log("normal life")
-
- let query
- if (url.searchParams.has("q")) query = url.searchParams.get("q")
- else if (url.searchParams.has("query")) query = url.searchParams.get("query")
- else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1]
-
- let prefsEncoded = new URLSearchParams(prefs).toString()
- if (query) {
- if (mapsFrontend == "osm") return `${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}`
- if (mapsFrontend == "facil") return `${randomInstance}/${mapCentre}/Mpnk/${query}`
- }
- }
-
- let prefsEncoded = new URLSearchParams(prefs).toString()
- console.log("mapCentre", mapCentre)
- console.log("prefs", prefs)
- console.log("prefsEncoded", prefsEncoded)
- if (mapsFrontend == "osm") return `${randomInstance}/${mapCentre}&${prefsEncoded}`
- if (mapsFrontend == "facil") return `${randomInstance}/${mapCentre}/Mpnk`
-}
-
-function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- facilNormalRedirectsChecks = [...redirects.facil.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = facilNormalRedirectsChecks.indexOf(instance)
- if (a > -1) facilNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableMaps: false,
- mapsFrontend: "osm",
- mapsRedirects: redirects,
- facilNormalRedirectsChecks,
- facilNormalCustomRedirects: [],
-
- facilTorRedirectsChecks: [...redirects.facil.tor],
- facilTorCustomRedirects: [],
-
- facilI2pRedirectsChecks: [...redirects.facil.i2p],
- facilI2pCustomRedirects: [],
-
- facilLokiRedirectsChecks: [...redirects.facil.loki],
- facilLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- redirect,
- initDefaults,
-}
diff --git a/src/assets/javascripts/medium.js b/src/assets/javascripts/medium.js
deleted file mode 100644
index 386d234..0000000
--- a/src/assets/javascripts/medium.js
+++ /dev/null
@@ -1,227 +0,0 @@
-window.browser = window.browser || window.chrome
-import utils from "./utils.js"
-
-const targets = [
- // /(?:.*\.)*(?
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.scribe = val
- scribeNormalRedirectsChecks = [...redirects.scribe.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = scribeNormalRedirectsChecks.indexOf(instance)
- if (a > -1) scribeNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- mediumRedirects: redirects,
- scribeNormalRedirectsChecks,
- scribeTorRedirectsChecks: [...redirects.scribe.tor],
- scribeI2pRedirectsChecks: [...redirects.scribe.i2p],
- scribeLokiRedirectsChecks: [...redirects.scribe.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableMedium,
- mediumRedirects,
- scribeNormalRedirectsChecks,
- scribeNormalCustomRedirects,
- scribeTorRedirectsChecks,
- scribeTorCustomRedirects,
- scribeI2pCustomRedirects,
- scribeLokiCustomRedirects,
- protocol,
- protocolFallback
-
-function init() {
- return new Promise(resolve => {
- browser.storage.local.get(
- [
- "disableMedium",
- "mediumRedirects",
- "scribeNormalRedirectsChecks",
- "scribeNormalCustomRedirects",
- "scribeTorRedirectsChecks",
- "scribeTorCustomRedirects",
- "scribeI2pCustomRedirects",
- "scribeLokiCustomRedirects",
- "protocol",
- "protocolFallback",
- ],
- r => {
- disableMedium = r.disableMedium
- mediumRedirects = r.mediumRedirects
- scribeNormalRedirectsChecks = r.scribeNormalRedirectsChecks
- scribeNormalCustomRedirects = r.scribeNormalCustomRedirects
- scribeTorRedirectsChecks = r.scribeTorRedirectsChecks
- scribeTorCustomRedirects = r.scribeTorCustomRedirects
- scribeI2pCustomRedirects = r.scribeI2pCustomRedirects
- scribeLokiCustomRedirects = r.scribeLokiCustomRedirects
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableMedium && !disableOverride) return
- if (url.pathname == "/" && !disableOverride) return
- if (type != "main_frame" && "sub_frame" && "xmlhttprequest" && "other") return
- if (
- initiator &&
- [...mediumRedirects.scribe.normal, ...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 (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}`
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableMedium && !disableOverride) {
- resolve()
- return
- }
- let protocolHost = utils.protocolHost(url)
- const all = [
- ...mediumRedirects.scribe.tor,
- ...mediumRedirects.scribe.normal,
-
- ...scribeNormalCustomRedirects,
- ...scribeTorCustomRedirects,
- ...scribeI2pCustomRedirects,
- ...scribeLokiCustomRedirects,
- ]
- if (!all.includes(protocolHost)) {
- resolve()
- 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]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- scribeNormalRedirectsChecks = [...redirects.scribe.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = scribeNormalRedirectsChecks.indexOf(instance)
- if (a > -1) scribeNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableMedium: false,
- mediumRedirects: redirects,
-
- scribeNormalRedirectsChecks,
- scribeNormalCustomRedirects: [],
-
- scribeTorRedirectsChecks: [...redirects.scribe.tor],
- scribeTorCustomRedirects: [],
-
- scribeI2pRedirectsChecks: [...redirects.scribe.i2p],
- scribeI2pCustomRedirects: [],
-
- scribeLokiRedirectsChecks: [...redirects.scribe.loki],
- scribeLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- redirect,
- switchInstance,
- initDefaults,
-}
diff --git a/src/assets/javascripts/peertube.js b/src/assets/javascripts/peertube.js
deleted file mode 100644
index e1ff406..0000000
--- a/src/assets/javascripts/peertube.js
+++ /dev/null
@@ -1,209 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const frontends = new Array("simpleertube")
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.simpleertube = val
- simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = simpleertubeNormalRedirectsChecks.indexOf(instance)
- if (a > -1) simpleertubeNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- peertubeRedirects: redirects,
- simpleertubeNormalRedirectsChecks,
- simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor],
- simpleertubeI2pRedirectsChecks: [...redirects.simpleertube.i2p],
- simpleertubeLokiRedirectsChecks: [...redirects.simpleertube.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disablePeertubeTargets,
- peertubeRedirects,
- simpleertubeNormalRedirectsChecks,
- simpleertubeNormalCustomRedirects,
- simpleertubeTorRedirectsChecks,
- simpleertubeTorCustomRedirects,
- simpleertubeI2pRedirectsChecks,
- simpleertubeI2pCustomRedirects,
- simpleertubeLokiRedirectsChecks,
- simpleertubeLokiCustomRedirects,
- peerTubeTargets,
- protocol,
- protocolFallback
-
-function init() {
- return new Promise(resolve => {
- browser.storage.local.get(
- [
- "disablePeertubeTargets",
- "peertubeRedirects",
- "simpleertubeNormalRedirectsChecks",
- "simpleertubeNormalCustomRedirects",
- "simpleertubeTorRedirectsChecks",
- "simpleertubeTorCustomRedirects",
- "simpleertubeI2pRedirectsChecks",
- "simpleertubeI2pCustomRedirects",
- "simpleertubeLokiRedirectsChecks",
- "simpleertubeLokiCustomRedirects",
- "peerTubeTargets",
- "protocol",
- "protocolFallback",
- ],
- r => {
- disablePeertubeTargets = r.disablePeertubeTargets
- peertubeRedirects = r.peertubeRedirects
- simpleertubeNormalRedirectsChecks = r.simpleertubeNormalRedirectsChecks
- simpleertubeNormalCustomRedirects = r.simpleertubeNormalCustomRedirects
- simpleertubeTorRedirectsChecks = r.simpleertubeTorRedirectsChecks
- simpleertubeTorCustomRedirects = r.simpleertubeTorCustomRedirects
- simpleertubeI2pRedirectsChecks = r.simpleertubeI2pRedirectsChecks
- simpleertubeI2pCustomRedirects = r.simpleertubeI2pCustomRedirects
- simpleertubeLokiRedirectsChecks = r.simpleertubeLokiRedirectsChecks
- simpleertubeLokiCustomRedirects = r.simpleertubeLokiCustomRedirects
- peerTubeTargets = r.peerTubeTargets
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function all() {
- return [
- ...simpleertubeNormalRedirectsChecks,
- ...simpleertubeTorRedirectsChecks,
- ...simpleertubeI2pRedirectsChecks,
- ...simpleertubeLokiRedirectsChecks,
- ...simpleertubeNormalCustomRedirects,
- ...simpleertubeTorCustomRedirects,
- ...simpleertubeI2pCustomRedirects,
- ...simpleertubeLokiCustomRedirects,
- ]
-}
-
-function redirect(url, type, initiator, disableOverride) {
- if (disablePeertubeTargets && !disableOverride) return
- if (initiator && (all().includes(initiator.origin) || peerTubeTargets.includes(initiator.host))) return
- let protocolHost = utils.protocolHost(url)
- if (!peerTubeTargets.includes(protocolHost)) return
- if (type != "main_frame") return
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...simpleertubeLokiRedirectsChecks, ...simpleertubeLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...simpleertubeI2pRedirectsChecks, ...simpleertubeI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]
- }
- if (instancesList.length === 0) {
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- if (url.host == "search.joinpeertube.org" || url.host == "sepiasearch.org") return randomInstance
- return `${randomInstance}/${url.host}${url.pathname}${url.search}`
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disablePeertubeTargets && !disableOverride) {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...simpleertubeLokiRedirectsChecks, ...simpleertubeLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...simpleertubeI2pRedirectsChecks, ...simpleertubeI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = simpleertubeNormalRedirectsChecks.indexOf(instance)
- if (a > -1) simpleertubeNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- peerTubeTargets: ["https://search.joinpeertube.org", ...dataJson.peertube],
- disablePeertubeTargets: true,
- peertubeRedirects: redirects,
-
- simpleertubeNormalRedirectsChecks,
- simpleertubeNormalCustomRedirects: [],
-
- simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor],
- simpleertubeTorCustomRedirects: [],
-
- simpleertubeI2pRedirectsChecks: [...redirects.simpleertube.i2p],
- simpleertubeI2pCustomRedirects: [],
-
- simpleertubeLokiRedirectsChecks: [...redirects.simpleertube.loki],
- simpleertubeLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- switchInstance,
- redirect,
- initDefaults,
-}
diff --git a/src/assets/javascripts/quora.js b/src/assets/javascripts/quora.js
deleted file mode 100644
index 4473c3d..0000000
--- a/src/assets/javascripts/quora.js
+++ /dev/null
@@ -1,205 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = [/^https?:\/{2}(www\.|)quora\.com.*/]
-
-let redirects = {}
-
-const frontends = new Array("quetre")
-const protocols = new Array("normal", "tor", "i2p", "loki")
-
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.quetre = val
- quetreNormalRedirectsChecks = [...redirects.quetre.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = quetreNormalRedirectsChecks.indexOf(instance)
- if (a > -1) quetreNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- quoraRedirects: redirects,
- quetreNormalRedirectsChecks,
- quetreTorRedirectsChecks: [...redirects.quetre.tor],
- quetreI2pRedirectsChecks: [...redirects.quetre.i2p],
- quetreLokiRedirectsChecks: [...redirects.quetre.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableQuora,
- protocol,
- protocolFallback,
- quoraRedirects,
- quetreNormalRedirectsChecks,
- quetreNormalCustomRedirects,
- quetreTorRedirectsChecks,
- quetreTorCustomRedirects,
- quetreI2pCustomRedirects,
- quetreLokiCustomRedirects
-
-function init() {
- return new Promise(async resolve => {
- browser.storage.local.get(
- [
- "disableQuora",
- "protocol",
- "protocolFallback",
- "quoraRedirects",
- "quetreNormalRedirectsChecks",
- "quetreNormalCustomRedirects",
- "quetreTorRedirectsChecks",
- "quetreTorCustomRedirects",
- "quetreI2pCustomRedirects",
- "quetreLokiCustomRedirects",
- ],
- r => {
- disableQuora = r.disableQuora
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- quoraRedirects = r.quoraRedirects
- quetreNormalRedirectsChecks = r.quetreNormalRedirectsChecks
- quetreNormalCustomRedirects = r.quetreNormalCustomRedirects
- quetreTorRedirectsChecks = r.quetreTorRedirectsChecks
- quetreTorCustomRedirects = r.quetreTorCustomRedirects
- quetreI2pCustomRedirects = r.quetreI2pCustomRedirects
- quetreLokiCustomRedirects = r.quetreLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableQuora && !disableOverride) return
- if (url.pathname == "/" && !disableOverride) return
- if (type != "main_frame") return
- const all = [...quoraRedirects.quetre.normal, ...quetreNormalCustomRedirects]
- if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return
- if (!targets.some(rx => rx.test(url.href))) return
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...quetreLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...quetreI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...quetreTorRedirectsChecks, ...quetreTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...quetreNormalRedirectsChecks, ...quetreNormalCustomRedirects]
- }
- if (instancesList.length === 0) return
-
- const randomInstance = utils.getRandomInstance(instancesList)
- return `${randomInstance}${url.pathname}`
-}
-
-function reverse(url) {
- return new Promise(async resolve => {
- await init()
- let protocolHost = utils.protocolHost(url)
- const all = [...quoraRedirects.quetre.normal, ...quoraRedirects.quetre.tor, ...quetreNormalCustomRedirects, ...quetreTorCustomRedirects, ...quetreI2pCustomRedirects, ...quetreLokiCustomRedirects]
- if (!all.includes(protocolHost)) {
- resolve()
- return
- }
-
- resolve(`https://quora.com${url.pathname}${url.search}`)
- })
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableQuora && !disableOverride) {
- resolve()
- return
- }
- let protocolHost = utils.protocolHost(url)
- const all = [...quoraRedirects.quetre.tor, ...quoraRedirects.quetre.normal, ...quetreNormalCustomRedirects, ...quetreTorCustomRedirects, ...quetreI2pCustomRedirects, ...quetreLokiCustomRedirects]
- if (!all.includes(protocolHost)) {
- resolve()
- return
- }
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...quetreLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...quetreI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...quetreTorRedirectsChecks, ...quetreTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...quetreNormalRedirectsChecks, ...quetreNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- quetreNormalRedirectsChecks = [...redirects.quetre.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = quetreNormalRedirectsChecks.indexOf(instance)
- if (a > -1) quetreNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableQuora: false,
-
- quoraRedirects: redirects,
-
- quetreNormalRedirectsChecks,
- quetreNormalCustomRedirects: [],
-
- quetreTorRedirectsChecks: [...redirects.quetre.tor],
- quetreTorCustomRedirects: [],
-
- quetreI2pRedirectsChecks: [...redirects.quetre.i2p],
- quetreI2pCustomRedirects: [],
-
- quetreLokiRedirectsChecks: [...redirects.quetre.loki],
- quetreLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
-
- redirect,
- reverse,
- switchInstance,
-
- initDefaults,
-}
diff --git a/src/assets/javascripts/reddit.js b/src/assets/javascripts/reddit.js
deleted file mode 100644
index 209ee7e..0000000
--- a/src/assets/javascripts/reddit.js
+++ /dev/null
@@ -1,402 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = [/^https?:\/{2}(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, /^https?:\/{2}(i\.|preview\.)redd\.it/]
-let redirects = {}
-
-const frontends = new Array("libreddit", "teddit")
-const protocols = new Array("normal", "tor", "i2p", "loki")
-
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects = val
- libredditNormalRedirectsChecks = [...redirects.libreddit.normal]
- tedditNormalRedirectsChecks = [...redirects.teddit.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = libredditNormalRedirectsChecks.indexOf(instance)
- if (a > -1) libredditNormalRedirectsChecks.splice(a, 1)
-
- const b = tedditNormalRedirectsChecks.indexOf(instance)
- if (b > -1) tedditNormalRedirectsChecks.splice(b, 1)
- }
- browser.storage.local.set(
- {
- redditRedirects: redirects,
- libredditNormalRedirectsChecks,
- libredditTorRedirectsChecks: [...redirects.libreddit.tor],
- libredditI2pRedirectsChecks: [...redirects.libreddit.i2p],
- libredditLokiRedirectsChecks: [...redirects.libreddit.loki],
- tedditNormalRedirectsChecks,
- tedditTorRedirectsChecks: [...redirects.teddit.tor],
- tedditI2pRedirectsChecks: [...redirects.teddit.i2p],
- tedditLokiRedirectsChecks: [...redirects.teddit.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableReddit,
- redditFrontend,
- redditRedirects,
- protocol,
- protocolFallback,
- libredditNormalRedirectsChecks,
- libredditNormalCustomRedirects,
- libredditTorRedirectsChecks,
- libredditTorCustomRedirects,
- libredditI2pCustomRedirects,
- libredditLokiCustomRedirects,
- tedditNormalRedirectsChecks,
- tedditNormalCustomRedirects,
- tedditTorRedirectsChecks,
- tedditTorCustomRedirects,
- tedditI2pCustomRedirects,
- tedditLokiCustomRedirects
-
-function init() {
- return new Promise(resolve => {
- browser.storage.local.get(
- [
- "disableReddit",
- "redditFrontend",
- "redditRedirects",
- "protocol",
- "protocolFallback",
- "libredditNormalRedirectsChecks",
- "libredditNormalCustomRedirects",
- "libredditTorRedirectsChecks",
- "libredditTorCustomRedirects",
- "libredditI2pCustomRedirects",
- "libredditLokiCustomRedirects",
- "tedditNormalRedirectsChecks",
- "tedditNormalCustomRedirects",
- "tedditTorRedirectsChecks",
- "tedditTorCustomRedirects",
- "tedditI2pCustomRedirects",
- "tedditLokiCustomRedirects",
- ],
- r => {
- disableReddit = r.disableReddit
- redditFrontend = r.redditFrontend
- redditRedirects = r.redditRedirects
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- libredditNormalRedirectsChecks = r.libredditNormalRedirectsChecks
- libredditNormalCustomRedirects = r.libredditNormalCustomRedirects
- libredditTorRedirectsChecks = r.libredditTorRedirectsChecks
- libredditTorCustomRedirects = r.libredditTorCustomRedirects
- libredditI2pCustomRedirects = r.libredditI2pCustomRedirects
- libredditLokiCustomRedirects = r.libredditLokiCustomRedirects
- tedditNormalRedirectsChecks = r.tedditNormalRedirectsChecks
- tedditNormalCustomRedirects = r.tedditNormalCustomRedirects
- tedditTorRedirectsChecks = r.tedditTorRedirectsChecks
- tedditTorCustomRedirects = r.tedditTorCustomRedirects
- tedditI2pCustomRedirects = r.tedditI2pCustomRedirects
- tedditLokiCustomRedirects = r.tedditLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function initLibredditCookies(test, from) {
- return new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(from)
- if (
- ![
- ...libredditNormalRedirectsChecks,
- ...libredditTorRedirectsChecks,
- ...libredditNormalCustomRedirects,
- ...libredditTorCustomRedirects,
- ...libredditI2pCustomRedirects,
- ...libredditLokiCustomRedirects,
- ].includes(protocolHost)
- ) {
- resolve()
- return
- }
-
- if (!test) {
- let checkedInstances = []
- if (protocol == "loki") checkedInstances = [...libredditLokiCustomRedirects]
- else if (protocol == "i2p") checkedInstances = [...libredditI2pCustomRedirects]
- else if (protocol == "tor") checkedInstances = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]
- if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]
- }
- await utils.copyCookie("libreddit", from, checkedInstances, "theme")
- await utils.copyCookie("libreddit", from, checkedInstances, "front_page")
- await utils.copyCookie("libreddit", from, checkedInstances, "layout")
- await utils.copyCookie("libreddit", from, checkedInstances, "wide")
- await utils.copyCookie("libreddit", from, checkedInstances, "post_sort")
- await utils.copyCookie("libreddit", from, checkedInstances, "comment_sort")
- await utils.copyCookie("libreddit", from, checkedInstances, "show_nsfw")
- await utils.copyCookie("libreddit", from, checkedInstances, "autoplay_videos")
- await utils.copyCookie("libreddit", from, checkedInstances, "use_hls")
- await utils.copyCookie("libreddit", from, checkedInstances, "hide_hls_notification")
- await utils.copyCookie("libreddit", from, checkedInstances, "subscriptions")
- await utils.copyCookie("libreddit", from, checkedInstances, "filters")
- }
- resolve(true)
- })
-}
-
-function initTedditCookies(test, from) {
- return new Promise(async resolve => {
- await init()
- let protocolHost = utils.protocolHost(from)
- if (
- ![...tedditNormalRedirectsChecks, ...tedditTorRedirectsChecks, ...tedditNormalCustomRedirects, ...tedditTorCustomRedirects, ...tedditI2pCustomRedirects, ...tedditI2pCustomRedirects].includes(
- protocolHost
- )
- )
- resolve()
-
- if (!test) {
- let checkedInstances = []
- if (protocol == "loki") checkedInstances = [...tedditLokiCustomRedirects]
- else if (protocol == "i2p") checkedInstances = [...tedditI2pCustomRedirects]
- else if (protocol == "tor") checkedInstances = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]
- if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]
- }
- await utils.copyCookie("teddit", from, checkedInstances, "collapse_child_comments")
- await utils.copyCookie("teddit", from, checkedInstances, "domain_instagram")
- await utils.copyCookie("teddit", from, checkedInstances, "domain_twitter")
- await utils.copyCookie("teddit", from, checkedInstances, "domain_youtube")
- await utils.copyCookie("teddit", from, checkedInstances, "flairs")
- await utils.copyCookie("teddit", from, checkedInstances, "highlight_controversial")
- await utils.copyCookie("teddit", from, checkedInstances, "nsfw_enabled")
- await utils.copyCookie("teddit", from, checkedInstances, "post_media_max_height")
- await utils.copyCookie("teddit", from, checkedInstances, "show_upvoted_percentage")
- await utils.copyCookie("teddit", from, checkedInstances, "show_upvotes")
- await utils.copyCookie("teddit", from, checkedInstances, "theme")
- await utils.copyCookie("teddit", from, checkedInstances, "videos_muted")
- }
- resolve(true)
- })
-}
-
-function all() {
- return [
- ...redditRedirects.libreddit.normal,
- ...redditRedirects.libreddit.tor,
- ...redditRedirects.teddit.normal,
- ...redditRedirects.teddit.tor,
- ...libredditNormalCustomRedirects,
- ...libredditTorCustomRedirects,
- ...libredditI2pCustomRedirects,
- ...libredditLokiCustomRedirects,
- ...tedditNormalCustomRedirects,
- ...tedditTorCustomRedirects,
- ...tedditI2pCustomRedirects,
- ...tedditLokiCustomRedirects,
- ]
-}
-
-// https://libreddit.exonip.de/vid/1mq8d0ma3yk81/720.mp4
-// https://libreddit.exonip.de/img/4v3t1vgvrzk81.png
-
-// https://teddit.net/vids/1mq8d0ma3yk81.mp4
-// https://teddit.net/pics/w:null_4v3t1vgvrzk81.png
-
-// redd.it/t5379n
-// https://v.redd.it/z08avb339n801/DASH_1_2_M
-// https://i.redd.it/bfkhs659tzk81.jpg
-function redirect(url, type, initiator, disableOverride) {
- if (disableReddit && !disableOverride) return
- if (!targets.some(rx => rx.test(url.href))) return
- if (initiator && all().includes(initiator.origin)) return "BYPASSTAB"
- if (!["main_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return
- const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/
- if (url.pathname.match(bypassPaths)) return
-
- let libredditInstancesList = []
- let tedditInstancesList = []
-
- if (protocol == "loki") {
- libredditInstancesList = [...libredditLokiCustomRedirects]
- tedditInstancesList = [...tedditLokiCustomRedirects]
- } else if (protocol == "i2p") {
- libredditInstancesList = [...libredditI2pCustomRedirects]
- tedditInstancesList = [...tedditI2pCustomRedirects]
- } else if (protocol == "tor") {
- libredditInstancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]
- tedditInstancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]
- }
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- libredditInstancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]
- tedditInstancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]
- }
-
- if (url.host === "i.redd.it") {
- if (redditFrontend == "teddit") {
- if (tedditInstancesList.length === 0) return
- let tedditRandomInstance = utils.getRandomInstance(tedditInstancesList)
- return `${tedditRandomInstance}/pics/w:null_${url.pathname.substring(1)}${url.search}`
- }
- if (redditFrontend == "libreddit") {
- if (libredditInstancesList.length === 0) return
- let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList)
- return `${libredditRandomInstance}/img${url.pathname}${url.search}`
- }
- } else if (url.host === "redd.it") {
- if (redditFrontend == "libreddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) {
- if (libredditInstancesList.length === 0) return
- let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList)
- // https://redd.it/foo => https://libredd.it/comments/foo
- return `${libredditRandomInstance}/comments${url.pathname}${url.search}`
- }
- if (redditFrontend == "teddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) {
- if (tedditInstancesList.length === 0) return
- let tedditRandomInstance = utils.getRandomInstance(tedditInstancesList)
- // https://redd.it/foo => https://teddit.net/comments/foo
- return `${tedditRandomInstance}/comments${url.pathname}${url.search}`
- }
- } else if (url.host === "preview.redd.it") {
- if (redditFrontend == "teddit") return
- if (redditFrontend == "libreddit") {
- if (libredditInstancesList.length === 0) return
- const libredditRandomInstance = utils.getRandomInstance(libredditInstancesList)
- return `${libredditRandomInstance}/preview/pre${url.pathname}${url.search}`
- }
- }
-
- let randomInstance
- if (redditFrontend == "libreddit") {
- if (libredditInstancesList.length === 0) return
- randomInstance = utils.getRandomInstance(libredditInstancesList)
- }
- if (redditFrontend == "teddit") {
- if (tedditInstancesList.length === 0) return
- randomInstance = utils.getRandomInstance(tedditInstancesList)
- }
- return `${randomInstance}${url.pathname}${url.search}`
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableReddit && !disableOverride) {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
- let instancesList = []
- if (redditFrontend == "libreddit") {
- if (protocol == "loki") instancesList = [...libredditLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...libredditI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]
- }
- if ([...redditRedirects.teddit.normal, ...redditRedirects.teddit.tor].includes(protocolHost)) {
- url.pathname = url.pathname.replace("/pics/w:null_", "/img/")
- }
- } else if (redditFrontend == "teddit") {
- if (protocol == "loki") instancesList = [...tedditLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...tedditI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]
- }
- if ([...redditRedirects.libreddit.normal, ...redditRedirects.libreddit.tor].includes(protocolHost)) {
- url.pathname = url.pathname.replace("/img/", "/pics/w:null_")
- }
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (const frontend of frontends) redirects[frontend] = dataJson[frontend]
-
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- libredditNormalRedirectsChecks = [...redirects.libreddit.normal]
- tedditNormalRedirectsChecks = [...redirects.teddit.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = libredditNormalRedirectsChecks.indexOf(instance)
- if (a > -1) libredditNormalRedirectsChecks.splice(a, 1)
-
- const b = tedditNormalRedirectsChecks.indexOf(instance)
- if (b > -1) tedditNormalRedirectsChecks.splice(b, 1)
- }
- browser.storage.local.set(
- {
- disableReddit: false,
- redditFrontend: "libreddit",
- redditRedirects: redirects,
-
- libredditNormalRedirectsChecks,
- libredditNormalCustomRedirects: [],
-
- libredditTorRedirectsChecks: [...redirects.libreddit.tor],
- libredditTorCustomRedirects: [],
-
- libredditI2pRedirectsChecks: [...redirects.libreddit.i2p],
- libredditI2pCustomRedirects: [],
-
- libredditLokiRedirectsChecks: [...redirects.libreddit.loki],
- libredditLokiCustomRedirects: [],
-
- tedditNormalRedirectsChecks,
- tedditNormalCustomRedirects: [],
-
- tedditTorRedirectsChecks: [...redirects.teddit.tor],
- tedditTorCustomRedirects: [],
-
- tedditI2pRedirectsChecks: [...redirects.teddit.i2p],
- tedditI2pCustomRedirects: [],
-
- tedditLokiRedirectsChecks: [...redirects.teddit.loki],
- tedditLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- initLibredditCookies,
- initTedditCookies,
-
- redirect,
- initDefaults,
- switchInstance,
-}
diff --git a/src/assets/javascripts/reuters.js b/src/assets/javascripts/reuters.js
deleted file mode 100644
index 16459b4..0000000
--- a/src/assets/javascripts/reuters.js
+++ /dev/null
@@ -1,155 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = [/^https?:\/{2}(www\.|)reuters\.com.*/]
-
-const frontends = new Array("neuters")
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.neuters = val
- neutersNormalRedirectsChecks = [...redirects.neuters.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = neutersNormalRedirectsChecks.indexOf(instance)
- if (a > -1) neutersNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- neutersRedirects: redirects,
- neutersNormalRedirectsChecks,
- neutersTorRedirectsChecks: [...redirects.neuters.tor],
- neutersI2pRedirectsChecks: [...redirects.neuters.i2p],
- neutersLokiRedirectsChecks: [...redirects.neuters.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableReuters,
- protocol,
- protocolFallback,
- reutersRedirects,
- neutersNormalRedirectsChecks,
- neutersNormalCustomRedirects,
- neutersTorRedirectsChecks,
- neutersTorCustomRedirects,
- neutersI2pCustomRedirects,
- neutersLokiCustomRedirects
-
-function init() {
- return new Promise(async resolve => {
- browser.storage.local.get(
- [
- "disableReuters",
- "protocol",
- "protocolFallback",
- "reutersRedirects",
- "neutersNormalRedirectsChecks",
- "neutersNormalCustomRedirects",
- "neutersTorRedirectsChecks",
- "neutersTorCustomRedirects",
- "neutersI2pCustomRedirects",
- "neutersLokiCustomRedirects",
- ],
- r => {
- disableReuters = r.disableReuters
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- reutersRedirects = r.reutersRedirects
- neutersNormalRedirectsChecks = r.neutersNormalRedirectsChecks
- neutersNormalCustomRedirects = r.neutersNormalCustomRedirects
- neutersTorRedirectsChecks = r.neutersTorRedirectsChecks
- neutersTorCustomRedirects = r.neutersTorCustomRedirects
- neutersI2pCustomRedirects = r.neutersI2pCustomRedirects
- neutersLokiCustomRedirects = r.neutersLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableReuters && !disableOverride) 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 (protocol == "loki") instancesList = [...neutersLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...neutersI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...neutersTorRedirectsChecks, ...neutersTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...neutersNormalRedirectsChecks, ...neutersNormalCustomRedirects]
- }
- 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(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- neutersNormalRedirectsChecks = [...redirects.neuters.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = neutersNormalRedirectsChecks.indexOf(instance)
- if (a > -1) neutersNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableReuters: true,
-
- reutersRedirects: redirects,
-
- neutersNormalRedirectsChecks,
- neutersNormalCustomRedirects: [],
-
- neutersTorRedirectsChecks: [...redirects.neuters.tor],
- neutersTorCustomRedirects: [],
-
- neutersI2pRedirectsChecks: [...redirects.neuters.i2p],
- neutersI2pCustomRedirects: [],
-
- neutersLokiRedirectsChecks: [...redirects.neuters.loki],
- neutersLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- redirect,
- initDefaults,
-}
diff --git a/src/assets/javascripts/search.js b/src/assets/javascripts/search.js
deleted file mode 100644
index 548e762..0000000
--- a/src/assets/javascripts/search.js
+++ /dev/null
@@ -1,581 +0,0 @@
-window.browser = window.browser || window.chrome
-
-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 = {}
-
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects = val
- searxNormalRedirectsChecks = [...redirects.searx.normal]
- searxngNormalRedirectsChecks = [...redirects.searxng.normal]
- whoogleNormalRedirectsChecks = [...redirects.whoogle.normal]
- librexNormalRedirectsChecks = [...redirects.librex.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = searxNormalRedirectsChecks.indexOf(instance)
- if (a > -1) searxNormalRedirectsChecks.splice(a, 1)
-
- const b = searxngNormalRedirectsChecks.indexOf(instance)
- if (b > -1) searxngNormalRedirectsChecks.splice(b, 1)
-
- 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,
- searxTorRedirectsChecks: [...redirects.searx.tor],
- searxI2pRedirectsChecks: [...redirects.searx.i2p],
- searxLokiRedirectsChecks: [...redirects.searx.loki],
- searxngNormalRedirectsChecks,
- searxngTorRedirectsChecks: [...redirects.searxng.tor],
- searxngI2pRedirectsChecks: [...redirects.searxng.i2p],
- searxngLokiRedirectsChecks: [...redirects.searxng.loki],
- whoogleNormalRedirectsChecks,
- whoogleTorRedirectsChecks: [...redirects.whoogle.tor],
- whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p],
- whoogleLokiRedirectsChecks: [...redirects.whoogle.loki],
- librexNormalRedirectsChecks,
- librexTorRedirectsChecks: [...redirects.librex.tor],
- librexI2pRedirectsChecks: [...redirects.librex.i2p],
- librexLokiRedirectsChecks: [...redirects.librex.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableSearch,
- searchFrontend,
- searchRedirects,
- 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
-
-function init() {
- return new Promise(async resolve => {
- browser.storage.local.get(
- [
- "disableSearch",
- "searchFrontend",
- "searchRedirects",
- "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
- 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()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function initSearxCookies(test, from) {
- return new Promise(async resolve => {
- await init()
- let protocolHost = utils.protocolHost(from)
- if (
- ![
- ...searxNormalRedirectsChecks,
- ...searxNormalCustomRedirects,
- ...searxTorRedirectsChecks,
- ...searxTorCustomRedirects,
- ...searxI2pRedirectsChecks,
- ...searxI2pCustomRedirects,
- ...searxLokiCustomRedirects,
- ].includes(protocolHost)
- ) {
- resolve()
- return
- }
-
- if (!test) {
- 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")
- await utils.copyCookie("searx", from, checkedInstances, "disabled_engines")
- await utils.copyCookie("searx", from, checkedInstances, "disabled_plugins")
- await utils.copyCookie("searx", from, checkedInstances, "doi_resolver")
- await utils.copyCookie("searx", from, checkedInstances, "enabled_engines")
- await utils.copyCookie("searx", from, checkedInstances, "enabled_plugins")
- await utils.copyCookie("searx", from, checkedInstances, "image_proxy")
- await utils.copyCookie("searx", from, checkedInstances, "language")
- await utils.copyCookie("searx", from, checkedInstances, "locale")
- await utils.copyCookie("searx", from, checkedInstances, "method")
- await utils.copyCookie("searx", from, checkedInstances, "oscar-style")
- await utils.copyCookie("searx", from, checkedInstances, "results_on_new_tab")
- await utils.copyCookie("searx", from, checkedInstances, "safesearch")
- await utils.copyCookie("searx", from, checkedInstances, "theme")
- await utils.copyCookie("searx", from, checkedInstances, "tokens")
- }
- resolve(true)
- })
-}
-
-function initSearxngCookies(test, from) {
- return new Promise(async resolve => {
- await init()
- let protocolHost = utils.protocolHost(from)
- if (
- ![
- ...searxngNormalRedirectsChecks,
- ...searxngNormalCustomRedirects,
- ...searxngTorRedirectsChecks,
- ...searxngTorCustomRedirects,
- ...searxngI2pRedirectsChecks,
- ...searxngI2pCustomRedirects,
- ...searxngLokiCustomRedirects,
- ].includes(protocolHost)
- ) {
- resolve()
- return
- }
-
- if (!test) {
- 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")
- await utils.copyCookie("searxng", from, checkedInstances, "disabled_plugins")
- await utils.copyCookie("searxng", from, checkedInstances, "doi_resolver")
- await utils.copyCookie("searxng", from, checkedInstances, "enabled_plugins")
- await utils.copyCookie("searxng", from, checkedInstances, "enabled_engines")
- await utils.copyCookie("searxng", from, checkedInstances, "image_proxy")
- await utils.copyCookie("searxng", from, checkedInstances, "infinite_scroll")
- await utils.copyCookie("searxng", from, checkedInstances, "language")
- await utils.copyCookie("searxng", from, checkedInstances, "locale")
- await utils.copyCookie("searxng", from, checkedInstances, "maintab")
- await utils.copyCookie("searxng", from, checkedInstances, "method")
- await utils.copyCookie("searxng", from, checkedInstances, "query_in_title")
- await utils.copyCookie("searxng", from, checkedInstances, "results_on_new_tab")
- await utils.copyCookie("searxng", from, checkedInstances, "safesearch")
- await utils.copyCookie("searxng", from, checkedInstances, "simple_style")
- await utils.copyCookie("searxng", from, checkedInstances, "theme")
- await utils.copyCookie("searxng", from, checkedInstances, "tokens")
- }
- resolve(true)
- })
-}
-
-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 redirect(url, disableOverride) {
- if (disableSearch && !disableOverride) return
- if (!targets.some(rx => rx.test(url.href))) return
- if (url.searchParams.has("tbm")) return
- if (url.hostname.includes("google") && !url.searchParams.has("q") && url.pathname != "/") return
- let randomInstance
- let path
- if (searchFrontend == "searx") {
- 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 (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 (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")) || (url.hostname.includes("yandex") && !url.searchParams.has("text"))) path = "/"
-
- let searchQuery = ""
- if ((url.hostname.includes("google") || url.hostname.includes("bing") || url.hostname.includes("search.libredirect.invalid")) && url.searchParams.has("q"))
- searchQuery = `?q=${encodeURIComponent(url.searchParams.get("q"))}`
- if (url.hostname.includes("yandex") && url.searchParams.has("text")) searchQuery = `?q=${url.searchParams.get("text")}`
-
- return `${randomInstance}${path}${searchQuery}`
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableSearch && !disableOverride) {
- resolve()
- return
- }
- let protocolHost = utils.protocolHost(url)
- if (
- ![
- ...searchRedirects.searx.normal,
- ...searchRedirects.searx.tor,
- ...searchRedirects.searx.i2p,
-
- ...searchRedirects.searxng.normal,
- ...searchRedirects.searxng.tor,
- ...searchRedirects.searxng.i2p,
-
- ...searchRedirects.whoogle.normal,
- ...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 (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 (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 (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
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
-
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- searxNormalRedirectsChecks = [...redirects.searx.normal]
- searxngNormalRedirectsChecks = [...redirects.searxng.normal]
- whoogleNormalRedirectsChecks = [...redirects.whoogle.normal]
- librexNormalRedirectsChecks = [...redirects.librex.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = searxNormalRedirectsChecks.indexOf(instance)
- if (a > -1) searxNormalRedirectsChecks.splice(a, 1)
-
- const b = searxngNormalRedirectsChecks.indexOf(instance)
- if (b > -1) searxngNormalRedirectsChecks.splice(b, 1)
-
- 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(
- {
- disableSearch: false,
- searchFrontend: "searxng",
- searchRedirects: redirects,
- searxngCustomSettings: false,
-
- whoogleNormalRedirectsChecks,
- whoogleNormalCustomRedirects: [],
-
- whoogleTorRedirectsChecks: [...redirects.whoogle.tor],
- whoogleTorCustomRedirects: [],
-
- whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p],
- whoogleI2pCustomRedirects: [],
-
- whoogleLokiRedirectsChecks: [...redirects.whoogle.loki],
- whoogleLokiCustomRedirects: [],
-
- searxNormalRedirectsChecks,
- searxNormalCustomRedirects: [],
-
- searxTorRedirectsChecks: [...redirects.searx.tor],
- searxTorCustomRedirects: [],
-
- searxI2pRedirectsChecks: [...redirects.searx.i2p],
- searxI2pCustomRedirects: [],
-
- searxLokiRedirectsChecks: [...redirects.searx.loki],
- searxLokiCustomRedirects: [],
-
- searxngNormalRedirectsChecks,
- searxngNormalCustomRedirects: [],
-
- searxngTorRedirectsChecks: [...redirects.searxng.tor],
- searxngTorCustomRedirects: [],
-
- searxngI2pRedirectsChecks: [...redirects.searxng.i2p],
- searxngI2pCustomRedirects: [],
-
- searxngLokiRedirectsChecks: [...redirects.searxng.loki],
- searxngLokiCustomRedirects: [],
-
- librexNormalRedirectsChecks,
- librexNormalCustomRedirects: [],
-
- librexTorRedirectsChecks: [...redirects.librex.tor],
- librexTorCustomRedirects: [],
-
- librexI2pRedirectsChecks: [...redirects.librex.i2p],
- librexI2pCustomRedirects: [],
-
- librexLokiRedirectsChecks: [...redirects.librex.loki],
- librexLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- initSearxCookies,
- initSearxngCookies,
- initLibrexCookies,
- redirect,
- initDefaults,
- switchInstance,
-}
diff --git a/src/assets/javascripts/sendTargets.js b/src/assets/javascripts/sendTargets.js
deleted file mode 100644
index a7b5f20..0000000
--- a/src/assets/javascripts/sendTargets.js
+++ /dev/null
@@ -1,200 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = [/^https?:\/{2}send\.libredirect\.invalid\/$/, /^ https ?: \/\/send\.firefox\.com\/$/, /^https?:\/{2}sendfiles\.online\/$/]
-
-const frontends = new Array("send")
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.send = val
- sendNormalRedirectsChecks = [...redirects.send.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = sendNormalRedirectsChecks.indexOf(instance)
- if (a > -1) sendNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- sendTargetsRedirects: redirects,
- sendNormalRedirectsChecks,
- sendTorRedirectsChecks: [...redirects.send.tor],
- sendI2pRedirectsChecks: [...redirects.send.i2p],
- sendLokiRedirectsChecks: [...redirects.send.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableSendTarget,
- sendTargetsRedirects,
- sendNormalRedirectsChecks,
- sendNormalCustomRedirects,
- sendTorRedirectsChecks,
- sendTorCustomRedirects,
- sendI2pCustomRedirects,
- sendLokiCustomRedirects,
- protocol,
- protocolFallback
-
-function init() {
- return new Promise(resolve => {
- browser.storage.local.get(
- [
- "disableSendTarget",
- "sendTargetsRedirects",
- "protocol",
- "protocolFallback",
- "sendNormalRedirectsChecks",
- "sendNormalCustomRedirects",
- "sendTorRedirectsChecks",
- "sendTorCustomRedirects",
- "sendI2pCustomRedirects",
- "sendLokiCustomRedirects",
- ],
- r => {
- disableSendTarget = r.disableSendTarget
- sendTargetsRedirects = r.sendTargetsRedirects
- sendNormalRedirectsChecks = r.sendNormalRedirectsChecks
- sendNormalCustomRedirects = r.sendNormalCustomRedirects
- sendTorRedirectsChecks = r.sendTorRedirectsChecks
- sendTorCustomRedirects = r.sendTorCustomRedirects
- sendI2pCustomRedirects = r.sendI2pCustomRedirects
- sendLokiCustomRedirects = r.sendLokiCustomRedirects
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function all() {
- return [
- ...sendTargetsRedirects.send.normal,
- ...sendTargetsRedirects.send.tor,
- ...sendNormalCustomRedirects,
- ...sendTorRedirectsChecks,
- ...sendTorCustomRedirects,
- ...sendI2pCustomRedirects,
- ...sendLokiCustomRedirects,
- ]
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableSendTarget && !disableOverride) {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
- if (url.pathname != "/") {
- resolve()
- return
- }
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...sendLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...sendI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableSendTarget && !disableOverride) return
- if (type != "main_frame") return
- if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return
- if (!targets.some(rx => rx.test(url.href))) return
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...sendLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...sendI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]
- }
- if (instancesList.length === 0) return
-
- const randomInstance = utils.getRandomInstance(instancesList)
- return randomInstance
-}
-
-function initDefaults() {
- return new Promise(resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- sendNormalRedirectsChecks = [...redirects.send.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = sendNormalRedirectsChecks.indexOf(instance)
- if (a > -1) sendNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableSendTarget: false,
- sendTargetsRedirects: redirects,
-
- sendNormalRedirectsChecks,
- sendNormalCustomRedirects: [],
-
- sendTorRedirectsChecks: [...redirects.send.tor],
- sendTorCustomRedirects: [],
-
- sendI2pRedirectsChecks: [...redirects.send.i2p],
- sendI2pCustomRedirects: [],
-
- sendLokiRedirectsChecks: [...redirects.send.loki],
- sendLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- redirect,
- switchInstance,
- initDefaults,
-}
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
new file mode 100644
index 0000000..806624d
--- /dev/null
+++ b/src/assets/javascripts/services.js
@@ -0,0 +1,759 @@
+window.browser = window.browser || window.chrome
+
+import utils from "./utils.js"
+
+let config, options, redirects
+
+function init() {
+ return new Promise(async resolve => {
+ browser.storage.local.get(["options", "redirects"], r => {
+ options = r.options
+ redirects = r.redirects
+ fetch("/config/config.json")
+ .then(response => response.text())
+ .then(configData => {
+ config = JSON.parse(configData)
+ resolve()
+ })
+ })
+ })
+}
+
+init()
+browser.storage.onChanged.addListener(init)
+
+function fetchFrontendInstanceList(service, frontend, redirects, options, config) {
+ let tmp = []
+ if (config.services[service].frontends[frontend].instanceList) {
+ for (const network in config.networks) {
+ tmp.push(...redirects[network], ...options[frontend][network].custom)
+ }
+ } else if (config.services[service].frontends[frontend].singleInstance) tmp = config.services[service].frontends[frontend].singleInstance
+ return tmp
+}
+
+function all(service, frontend, options, config, redirects) {
+ let instances = []
+ if (!frontend) {
+ for (const frontend in config.services[service].frontends) {
+ instances.push(...fetchFrontendInstanceList(service, frontend, redirects[frontend], options, config))
+ }
+ } else {
+ instances.push(...fetchFrontendInstanceList(service, frontend, redirects[frontend], options, config))
+ }
+ return instances
+}
+
+function regexArray(service, url, config) {
+ let targets
+ if (config.services[service].targets == "datajson") {
+ browser.storage.local.get("targets", r => {
+ targets = r.targets[service]
+ })
+ } else {
+ targets = config.services[service].targets
+ }
+ for (const targetString in targets) {
+ const target = new RegExp(targets[targetString])
+ if (target.test(url.href)) return true
+ }
+ return false
+}
+
+function redirect(url, type, initiator, forceRedirection) {
+ if (type != "main_frame" && type != "sub_frame") return
+ let randomInstance
+ let frontend
+ for (const service in config.services) {
+ if (!forceRedirection && !options[service].enabled) continue
+ if (config.services[service].embeddable && type != options[service].redirectType && options[service].redirectType != "both") continue
+ if (!config.services[service].embeddable && type != "main_frame") continue
+ // let targets = new RegExp(config.services[service].targets.join("|"), "i")
+
+ if (!regexArray(service, url, config)) continue
+ // if (initiator) {
+ // console.log(initiator.host)
+ // if (targets.test(initiator.host)) continue
+ // //if (all(service, null, options, config, redirects).includes(initiator.origin) && reverse(initiator) == url) return "BYPASSTAB"
+ // }
+
+ if (Object.keys(config.services[service].frontends).length > 1) {
+ if (type == "sub_frame" && config.services[service].embeddable && !config.services[service].frontends[options[service].frontend].embeddable) frontend = options[service].embedFrontend
+ else frontend = options[service].frontend
+ } else frontend = Object.keys(config.services[service].frontends)[0]
+
+ if (config.services[service].frontends[frontend].instanceList) {
+ let instanceList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]
+ if (instanceList.length === 0 && options.networkFallback) instanceList = [...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom]
+ if (instanceList.length === 0) return
+ randomInstance = utils.getRandomInstance(instanceList)
+ } else if (config.services[service].frontends[frontend].singleInstance) randomInstance = config.services[service].frontends[frontend].singleInstance
+ break
+ }
+ if (!frontend) return
+
+ // Here is a (temperory) space for defining constants required in 2 or more switch cases.
+ // When possible, try have the two switch cases share all their code as done with searx and searxng.
+ // Do not do that when they do not share 100% of their code.
+
+ const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/
+ const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/
+ const placeRegex = /\/place\/(.*)\//
+ function convertMapCentre() {
+ let [lat, lon, zoom] = [null, null, null]
+ if (url.pathname.match(mapCentreRegex)) {
+ // Set map centre if present
+ ;[lat, lon, zoom] = url.pathname.match(mapCentreRegex)
+ } else if (url.searchParams.has("center")) {
+ ;[lat, lon] = url.searchParams.get("center").split(",")
+ zoom = url.searchParams.get("zoom") ?? "17"
+ }
+ return [zoom, lon, lat]
+ }
+
+ switch (frontend) {
+ // This is where all instance-specific code must be ran to convert the service url to one that can be understood by the frontend.
+ case "beatbump":
+ return `${randomInstance}${url.pathname}${url.search}`
+ .replace("/watch?v=", "/listen?id=")
+ .replace("/channel/", "/artist/")
+ .replace("/playlist?list=", "/playlist/VL")
+ .replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/") + "?filter=all")
+ case "hyperpipe":
+ return `${randomInstance}${url.pathname}${url.search}`.replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/"))
+ case "bibliogram":
+ const reservedPaths = ["u", "p", "privacy"]
+ if (url.pathname === "/" || reservedPaths.includes(url.pathname.split("/")[1])) return `${randomInstance}${url.pathname}${url.search}`
+ if (url.pathname.startsWith("/reel") || url.pathname.startsWith("/tv")) return `${randomInstance}/p${url.pathname.replace(/\/reel|\/tv/i, "")}${url.search}`
+ else return `${randomInstance}/u${url.pathname}${url.search}` // Likely a user profile, redirect to '/u/...'
+ case "lbryDesktop":
+ return url.href.replace(/^https?:\/{2}odysee\.com\//, "lbry://").replace(/:(?=[a-zA-Z0-9])/g, "#")
+ case "neuters":
+ 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}/`
+ case "searx":
+ case "searxng":
+ return `${randomInstance}/?q=${encodeURIComponent(url.searchParams.get("q"))}`
+ case "whoogle":
+ return `${randomInstance}/search${encodeURIComponent(url.searchParams.get("q"))}`
+ case "librex":
+ return `${randomInstance}/search.php?q=${encodeURIComponent(url.searchParams.get("q"))}`
+ case "send":
+ return randomInstance
+ case "nitter":
+ let search = new URLSearchParams(url.search)
+
+ search.delete("ref_src")
+ search.delete("ref_url")
+
+ search = search.toString()
+ if (search !== "") search = `?${search}`
+
+ if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") {
+ try {
+ const [, id, format, extra] = search.match(/(.*)\?format=(.*)&(.*)/)
+ const query = encodeURIComponent(`${id}.${format}?${extra}`)
+ return `${randomInstance}/pic${url.pathname}${query}`
+ } catch {
+ return `${randomInstance}/pic${url.pathname}${search}`
+ }
+ }
+
+ if (url.pathname.split("/").includes("tweets")) return `${randomInstance}${url.pathname.replace("/tweets", "")}${search}`
+ if (url.host == "t.co") return `${randomInstance}/t.co${url.pathname}`
+ return `${randomInstance}${url.pathname}${search}`
+ case "yattee":
+ return url.href.replace(/^https?:\/{2}/, "yattee://")
+ case "freetube":
+ return `freetube://https://youtu.be${url.pathname}${url.search}`.replace(/watch\?v=/, "")
+ case "simplyTranslate":
+ return `${randomInstance}/${url.search}`
+ case "libreTranslate":
+ return `${randomInstance}/${url.search}`
+ .replace(/(?<=\/?)sl/, "source")
+ .replace(/(?<=&)tl/, "target")
+ .replace(/(?<=&)text/, "q")
+ case "osm": {
+ if (initiator && initiator.host === "earth.google.com") return
+ const travelModes = {
+ driving: "fossgis_osrm_car",
+ walking: "fossgis_osrm_foot",
+ bicycling: "fossgis_osrm_bike",
+ transit: "fossgis_osrm_car", // not implemented on OSM, default to car.
+ }
+
+ function addressToLatLng(address) {
+ const xmlhttp = new XMLHttpRequest()
+ xmlhttp.open("GET", `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`, false)
+ xmlhttp.send()
+ if (xmlhttp.status === 200) {
+ const json = JSON.parse(xmlhttp.responseText)[0]
+ if (json) {
+ console.log("json", json)
+ return [`${json.lat},${json.lon}`, `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`]
+ }
+ }
+ console.info("Error: Status is " + xmlhttp.status)
+ }
+
+ let mapCentre = "#"
+ let prefs = {}
+
+ const mapCentreData = convertMapCentre()
+ if (mapCentreData[0] && mapCentreData[1] && mapCentreData[2]) mapCentre = `#map=${mapCentreData[0]}/${mapCentreData[1]}/${mapCentreData[2]}`
+ if (url.searchParams.get("layer")) prefs.layers = osmLayers[url.searchParams.get("layer")]
+
+ if (url.pathname.includes("/embed")) {
+ // Handle Google Maps Embed API
+ // https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France
+ //console.log("embed life")
+
+ let query = ""
+ if (url.searchParams.has("q")) query = url.searchParams.get("q")
+ else if (url.searchParams.has("query")) query = url.searchParams.has("query")
+ else if (url.searchParams.has("pb"))
+ try {
+ query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1]
+ } catch (error) {
+ console.error(error)
+ } // Unable to find map marker in URL.
+
+ let [coords, boundingbox] = addressToLatLng(query)
+ prefs.bbox = boundingbox
+ prefs.marker = coords
+ prefs.layer = "mapnik"
+ let prefsEncoded = new URLSearchParams(prefs).toString()
+ return `${randomInstance}/export/embed.html?${prefsEncoded}`
+ } else if (url.pathname.includes("/dir")) {
+ // Handle Google Maps Directions
+ // https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling
+
+ let travMod = url.searchParams.get("travelmode")
+ if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod]
+
+ let orgVal = url.searchParams.get("origin")
+ let destVal = url.searchParams.get("destination")
+
+ let org = addressToLatLng(orgVal)
+ let dest = addressToLatLng(destVal)
+ prefs.route = `${org};${dest}`
+
+ let prefsEncoded = new URLSearchParams(prefs).toString()
+ return `${randomInstance}/directions?${prefsEncoded}${mapCentre}`
+ } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) {
+ // Get marker from data attribute
+ // https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948
+ //console.log("data life")
+
+ let [, mlat, mlon] = url.pathname.match(dataLatLngRegex)
+
+ return `${randomInstance}/search?query=${mlat}%2C${mlon}`
+ } else if (url.searchParams.has("ll")) {
+ // Get marker from ll param
+ // https://maps.google.com/?ll=38.882147,-76.99017
+ //console.log("ll life")
+
+ const [mlat, mlon] = url.searchParams.get("ll").split(",")
+
+ return `${randomInstance}/search?query=${mlat}%2C${mlon}`
+ } else if (url.searchParams.has("viewpoint")) {
+ // Get marker from viewpoint param.
+ // https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80
+ //console.log("viewpoint life")
+
+ const [mlat, mlon] = url.searchParams.get("viewpoint").split(",")
+
+ return `${randomInstance}/search?query=${mlat}%2C${mlon}`
+ } else {
+ // Use query as search if present.
+ //console.log("normal life")
+
+ let query
+ if (url.searchParams.has("q")) query = url.searchParams.get("q")
+ else if (url.searchParams.has("query")) query = url.searchParams.get("query")
+ else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1]
+
+ let prefsEncoded = new URLSearchParams(prefs).toString()
+ if (query) return `${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}`
+ }
+
+ let prefsEncoded = new URLSearchParams(prefs).toString()
+ console.log("mapCentre", mapCentre)
+ console.log("prefs", prefs)
+ console.log("prefsEncoded", prefsEncoded)
+ return `${randomInstance}/${mapCentre}&${prefsEncoded}`
+ }
+ case "facil": {
+ if (initiator && initiator.host === "earth.google.com") return
+ const travelModes = {
+ driving: "car",
+ walking: "pedestrian",
+ bicycling: "bicycle",
+ transit: "car", // not implemented on Facil, default to car.
+ }
+ const mapCentreData = convertMapCentre()
+ let mapCentre = "#"
+ if (mapCentreData[0] && mapCentreData[1] && mapCentreData[2]) mapCentre = `#${mapCentreData[0]}/${mapCentreData[1]}/${mapCentreData[2]}`
+
+ if (url.pathname.includes("/embed")) {
+ // Handle Google Maps Embed API
+ // https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France
+ //console.log("embed life")
+
+ let query = ""
+ if (url.searchParams.has("q")) query = url.searchParams.get("q")
+ else if (url.searchParams.has("query")) query = url.searchParams.has("query")
+ else if (url.searchParams.has("pb"))
+ try {
+ query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1]
+ } catch (error) {
+ console.error(error)
+ } // Unable to find map marker in URL.
+
+ return `${randomInstance}/#q=${query}`
+ } else if (url.pathname.includes("/dir")) {
+ // Handle Google Maps Directions
+ // https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling
+
+ let travMod = url.searchParams.get("travelmode")
+
+ let orgVal = url.searchParams.get("origin")
+ let destVal = url.searchParams.get("destination")
+
+ return `${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModes[travMod]}`
+ } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) {
+ // Get marker from data attribute
+ // https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948
+ //console.log("data life")
+
+ let [, mlat, mlon] = url.pathname.match(dataLatLngRegex)
+
+ return `${randomInstance}/#q=${mlat}%2C${mlon}`
+ } else if (url.searchParams.has("ll")) {
+ // Get marker from ll param
+ // https://maps.google.com/?ll=38.882147,-76.99017
+ //console.log("ll life")
+
+ const [mlat, mlon] = url.searchParams.get("ll").split(",")
+
+ return `${randomInstance}/#q=${mlat}%2C${mlon}`
+ } else if (url.searchParams.has("viewpoint")) {
+ // Get marker from viewpoint param.
+ // https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80
+ //console.log("viewpoint life")
+
+ const [mlat, mlon] = url.searchParams.get("viewpoint").split(",")
+
+ return `${randomInstance}/#q=${mlat}%2C${mlon}`
+ } else {
+ // Use query as search if present.
+ //console.log("normal life")
+
+ let query
+ if (url.searchParams.has("q")) query = url.searchParams.get("q")
+ else if (url.searchParams.has("query")) query = url.searchParams.get("query")
+ else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1]
+
+ if (query) return `${randomInstance}/${mapCentre}/Mpnk/${query}`
+ }
+ }
+ case "wikiless":
+ let GETArguments = []
+ if (url.search.length > 0) {
+ let search = url.search.substring(1) //get rid of '?'
+ let argstrings = search.split("&")
+ for (let i = 0; i < argstrings.length; i++) {
+ let args = argstrings[i].split("=")
+ GETArguments.push([args[0], args[1]])
+ }
+ }
+
+ let link = `${randomInstance}${url.pathname}`
+ let urlSplit = url.host.split(".")
+ if (urlSplit[0] != "wikipedia" && urlSplit[0] != "www") {
+ if (urlSplit[0] == "m") GETArguments.push(["mobileaction", "toggle_view_mobile"])
+ else GETArguments.push(["lang", urlSplit[0]])
+ if (urlSplit[1] == "m") GETArguments.push(["mobileaction", "toggle_view_mobile"])
+ // wikiless doesn't have mobile view support yet
+ }
+ for (let i = 0; i < GETArguments.length; i++) link += (i == 0 ? "?" : "&") + GETArguments[i][0] + "=" + GETArguments[i][1]
+ return link
+
+ case "lingva":
+ let params_arr = url.search.split("&")
+ params_arr[0] = params_arr[0].substring(1)
+ let params = {}
+ for (let i = 0; i < params_arr.length; i++) {
+ let pair = params_arr[i].split("=")
+ params[pair[0]] = pair[1]
+ }
+ if (params.sl && params.tl && params.text) {
+ return `${randomInstance}/${params.sl}/${params.tl}/${params.text}`
+ }
+ return randomInstance
+ case "breezeWiki":
+ let wiki = url.hostname.match(/^[a-zA-Z0-9]+(?=\.fandom\.com)/)
+ if (wiki == "www" || !wiki) wiki = ""
+ else wiki = "/" + wiki
+ if (url.href.search(/Special:Search\?query/) > -1) return `${randomInstance}${wiki}${url.pathname}${url.search}`.replace(/Special:Search\?query/, "search?q").replace(/\/wiki/, "")
+ else return `${randomInstance}${wiki}${url.pathname}${url.search}`
+ case "rimgo":
+ if (url.href.search(/^https?:\/{2}(?:[im]\.)?stack\./) > -1) return `${randomInstance}/stack${url.pathname}${url.search}`
+ else return `${randomInstance}${url.pathname}${url.search}`
+ default:
+ return `${randomInstance}${url.pathname}${url.search}`
+ }
+}
+
+function computeService(url, returnFrontend) {
+ return new Promise(resolve => {
+ fetch("/config/config.json")
+ .then(response => response.text())
+ .then(configData => {
+ const config = JSON.parse(configData)
+ browser.storage.local.get(["redirects", "options"], r => {
+ const redirects = r.redirects
+ const options = r.options
+ for (const service in config.services) {
+ if (regexArray(service, url, config)) {
+ resolve(service)
+ return
+ } else {
+ for (const frontend in config.services[service].frontends) {
+ if (all(service, frontend, options, config, redirects).includes(utils.protocolHost(url))) {
+ if (returnFrontend) resolve([service, frontend, utils.protocolHost(url)])
+ else resolve(service)
+ return
+ }
+ }
+ }
+ }
+ resolve()
+ })
+ })
+ })
+}
+
+function switchInstance(url) {
+ return new Promise(async resolve => {
+ await init()
+ const protocolHost = utils.protocolHost(url)
+ for (const service in config.services) {
+ if (!all(service, null, options, config, redirects).includes(protocolHost)) continue
+
+ let instancesList
+ if (Object.keys(config.services[service].frontends).length == 1) {
+ const frontend = Object.keys(config.services[service].frontends)[0]
+ instancesList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]
+ if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom]
+ } else {
+ const frontend = options[service].frontend
+ instancesList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]
+ if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom]
+ }
+
+ let oldInstance
+ const i = instancesList.indexOf(protocolHost)
+ if (i > -1) {
+ oldInstance = instancesList[i]
+ instancesList.splice(i, 1)
+ }
+ if (instancesList.length === 0) {
+ resolve()
+ return
+ }
+ const randomInstance = utils.getRandomInstance(instancesList)
+ const oldUrl = `${oldInstance}${url.pathname}${url.search}`
+ // This is to make instance switching work when the instance depends on the pathname, eg https://darmarit.org/searx
+ // Doesn't work because of .includes array method, not a top priotiry atm
+ resolve(oldUrl.replace(oldInstance, randomInstance))
+ return
+ }
+ resolve()
+ })
+}
+
+function reverse(url, urlString) {
+ return new Promise(async resolve => {
+ await init()
+ let protocolHost
+ if (!urlString) protocolHost = utils.protocolHost(url)
+ else protocolHost = url.match(/https?:\/{2}(?:[^\s\/]+\.)+[a-zA-Z0-9]+/)[0]
+ for (const service in config.services) {
+ if (!all(service, null, options, config, redirects).includes(protocolHost)) continue
+
+ switch (service) {
+ case "instagram":
+ case "youtube":
+ case "imdb":
+ case "imgur":
+ case "tiktok":
+ case "twitter":
+ case "reddit":
+ case "imdb":
+ case "reuters":
+ case "quora":
+ case "medium":
+ if (!urlString) resolve(config.services[service].url + url.pathname + url.search)
+ else resolve(url.replace(/https?:\/{2}(?:[^\s\/]+\.)+[a-zA-Z0-9]+/, config.services[service].url))
+ return
+ default:
+ resolve()
+ return
+ }
+ }
+ resolve()
+ })
+}
+
+function unifyPreferences(url, tabId) {
+ return new Promise(async resolve => {
+ await init()
+ const protocolHost = utils.protocolHost(url)
+ for (const service in config.services) {
+ for (const frontend in config.services[service].frontends) {
+ if (all(service, frontend, options, config, redirects).includes(protocolHost)) {
+ let instancesList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]
+ if (options.networkFallback && options.network != "clearnet") instancesList.push(...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom)
+
+ const frontendObject = config.services[service].frontends[frontend]
+ if ("cookies" in frontendObject.preferences) {
+ for (const cookie of frontendObject.preferences.cookies) {
+ await utils.copyCookie(frontendObject, url, instancesList, cookie)
+ }
+ }
+ if ("localstorage" in frontendObject.preferences) {
+ browser.storage.local.set({ tmp: [frontend, frontendObject.preferences.localstorage] })
+ browser.tabs.executeScript(tabId, {
+ file: "/assets/javascripts/get-localstorage.js",
+ runAt: "document_start",
+ })
+ for (const instance of instancesList)
+ browser.tabs.create({ url: instance }, tab =>
+ browser.tabs.executeScript(tab.id, {
+ file: "/assets/javascripts/set-localstorage.js",
+ runAt: "document_start",
+ })
+ )
+ }
+ /*
+ if ("indexeddb" in frontendObject.preferences) {
+ }
+ if ("token" in frontendObject.preferences) {
+ }
+ */
+ resolve(true)
+ return
+ }
+ }
+ }
+ })
+}
+
+async function setRedirects(redirects) {
+ fetch("/config/config.json")
+ .then(response => response.text())
+ .then(configData => {
+ //browser.storage.local.get(["options", "blacklists"], async r => {
+ //const options = r.options
+ const config = JSON.parse(configData)
+ let targets = {}
+ for (const service in config.services) {
+ if (config.services[service].targets == "datajson") {
+ targets[service] = redirects[service]
+ }
+ /*
+ for (const frontend in config.services[service].frontends) {
+ if (config.services[service].frontends[frontend].instanceList) {
+ for (const network in config.networks) {
+ options[frontend][network].enabled = redirects[frontend][network]
+ }
+ for (const blacklist in r.blacklists) {
+ for (const instance of blacklist) {
+ let i = options[frontend].clearnet.enabled.indexOf(instance)
+ if (i > -1) options[frontend].clearnet.enabled.splice(i, 1)
+ }
+ }
+ }
+ }
+ */
+ // The above will be implemented with https://github.com/libredirect/libredirect/issues/334
+ }
+ browser.storage.local.set({ redirects, targets /*, options*/ })
+ //})
+ })
+}
+
+function initDefaults() {
+ return new Promise(resolve => {
+ fetch("/instances/data.json")
+ .then(response => response.text())
+ .then(data => {
+ fetch("/config/config.json")
+ .then(response => response.text())
+ .then(configData => {
+ browser.storage.local.get(["options", "blacklists"], r => {
+ let redirects = JSON.parse(data)
+ let options = r.options
+ let targets = {}
+ let config = JSON.parse(configData)
+ const localstorage = {}
+ const latency = {}
+ for (const service in config.services) {
+ options[service] = {}
+ if (config.services[service].targets == "datajson") targets[service] = redirects[service]
+ for (const defaultOption in config.services[service].options) options[service][defaultOption] = config.services[service].options[defaultOption]
+ for (const frontend in config.services[service].frontends) {
+ if (config.services[service].frontends[frontend].instanceList) {
+ options[frontend] = {}
+ for (const network in config.networks) {
+ options[frontend][network] = {}
+ options[frontend][network].enabled = JSON.parse(data)[frontend][network]
+ options[frontend][network].custom = []
+ }
+ for (const blacklist in r.blacklists) {
+ for (const instance of r.blacklists[blacklist]) {
+ let i = options[frontend].clearnet.enabled.indexOf(instance)
+ if (i > -1) options[frontend].clearnet.enabled.splice(i, 1)
+ }
+ }
+ }
+ }
+ }
+ browser.storage.local.set({ redirects, options, targets, latency, localstorage })
+ resolve()
+ })
+ })
+ })
+ })
+}
+
+function upgradeOptions() {
+ return new Promise(resolve => {
+ fetch("/config/config.json")
+ .then(response => response.text())
+ .then(configData => {
+ browser.storage.local.get(null, r => {
+ let options = r.options
+ let latency = {}
+ const config = JSON.parse(configData)
+ options.exceptions = r.exceptions
+ if (r.theme != "DEFAULT") options.theme = r.theme
+ options.popupServices = r.popupFrontends
+ let tmp = options.popupServices.indexOf("tikTok")
+ if (tmp > -1) {
+ options.popupServices.splice(tmp, 1)
+ options.popupServices.push("tiktok")
+ }
+ tmp = options.popupServices.indexOf("sendTarget")
+ if (tmp > -1) {
+ options.popupServices.splice(tmp, 1)
+ options.popupServices.push("sendFiles")
+ }
+ options.firstPartyIsolate = r.firstPartyIsolate
+ options.autoRedirect = r.autoRedirect
+ switch (r.onlyEmbeddedVideo) {
+ case "onlyNotEmbedded":
+ options.youtube.redirectType = "main_frame"
+ case "onlyEmbedded":
+ options.youtube.redirectType = "sub_frame"
+ case "both":
+ options.youtube.redirectType = "both"
+ }
+ for (const service in config.services) {
+ let oldService
+ switch (service) {
+ case "tiktok":
+ oldService = "tikTok"
+ break
+ case "sendFiles":
+ oldService = "sendTarget"
+ break
+ default:
+ oldService = service
+ }
+ options[service].enabled = !r["disable" + utils.camelCase(oldService)]
+ if (r[oldService + "Frontend"]) {
+ if (r[oldService + "Frontend"] == "yatte") options[service].frontend = "yattee"
+ else options[service].frontend = r[oldService + "Frontend"]
+ }
+ if (r[oldService + "RedirectType"]) options[service].redirectType = r[oldService + "RedirectType"]
+ if (r[oldService + "EmbedFrontend"] && (service != "youtube" || r[oldService + "EmbedFrontend"] == "invidious" || r[oldService + "EmbedFrontend"] == "piped"))
+ options[service].embedFrontend = r[oldService + "EmbedFrontend"]
+ for (const frontend in config.services[service].frontends) {
+ if (r[frontend + "Latency"]) latency[frontend] = r[frontend + "Latency"]
+ for (const network in config.networks) {
+ let protocol
+ if (network == "clearnet") protocol = "normal"
+ else protocol = network
+ if (r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]) {
+ options[frontend][network].enabled = r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]
+ options[frontend][network].custom = r[frontend + utils.camelCase(protocol) + "CustomRedirects"]
+ }
+ }
+ }
+ }
+ browser.storage.local.set({ options, latency }, () => resolve())
+ })
+ })
+ })
+}
+
+function processUpdate() {
+ return new Promise(resolve => {
+ fetch("/instances/data.json")
+ .then(response => response.text())
+ .then(data => {
+ fetch("/config/config.json")
+ .then(response => response.text())
+ .then(configData => {
+ browser.storage.local.get(["options", "blacklists", "targets"], r => {
+ let redirects = JSON.parse(data)
+ let options = r.options
+ let targets = r.targets
+ let config = JSON.parse(configData)
+ for (const service in config.services) {
+ if (!options[service]) options[service] = {}
+ if (config.services[service].targets == "datajson") targets[service] = redirects[service]
+ for (const defaultOption in config.services[service].options) if (!options[service][defaultOption]) options[service][defaultOption] = config.services[service].options[defaultOption]
+ for (const frontend in config.services[service].frontends) {
+ if (config.services[service].frontends[frontend].instanceList) {
+ if (!options[frontend]) options[frontend] = {}
+ for (const network in config.networks) {
+ if (!options[frontend][network]) {
+ options[frontend][network] = {}
+ options[frontend][network].enabled = JSON.parse(data)[frontend][network]
+ options[frontend][network].custom = []
+ if (network == "clearnet") {
+ for (const blacklist in r.blacklists) {
+ for (const instance of r.blacklists[blacklist]) {
+ let i = options[frontend].clearnet.enabled.indexOf(instance)
+ if (i > -1) options[frontend].clearnet.enabled.splice(i, 1)
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ browser.storage.local.set({ redirects, options, targets })
+ resolve()
+ })
+ })
+ })
+ })
+}
+
+export default {
+ redirect,
+ computeService,
+ switchInstance,
+ reverse,
+ unifyPreferences,
+ setRedirects,
+ initDefaults,
+ upgradeOptions,
+ processUpdate,
+}
diff --git a/src/assets/javascripts/set-localstorage.js b/src/assets/javascripts/set-localstorage.js
new file mode 100644
index 0000000..8dbfcad
--- /dev/null
+++ b/src/assets/javascripts/set-localstorage.js
@@ -0,0 +1,13 @@
+window.browser = window.browser || window.chrome
+
+browser.storage.local.get(["localstorage", "tmp"], r => {
+ const localstorageJson = r.localstorage
+ const frontend = r.tmp[0]
+ const items = localstorageJson[frontend]
+
+ for (const item in items) {
+ localStorage.setItem(item, items[item])
+ }
+
+ window.close()
+})
diff --git a/src/assets/javascripts/tiktok.js b/src/assets/javascripts/tiktok.js
deleted file mode 100644
index 78106a1..0000000
--- a/src/assets/javascripts/tiktok.js
+++ /dev/null
@@ -1,251 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = [/^https?:\/{2}(www\.|)tiktok\.com.*/]
-
-const frontends = new Array("proxiTok")
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects.proxiTok = val
- proxiTokNormalRedirectsChecks = [...redirects.proxiTok.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = proxiTokNormalRedirectsChecks.indexOf(instance)
- if (a > -1) proxiTokNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- tiktokRedirects: redirects,
- proxiTokNormalRedirectsChecks,
- proxiTokTorRedirectsChecks: [...redirects.proxiTok.tor],
- proxiTokI2pRedirectsChecks: [...redirects.proxiTok.i2p],
- proxiTokLokiRedirectsChecks: [...redirects.proxiTok.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-function initProxiTokCookies(test, from) {
- return new Promise(async resolve => {
- await init()
- let protocolHost = utils.protocolHost(from)
- if (
- ![
- ...proxiTokNormalRedirectsChecks,
- ...proxiTokNormalCustomRedirects,
- ...proxiTokTorRedirectsChecks,
- ...proxiTokTorCustomRedirects,
- ...proxiTokI2pCustomRedirects,
- ...proxiTokLokiCustomRedirects,
- ].includes(protocolHost)
- )
- resolve()
-
- if (!test) {
- let checkedInstances = []
- if (protocol == "loki") checkedInstances = [...proxiTokI2pCustomRedirects]
- else if (protocol == "i2p") checkedInstances = [...proxiTokLokiCustomRedirects]
- else if (protocol == "tor") checkedInstances = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]
- if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]
- }
- await utils.copyCookie("proxitok", from, checkedInstances, "theme")
- await utils.copyCookie("proxitok", from, checkedInstances, "api-legacy")
- }
- resolve(true)
- })
-}
-
-let disableTiktok,
- protocol,
- protocolFallback,
- tiktokRedirects,
- proxiTokNormalRedirectsChecks,
- proxiTokNormalCustomRedirects,
- proxiTokTorRedirectsChecks,
- proxiTokTorCustomRedirects,
- proxiTokI2pCustomRedirects,
- proxiTokLokiCustomRedirects
-
-function init() {
- return new Promise(async resolve => {
- browser.storage.local.get(
- [
- "disableTiktok",
- "protocol",
- "protocolFallback",
- "tiktokRedirects",
- "proxiTokNormalRedirectsChecks",
- "proxiTokNormalCustomRedirects",
- "proxiTokTorRedirectsChecks",
- "proxiTokTorCustomRedirects",
- "proxiTokI2pCustomRedirects",
- "proxiTokLokiCustomRedirects",
- ],
- r => {
- disableTiktok = r.disableTiktok
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- tiktokRedirects = r.tiktokRedirects
- proxiTokNormalRedirectsChecks = r.proxiTokNormalRedirectsChecks
- proxiTokNormalCustomRedirects = r.proxiTokNormalCustomRedirects
- proxiTokTorRedirectsChecks = r.proxiTokTorRedirectsChecks
- proxiTokTorCustomRedirects = r.proxiTokTorCustomRedirects
- proxiTokI2pCustomRedirects = r.proxiTokI2pCustomRedirects
- proxiTokLokiCustomRedirects = r.proxiTokLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-// https://www.tiktok.com/@keysikaspol/video/7061265241887345946
-// https://www.tiktok.com/@keysikaspol
-function redirect(url, type, initiator, disableOverride) {
- if (disableTiktok && !disableOverride) return
- if (type != "main_frame") return
- const all = [...tiktokRedirects.proxiTok.normal, ...proxiTokNormalCustomRedirects]
- if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return
- if (!targets.some(rx => rx.test(url.href))) return
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...proxiTokI2pCustomRedirects]
- else if (protocol == "i2p") instancesList = [...proxiTokLokiCustomRedirects]
- else if (protocol == "tor") instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]
- }
- if (instancesList.length === 0) return
-
- const randomInstance = utils.getRandomInstance(instancesList)
- return `${randomInstance}${url.pathname}`
-}
-
-function reverse(url) {
- return new Promise(async resolve => {
- await init()
- let protocolHost = utils.protocolHost(url)
- const all = [
- ...tiktokRedirects.proxiTok.normal,
- ...tiktokRedirects.proxiTok.tor,
- ...proxiTokNormalCustomRedirects,
- ...proxiTokTorCustomRedirects,
- ...proxiTokI2pCustomRedirects,
- ...proxiTokLokiCustomRedirects,
- ]
- if (!all.includes(protocolHost)) {
- resolve()
- return
- }
-
- resolve(`https://tiktok.com${url.pathname}${url.search}`)
- })
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableTiktok && !disableOverride) {
- resolve()
- return
- }
- let protocolHost = utils.protocolHost(url)
- const all = [
- ...tiktokRedirects.proxiTok.tor,
- ...tiktokRedirects.proxiTok.normal,
-
- ...proxiTokNormalCustomRedirects,
- ...proxiTokTorCustomRedirects,
- ...proxiTokI2pCustomRedirects,
- ...proxiTokLokiCustomRedirects,
- ]
- if (!all.includes(protocolHost)) {
- resolve()
- return
- }
-
- let instancesList = []
- if (protocol == "loki") instancesList = [...proxiTokI2pCustomRedirects]
- else if (protocol == "i2p") instancesList = [...proxiTokLokiCustomRedirects]
- else if (protocol == "tor") instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- proxiTokNormalRedirectsChecks = [...redirects.proxiTok.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = proxiTokNormalRedirectsChecks.indexOf(instance)
- if (a > -1) proxiTokNormalRedirectsChecks.splice(a, 1)
- }
- browser.storage.local.set(
- {
- disableTiktok: false,
-
- tiktokRedirects: redirects,
-
- proxiTokNormalRedirectsChecks,
- proxiTokNormalCustomRedirects: [],
-
- proxiTokTorRedirectsChecks: [...redirects.proxiTok.tor],
- proxiTokTorCustomRedirects: [],
-
- proxiTokI2pRedirectsChecks: [...redirects.proxiTok.i2p],
- proxiTokI2pCustomRedirects: [],
-
- proxiTokLokiRedirectsChecks: [...redirects.proxiTok.loki],
- proxiTokLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- redirect,
- reverse,
- switchInstance,
- initProxiTokCookies,
- initDefaults,
-}
diff --git a/src/assets/javascripts/translate/get_lingva_preferences.js b/src/assets/javascripts/translate/get_lingva_preferences.js
deleted file mode 100644
index 0d6ff6e..0000000
--- a/src/assets/javascripts/translate/get_lingva_preferences.js
+++ /dev/null
@@ -1,10 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.set({
- ["lingva_chakra-ui-color-mode"]: localStorage.getItem("chakra-ui-color-mode"),
- lingva_isauto: localStorage.getItem("isauto"),
- lingva_source: localStorage.getItem("source"),
- lingva_target: localStorage.getItem("target"),
-})
-
-console.log(localStorage.getItem("target"))
diff --git a/src/assets/javascripts/translate/set_lingva_preferences.js b/src/assets/javascripts/translate/set_lingva_preferences.js
deleted file mode 100644
index 04a36e1..0000000
--- a/src/assets/javascripts/translate/set_lingva_preferences.js
+++ /dev/null
@@ -1,9 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.get(["lingva_chakra-ui-color-mode", "lingva_isauto", "lingva_source", "lingva_target"], r => {
- if (r["lingva_chakra-ui-color-mode"] !== undefined) localStorage.setItem("chakra-ui-color-mode", r["lingva_chakra-ui-color-mode"])
- if (r.lingva_isauto !== undefined) localStorage.setItem("isauto", r.lingva_isauto)
- if (r.lingva_source !== undefined) localStorage.setItem("source", r.lingva_source)
- if (r.lingva_target !== undefined) localStorage.setItem("target", r.lingva_target)
- window.close()
-})
diff --git a/src/assets/javascripts/translate/translate.js b/src/assets/javascripts/translate/translate.js
deleted file mode 100644
index fa10316..0000000
--- a/src/assets/javascripts/translate/translate.js
+++ /dev/null
@@ -1,377 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "../utils.js"
-
-const targets = [/^https?:\/{2}translate\.google(\.[a-z]{2,3}){1,2}\//]
-
-const frontends = new Array("simplyTranslate", "lingva")
-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]] = []
- }
-}
-
-let translateDisable,
- translateFrontend,
- protocol,
- protocolFallback,
- translateRedirects,
- simplyTranslateNormalRedirectsChecks,
- simplyTranslateNormalCustomRedirects,
- simplyTranslateTorRedirectsChecks,
- simplyTranslateTorCustomRedirects,
- simplyTranslateI2pRedirectsChecks,
- simplyTranslateI2pCustomRedirects,
- simplyTranslateLokiRedirectsChecks,
- simplyTranslateLokiCustomRedirects,
- lingvaNormalRedirectsChecks,
- lingvaNormalCustomRedirects,
- lingvaTorRedirectsChecks,
- lingvaTorCustomRedirects,
- lingvaI2pCustomRedirects,
- lingvaLokiCustomRedirects
-
-function init() {
- return new Promise(resolve => {
- browser.storage.local.get(
- [
- "translateDisable",
- "translateFrontend",
- "protocol",
- "protocolFallback",
- "translateRedirects",
- "simplyTranslateNormalRedirectsChecks",
- "simplyTranslateNormalCustomRedirects",
- "simplyTranslateTorRedirectsChecks",
- "simplyTranslateTorCustomRedirects",
- "simplyTranslateI2pRedirectsChecks",
- "simplyTranslateI2pCustomRedirects",
- "simplyTranslateLokiRedirectsChecks",
- "simplyTranslateLokiCustomRedirects",
-
- "lingvaNormalRedirectsChecks",
- "lingvaNormalCustomRedirects",
- "lingvaTorRedirectsChecks",
- "lingvaTorCustomRedirects",
- "lingvaI2pCustomRedirects",
- "lingvaLokiCustomRedirects",
- ],
- r => {
- translateDisable = r.translateDisable
- translateFrontend = r.translateFrontend
- protocol = r.protocol
- protocolFallback = r.protocolFallback
- translateRedirects = r.translateRedirects
- simplyTranslateNormalRedirectsChecks = r.simplyTranslateNormalRedirectsChecks
- simplyTranslateNormalCustomRedirects = r.simplyTranslateNormalCustomRedirects
- simplyTranslateTorRedirectsChecks = r.simplyTranslateTorRedirectsChecks
- simplyTranslateTorCustomRedirects = r.simplyTranslateTorCustomRedirects
- simplyTranslateI2pRedirectsChecks = r.simplyTranslateI2pRedirectsChecks
- simplyTranslateI2pCustomRedirects = r.simplyTranslateI2pCustomRedirects
- simplyTranslateLokiRedirectsChecks = r.simplyTranslateLokiRedirectsChecks
- simplyTranslateLokiCustomRedirects = r.simplyTranslateLokiCustomRedirects
- lingvaNormalRedirectsChecks = r.lingvaNormalRedirectsChecks
- lingvaNormalCustomRedirects = r.lingvaNormalCustomRedirects
- lingvaTorRedirectsChecks = r.lingvaTorRedirectsChecks
- lingvaTorCustomRedirects = r.lingvaTorCustomRedirects
- lingvaI2pCustomRedirects = r.lingvaI2pCustomRedirects
- lingvaLokiCustomRedirects = r.lingvaLokiCustomRedirects
- resolve()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function setRedirects(val) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
- redirects = val
- simplyTranslateNormalRedirectsChecks = [...redirects.simplyTranslate.normal]
- lingvaNormalRedirectsChecks = [...redirects.lingva.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = simplyTranslateNormalCustomRedirects.indexOf(instance)
- if (a > -1) simplyTranslateNormalCustomRedirects.splice(a, 1)
-
- const b = lingvaNormalRedirectsChecks.indexOf(instance)
- if (b > -1) lingvaNormalRedirectsChecks.splice(b, 1)
- }
- browser.storage.local.set(
- {
- translateRedirects: redirects,
- simplyTranslateNormalRedirectsChecks,
- simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor],
- simplyTranslateI2pRedirectsChecks: [...redirects.simplyTranslate.i2p],
- simplyTranslateLokiRedirectsChecks: [...redirects.simplyTranslate.loki],
- lingvaNormalRedirectsChecks,
- lingvaTorRedirectsChecks: [...redirects.lingva.tor],
- lingvaI2pRedirectsChecks: [...redirects.lingva.i2p],
- lingvaLokiRedirectsChecks: [...redirects.lingva.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-function copyPasteLingvaLocalStorage(test, url, tabId) {
- return new Promise(async resolve => {
- await init()
- if (translateDisable || translateFrontend != "lingva") {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (
- ![...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects, ...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects, ...lingvaI2pCustomRedirects, ...lingvaLokiCustomRedirects].includes(
- protocolHost
- )
- ) {
- resolve()
- return
- }
-
- if (!test) {
- browser.tabs.executeScript(tabId, {
- file: "/assets/javascripts/translate/get_lingva_preferences.js",
- runAt: "document_start",
- })
-
- let checkedInstances = []
- if (protocol == "loki") checkedInstances = [...lingvaLokiCustomRedirects]
- //...lingvaLokiRedirectsChecks,
- else if (protocol == "i2p") checkedInstances = [...lingvaI2pCustomRedirects]
- //...lingvaI2pRedirectsChecks,
- else if (protocol == "tor") checkedInstances = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]
- if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]
- }
- const i = checkedInstances.indexOf(protocolHost)
- if (i !== -1) checkedInstances.splice(i, 1)
- if (checkedInstances.length === 0) {
- resolve()
- return
- }
- for (const to of checkedInstances)
- browser.tabs.create({ url: to }, tab =>
- browser.tabs.executeScript(tab.id, {
- file: "/assets/javascripts/translate/set_lingva_preferences.js",
- runAt: "document_start",
- })
- )
- }
- resolve(true)
- })
-}
-
-function copyPasteSimplyTranslateCookies(test, from) {
- return new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(from)
- if (
- ![
- ...simplyTranslateNormalRedirectsChecks,
- ...simplyTranslateNormalCustomRedirects,
- ...simplyTranslateTorRedirectsChecks,
- ...simplyTranslateTorCustomRedirects,
- ...simplyTranslateI2pRedirectsChecks,
- ...simplyTranslateI2pCustomRedirects,
- ...simplyTranslateLokiRedirectsChecks,
- ...simplyTranslateLokiCustomRedirects,
- ].includes(protocolHost)
- ) {
- resolve()
- return
- }
- if (!test) {
- let checkedInstances = []
- if (protocol == "loki") checkedInstances = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects]
- else if (protocol == "i2p") checkedInstances = [...simplyTranslateI2pCustomRedirects, ...simplyTranslateI2pRedirectsChecks]
- else if (protocol == "tor") checkedInstances = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]
- if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
- checkedInstances = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]
- }
- await utils.copyCookie("simplyTranslate", from, checkedInstances, "from_lang")
- await utils.copyCookie("simplyTranslate", from, checkedInstances, "to_lang")
- await utils.copyCookie("simplyTranslate", from, checkedInstances, "tts_enabled")
- await utils.copyCookie("simplyTranslate", from, checkedInstances, "use_text_fields")
- }
- resolve(true)
- })
-}
-
-function redirect(url, disableOverride) {
- if (translateDisable && !disableOverride) return
- if (!targets.some(rx => rx.test(url.href))) return
-
- if (translateFrontend == "simplyTranslate") {
- let instancesList = []
- if (protocol == "loki") instancesList = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects]
- else if (protocol == "i2p") instancesList = [...simplyTranslateI2pRedirectsChecks, ...simplyTranslateI2pCustomRedirects]
- else if (protocol == "tor") instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]
- }
- if (instancesList.length === 0) return
-
- const randomInstance = utils.getRandomInstance(instancesList)
- return `${randomInstance}/${url.search}`
- } else if (translateFrontend == "lingva") {
- let params_arr = url.search.split("&")
- params_arr[0] = params_arr[0].substring(1)
- let params = {}
- for (let i = 0; i < params_arr.length; i++) {
- let pair = params_arr[i].split("=")
- params[pair[0]] = pair[1]
- }
- let instancesList = []
- if (protocol == "loki") instancesList = [...lingvaLokiCustomRedirects]
- //...lingvaLokiRedirectsChecks,
- else if (protocol == "i2p") instancesList = [...lingvaI2pCustomRedirects] //...lingvaI2pRedirectsChecks,
- if (protocol == "tor") instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]
- }
- if (instancesList.length === 0) return
-
- const randomInstance = utils.getRandomInstance(instancesList)
- if (params.sl && params.tl && params.text) {
- return `${randomInstance}/${params.sl}/${params.tl}/${params.text}`
- }
- return randomInstance
- }
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (translateDisable && !disableOverride) {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (
- ![
- ...translateRedirects.simplyTranslate.normal,
- ...translateRedirects.simplyTranslate.tor,
- ...translateRedirects.simplyTranslate.i2p,
- ...translateRedirects.simplyTranslate.loki,
-
- ...simplyTranslateNormalCustomRedirects,
- ...simplyTranslateTorCustomRedirects,
- ...simplyTranslateI2pCustomRedirects,
- ...simplyTranslateLokiCustomRedirects,
-
- ...translateRedirects.lingva.normal,
- ...translateRedirects.lingva.tor,
-
- ...lingvaNormalCustomRedirects,
- ...lingvaTorCustomRedirects,
- ...lingvaI2pCustomRedirects,
- ...lingvaLokiCustomRedirects,
- ].includes(protocolHost)
- ) {
- resolve()
- return
- }
-
- let instancesList = []
-
- if (protocol == "loki") {
- if (translateFrontend == "simplyTranslate") instancesList = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects]
- else if (translateFrontend == "lingva") instancesList = [...lingvaLokiCustomRedirects] //...lingvaLokiRedirectsChecks,
- } else if (protocol == "i2p") {
- if (translateFrontend == "simplyTranslate") instancesList = [...simplyTranslateI2pRedirectsChecks, ...simplyTranslateI2pCustomRedirects]
- else if (translateFrontend == "lingva") instancesList = [...lingvaI2pCustomRedirects] //...lingvaI2pRedirectsChecks,
- } else if (protocol == "tor") {
- if (translateFrontend == "simplyTranslate") instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]
- else if (translateFrontend == "lingva") instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]
- }
- if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
- if (translateFrontend == "simplyTranslate") instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]
- else if (translateFrontend == "lingva") instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]
- }
-
- const i = instancesList.indexOf(protocolHost)
- if (i > -1) instancesList.splice(i, 1)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
- simplyTranslateNormalRedirectsChecks = [...redirects.simplyTranslate.normal]
- lingvaNormalRedirectsChecks = [...redirects.lingva.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
- const a = simplyTranslateNormalRedirectsChecks.indexOf(instance)
- if (a > -1) simplyTranslateNormalRedirectsChecks.splice(a, 1)
-
- const b = lingvaNormalRedirectsChecks.indexOf(instance)
- if (b > -1) lingvaNormalRedirectsChecks.splice(b, 1)
- }
- browser.storage.local.set(
- {
- translateDisable: false,
- translateFrontend: "simplyTranslate",
- translateRedirects: redirects,
-
- simplyTranslateNormalRedirectsChecks,
- simplyTranslateNormalCustomRedirects: [],
-
- simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor],
- simplyTranslateTorCustomRedirects: [],
-
- simplyTranslateI2pRedirectsChecks: [...redirects.simplyTranslate.i2p],
- simplyTranslateI2pCustomRedirects: [],
-
- simplyTranslateLokiRedirectsChecks: [...redirects.simplyTranslate.loki],
- simplyTranslateLokiCustomRedirects: [],
-
- lingvaNormalRedirectsChecks,
- lingvaNormalCustomRedirects: [],
-
- lingvaTorRedirectsChecks: [...redirects.lingva.tor],
- lingvaTorCustomRedirects: [],
-
- lingvaI2pRedirectsChecks: [...redirects.lingva.i2p],
- lingvaI2pCustomRedirects: [],
-
- lingvaLokiRedirectsChecks: [...redirects.lingva.loki],
- lingvaLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- copyPasteSimplyTranslateCookies,
- copyPasteLingvaLocalStorage,
- setRedirects,
- redirect,
- initDefaults,
- switchInstance,
-}
diff --git a/src/assets/javascripts/twitter.js b/src/assets/javascripts/twitter.js
deleted file mode 100644
index eca8219..0000000
--- a/src/assets/javascripts/twitter.js
+++ /dev/null
@@ -1,286 +0,0 @@
-window.browser = window.browser || window.chrome
-
-import utils from "./utils.js"
-
-const targets = [/^https?:\/{2}(www\.|mobile\.|)twitter\.com/, /^https?:\/{2}(pbs\.|video\.|)twimg\.com/, /^https?:\/{2}platform\.twitter\.com\/embed/, /^https?:\/{2}t\.co/]
-
-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) {
- return new Promise(resolve =>
- browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList", "offlineBlackList"], r => {
- redirects.nitter = val
- nitterNormalRedirectsChecks = [...redirects.nitter.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList, ...r.offlineBlackList]) {
- let i = nitterNormalRedirectsChecks.indexOf(instance)
- if (i > -1) nitterNormalRedirectsChecks.splice(i, 1)
- }
- browser.storage.local.set(
- {
- twitterRedirects: redirects,
- nitterNormalRedirectsChecks,
- nitterTorRedirectsChecks: [...redirects.nitter.tor],
- nitterI2pRedirectsChecks: [...redirects.nitter.i2p],
- nitterLokiRedirectsChecks: [...redirects.nitter.loki],
- },
- () => resolve()
- )
- })
- )
-}
-
-let disableTwitter,
- protocol,
- protocolFallback,
- twitterRedirects,
- twitterRedirectType,
- nitterNormalRedirectsChecks,
- nitterNormalCustomRedirects,
- nitterTorRedirectsChecks,
- nitterTorCustomRedirects,
- nitterI2pCustomRedirects,
- nitterLokiCustomRedirects
-
-function init() {
- return new Promise(async resolve => {
- browser.storage.local.get(
- [
- "disableTwitter",
- "protocol",
- "protocolFallback",
- "twitterRedirects",
- "twitterRedirectType",
- "nitterNormalRedirectsChecks",
- "nitterNormalCustomRedirects",
- "nitterTorRedirectsChecks",
- "nitterTorCustomRedirects",
- "nitterI2pCustomRedirects",
- "nitterLokiCustomRedirects",
- ],
- r => {
- disableTwitter = r.disableTwitter
- 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()
- }
- )
- })
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function all() {
- return [...nitterNormalRedirectsChecks, ...nitterTorRedirectsChecks, ...nitterNormalCustomRedirects, ...nitterTorCustomRedirects, ...nitterI2pCustomRedirects, ...nitterLokiCustomRedirects]
-}
-
-function redirect(url, type, initiator, disableOverride) {
- if (disableTwitter && !disableOverride) return
- if (!targets.some(rx => rx.test(url.href))) return
- if (url.pathname.split("/").includes("home")) return
- if (initiator && all().includes(initiator.origin)) return "BYPASSTAB"
- if (twitterRedirectType == "main_frame" && type != "main_frame") return
-
- 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)
- // https://pbs.twimg.com/profile_images/648888480974508032/66_cUYfj_400x400.jpg
-
- let search = new URLSearchParams(url.search)
-
- search.delete("ref_src")
- search.delete("ref_url")
-
- search = search.toString()
- if (search !== "") search = `?${search}`
-
- if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") {
- const [, id, format, extra] = search.match(/(.*)\?format=(.*)&(.*)/)
- const query = encodeURIComponent(`${id}.${format}?${extra}`)
- return `${randomInstance}/pic${search}${query}`
- }
- if (url.pathname.split("/").includes("tweets")) {
- return `${randomInstance}${url.pathname.replace("/tweets", "")}${search}`
- }
- if (url.host == "t.co") {
- return `${randomInstance}/t.co${url.pathname}`
- }
- return `${randomInstance}${url.pathname}${search}`
-}
-
-function reverse(url) {
- return new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
- resolve(`https://twitter.com${url.pathname}${url.search}`)
- })
-}
-
-function switchInstance(url, disableOverride) {
- return new Promise(async resolve => {
- await init()
- if (disableTwitter && !disableOverride) {
- resolve()
- return
- }
- const protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
- 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)
- if (instancesList.length === 0) {
- resolve()
- return
- }
-
- const randomInstance = utils.getRandomInstance(instancesList)
- resolve(`${randomInstance}${url.pathname}${url.search}`)
- })
-}
-
-function removeXFrameOptions(e) {
- if (e.type != "sub_frame") return
- let url = new URL(e.url)
- let protocolHost = utils.protocolHost(url)
- if (!all().includes(protocolHost)) return
- let isChanged = false
- for (const i in e.responseHeaders) {
- if (e.responseHeaders[i].name == "x-frame-options") {
- e.responseHeaders.splice(i, 1)
- isChanged = true
- } else if (e.responseHeaders[i].name == "content-security-policy") {
- e.responseHeaders.splice(i, 1)
- isChanged = true
- }
- }
- if (isChanged) return { responseHeaders: e.responseHeaders }
-}
-
-function initNitterCookies(test, from) {
- return new Promise(async resolve => {
- await init()
- const protocolHost = utils.protocolHost(from)
- if (!all().includes(protocolHost)) {
- resolve()
- return
- }
- if (!test) {
- 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")
- await utils.copyCookie("nitter", from, checkedInstances, "bidiSupport")
- await utils.copyCookie("nitter", from, checkedInstances, "hideTweetStats")
- await utils.copyCookie("nitter", from, checkedInstances, "hideBanner")
- await utils.copyCookie("nitter", from, checkedInstances, "hidePins")
- await utils.copyCookie("nitter", from, checkedInstances, "hideReplies")
- await utils.copyCookie("nitter", from, checkedInstances, "squareAvatars")
- await utils.copyCookie("nitter", from, checkedInstances, "mp4Playback")
- await utils.copyCookie("nitter", from, checkedInstances, "hlsPlayback")
- await utils.copyCookie("nitter", from, checkedInstances, "proxyVideos")
- await utils.copyCookie("nitter", from, checkedInstances, "muteVideos")
- await utils.copyCookie("nitter", from, checkedInstances, "autoplayGifs")
-
- await utils.copyCookie("nitter", from, checkedInstances, "replaceInstagram")
- await utils.copyCookie("nitter", from, checkedInstances, "replaceReddit")
- await utils.copyCookie("nitter", from, checkedInstances, "replaceTwitter")
- await utils.copyCookie("nitter", from, checkedInstances, "replaceYouTube")
- }
- resolve(true)
- })
-}
-
-function initDefaults() {
- return new Promise(resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(data => {
- let dataJson = JSON.parse(data)
- for (let i = 0; i < frontends.length; i++) {
- redirects[frontends[i]] = dataJson[frontends[i]]
- }
- browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList", "offlineBlackList"], async r => {
- nitterNormalRedirectsChecks = [...redirects.nitter.normal]
- for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList, ...r.offlineBlackList]) {
- let i = nitterNormalRedirectsChecks.indexOf(instance)
- if (i > -1) nitterNormalRedirectsChecks.splice(i, 1)
- }
- browser.storage.local.set(
- {
- disableTwitter: false,
- twitterRedirects: redirects,
- twitterRedirectType: "both",
-
- nitterNormalRedirectsChecks,
- nitterNormalCustomRedirects: [],
-
- nitterTorRedirectsChecks: [...redirects.nitter.tor],
- nitterTorCustomRedirects: [],
-
- nitterI2pRedirectsChecks: [...redirects.nitter.i2p],
- nitterI2pCustomRedirects: [],
-
- nitterLokiRedirectsChecks: [...redirects.nitter.loki],
- nitterLokiCustomRedirects: [],
- },
- () => resolve()
- )
- })
- })
- })
-}
-
-export default {
- setRedirects,
- redirect,
- switchInstance,
- reverse,
- removeXFrameOptions,
- initNitterCookies,
- initDefaults,
-}
diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js
index 5ca5c30..6204169 100644
--- a/src/assets/javascripts/utils.js
+++ b/src/assets/javascripts/utils.js
@@ -1,75 +1,29 @@
window.browser = window.browser || window.chrome
-import twitterHelper from "./twitter.js"
-import youtubeHelper from "./youtube/youtube.js"
-import instagramHelper from "./instagram.js"
-import mediumHelper from "./medium.js"
-import redditHelper from "./reddit.js"
-import searchHelper from "./search.js"
-import translateHelper from "./translate/translate.js"
-import wikipediaHelper from "./wikipedia.js"
-import peertubeHelper from "./peertube.js"
-import lbryHelper from "./lbry.js"
-import sendTargetsHelper from "./sendTargets.js"
-import tiktokHelper from "./tiktok.js"
-import quoraHelper from "./quora.js"
-import libremdbHelper from "./imdb.js"
-import imgurHelper from "./imgur.js"
-import reutersHelper from "./reuters.js"
-import youtubeMusicHelper from "./youtubeMusic.js"
-import mapsHelper from "./maps.js"
+
import localise from "./localise.js"
+import servicesHelper from "./services.js"
function getRandomInstance(instances) {
return instances[~~(instances.length * Math.random())]
}
+function camelCase(str) {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+}
+
let cloudflareBlackList = []
let authenticateBlackList = []
let offlineBlackList = []
async function initBlackList() {
return new Promise(resolve => {
- browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList", "offlineBlackList"], r => {
- cloudflareBlackList = r.cloudflareBlackList
- authenticateBlackList = r.authenticateBlackList
- offlineBlackList = r.offlineBlackList
- })
- if (cloudflareBlackList.length == 0) {
- fetch("/instances/blacklist.json")
- .then(response => response.text())
- .then(data => {
- cloudflareBlackList = JSON.parse(data).cloudflare
- authenticateBlackList = JSON.parse(data).authenticate
- offlineBlackList = JSON.parse(data).offline
- })
- }
- resolve()
- })
-}
-
-function updateBlackList() {
- return new Promise(async resolve => {
- let http = new XMLHttpRequest()
- let fallback = new XMLHttpRequest()
- http.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/blacklist.json", false)
- http.send(null)
- if (http.status != 200) {
- fallback.open("GET", "https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/blacklist.json", false)
- fallback.send(null)
- if (fallback.status === 200) {
- http = fallback
- } else {
+ fetch("/instances/blacklist.json")
+ .then(response => response.text())
+ .then(data => {
+ cloudflareBlackList = JSON.parse(data).cloudflare
+ authenticateBlackList = JSON.parse(data).authenticate
+ offlineBlackList = JSON.parse(data).offline
resolve()
- return
- }
- }
- const blackList = JSON.parse(http.responseText)
- browser.storage.local.set({
- cloudflareBlackList: blackList.cloudflare,
- authenticateBlackList: blackList.authenticate,
- offlineBlackList: blackList.offline,
- })
- ;(cloudflareBlackList = blackList.cloudflare), (authenticateBlackList = blackList.authenticate), (offlineBlackList = blackList.offline)
- resolve()
+ })
})
}
@@ -77,10 +31,10 @@ function updateInstances() {
return new Promise(async resolve => {
let http = new XMLHttpRequest()
let fallback = new XMLHttpRequest()
- http.open("GET", "https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json", false)
+ http.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/data.json", false)
http.send(null)
if (http.status != 200) {
- fallback.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/data.json", false)
+ fallback.open("GET", "https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json", false)
fallback.send(null)
if (fallback.status === 200) {
http = fallback
@@ -89,45 +43,10 @@ function updateInstances() {
return
}
}
- await updateBlackList()
+ await initBlackList()
const instances = JSON.parse(http.responseText)
- await youtubeHelper.setRedirects({
- invidious: instances.invidious,
- piped: instances.piped,
- pipedMaterial: instances.pipedMaterial,
- cloudtube: instances.cloudtube,
- })
- await twitterHelper.setRedirects(instances.nitter)
- await instagramHelper.setRedirects(instances.bibliogram)
- await redditHelper.setRedirects({
- libreddit: instances.libreddit,
- teddit: instances.teddit,
- })
- await translateHelper.setRedirects({
- simplyTranslate: instances.simplyTranslate,
- lingva: instances.lingva,
- })
- await searchHelper.setRedirects({
- searx: instances.searx,
- searxng: instances.searxng,
- whoogle: instances.whoogle,
- librex: instances.librex,
- })
- await wikipediaHelper.setRedirects(instances.wikiless)
- await mediumHelper.setRedirects(instances.scribe)
- await quoraHelper.setRedirects(instances.quetre)
- await libremdbHelper.setRedirects(instances.libremdb)
- await sendTargetsHelper.setRedirects(instances.send)
- await tiktokHelper.setRedirects(instances.proxiTok)
- await lbryHelper.setRedirects(instances.librarian)
- await reutersHelper.setRedirects(instances.neuters)
- await youtubeMusicHelper.setRedirects({
- beatbump: instances.beatbump,
- hyperpipe: instances.hyperpipe,
- })
- await mapsHelper.setRedirects(instances.facil)
- await peertubeHelper.setRedirects(instances.simpleertube)
+ servicesHelper.setRedirects(instances)
console.info("Successfully updated Instances")
resolve(true)
@@ -140,72 +59,64 @@ function protocolHost(url) {
return `${url.protocol}//${url.host}`
}
-async function processDefaultCustomInstances(target, name, protocol, document) {
- function camelCase(str) {
- return str.charAt(0).toUpperCase() + str.slice(1)
- }
- let latencyKey = `${name}Latency`
+async function processDefaultCustomInstances(service, frontend, network, document) {
let instancesLatency
- let nameProtocolElement = document.getElementById(name).getElementsByClassName(protocol)[0]
+ let frontendNetworkElement = document.getElementById(frontend).getElementsByClassName(network)[0]
- let nameCustomInstances = []
- let nameCheckListElement = nameProtocolElement.getElementsByClassName("checklist")[0]
+ let frontendCustomInstances = []
+ let frontendCheckListElement = frontendNetworkElement.getElementsByClassName("checklist")[0]
await initBlackList()
- let nameDefaultRedirects
+ let frontendDefaultRedirects
- let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks`
- let customRedirects = `${name}${camelCase(protocol)}CustomRedirects`
- let redirectsKey = `${target}Redirects`
-
- let redirects
+ let redirects, options
async function getFromStorage() {
return new Promise(async resolve =>
- browser.storage.local.get([redirectsChecks, customRedirects, redirectsKey, latencyKey], r => {
- nameDefaultRedirects = r[redirectsChecks]
- nameCustomInstances = r[customRedirects]
- instancesLatency = r[latencyKey] ?? []
- redirects = r[redirectsKey]
+ browser.storage.local.get(["options", "redirects", "latency"], r => {
+ frontendDefaultRedirects = r.options[frontend][network].enabled
+ frontendCustomInstances = r.options[frontend][network].custom
+ options = r.options
+ instancesLatency = r.latency[frontend] ?? []
+ redirects = r.redirects
resolve()
})
)
}
await getFromStorage()
- if (nameCustomInstances === undefined) console.log(customRedirects)
- function calcNameCheckBoxes() {
+ function calcFrontendCheckBoxes() {
let isTrue = true
- for (const item of redirects[name][protocol]) {
- if (nameDefaultRedirects === undefined) console.log(name + protocol + " is undefined")
- if (!nameDefaultRedirects.includes(item)) {
+ for (const item of redirects[frontend][network]) {
+ if (!frontendDefaultRedirects.includes(item)) {
isTrue = false
break
}
}
- for (const element of nameCheckListElement.getElementsByTagName("input")) {
- element.checked = nameDefaultRedirects.includes(element.className)
+ for (const element of frontendCheckListElement.getElementsByTagName("input")) {
+ element.checked = frontendDefaultRedirects.includes(element.className)
}
- if (nameDefaultRedirects.length == 0) isTrue = false
- nameProtocolElement.getElementsByClassName("toggle-all")[0].checked = isTrue
+ if (frontendDefaultRedirects.length == 0) isTrue = false
+ frontendNetworkElement.getElementsByClassName("toggle-all")[0].checked = isTrue
}
- nameCheckListElement.innerHTML = [
+ frontendCheckListElement.innerHTML = [
`
All settings have been reset as they're incompatible with the previous version.
-Sorry for the inconvenience, but we're going in a fast development process and can't support nor convert older settings. It will reach a stable plateau though.
- - - - -