about summary refs log tree commit diff stats
path: root/src/assets/javascripts/lbry.js
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-05-30 01:02:59 +0300
committerManeraKai <manerakai@protonmail.com>2022-05-30 01:02:59 +0300
commitc5a6623e0f320b2a789e0d2667ccfe2e1bd4335f (patch)
treedabfa0f2cecf137771f276996f9368922c5aeb64 /src/assets/javascripts/lbry.js
parentFixed typo for CopyRaw #291 (diff)
downloadlibredirect-c5a6623e0f320b2a789e0d2667ccfe2e1bd4335f.zip
Fixed settings theme and translation flashing #286
Diffstat (limited to 'src/assets/javascripts/lbry.js')
-rw-r--r--src/assets/javascripts/lbry.js156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/assets/javascripts/lbry.js b/src/assets/javascripts/lbry.js
new file mode 100644
index 00000000..b44cc738
--- /dev/null
+++ b/src/assets/javascripts/lbry.js
@@ -0,0 +1,156 @@
+window.browser = window.browser || window.chrome;
+
+import utils from './utils.js'
+
+let targets = ["odysee.com"];
+
+let redirects = {
+    "librarian": {
+        "normal": [
+            "https://lbry.bcow.xyz",
+            "https://odysee.076.ne.jp",
+            "https://lbry.ix.tc",
+            "https://librarian.pussthecat.org",
+            "https://lbry.mutahar.rocks",
+            "https://librarian.esmailelbob.xyz",
+        ],
+        "tor": [
+            "http://ecc5mi5ncdw6mxhjz6re6g2uevtpbzxjvxgrxia2gyvrlnil3srbnhyd.onion",
+            "http://vrmbc4brkgkaysmi3fenbzkayobxjh24slmhtocambn3ewe62iuqt3yd.onion",
+        ]
+    }
+}
+
+function setRedirects(val) {
+    redirects.librarian = val;
+    browser.storage.local.set({ lbryTargetsRedirects: redirects })
+    for (const item of librarianNormalRedirectsChecks)
+        if (!redirects.librarian.normal.includes(item)) {
+            var index = librarianNormalRedirectsChecks.indexOf(item);
+            if (index !== -1) librarianNormalRedirectsChecks.splice(index, 1);
+        }
+    browser.storage.local.set(librarianNormalRedirectsChecks);
+
+    for (const item of librarianTorRedirectsChecks)
+        if (!redirects.librarian.normal.includes(item)) {
+            var index = librarianTorRedirectsChecks.indexOf(item);
+            if (index !== -1) librarianTorRedirectsChecks.splice(index, 1);
+        }
+    browser.storage.local.set(librarianTorRedirectsChecks)
+}
+
+let
+    disableLbryTargets,
+    lbryTargetsProtocol,
+    lbryTargetsRedirects,
+    librarianNormalRedirectsChecks,
+    librarianNormalCustomRedirects,
+    librarianTorRedirectsChecks,
+    librarianTorCustomRedirects;
+
+function init() {
+    return new Promise(resolve => {
+        browser.storage.local.get(
+            [
+                "disableLbryTargets",
+                "lbryTargetsProtocol",
+                "lbryTargetsRedirects",
+                "librarianNormalRedirectsChecks",
+                "librarianNormalCustomRedirects",
+                "librarianTorRedirectsChecks",
+                "librarianTorCustomRedirects",
+            ],
+            r => {
+                disableLbryTargets = r.disableLbryTargets;
+                lbryTargetsProtocol = r.lbryTargetsProtocol;
+                lbryTargetsRedirects = r.lbryTargetsRedirects;
+                librarianNormalRedirectsChecks = r.librarianNormalRedirectsChecks;
+                librarianNormalCustomRedirects = r.librarianNormalCustomRedirects;
+                librarianTorRedirectsChecks = r.librarianTorRedirectsChecks;
+                librarianTorCustomRedirects = r.librarianTorCustomRedirects;
+                resolve();
+            }
+        )
+    })
+}
+init();
+browser.storage.onChanged.addListener(init)
+
+function all() {
+    return [
+        ...redirects.librarian.normal,
+        ...redirects.librarian.tor,
+        ...librarianNormalCustomRedirects,
+        ...librarianTorCustomRedirects,
+    ];
+}
+
+function switchInstance(url) {
+    return new Promise(async resolve => {
+        await init();
+        const protocolHost = utils.protocolHost(url);
+        if (!all().includes(protocolHost)) { resolve(); return; }
+
+        let instancesList;
+        if (lbryTargetsProtocol == 'normal') instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects];
+        else if (lbryTargetsProtocol == 'tor') instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects];
+
+        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) {
+    if (disableLbryTargets) return;
+    if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return;
+    if (!targets.includes(url.host)) return;
+    if (type != "main_frame") return;
+
+    let instancesList;
+    if (lbryTargetsProtocol == 'normal') instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects];
+    if (lbryTargetsProtocol == 'tor') instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects];
+    if (instancesList.length === 0) return;
+
+    const randomInstance = utils.getRandomInstance(instancesList);
+    return `${randomInstance}${url.pathname}${url.search}`;
+}
+
+function initDefaults() {
+    return new Promise(resolve => {
+        browser.storage.local.get('cloudflareList', async r => {
+            librarianNormalRedirectsChecks = [...redirects.librarian.normal];
+            for (const instance of r.cloudflareList) {
+                let i;
+
+                i = librarianNormalRedirectsChecks.indexOf(instance);
+                if (i > -1) librarianNormalRedirectsChecks.splice(i, 1);
+            }
+            await browser.storage.local.set({
+                disableLbryTargets: true,
+                lbryTargetsRedirects: {
+                    'librarian': redirects.librarian
+                },
+
+                librarianNormalRedirectsChecks: librarianNormalRedirectsChecks,
+                librarianNormalCustomRedirects: [],
+
+                librarianTorRedirectsChecks: [...redirects.librarian.tor],
+                librarianTorCustomRedirects: [],
+
+                lbryTargetsProtocol: "normal",
+            })
+            resolve();
+        })
+    })
+}
+
+export default {
+    setRedirects,
+    switchInstance,
+    redirect,
+    initDefaults,
+};