diff --git a/src/assets/images/quora.png b/src/assets/images/quora.png
new file mode 100644
index 0000000..d2a0695
Binary files /dev/null and b/src/assets/images/quora.png differ
diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js
index b6bf825..7b643cf 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 0000000..ecd305f
--- /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 e0b9ec9..53a5bb2 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 9caf675..e11578f 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 + '; ';
}
diff --git a/src/instances/data.json b/src/instances/data.json
index 6b71796..07a11e8 100644
--- a/src/instances/data.json
+++ b/src/instances/data.json
@@ -316,6 +316,14 @@
],
"tor": []
},
+ "quetre": {
+ "normal": [
+ "https://quetre.herokuapp.com",
+ "https://quora.vern.cc",
+ "https://quetre.pussthecat.org"
+ ],
+ "tor": []
+ },
"simplyTranslate": {
"normal": [
"https://simplytranslate.org",
@@ -357,7 +365,6 @@
"searx": {
"tor": [
"http://3afisqjw2rxm6z7mmstyt5rx75qfqrgxnkzftknbp2vhipr2nrmrjdyd.onion",
- "http://4n53nafyi77iplnbrpmxnp3x4exbswwxigujaxy3b37fvr7bvlopxeyd.onion",
"http://z34ambyi6makk6ta7ksog2sljly2ctt2sa3apekb7wkllk72sxecdtad.onion",
"http://yra4tke2pwcnatxjkufpw6kvebu3h3ti2jca2lcdpgx3mpwol326lzid.onion",
"http://z5vawdol25vrmorm4yydmohsd4u6rdoj2sylvoi3e3nqvxkvpqul7bqd.onion",
@@ -371,7 +378,6 @@
],
"normal": [
"https://anon.sx",
- "https://asowneryt.cloudns.nz",
"https://dynabyte.ca",
"https://jsearch.pw",
"https://nibblehole.com",
@@ -390,7 +396,6 @@
"https://searx.josie.lol",
"https://searx.kujonello.cf",
"https://searx.mastodontech.de",
- "https://searx.mha.fi",
"https://searx.mxchange.org",
"https://searx.nakhan.net",
"https://searx.netzspielplatz.de",
@@ -427,7 +432,9 @@
"searxng": {
"tor": [
"http://w5rl6wsd7mzj4bdkbuqvzidet5osdsm5jhg2f7nvfidakfq5exda5wid.onion",
+ "http://4n53nafyi77iplnbrpmxnp3x4exbswwxigujaxy3b37fvr7bvlopxeyd.onion",
"http://fpamcnxokg4lzz6b2y7jdwoujmnixfxrh7ptddehctqzoptn4wpdvjid.onion",
+ "http://gbat2pbpg7ys3fi3pbp64667tt5x66mg45xok35bxdw7v55brm7a27yd.onion",
"http://searxdr3pqz4nydgnqocsia2xbywptxbkympa2emn7zlgggrir4bkfad.onion",
"http://searx.micohauwkjbyw5meacrb4ipicwvwg4xtzl7y7viv53kig2mdcsvwkyyd.onion",
"http://rq2w52kyrif3xpfihkgjnhqm3a5aqhoikpv72z3drpjglfzc2wr5z4yd.onion",
@@ -435,6 +442,7 @@
],
"i2p": [],
"normal": [
+ "https://asowneryt.cloudns.nz",
"https://darmarit.org/searx",
"https://etsi.me",
"https://northboot.xyz",
@@ -449,6 +457,7 @@
"https://search.privacyguides.net",
"https://search.rabbit-company.com",
"https://search.roombob.cat",
+ "https://search.sapti.me",
"https://search.vojkovic.xyz",
"https://search.zzls.xyz",
"https://searx.albony.xyz",
@@ -458,6 +467,7 @@
"https://searx.fmac.xyz",
"https://searx.gnous.eu",
"https://searx.loafland.xyz",
+ "https://searx.mha.fi",
"https://searx.namejeff.xyz",
"https://searx.orion-hub.fr",
"https://searx.ppeb.me",
@@ -515,6 +525,7 @@
]
},
"peertube": [
+ "https://syop.tv",
"https://watch.thelema.social",
"https://tube.miegl.cz",
"https://mov.clov.fr",
@@ -891,7 +902,6 @@
"https://phoenixproject.group",
"https://peertube.sebu77.com",
"https://www.orion-hub.fr",
- "https://quantube.win",
"https://tv.orion-serv.fr",
"https://video.interru.io",
"https://tube.cnr.it",
diff --git a/src/instances/get_instances.py b/src/instances/get_instances.py
index b6bba60..18870f3 100644
--- a/src/instances/get_instances.py
+++ b/src/instances/get_instances.py
@@ -239,6 +239,27 @@ def scribe():
print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Scribe')
+def quetre():
+ r = requests.get(
+ 'https://raw.githubusercontent.com/zyachel/quetre/main/README.md')
+ _list = {}
+ _list['normal'] = []
+ _list['tor'] = []
+
+ tmp = re.findall(
+ r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|", r.text)
+
+ tmp = filterLastSlash(tmp)
+
+ for item in tmp:
+ if item.endswith('.onion'):
+ _list['tor'].append(item)
+ else:
+ _list['normal'].append(item)
+ mightyList['quetre'] = _list
+ print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Quetre')
+
+
def simplytranslate():
r = requests.get('https://simple-web.org/instances/simplytranslate')
simplyTranslateList = {}
@@ -370,6 +391,7 @@ libreddit()
teddit()
wikiless()
scribe()
+quetre()
simplytranslate()
linvgatranslate()
searx_searxng()
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index a1ac27d..07e7512 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -18,6 +18,7 @@ import tiktokHelper from "../../assets/javascripts/tiktok.js";
import sendTargetsHelper from "../../assets/javascripts/sendTargets.js";
import peertubeHelper from "../../assets/javascripts/peertube.js";
import lbryHelper from "../../assets/javascripts/lbry.js";
+import quoraHelper from "../../assets/javascripts/quora.js";
window.browser = window.browser || window.chrome;
@@ -41,6 +42,7 @@ browser.runtime.onInstalled.addListener(
searchHelper.initDefaults();
translateHelper.initDefaults();
mediumHelper.initDefaults();
+ quoraHelper.initDefaults();
redditHelper.initDefaults();
wikipediaHelper.initDefaults();
imgurHelper.initDefaults();
@@ -98,6 +100,7 @@ browser.webRequest.onBeforeRequest.addListener(
if (!newUrl) newUrl = mapsHelper.redirect(url, initiator);
if (!newUrl) newUrl = redditHelper.redirect(url, details.type, initiator);
if (!newUrl) newUrl = mediumHelper.redirect(url, details.type, initiator);
+ if (!newUrl) newUrl = quoraHelper.redirect(url, details.type, initiator);
if (!newUrl) newUrl = imgurHelper.redirect(url, details.type, initiator);
if (!newUrl) newUrl = tiktokHelper.redirect(url, details.type, initiator);
if (!newUrl) newUrl = sendTargetsHelper.redirect(url, details.type, initiator);
@@ -174,6 +177,7 @@ async function redirectOfflineInstance(url, tabId) {
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 imgurHelper.switchInstance(url);
if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url);
diff --git a/src/pages/options/index.html b/src/pages/options/index.html
index 8d19b3a..dd09950 100644
--- a/src/pages/options/index.html
+++ b/src/pages/options/index.html
@@ -30,6 +30,7 @@