From bab3f02a3680c9f29e3dee40033c97c87750081b Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sat, 11 Jun 2022 14:14:14 +0300 Subject: Added quetre #230 --- src/assets/images/quora.png | Bin 0 -> 5499 bytes src/assets/javascripts/general.js | 2 + src/assets/javascripts/quora.js | 160 ++++++++++++++++++++++++++++++ src/assets/javascripts/utils.js | 4 + src/assets/javascripts/youtube/youtube.js | 5 +- 5 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 src/assets/images/quora.png create mode 100644 src/assets/javascripts/quora.js (limited to 'src/assets') diff --git a/src/assets/images/quora.png b/src/assets/images/quora.png new file mode 100644 index 00000000..d2a06954 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 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 + '; '; } -- cgit 1.4.1