about summary refs log tree commit diff stats
path: root/src/assets/javascripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r--src/assets/javascripts/general.js2
-rw-r--r--src/assets/javascripts/quora.js160
-rw-r--r--src/assets/javascripts/utils.js4
-rw-r--r--src/assets/javascripts/youtube/youtube.js5
4 files changed, 169 insertions, 2 deletions
diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js
index b6bf825d..7b643cfa 100644
--- a/src/assets/javascripts/general.js
+++ b/src/assets/javascripts/general.js
@@ -40,6 +40,7 @@ async function initDefaults() {
                 "reddit",
                 "search",
                 "medium",
+                "quora",
                 "translate",
                 "maps",
             ],
@@ -62,6 +63,7 @@ const allPopupFrontends = [
     "maps",
     "wikipedia",
     "medium",
+    "quora",
     "peertube",
     "lbry",
     "sendTargets"
diff --git a/src/assets/javascripts/quora.js b/src/assets/javascripts/quora.js
new file mode 100644
index 00000000..ecd305f0
--- /dev/null
+++ b/src/assets/javascripts/quora.js
@@ -0,0 +1,160 @@
+window.browser = window.browser || window.chrome;
+
+import utils from './utils.js'
+
+const targets = [
+    /^https?:\/{2}(www\.|)quora\.com.*/
+];
+
+let redirects = {
+    "quetre": {
+        "normal": [],
+        "tor": []
+    }
+}
+function setRedirects(val) {
+    browser.storage.local.get('cloudflareBlackList', r => {
+        redirects.quetre = val;
+        quetreNormalRedirectsChecks = [...redirects.quetre.normal];
+        for (const instance of r.cloudflareBlackList) {
+            const a = quetreNormalRedirectsChecks.indexOf(instance);
+            if (a > -1) quetreNormalRedirectsChecks.splice(a, 1);
+        }
+        browser.storage.local.set({
+            quoraRedirects: redirects,
+            quetreNormalRedirectsChecks
+        })
+    })
+}
+
+let
+    disableQuora,
+    quoraProtocol,
+    quoraRedirects,
+    quetreNormalRedirectsChecks,
+    quetreNormalCustomRedirects,
+    quetreTorRedirectsChecks,
+    quetreTorCustomRedirects;
+
+function init() {
+    return new Promise(async resolve => {
+        browser.storage.local.get(
+            [
+                "disableQuora",
+                "quoraProtocol",
+                "quoraRedirects",
+                "quetreNormalRedirectsChecks",
+                "quetreNormalCustomRedirects",
+                "quetreTorRedirectsChecks",
+                "quetreTorCustomRedirects",
+            ],
+            r => {
+                disableQuora = r.disableQuora;
+                quoraProtocol = r.quoraProtocol;
+                quoraRedirects = r.quoraRedirects;
+                quetreNormalRedirectsChecks = r.quetreNormalRedirectsChecks;
+                quetreNormalCustomRedirects = r.quetreNormalCustomRedirects;
+                quetreTorRedirectsChecks = r.quetreTorRedirectsChecks;
+                quetreTorCustomRedirects = r.quetreTorCustomRedirects;
+                resolve();
+            }
+        )
+    })
+}
+
+init();
+browser.storage.onChanged.addListener(init)
+
+// https://www.quora.com/@keysikaspol/video/7061265241887345946
+// https://www.quora.com/@keysikaspol
+function redirect(url, type, initiator) {
+    if (disableQuora) 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 (quoraProtocol == 'normal') instancesList = [...quetreNormalRedirectsChecks, ...quetreNormalCustomRedirects];
+    if (quoraProtocol == 'tor') instancesList = [...quetreTorRedirectsChecks, ...quetreTorCustomRedirects];
+    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
+        ];
+        if (!all.includes(protocolHost)) { resolve(); return; }
+
+        resolve(`https://quora.com${url.pathname}${url.search}`);
+    })
+}
+
+function switchInstance(url) {
+    return new Promise(async resolve => {
+        await init();
+        let protocolHost = utils.protocolHost(url);
+        const all = [
+            ...quoraRedirects.quetre.tor,
+            ...quoraRedirects.quetre.normal,
+
+            ...quetreNormalCustomRedirects,
+            ...quetreTorCustomRedirects,
+        ];
+        if (!all.includes(protocolHost)) { resolve(); return; }
+
+        let instancesList;
+        if (quoraProtocol == 'normal') instancesList = [...quetreNormalCustomRedirects, ...quetreNormalRedirectsChecks];
+        else if (quoraProtocol == 'tor') instancesList = [...quetreTorCustomRedirects, ...quetreTorRedirectsChecks];
+
+        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);
+            redirects.quetre = dataJson.quetre;
+            browser.storage.local.set({
+                disableQuora: false,
+                quoraProtocol: "normal",
+
+                quoraRedirects: redirects,
+
+                quetreNormalRedirectsChecks: [...redirects.quetre.normal],
+                quetreNormalCustomRedirects: [],
+
+                quetreTorRedirectsChecks: [...redirects.quetre.tor],
+                quetreTorCustomRedirects: [],
+            }, () => resolve());
+        });
+    })
+}
+
+export default {
+    setRedirects,
+
+    redirect,
+    reverse,
+    switchInstance,
+
+    initDefaults
+};
diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js
index e0b9ec9b..53a5bb2e 100644
--- a/src/assets/javascripts/utils.js
+++ b/src/assets/javascripts/utils.js
@@ -11,6 +11,7 @@ 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 imgurHelper from "./imgur.js";
 import localise from './localise.js'
 
@@ -47,6 +48,7 @@ function updateInstances() {
       searchHelper.setRedirects({ 'searx': instances.searx, 'searxng': instances.searxng, 'whoogle': instances.whoogle });
       wikipediaHelper.setRedirects(instances.wikiless);
       mediumHelper.setRedirects(instances.scribe);
+      quoraHelper.setRedirects(instances.query);
       sendTargetsHelper.setRedirects(instances.send);
       tiktokHelper.setRedirects(instances.proxiTok);
 
@@ -363,6 +365,7 @@ function copyRaw(test, copyRawElement) {
           if (!newUrl) newUrl = await twitterHelper.reverse(url);
           if (!newUrl) newUrl = await instagramHelper.reverse(url);
           if (!newUrl) newUrl = await tiktokHelper.reverse(url);
+          if (!newUrl) newUrl = await quoraHelper.reverse(url);
           if (!newUrl) newUrl = await imgurHelper.reverse(url);
 
           if (newUrl) {
@@ -435,6 +438,7 @@ function switchInstance(test) {
         if (!newUrl) newUrl = await searchHelper.switchInstance(url);
         if (!newUrl) newUrl = await translateHelper.switchInstance(url);
         if (!newUrl) newUrl = await mediumHelper.switchInstance(url);
+        if (!newUrl) newUrl = await quoraHelper.switchInstance(url);
         if (!newUrl) newUrl = await tiktokHelper.switchInstance(url);
         if (!newUrl) newUrl = await sendTargetsHelper.switchInstance(url);
         if (!newUrl) newUrl = await peertubeHelper.switchInstance(url);
diff --git a/src/assets/javascripts/youtube/youtube.js b/src/assets/javascripts/youtube/youtube.js
index 9caf6752..e11578ff 100644
--- a/src/assets/javascripts/youtube/youtube.js
+++ b/src/assets/javascripts/youtube/youtube.js
@@ -445,8 +445,9 @@ function removeXFrameOptions(e) {
         let newSecurity = '';
         for (const item of securityPolicyList) {
           if (item.trim() == '') continue
-          console.log('item', item);
-          let [, key, vals] = item.match(/([a-z-]{0,}) (.*)/);
+          let regex = item.match(/([a-z-]{0,}) (.*)/)
+          if (regex == null) continue
+          let [, key, vals] = regex;
           if (key == 'frame-src') vals = vals + ' ' + instancesList.join(' ');
           newSecurity += key + ' ' + vals + '; ';
         }