diff options
Diffstat (limited to 'src')
22 files changed, 2114 insertions, 2500 deletions
diff --git a/src/assets/javascripts/helpers/general.js b/src/assets/javascripts/helpers/general.js index 4c70997f..199d884c 100644 --- a/src/assets/javascripts/helpers/general.js +++ b/src/assets/javascripts/helpers/general.js @@ -2,46 +2,49 @@ window.browser = window.browser || window.chrome; function isException(url) { - return new Promise(resolve => { - browser.storage.local.get( - 'exceptions', - r => { - for (const item of r.exceptions.url) - if (item == `${url.protocol}//${url.host}`) { resolve(true); return; } - for (const item of r.exceptions.regex) - if (new RegExp(item).test(url.href)) { resolve(true); return; } - resolve(false); return; - } - ) - }) + 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; } -function initDefaults() { - return new Promise(async resolve => { - await browser.storage.local.set({ - exceptions: { - "url": [], - "regex": [], - }, - theme: "DEFAULT", - popupFrontends: [ - "youtube", - "twitter", - "instagram", - "tikTok", - "imgur", - "reddit", - "search", - "medium", - "translate", - "maps", - ], - autoRedirect: false, - }) - resolve(); - }) +let exceptions; + +function init() { + browser.storage.local.get( + 'exceptions', + r => { + exceptions = r.exceptions; + } + ) } +init(); +browser.storage.onChanged.addListener(init) + +async function initDefaults() { + await browser.storage.local.set({ + exceptions: { + "url": [], + "regex": [], + }, + theme: "DEFAULT", + popupFrontends: [ + "youtube", + "twitter", + "instagram", + "tikTok", + "imgur", + "reddit", + "search", + "medium", + "translate", + "maps", + ], + autoRedirect: false, + }) +} const allPopupFrontends = [ "youtube", @@ -61,7 +64,6 @@ const allPopupFrontends = [ "sendTargets" ]; - export default { isException, initDefaults, diff --git a/src/assets/javascripts/helpers/imgur.js b/src/assets/javascripts/helpers/imgur.js index 69159b00..9f93f362 100644 --- a/src/assets/javascripts/helpers/imgur.js +++ b/src/assets/javascripts/helpers/imgur.js @@ -11,50 +11,57 @@ let redirects = { "i2p": [] } } -function setRedirects(val) { - redirects.rimgo = val; - browser.storage.local.set({ imgurRedirects: redirects }) - console.log("imgurRedirects: ", val) - for (const item of rimgoNormalRedirectsChecks) - if (!redirects.rimgo.normal.includes(item)) { - var index = rimgoNormalRedirectsChecks.indexOf(item); - if (index !== -1) rimgoNormalRedirectsChecks.splice(index, 1); - } - browser.storage.local.set({ rimgoNormalRedirectsChecks }); - - for (const item of rimgoTorRedirectsChecks) - if (!redirects.rimgo.tor.includes(item)) { - var index = rimgoTorRedirectsChecks.indexOf(item); - if (index !== -1) rimgoTorRedirectsChecks.splice(index, 1); - } - browser.storage.local.set({ rimgoTorRedirectsChecks }); - - for (const item of rimgoI2pRedirectsChecks) - if (!redirects.rimgo.i2p.includes(item)) { - var index = rimgoI2pRedirectsChecks.indexOf(item); - if (index !== -1) rimgoI2pRedirectsChecks.splice(index, 1); - } - browser.storage.local.set({ rimgoI2pRedirectsChecks }); +function setRedirects() { + return new Promise(resolve => { + fetch('/instances/data.json').then(response => response.text()).then(async data => { + let dataJson = JSON.parse(data); + redirects.rimgo = dataJson.rimgo; -} + rimgoNormalRedirectsChecks = [...redirects.rimgo.normal]; + rimgoTorRedirectsChecks = [...redirects.rimgo.tor]; + rimgoI2pRedirectsChecks = [...redirects.rimgo.i2p]; -let - disable, - protocol; + for (const instance of r.cloudflareList) { + const a = rimgoNormalRedirectsChecks.indexOf(instance); + if (a > -1) rimgoNormalRedirectsChecks.splice(a, 1); + + const b = rimgoTorRedirectsChecks.indexOf(instance); + if (b > -1) rimgoTorRedirectsChecks.splice(b, 1); + + const c = rimgoI2pRedirectsChecks.indexOf(instance); + if (c > -1) rimgoI2pRedirectsChecks.splice(c, 1); + } + + await browser.storage.local.set({ + imgurRedirects: redirects, + rimgoNormalRedirectsChecks, + rimgoTorRedirectsChecks, + rimgoI2pRedirectsChecks, + }); + + resolve(); + }) + }) +} let + disableImgur, + imgurRedirects, + imgurProtocol, rimgoNormalRedirectsChecks, + rimgoNormalCustomRedirects, rimgoTorRedirectsChecks, - rimgoI2pRedirectsChecks; + rimgoTorCustomRedirects, + rimgoI2pRedirectsChecks, + rimgoI2pCustomRedirects; -function redirect(url, type, initiator) { - return new Promise(resolve => { +function init() { + return new Promise(async resolve => { browser.storage.local.get( [ "disableImgur", "imgurRedirects", "imgurProtocol", - "rimgoNormalRedirectsChecks", "rimgoNormalCustomRedirects", "rimgoTorRedirectsChecks", @@ -63,107 +70,84 @@ function redirect(url, type, initiator) { "rimgoI2pCustomRedirects", ], r => { - if (r.disableImgur) { resolve(); return; } - if (url.pathname == "/") { resolve(); return; } - if (!["main_frame", "sub_frame", "xmlhttprequest", "other", "image", "media",].includes(type)) { resolve(); return; } - if ( - initiator && - ( - [ - ...r.imgurRedirects.rimgo.normal, - ...r.rimgoNormalCustomRedirects, - ...r.rimgoTorCustomRedirects, - ...r.rimgoI2pCustomRedirects, - ].includes(initiator.origin) || targets.test(initiator.host)) - ) { resolve(); return; } - if (!targets.test(url.href)) { resolve(); return; } - if (url.pathname.includes("delete/")) { resolve(); return; } - // 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 - let instancesList; - if (r.imgurProtocol == 'normal') instancesList = [...r.rimgoNormalRedirectsChecks, ...r.rimgoNormalCustomRedirects]; - if (r.imgurProtocol == 'tor') instancesList = [...r.rimgoTorRedirectsChecks, ...r.rimgoTorCustomRedirects]; - if (r.imgurProtocol == 'i2p') instancesList = [...r.rimgoI2pRedirectsChecks, ...r.rimgoI2pCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - - let randomInstance = utils.getRandomInstance(instancesList) - resolve(`${randomInstance}${url.pathname}${url.search}`); + disableImgur = r.disableImgur; + imgurRedirects = r.imgurRedirects; + imgurProtocol = r.imgurProtocol; + rimgoNormalRedirectsChecks = r.rimgoNormalRedirectsChecks; + rimgoNormalCustomRedirects = r.rimgoNormalCustomRedirects; + rimgoTorRedirectsChecks = r.rimgoTorRedirectsChecks; + rimgoTorCustomRedirects = r.rimgoTorCustomRedirects; + rimgoI2pRedirectsChecks = r.rimgoI2pRedirectsChecks; + rimgoI2pCustomRedirects = r.rimgoI2pCustomRedirects; + resolve(); } ) }) } -async function reverse(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "imgurRedirects", - "rimgoNormalCustomRedirects", - "rimgoTorCustomRedirects", - "rimgoI2pCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if ( - ![ - ...r.imgurRedirects.rimgo.normal, - ...r.imgurRedirects.rimgo.tor, - ...r.imgurRedirects.rimgo.i2p, - ...r.rimgoNormalCustomRedirects, - ...r.rimgoTorCustomRedirects, - ...r.rimgoI2pCustomRedirects - ].includes(protocolHost) - ) { resolve(); return; } - resolve(`https://imgur.com${url.pathname}${url.search}`); - } - ) - }) +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, + ]; } -function switchInstance(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "imgurRedirects", - "imgurProtocol", - - "rimgoNormalRedirectsChecks", - "rimgoNormalCustomRedirects", +function redirect(url, type, initiator) { + if (disableImgur) return; + if (url.pathname == "/") 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 (imgurProtocol == 'normal') instancesList = [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects]; + if (imgurProtocol == 'tor') instancesList = [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects]; + if (imgurProtocol == 'i2p') instancesList = [...rimgoI2pRedirectsChecks, ...rimgoI2pCustomRedirects]; + if (instancesList.length === 0) return; + + const randomInstance = utils.getRandomInstance(instancesList); + return `${randomInstance}${url.pathname}${url.search}`; +} - "rimgoTorRedirectsChecks", - "rimgoTorCustomRedirects", +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}`); + }) +} - "rimgoI2pRedirectsChecks", - "rimgoI2pCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...r.imgurRedirects.rimgo.normal, - ...r.imgurRedirects.rimgo.tor, - ...r.imgurRedirects.rimgo.i2p, - - ...r.rimgoNormalCustomRedirects, - ...r.rimgoTorCustomRedirects, - ...r.rimgoI2pCustomRedirects, - ].includes(protocolHost)) resolve(); - - let instancesList; - if (r.imgurProtocol == 'normal') instancesList = [...r.rimgoNormalCustomRedirects, ...r.rimgoNormalRedirectsChecks]; - else if (r.imgurProtocol == 'tor') instancesList = [...r.rimgoTorCustomRedirects, ...r.rimgoTorRedirectsChecks]; - else if (r.imgurProtocol == 'i2p') instancesList = [...r.rimgoI2pCustomRedirects, ...r.rimgoI2pRedirectsChecks]; - - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) resolve(); - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - } - ) +function switchInstance(url) { + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost)) { resolve(); return; } + let instancesList; + if (imgurProtocol == 'normal') instancesList = [...rimgoNormalCustomRedirects, ...rimgoNormalRedirectsChecks]; + else if (imgurProtocol == 'tor') instancesList = [...rimgoTorCustomRedirects, ...rimgoTorRedirectsChecks]; + else if (imgurProtocol == 'i2p') instancesList = [...rimgoI2pCustomRedirects, ...rimgoI2pRedirectsChecks]; + + 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}`); }) } @@ -175,7 +159,7 @@ function initDefaults() { browser.storage.local.get('cloudflareList', async r => { rimgoNormalRedirectsChecks = [...redirects.rimgo.normal]; for (const instance of r.cloudflareList) { - let i = rimgoNormalRedirectsChecks.indexOf(instance); + const i = rimgoNormalRedirectsChecks.indexOf(instance); if (i > -1) rimgoNormalRedirectsChecks.splice(i, 1); } await browser.storage.local.set({ @@ -200,7 +184,6 @@ function initDefaults() { export default { setRedirects, - redirect, reverse, initDefaults, diff --git a/src/assets/javascripts/helpers/instagram.js b/src/assets/javascripts/helpers/instagram.js index 8890ec19..f5c54b3a 100644 --- a/src/assets/javascripts/helpers/instagram.js +++ b/src/assets/javascripts/helpers/instagram.js @@ -26,126 +26,105 @@ function setRedirects(val) { }) } -let bibliogramNormalRedirectsChecks; - -function redirect(url, type, initiator) { - return new Promise(resolve => { +let + disableInstagram, + instagramProtocol, + instagramRedirects, + bibliogramNormalRedirectsChecks, + bibliogramTorRedirectsChecks, + bibliogramNormalCustomRedirects, + bibliogramTorCustomRedirects; + +function init() { + return new Promise(async resolve => { browser.storage.local.get( [ "disableInstagram", "instagramProtocol", - "instagramRedirects", - "bibliogramNormalRedirectsChecks", "bibliogramTorRedirectsChecks", - "bibliogramNormalCustomRedirects", "bibliogramTorCustomRedirects", ], r => { - if (r.disableInstagram) { resolve(); return; } - if ( - initiator && - ([ - ...r.instagramRedirects.bibliogram.normal, - ...r.instagramRedirects.bibliogram.tor, - ...r.bibliogramNormalCustomRedirects, - ...r.bibliogramTorCustomRedirects, - ].includes(initiator.origin)) - ) { resolve('BYPASSTAB'); return; } - - if (!targets.includes(url.host)) { resolve(); return; } - if (!["main_frame", "sub_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) { resolve(); return; } - - const bypassPaths = [/about/, /explore/, /support/, /press/, /api/, /privacy/, /safety/, /admin/, /\/(accounts\/|embeds?.js)/]; - if (bypassPaths.some(rx => rx.test(url.pathname))) { resolve(); return; } - - let instancesList; - if (r.instagramProtocol == 'normal') instancesList = [...r.bibliogramNormalRedirectsChecks, ...r.bibliogramNormalCustomRedirects]; - else if (r.instagramProtocol == 'tor') instancesList = [...r.bibliogramTorRedirectsChecks, ...r.bibliogramTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList) - - const reservedPaths = ["u", "p", "privacy",]; - if (url.pathname === "/" || reservedPaths.includes(url.pathname.split("/")[1])) - resolve(`${randomInstance}${url.pathname}${url.search}`); - if (url.pathname.startsWith("/reel") || url.pathname.startsWith("/tv")) - resolve(`${randomInstance}/p${url.pathname.replace(/\/reel|\/tv/i, '')}${url.search}`); - else - resolve(`${randomInstance}/u${url.pathname}${url.search}`); // Likely a user profile, redirect to '/u/...' + disableInstagram = r.disableInstagram; + instagramProtocol = r.instagramProtocol; + instagramRedirects = r.instagramRedirects; + bibliogramNormalRedirectsChecks = r.bibliogramNormalRedirectsChecks; + bibliogramTorRedirectsChecks = r.bibliogramTorRedirectsChecks; + bibliogramNormalCustomRedirects = r.bibliogramNormalCustomRedirects; + bibliogramTorCustomRedirects = r.bibliogramTorCustomRedirects; + resolve(); } ) }) } -function reverse(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "instagramRedirects", - "bibliogramNormalCustomRedirects", - "bibliogramTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if ( - ![ - ...r.instagramRedirects.bibliogram.normal, - ...r.instagramRedirects.bibliogram.tor, - ...r.bibliogramNormalCustomRedirects, - ...r.bibliogramTorCustomRedirects - ].includes(protocolHost) - ) { resolve(); return; } - - if (url.pathname.startsWith('/p')) { - resolve(`https://instagram.com${url.pathname.replace('/p', '')}${url.search}`); return; - } - if (url.pathname.startsWith('/u')) { - resolve(`https://instagram.com${url.pathname.replace('/u', '')}${url.search}`); return; - } +init(); +browser.storage.onChanged.addListener(init) - resolve(`https://instagram.com${url.pathname}${url.search}`); - } - ) - }) +function all() { + return [ + ...instagramRedirects.bibliogram.normal, + ...instagramRedirects.bibliogram.tor, + ...bibliogramNormalCustomRedirects, + ...bibliogramTorCustomRedirects, + ] } -function switchInstance(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "instagramRedirects", - "instagramProtocol", - - "bibliogramNormalRedirectsChecks", - "bibliogramTorRedirectsChecks", +function redirect(url, type, initiator) { + if (disableInstagram) return; + if (initiator && all().includes(initiator.origin)) return 'BYPASSTAB'; + if (!targets.includes(url.host)) return; + 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 (instagramProtocol == 'normal') instancesList = [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects]; + else if (instagramProtocol == 'tor') instancesList = [...bibliogramTorRedirectsChecks, ...bibliogramTorCustomRedirects]; + 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/...' +} - "bibliogramNormalCustomRedirects", - "bibliogramTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); +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}`); + }) +} - if (![ - ...r.instagramRedirects.bibliogram.normal, - ...r.instagramRedirects.bibliogram.tor, - ...r.bibliogramNormalCustomRedirects, - ...r.bibliogramTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } +function switchInstance(url) { + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost)) { resolve(); return; } - let instancesList; - if (r.instagramProtocol == 'normal') instancesList = [...r.bibliogramNormalCustomRedirects, ...r.bibliogramNormalRedirectsChecks]; - else if (r.instagramProtocol == 'tor') instancesList = [...r.bibliogramTorCustomRedirects, ...r.bibliogramTorRedirectsChecks]; + let instancesList; + if (instagramProtocol == 'normal') instancesList = [...bibliogramNormalCustomRedirects, ...bibliogramNormalRedirectsChecks]; + else if (instagramProtocol == 'tor') instancesList = [...bibliogramTorCustomRedirects, ...bibliogramTorRedirectsChecks]; - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) { resolve(); return; } + const i = instancesList.indexOf(protocolHost); + if (i > -1) instancesList.splice(i, 1); + if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - } - ) + const randomInstance = utils.getRandomInstance(instancesList); + resolve(`${randomInstance}${url.pathname}${url.search}`); }) } @@ -157,7 +136,7 @@ function initDefaults() { browser.storage.local.get('cloudflareList', r => { bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal]; for (const instance of r.cloudflareList) { - let i = bibliogramNormalRedirectsChecks.indexOf(instance); + const i = bibliogramNormalRedirectsChecks.indexOf(instance); if (i > -1) bibliogramNormalRedirectsChecks.splice(i, 1); } browser.storage.local.set({ @@ -180,9 +159,7 @@ function initDefaults() { export default { setRedirects, - reverse, - redirect, initDefaults, switchInstance, diff --git a/src/assets/javascripts/helpers/lbry.js b/src/assets/javascripts/helpers/lbry.js index e3f216d7..b44cc738 100644 --- a/src/assets/javascripts/helpers/lbry.js +++ b/src/assets/javascripts/helpers/lbry.js @@ -24,7 +24,6 @@ let redirects = { function setRedirects(val) { redirects.librarian = val; browser.storage.local.set({ lbryTargetsRedirects: redirects }) - console.log("lbryTargetsRedirects: ", val) for (const item of librarianNormalRedirectsChecks) if (!redirects.librarian.normal.includes(item)) { var index = librarianNormalRedirectsChecks.indexOf(item); @@ -40,86 +39,86 @@ function setRedirects(val) { browser.storage.local.set(librarianTorRedirectsChecks) } -let librarianNormalRedirectsChecks; -let librarianTorRedirectsChecks; +let + disableLbryTargets, + lbryTargetsProtocol, + lbryTargetsRedirects, + librarianNormalRedirectsChecks, + librarianNormalCustomRedirects, + librarianTorRedirectsChecks, + librarianTorCustomRedirects; -async function switchInstance(url) { +function init() { return new Promise(resolve => { browser.storage.local.get( [ - "lbryTargetsRedirects", + "disableLbryTargets", "lbryTargetsProtocol", - + "lbryTargetsRedirects", "librarianNormalRedirectsChecks", "librarianNormalCustomRedirects", - "librarianTorRedirectsChecks", "librarianTorCustomRedirects", ], r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...redirects.librarian.normal, - ...redirects.librarian.tor, - ...r.librarianNormalCustomRedirects, - ...r.librarianTorCustomRedirects, - ].includes(protocolHost)) resolve(); - - let instancesList; - if (r.lbryTargetsProtocol == 'normal') instancesList = [...r.librarianNormalRedirectsChecks, ...r.librarianNormalCustomRedirects]; - else if (r.lbryTargetsProtocol == 'tor') instancesList = [...r.librarianTorRedirectsChecks, ...r.librarianTorCustomRedirects]; - - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) resolve(); - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); + 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 redirect(url, type, initiator) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableLbryTargets", - "lbryTargetsProtocol", +function switchInstance(url) { + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost)) { resolve(); return; } - "lbryTargetsRedirects", + let instancesList; + if (lbryTargetsProtocol == 'normal') instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects]; + else if (lbryTargetsProtocol == 'tor') instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects]; - "librarianNormalRedirectsChecks", - "librarianNormalCustomRedirects", + const i = instancesList.indexOf(protocolHost); + if (i > -1) instancesList.splice(i, 1); + if (instancesList.length === 0) { resolve(); return; } - "librarianTorRedirectsChecks", - "librarianTorCustomRedirects", - ], - r => { - if (r.disableLbryTargets) { resolve(); return; } - if (initiator && ( - [ - ...r.lbryTargetsRedirects.librarian.normal, - ...r.librarianNormalCustomRedirects, - ...r.librarianTorCustomRedirects, - ].includes(initiator.origin) || - targets.includes(initiator.host)) - ) { resolve(); return; } - if (!targets.includes(url.host)) { resolve(); return; } - if (type != "main_frame") { resolve(); return; } - - let instancesList; - if (r.lbryTargetsProtocol == 'normal') instancesList = [...r.librarianNormalRedirectsChecks, ...r.librarianNormalCustomRedirects]; - if (r.lbryTargetsProtocol == 'tor') instancesList = [...r.librarianTorRedirectsChecks, ...r.librarianTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - } - ) + 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 => { @@ -152,7 +151,6 @@ function initDefaults() { export default { setRedirects, switchInstance, - redirect, initDefaults, }; diff --git a/src/assets/javascripts/helpers/maps.js b/src/assets/javascripts/helpers/maps.js index 8d09121b..3ab5e2b6 100644 --- a/src/assets/javascripts/helpers/maps.js +++ b/src/assets/javascripts/helpers/maps.js @@ -18,189 +18,189 @@ let redirects = { } }; + +let + disableMaps, + mapsFrontend, + facilNormalRedirectsChecks, + facilNormalCustomRedirects; + +function init() { + browser.storage.local.get( + [ + "disableMaps", + "mapsFrontend", + "facilNormalRedirectsChecks", + "facilNormalCustomRedirects", + ], + r => { + disableMaps = r.disableMaps; + mapsFrontend = r.mapsFrontend; + facilNormalRedirectsChecks = r.facilNormalRedirectsChecks; + facilNormalCustomRedirects = r.facilNormalCustomRedirects; + } + ) +} + +init(); +browser.storage.onChanged.addListener(init) + function redirect(url, initiator) { - return new Promise( - resolve => { - browser.storage.local.get( - [ - "disableMaps", - "mapsFrontend", - - "facilNormalRedirectsChecks", - "facilNormalCustomRedirects", - ], - async r => { - 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", - }; - - async function addressToLatLng(address) { - return new Promise(async resolve => { - const xmlhttp = new XMLHttpRequest(); - xmlhttp.onreadystatechange = () => { - if (xmlhttp.readyState === XMLHttpRequest.DONE) { - if (xmlhttp.status === 200) { - const json = JSON.parse(xmlhttp.responseText)[0]; - - if (json) { - console.log('json', json) - resolve([ - `${json.lat},${json.lon}`, - `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`, - ]); - } - } else - console.info("Error: Status is " + xmlhttp.status); - } - }; - xmlhttp.open( - "GET", - `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`, - true - ); - xmlhttp.send(); - }) - } - - if (r.disableMaps) { resolve(); return; } - if (initiator && initiator.host === "earth.google.com") { resolve(); return; } - if (!url.href.match(targets)) { resolve(); return; } - - let randomInstance; - if (r.mapsFrontend == 'osm') randomInstance = utils.getRandomInstance(redirects.osm.normal); - if (r.mapsFrontend == 'facil') randomInstance = utils.getRandomInstance([...r.facilNormalRedirectsChecks, ...r.facilNormalCustomRedirects]); - - 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 (r.mapsFrontend == 'osm') mapCentre = `#map=${zoom}/${lat}/${lon}`; - if (r.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] = await addressToLatLng(query); - prefs.bbox = boundingbox; - prefs.marker = coords; - prefs.layer = "mapnik"; - let prefsEncoded = new URLSearchParams(prefs).toString(); - if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/export/embed.html?${prefsEncoded}`); return; } - - if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${query}`); return; } - - } 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 (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/directions?${prefsEncoded}${mapCentre}`); return; } - if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModesFacil[travMod]}`); return; } - - } 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 (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; } - if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; } - - } 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 (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; } - if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; } - } 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 (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; } - if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; } - } 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 (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}`); return; } - if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/${mapCentre}/Mpnk/${query}`); return; } - } - } - - let prefsEncoded = new URLSearchParams(prefs).toString(); - console.log("mapCentre", mapCentre); - console.log("prefs", prefs); - console.log("prefsEncoded", prefsEncoded); - if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/${mapCentre}&${prefsEncoded}`); return; } - if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/${mapCentre}/Mpnk`); 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); + } + + if (disableMaps) return; + if (initiator && initiator.host === "earth.google.com") return; + if (!url.href.match(targets)) return; + + let randomInstance; + if (mapsFrontend == 'osm') randomInstance = utils.getRandomInstance(redirects.osm.normal); + if (mapsFrontend == 'facil') randomInstance = utils.getRandomInstance([...facilNormalRedirectsChecks, ...facilNormalCustomRedirects]); + + 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') { resolve(`${randomInstance}/export/embed.html?${prefsEncoded}`); return; } + + if (mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${query}`); return; } + + } 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') { resolve(`${randomInstance}/directions?${prefsEncoded}${mapCentre}`); return; } + if (mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModesFacil[travMod]}`); return; } + + } 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') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; } + if (mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; } + + } 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') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; } + if (mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; } + } 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') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; } + if (mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; } + } 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') { resolve(`${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}`); return; } + if (mapsFrontend == 'facil') { resolve(`${randomInstance}/${mapCentre}/Mpnk/${query}`); return; } + } + } + + let prefsEncoded = new URLSearchParams(prefs).toString(); + console.log("mapCentre", mapCentre); + console.log("prefs", prefs); + console.log("prefsEncoded", prefsEncoded); + if (mapsFrontend == 'osm') { resolve(`${randomInstance}/${mapCentre}&${prefsEncoded}`); return; } + if (mapsFrontend == 'facil') { resolve(`${randomInstance}/${mapCentre}/Mpnk`); return; } } async function initDefaults() { await browser.storage.local.set({ disableMaps: false, mapsFrontend: 'osm', - mapsRedirects: redirects, - facilNormalRedirectsChecks: [...redirects.facil.normal], facilNormalCustomRedirects: [], }) diff --git a/src/assets/javascripts/helpers/medium.js b/src/assets/javascripts/helpers/medium.js index aabb32bf..0a028f07 100644 --- a/src/assets/javascripts/helpers/medium.js +++ b/src/assets/javascripts/helpers/medium.js @@ -49,10 +49,16 @@ function setRedirects(val) { }) } -let scribeNormalRedirectsChecks; -let scribeTorRedirectsChecks; - -function redirect(url, type, initiator) { +let + disableMedium, + mediumRedirects, + scribeNormalRedirectsChecks, + scribeNormalCustomRedirects, + scribeTorRedirectsChecks, + scribeTorCustomRedirects, + mediumProtocol; + +function init() { return new Promise(resolve => { browser.storage.local.get( [ @@ -65,63 +71,67 @@ function redirect(url, type, initiator) { "mediumProtocol" ], r => { - if (r.disableMedium) { resolve(); return; } - if (type != "main_frame" && "sub_frame" && "xmlhttprequest" && "other") { resolve(); return; } - if (initiator && ( - [ - ...r.mediumRedirects.scribe.normal, - ...r.mediumRedirects.scribe.tor, - ...r.scribeNormalCustomRedirects, - ...r.scribeTorCustomRedirects, - ].includes(initiator.origin))) { resolve(); return; } - - if (!targets.some(rx => rx.test(url.host))) { resolve(); return; } - if (/^\/($|@[a-zA-Z.]{0,}(\/|)$)/.test(url.pathname)) { resolve(); return; } - - let instancesList; - if (r.mediumProtocol == 'normal') instancesList = [...r.scribeNormalRedirectsChecks, ...r.scribeNormalCustomRedirects]; - else if (r.mediumProtocol == 'tor') instancesList = [...r.scribeTorRedirectsChecks, ...r.scribeTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - - let randomInstance = utils.getRandomInstance(instancesList) - resolve(`${randomInstance}${url.pathname}${url.search}`); + disableMedium = r.disableMedium; + mediumRedirects = r.mediumRedirects; + scribeNormalRedirectsChecks = r.scribeNormalRedirectsChecks; + scribeNormalCustomRedirects = r.scribeNormalCustomRedirects; + scribeTorRedirectsChecks = r.scribeTorRedirectsChecks; + scribeTorCustomRedirects = r.scribeTorCustomRedirects; + mediumProtocol = r.mediumProtocol; + resolve(); } ) }) } + +init(); +browser.storage.onChanged.addListener(init) + +function redirect(url, type, initiator) { + if (disableMedium) return; + if (type != "main_frame" && "sub_frame" && "xmlhttprequest" && "other") return; + if (initiator && ( + [ + ...mediumRedirects.scribe.normal, + ...mediumRedirects.scribe.tor, + ...scribeNormalCustomRedirects, + ...scribeTorCustomRedirects, + ].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 (mediumProtocol == 'normal') instancesList = [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects]; + else if (mediumProtocol == 'tor') instancesList = [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects]; + if (instancesList.length === 0) return; + + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}${url.search}`; +} + function switchInstance(url) { return new Promise(resolve => { - browser.storage.local.get( - [ - "mediumRedirects", - "mediumProtocol", - - "scribeNormalRedirectsChecks", - "scribeNormalCustomRedirects", - "scribeTorRedirectsChecks", - "scribeTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...r.mediumRedirects.scribe.tor, - ...r.mediumRedirects.scribe.normal, - - ...r.scribeNormalCustomRedirects, - ...r.scribeTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - let instancesList; - if (r.mediumProtocol == 'normal') instancesList = [...r.scribeNormalCustomRedirects, ...r.scribeNormalRedirectsChecks]; - else if (r.mediumProtocol == 'tor') instancesList = [...r.scribeTorCustomRedirects, ...r.scribeTorRedirectsChecks]; - - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) { resolve(); return; } - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + let protocolHost = utils.protocolHost(url); + const all = [ + ...mediumRedirects.scribe.tor, + ...mediumRedirects.scribe.normal, + + ...scribeNormalCustomRedirects, + ...scribeTorCustomRedirects, + ]; + if (!all.includes(protocolHost)) { resolve(); return; } + + let instancesList; + if (mediumProtocol == 'normal') instancesList = [...scribeNormalCustomRedirects, ...scribeNormalRedirectsChecks]; + else if (mediumProtocol == 'tor') instancesList = [...scribeTorCustomRedirects, ...scribeTorRedirectsChecks]; + + 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}`); }) } @@ -157,8 +167,7 @@ function initDefaults() { export default { setRedirects, - redirect, - initDefaults, switchInstance, + initDefaults, }; diff --git a/src/assets/javascripts/helpers/peertube.js b/src/assets/javascripts/helpers/peertube.js index ba06b8d8..cf532e23 100644 --- a/src/assets/javascripts/helpers/peertube.js +++ b/src/assets/javascripts/helpers/peertube.js @@ -6,7 +6,7 @@ let redirects = { "simpleertube": { "normal": [ "https://tube.simple-web.org", - "https://tube.fr.tild3.org", + "https://tube.ftild3.org", "https://stube.alefvanoon.xyz", "https://st.phreedom.club", "https://simpleertube.esmailelbob.xyz", @@ -31,94 +31,93 @@ function setRedirects(val) { } browser.storage.local.set({ simpleertubeTorRedirectsChecks }) } + let + disablePeertubeTargets, + peertubeRedirects, simpleertubeNormalRedirectsChecks, - simpleertubeTorRedirectsChecks; - + simpleertubeNormalCustomRedirects, + simpleertubeTorRedirectsChecks, + simpleertubeTorCustomRedirects, + peerTubeTargets, + peertubeTargetsProtocol; -async function switchInstance(url) { +function init() { return new Promise(resolve => { browser.storage.local.get( [ - "peerTubeTargets", - "peertubeTargetsProtocol", - + "disablePeertubeTargets", + "peertubeRedirects", "simpleertubeNormalRedirectsChecks", "simpleertubeNormalCustomRedirects", - "simpleertubeTorRedirectsChecks", "simpleertubeTorCustomRedirects", + "peerTubeTargets", + "peertubeTargetsProtocol" ], r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...redirects.simpleertube.normal, - ...redirects.simpleertube.tor, - ...r.simpleertubeNormalCustomRedirects, - ...r.simpleertubeTorCustomRedirects, - ].includes(protocolHost)) resolve(); - - let instancesList; - if (r.peertubeTargetsProtocol == 'normal') instancesList = [...r.simpleertubeNormalRedirectsChecks, ...r.simpleertubeNormalCustomRedirects]; - else if (r.peertubeTargetsProtocol == 'tor') instancesList = [...r.simpleertubeTorRedirectsChecks, ...r.simpleertubeTorCustomRedirects]; - - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) resolve() - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); + disablePeertubeTargets = r.disablePeertubeTargets; + peertubeRedirects = r.peertubeRedirects; + simpleertubeNormalRedirectsChecks = r.simpleertubeNormalRedirectsChecks; + simpleertubeNormalCustomRedirects = r.simpleertubeNormalCustomRedirects; + simpleertubeTorRedirectsChecks = r.simpleertubeTorRedirectsChecks; + simpleertubeTorCustomRedirects = r.simpleertubeTorCustomRedirects; + peerTubeTargets = r.peerTubeTargets; + peertubeTargetsProtocol = r.peertubeTargetsProtocol; + resolve(); } ) }) } +init(); +browser.storage.onChanged.addListener(init) + +function all() { + return [ + ...redirects.simpleertube.normal, + ...redirects.simpleertube.tor, + ...simpleertubeNormalCustomRedirects, + ...simpleertubeTorCustomRedirects, + ]; +} + function redirect(url, type, initiator) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disablePeertubeTargets", + if (disablePeertubeTargets) 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 (peertubeTargetsProtocol == 'normal') instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]; + if (peertubeTargetsProtocol == 'tor') instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects]; + 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}`; +} - "peertubeRedirects", +function switchInstance(url) { + return new Promise(resolve => { + const protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost)) { resolve(); return; } - "simpleertubeNormalRedirectsChecks", - "simpleertubeNormalCustomRedirects", + let instancesList; + if (peertubeTargetsProtocol == 'normal') instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]; + else if (peertubeTargetsProtocol == 'tor') instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects]; - "simpleertubeTorRedirectsChecks", - "simpleertubeTorCustomRedirects", + const i = instancesList.indexOf(protocolHost); + if (i > -1) instancesList.splice(i, 1); + if (instancesList.length === 0) { resolve(); return; } - "peerTubeTargets", - "peertubeTargetsProtocol" - ], - r => { - if (r.disablePeertubeTargets) { resolve(); return; } - if ( - initiator && - ( - [ - ...r.peertubeRedirects.simpleertube.normal, - ...r.simpleertubeNormalCustomRedirects - ].includes(initiator.origin) || - r.peerTubeTargets.includes(initiator.host) - ) - ) { resolve(); return; } - let protocolHost = utils.protocolHost(url); - if (!r.peerTubeTargets.includes(protocolHost)) { resolve(); return; } - if (type != "main_frame") { resolve(); return; } - - let instancesList; - if (r.peertubeTargetsProtocol == 'normal') instancesList = [...r.simpleertubeNormalRedirectsChecks, ...r.simpleertubeNormalCustomRedirects]; - if (r.peertubeTargetsProtocol == 'tor') instancesList = [...r.simpleertubeTorRedirectsChecks, ...r.simpleertubeTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList); - if (url.host == 'search.joinpeertube.org') { resolve(randomInstance); return; } - - resolve(`${randomInstance}/${url.host}${url.pathname}${url.search}`); - } - ) + const randomInstance = utils.getRandomInstance(instancesList); + resolve(`${randomInstance}${url.pathname}${url.search}`); }) } -async function initDefaults() { + +function initDefaults() { return new Promise(resolve => { fetch('/instances/data.json').then(response => response.text()).then(async data => { let dataJson = JSON.parse(data); diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js index 3b5c7d88..0735ba64 100644 --- a/src/assets/javascripts/helpers/reddit.js +++ b/src/assets/javascripts/helpers/reddit.js @@ -37,353 +37,289 @@ function setRedirects(val) { } let + disableReddit, + redditFrontend, + redditRedirects, + redditProtocol, libredditNormalRedirectsChecks, - tedditNormalRedirectsChecks; - -function initLibredditCookies(test, from) { + libredditNormalCustomRedirects, + libredditTorRedirectsChecks, + libredditTorCustomRedirects, + tedditNormalRedirectsChecks, + tedditNormalCustomRedirects, + tedditTorRedirectsChecks, + tedditTorCustomRedirects; + +function init() { return new Promise(resolve => { browser.storage.local.get( [ + "disableReddit", + "redditFrontend", + "redditRedirects", "redditProtocol", "libredditNormalRedirectsChecks", "libredditNormalCustomRedirects", "libredditTorRedirectsChecks", "libredditTorCustomRedirects", + "tedditNormalRedirectsChecks", + "tedditNormalCustomRedirects", + "tedditTorRedirectsChecks", + "tedditTorCustomRedirects", ], r => { - let protocolHost = utils.protocolHost(from); - if (![ - ...r.libredditNormalRedirectsChecks, - ...r.libredditTorRedirectsChecks, - ...r.libredditNormalCustomRedirects, - ...r.libredditTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - let checkedInstances; - if (r.redditProtocol == 'normal') checkedInstances = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects]; - else if (r.redditProtocol == 'tor') checkedInstances = [...r.libredditTorRedirectsChecks, ...r.libredditTorCustomRedirects]; - for (const to of checkedInstances) { - utils.copyCookie('libreddit', from, to, "theme"); - utils.copyCookie('libreddit', from, to, "front_page"); - utils.copyCookie('libreddit', from, to, "layout"); - utils.copyCookie('libreddit', from, to, "wide"); - utils.copyCookie('libreddit', from, to, "post_sort"); - utils.copyCookie('libreddit', from, to, "comment_sort"); - utils.copyCookie('libreddit', from, to, "show_nsfw"); - utils.copyCookie('libreddit', from, to, "autoplay_videos"); - utils.copyCookie('libreddit', from, to, "use_hls"); - utils.copyCookie('libreddit', from, to, "hide_hls_notification"); - } - } - resolve(true); + disableReddit = r.disableReddit; + redditFrontend = r.redditFrontend; + redditRedirects = r.redditRedirects; + redditProtocol = r.redditProtocol; + libredditNormalRedirectsChecks = r.libredditNormalRedirectsChecks; + libredditNormalCustomRedirects = r.libredditNormalCustomRedirects; + libredditTorRedirectsChecks = r.libredditTorRedirectsChecks; + libredditTorCustomRedirects = r.libredditTorCustomRedirects; + tedditNormalRedirectsChecks = r.tedditNormalRedirectsChecks; + tedditNormalCustomRedirects = r.tedditNormalCustomRedirects; + tedditTorRedirectsChecks = r.tedditTorRedirectsChecks; + tedditTorCustomRedirects = r.tedditTorCustomRedirects; + resolve(); } ) }) +} +init(); +browser.storage.onChanged.addListener(init) + +function initLibredditCookies(test, from) { + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(from); + if (![ + ...libredditNormalRedirectsChecks, + ...libredditTorRedirectsChecks, + ...libredditNormalCustomRedirects, + ...libredditTorCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + + if (!test) { + let checkedInstances; + if (redditProtocol == 'normal') checkedInstances = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]; + else if (redditProtocol == 'tor') checkedInstances = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]; + for (const to of checkedInstances) { + utils.copyCookie('libreddit', from, to, "theme"); + utils.copyCookie('libreddit', from, to, "front_page"); + utils.copyCookie('libreddit', from, to, "layout"); + utils.copyCookie('libreddit', from, to, "wide"); + utils.copyCookie('libreddit', from, to, "post_sort"); + utils.copyCookie('libreddit', from, to, "comment_sort"); + utils.copyCookie('libreddit', from, to, "show_nsfw"); + utils.copyCookie('libreddit', from, to, "autoplay_videos"); + utils.copyCookie('libreddit', from, to, "use_hls"); + utils.copyCookie('libreddit', from, to, "hide_hls_notification"); + } + } + resolve(true); + }) } function setLibredditCookies() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "redditProtocol", - "disableReddit", - "redditFrontend", - "libredditNormalRedirectsChecks", - "libredditNormalCustomRedirects", - "libredditTorRedirectsChecks", - "libredditTorCustomRedirects", - ], - r => { - if (r.disableReddit || r.redditFrontend != 'libreddit' || r.redditProtocol === undefined) { resolve(); return; } - let checkedInstances; - if (r.redditProtocol == 'normal') checkedInstances = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects] - else if (r.redditProtocol == 'tor') checkedInstances = [...r.libredditTorRedirectsChecks, ...r.libredditTorCustomRedirects] - for (const to of checkedInstances) { - utils.getCookiesFromStorage('libreddit', to, "theme"); - utils.getCookiesFromStorage('libreddit', to, "front_page"); - utils.getCookiesFromStorage('libreddit', to, "layout"); - utils.getCookiesFromStorage('libreddit', to, "wide"); - utils.getCookiesFromStorage('libreddit', to, "post_sort"); - utils.getCookiesFromStorage('libreddit', to, "comment_sort"); - utils.getCookiesFromStorage('libreddit', to, "show_nsfw"); - utils.getCookiesFromStorage('libreddit', to, "autoplay_videos"); - utils.getCookiesFromStorage('libreddit', to, "use_hls"); - utils.getCookiesFromStorage('libreddit', to, "hide_hls_notification"); - } - resolve(); - } - ) + return new Promise(async resolve => { + await init(); + if (disableReddit || redditFrontend != 'libreddit' || redditProtocol === undefined) { resolve(); return; } + let checkedInstances; + if (redditProtocol == 'normal') checkedInstances = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects] + else if (redditProtocol == 'tor') checkedInstances = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects] + for (const to of checkedInstances) { + utils.getCookiesFromStorage('libreddit', to, "theme"); + utils.getCookiesFromStorage('libreddit', to, "front_page"); + utils.getCookiesFromStorage('libreddit', to, "layout"); + utils.getCookiesFromStorage('libreddit', to, "wide"); + utils.getCookiesFromStorage('libreddit', to, "post_sort"); + utils.getCookiesFromStorage('libreddit', to, "comment_sort"); + utils.getCookiesFromStorage('libreddit', to, "show_nsfw"); + utils.getCookiesFromStorage('libreddit', to, "autoplay_videos"); + utils.getCookiesFromStorage('libreddit', to, "use_hls"); + utils.getCookiesFromStorage('libreddit', to, "hide_hls_notification"); + } + resolve(); }) } function initTedditCookies(test, from) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "redditProtocol", - "tedditNormalRedirectsChecks", - "tedditNormalCustomRedirects", - "tedditTorRedirectsChecks", - "tedditTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(from); - if (![ - ...r.tedditNormalRedirectsChecks, - ...r.tedditTorRedirectsChecks, - ...r.tedditNormalCustomRedirects, - ...r.tedditTorCustomRedirects, - ].includes(protocolHost)) resolve(); - - if (!test) { - let checkedInstances; - if (r.redditProtocol == 'normal') checkedInstances = [...r.tedditNormalRedirectsChecks, ...r.tedditNormalCustomRedirects] - else if (r.redditProtocol == 'tor') checkedInstances = [...r.tedditTorRedirectsChecks, ...r.tedditTorCustomRedirects] - for (const to of checkedInstances) { - utils.copyCookie('teddit', from, to, 'collapse_child_comments') - utils.copyCookie('teddit', from, to, 'domain_instagram') - utils.copyCookie('teddit', from, to, 'domain_twitter') - utils.copyCookie('teddit', from, to, 'domain_youtube') - utils.copyCookie('teddit', from, to, 'flairs') - utils.copyCookie('teddit', from, to, 'highlight_controversial') - utils.copyCookie('teddit', from, to, 'nsfw_enabled') - utils.copyCookie('teddit', from, to, 'post_media_max_height') - utils.copyCookie('teddit', from, to, 'show_upvoted_percentage') - utils.copyCookie('teddit', from, to, 'show_upvotes') - utils.copyCookie('teddit', from, to, 'theme') - utils.copyCookie('teddit', from, to, 'videos_muted') - } - } - resolve(true); + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(from); + if (![ + ...tedditNormalRedirectsChecks, + ...tedditTorRedirectsChecks, + ...tedditNormalCustomRedirects, + ...tedditTorCustomRedirects, + ].includes(protocolHost)) resolve(); + + if (!test) { + let checkedInstances; + if (redditProtocol == 'normal') checkedInstances = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects] + else if (redditProtocol == 'tor') checkedInstances = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects] + for (const to of checkedInstances) { + utils.copyCookie('teddit', from, to, 'collapse_child_comments') + utils.copyCookie('teddit', from, to, 'domain_instagram') + utils.copyCookie('teddit', from, to, 'domain_twitter') + utils.copyCookie('teddit', from, to, 'domain_youtube') + utils.copyCookie('teddit', from, to, 'flairs') + utils.copyCookie('teddit', from, to, 'highlight_controversial') + utils.copyCookie('teddit', from, to, 'nsfw_enabled') + utils.copyCookie('teddit', from, to, 'post_media_max_height') + utils.copyCookie('teddit', from, to, 'show_upvoted_percentage') + utils.copyCookie('teddit', from, to, 'show_upvotes') + utils.copyCookie('teddit', from, to, 'theme') + utils.copyCookie('teddit', from, to, 'videos_muted') } - ) + } + resolve(true); }) } function setTedditCookies() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "redditProtocol", - "disableReddit", - "redditFrontend", - "tedditNormalRedirectsChecks", - "tedditNormalCustomRedirects", - "tedditTorRedirectsChecks", - "tedditTorCustomRedirects", - ], - r => { - if (r.disableReddit || r.redditFrontend != 'teddit' || r.redditProtocol === undefined) { resolve(); return; } - let checkedInstances; - if (r.redditProtocol == 'normal') checkedInstances = [...r.tedditNormalRedirectsChecks, ...r.tedditNormalCustomRedirects] - else if (r.redditProtocol == 'tor') checkedInstances = [...r.tedditTorRedirectsChecks, ...r.tedditTorCustomRedirects] - for (const to of checkedInstances) { - utils.getCookiesFromStorage('teddit', to, 'collapse_child_comments') - utils.getCookiesFromStorage('teddit', to, 'domain_instagram') - utils.getCookiesFromStorage('teddit', to, 'domain_twitter') - utils.getCookiesFromStorage('teddit', to, 'domain_youtube') - utils.getCookiesFromStorage('teddit', to, 'flairs') - utils.getCookiesFromStorage('teddit', to, 'highlight_controversial') - utils.getCookiesFromStorage('teddit', to, 'nsfw_enabled') - utils.getCookiesFromStorage('teddit', to, 'post_media_max_height') - utils.getCookiesFromStorage('teddit', to, 'show_upvoted_percentage') - utils.getCookiesFromStorage('teddit', to, 'show_upvotes') - utils.getCookiesFromStorage('teddit', to, 'theme') - utils.getCookiesFromStorage('teddit', to, 'videos_muted') - } - resolve(); - } - ) + return new Promise(async resolve => { + await init(); + if (disableReddit || redditFrontend != 'teddit' || redditProtocol === undefined) { resolve(); return; } + let checkedInstances; + if (redditProtocol == 'normal') checkedInstances = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects] + else if (redditProtocol == 'tor') checkedInstances = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects] + for (const to of checkedInstances) { + utils.getCookiesFromStorage('teddit', to, 'collapse_child_comments') + utils.getCookiesFromStorage('teddit', to, 'domain_instagram') + utils.getCookiesFromStorage('teddit', to, 'domain_twitter') + utils.getCookiesFromStorage('teddit', to, 'domain_youtube') + utils.getCookiesFromStorage('teddit', to, 'flairs') + utils.getCookiesFromStorage('teddit', to, 'highlight_controversial') + utils.getCookiesFromStorage('teddit', to, 'nsfw_enabled') + utils.getCookiesFromStorage('teddit', to, 'post_media_max_height') + utils.getCookiesFromStorage('teddit', to, 'show_upvoted_percentage') + utils.getCookiesFromStorage('teddit', to, 'show_upvotes') + utils.getCookiesFromStorage('teddit', to, 'theme') + utils.getCookiesFromStorage('teddit', to, 'videos_muted') + } + resolve(); }) } -function redirect(url, type, initiator) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableReddit", - "redditFrontend", - "redditRedirects", - "redditProtocol", - - "libredditNormalRedirectsChecks", - "libredditNormalCustomRedirects", - "libredditTorRedirectsChecks", - "libredditTorCustomRedirects", +function all() { + return [ + ...redditRedirects.libreddit.normal, + ...redditRedirects.libreddit.tor, + ...redditRedirects.teddit.normal, + ...redditRedirects.teddit.tor, + ...libredditNormalCustomRedirects, + ...libredditTorCustomRedirects, + ...tedditNormalCustomRedirects, + ...tedditTorCustomRedirects, + ]; +} - "tedditNormalRedirectsChecks", - "tedditNormalCustomRedirects", - "tedditTorRedirectsChecks", - "tedditTorCustomRedirects", - ], - r => { - // 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 - - if (r.disableReddit) { resolve(); return; } - if (!targets.some(rx => rx.test(url.href))) { resolve(); return; } - - if ( - initiator && - [ - ...r.redditRedirects.libreddit.normal, - ...r.redditRedirects.libreddit.tor, - ...r.redditRedirects.teddit.normal, - ...r.redditRedirects.teddit.tor, - ...r.libredditNormalCustomRedirects, - ...r.libredditTorCustomRedirects, - ...r.tedditNormalCustomRedirects, - ...r.tedditTorCustomRedirects, - ].includes(initiator.origin) - ) { resolve('BYPASSTAB'); return; } - - const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/; - if (type !== "main_frame" || url.pathname.match(bypassPaths)) { resolve(); return; } - - let libredditInstancesList; - let tedditInstancesList; - if (r.redditProtocol == 'normal') { - libredditInstancesList = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects]; - tedditInstancesList = [...r.tedditNormalRedirectsChecks, ...r.tedditNormalCustomRedirects]; - } else if (r.redditProtocol == 'tor') { - libredditInstancesList = [...r.libredditTorRedirectsChecks, ...r.libredditTorCustomRedirects]; - tedditInstancesList = [...r.tedditTorRedirectsChecks, ...r.tedditTorCustomRedirects]; - } +// https://libreddit.exonip.de/vid/1mq8d0ma3yk81/720.mp4 +// https://libreddit.exonip.de/img/4v3t1vgvrzk81.png - if (url.host === "i.redd.it") { - if (r.redditFrontend == 'teddit') { - if (tedditInstancesList.length === 0) { resolve(); return; } - let tedditRandomInstance = utils.getRandomInstance(tedditInstancesList); - resolve(`${tedditRandomInstance}/pics/w:null_${url.pathname.substring(1)}${url.reddit}`); return; - } - if (r.redditFrontend == 'libreddit') { - if (libredditInstancesList.length === 0) { resolve(); return; } - let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList); - resolve(`${libredditRandomInstance}/img${url.pathname}${url.reddit}`); return; - } - } - else if (url.host === "redd.it") { - if (r.redditFrontend == 'libreddit' && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) { - if (libredditInstancesList.length === 0) { resolve(); return; } - let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList); - // https://redd.it/foo => https://libredd.it/comments/foo - resolve(`${libredditRandomInstance}/comments${url.pathname}${url.reddit}`); return; - } - if (r.redditFrontend == 'teddit' && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) { - if (tedditInstancesList.length === 0) { resolve(); return; } - let tedditRandomInstance = utils.getRandomInstance(tedditInstancesList); - // https://redd.it/foo => https://teddit.net/comments/foo - resolve(`${tedditRandomInstance}/comments${url.pathname}${url.reddit}`); return; - } - } - else if (url.host === 'preview.redd.it') { - if (r.redditFrontend == 'teddit') { - { resolve(); return; } - } - if (r.redditFrontend == 'libreddit') { - if (libredditInstancesList.length === 0) { resolve(); return; } - let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList); - resolve(`${libredditRandomInstance}/preview/pre${url.pathname}${url.reddit}`); return; - } - } +// https://teddit.net/vids/1mq8d0ma3yk81.mp4 +// https://teddit.net/pics/w:null_4v3t1vgvrzk81.png - let randomInstance; - if (r.redditFrontend == 'libreddit') { - if (libredditInstancesList.length === 0) { resolve(); return; } - randomInstance = utils.getRandomInstance(libredditInstancesList); - } - if (r.redditFrontend == 'teddit') { - if (tedditInstancesList.length === 0) { resolve(); return; } - randomInstance = utils.getRandomInstance(tedditInstancesList); - } - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) - }) -} -function reverse(url) { - let protocolHost = utils.protocolHost(url); - if ( - ![...redirects.nitter.normal, - ...redirects.nitter.tor, - ...nitterNormalCustomRedirects, - ...nitterTorCustomRedirects].includes(protocolHost) - ) return; - if (url.pathname.includes('/pics/w:null_')) - return `https://reddit.com${url.pathname}${url.reddit}`; +// redd.it/t5379n +// https://v.redd.it/z08avb339n801/DASH_1_2_M +// https://i.redd.it/bfkhs659tzk81.jpg +function redirect(url, type, initiator) { + if (disableReddit) return; + if (!targets.some(rx => rx.test(url.href))) return; + if (initiator && all().includes(initiator.origin)) return 'BYPASSTAB'; + const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/; + if (type !== "main_frame" || url.pathname.match(bypassPaths)) return; + + let libredditInstancesList; + let tedditInstancesList; + if (redditProtocol == 'normal') { + libredditInstancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]; + tedditInstancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]; + } else if (redditProtocol == 'tor') { + libredditInstancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]; + tedditInstancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]; + } + + 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.reddit}`; + } + if (redditFrontend == 'libreddit') { + if (libredditInstancesList.length === 0) return; + let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList); + return `${libredditRandomInstance}/img${url.pathname}${url.reddit}` + } + } + 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.reddit}`; + } + 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.reddit}` + } + } + 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.reddit}`; + } + } + + 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) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "redditRedirects", - "redditFrontend", - "redditProtocol", - - "libredditNormalRedirectsChecks", - "libredditNormalCustomRedirects", - "libredditTorRedirectsChecks", - "libredditTorCustomRedirects", - - "tedditNormalRedirectsChecks", - "tedditNormalCustomRedirects", - "tedditTorRedirectsChecks", - "tedditTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...r.redditRedirects.libreddit.normal, - ...r.redditRedirects.libreddit.tor, - - ...r.libredditNormalCustomRedirects, - ...r.libredditTorCustomRedirects, - - ...r.redditRedirects.teddit.normal, - ...r.redditRedirects.teddit.tor, - - ...r.tedditNormalCustomRedirects, - ...r.tedditTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - let instancesList; - if (r.redditFrontend == 'libreddit') { - if (r.redditProtocol == 'normal') instancesList = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects]; - else if (r.redditProtocol == 'tor') instancesList = [...r.libredditTorRedirectsChecks, ...r.libredditTorCustomRedirects]; - if ([ - ...r.redditRedirects.teddit.normal, - ...r.redditRedirects.teddit.tor - ].includes(protocolHost)) url.pathname = url.pathname.replace("/pics/w:null_", "/img/"); - } - else if (r.redditFrontend == 'teddit') { - if (r.redditProtocol == 'normal') instancesList = [...r.tedditNormalRedirectsChecks, ...r.tedditNormalCustomRedirects]; - else if (r.redditProtocol == 'tor') instancesList = [...r.tedditTorRedirectsChecks, ...r.tedditTorCustomRedirects]; - if ([ - ...r.redditRedirects.libreddit.normal, - ...r.redditRedirects.libreddit.tor - ].includes(protocolHost) - ) url.pathname = url.pathname.replace("/img/", "/pics/w:null_"); - } + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost)) { resolve(); return; } + let instancesList; + if (redditFrontend == 'libreddit') { + if (redditProtocol == 'normal') instancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]; + else if (redditProtocol == 'tor') instancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]; + if ([ + ...redditRedirects.teddit.normal, + ...redditRedirects.teddit.tor + ].includes(protocolHost)) url.pathname = url.pathname.replace("/pics/w:null_", "/img/"); + } + else if (redditFrontend == 'teddit') { + if (redditProtocol == 'normal') instancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]; + else if (redditProtocol == 'tor') instancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]; + if ([ + ...redditRedirects.libreddit.normal, + ...redditRedirects.libreddit.tor + ].includes(protocolHost) + ) url.pathname = url.pathname.replace("/img/", "/pics/w:null_"); + } - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) { resolve(); return; } + const i = instancesList.indexOf(protocolHost); + if (i > -1) instancesList.splice(i, 1); + if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.reddit}`) - } - ) + const randomInstance = utils.getRandomInstance(instancesList); + resolve(`${randomInstance}${url.pathname}${url.reddit}`); }) } diff --git a/src/assets/javascripts/helpers/search.js b/src/assets/javascripts/helpers/search.js index 9bd9c132..b32a8141 100644 --- a/src/assets/javascripts/helpers/search.js +++ b/src/assets/javascripts/helpers/search.js @@ -5,11 +5,10 @@ import utils from './utils.js' const targets = [ /^https?:\/{2}(www\.|search\.|)google(\.[a-z]{2,3}){1,2}(\/search(\?.*|$)|\/$)/, /^https?:\/{2}(www\.|www2\.|)bing\.com/, - /^https?:\/{2}yandex(\.[a-z]{2,3}){1,2}/, - /^https?:\/{2}search\.libredirect\.invalid/, ]; + let redirects = { "searx": { "normal": [], @@ -54,388 +53,344 @@ function setRedirects(val) { } let + disableSearch, + searchFrontend, + searchRedirects, + searchProtocol, + whoogleNormalRedirectsChecks, + whoogleNormalCustomRedirects, + whoogleTorRedirectsChecks, + whoogleTorCustomRedirects, + whoogleI2pRedirectsChecks, + whoogleI2pCustomRedirects, searxNormalRedirectsChecks, + searxNormalCustomRedirects, + searxTorRedirectsChecks, + searxTorCustomRedirects, + searxI2pRedirectsChecks, + searxI2pCustomRedirects, searxngNormalRedirectsChecks, - whoogleNormalRedirectsChecks; - -function initSearxCookies(test, from) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "searchProtocol", - "searxNormalRedirectsChecks", - "searxNormalCustomRedirects", - "searxTorRedirectsChecks", - "searxTorCustomRedirects", - "searxI2pRedirectsChecks", - "searxI2pCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(from); - if (![ - ...r.searxNormalRedirectsChecks, - ...r.searxNormalCustomRedirects, - ...r.searxTorRedirectsChecks, - ...r.searxTorCustomRedirects, - ...r.searxI2pRedirectsChecks, - ...r.searxI2pCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - let checkedInstances; - if (r.searchProtocol == 'normal') checkedInstances = [...r.searxNormalRedirectsChecks, ...r.searxNormalCustomRedirects]; - else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxTorRedirectsChecks, ...r.searxTorCustomRedirects]; - else if (r.searchProtocol == 'i2p') checkedInstances = [...r.searxI2pRedirectsChecks, ...r.searxI2pCustomRedirects]; - for (const to of checkedInstances) { - utils.copyCookie('searx', from, to, 'advanced_search'); - utils.copyCookie('searx', from, to, 'autocomplete'); - utils.copyCookie('searx', from, to, 'categories'); - utils.copyCookie('searx', from, to, 'disabled_engines'); - utils.copyCookie('searx', from, to, 'disabled_plugins'); - utils.copyCookie('searx', from, to, 'doi_resolver'); - utils.copyCookie('searx', from, to, 'enabled_engines'); - utils.copyCookie('searx', from, to, 'enabled_plugins'); - utils.copyCookie('searx', from, to, 'image_proxy'); - utils.copyCookie('searx', from, to, 'language'); - utils.copyCookie('searx', from, to, 'locale'); - utils.copyCookie('searx', from, to, 'method'); - utils.copyCookie('searx', from, to, 'oscar-style'); - utils.copyCookie('searx', from, to, 'results_on_new_tab'); - utils.copyCookie('searx', from, to, 'safesearch'); - utils.copyCookie('searx', from, to, 'theme'); - utils.copyCookie('searx', from, to, 'tokens'); - } - } - resolve(true); - } - ) - }) -} + searxngNormalCustomRedirects, + searxngTorRedirectsChecks, + searxngTorCustomRedirects, + searxngI2pRedirectsChecks, + searxngI2pCustomRedirects; -function setSearxCookies() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableSearch", - "searchProtocol", - "searchFrontend", - "searxNormalRedirectsChecks", - "searxNormalCustomRedirects", - "searxTorRedirectsChecks", - "searxTorCustomRedirects", - ], - r => { - if (r.disableSearch || r.searchFrontend != 'searx') { resolve(); return; } - let checkedInstances; - if (r.searchProtocol == 'normal') checkedInstances = [...r.searxNormalRedirectsChecks, ...r.searxNormalCustomRedirects] - else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxTorRedirectsChecks, ...r.searxTorCustomRedirects] - for (const to of checkedInstances) { - utils.getCookiesFromStorage('searx', to, 'advanced_search'); - utils.getCookiesFromStorage('searx', to, 'autocomplete'); - utils.getCookiesFromStorage('searx', to, 'categories'); - utils.getCookiesFromStorage('searx', to, 'disabled_engines'); - utils.getCookiesFromStorage('searx', to, 'disabled_plugins'); - utils.getCookiesFromStorage('searx', to, 'doi_resolver'); - utils.getCookiesFromStorage('searx', to, 'enabled_engines'); - utils.getCookiesFromStorage('searx', to, 'enabled_plugins'); - utils.getCookiesFromStorage('searx', to, 'image_proxy'); - utils.getCookiesFromStorage('searx', to, 'language'); - utils.getCookiesFromStorage('searx', to, 'locale'); - utils.getCookiesFromStorage('searx', to, 'method'); - utils.getCookiesFromStorage('searx', to, 'oscar-style'); - utils.getCookiesFromStorage('searx', to, 'results_on_new_tab'); - utils.getCookiesFromStorage('searx', to, 'safesearch'); - utils.getCookiesFromStorage('searx', to, 'theme'); - utils.getCookiesFromStorage('searx', to, 'tokens'); - } - resolve(); - } - ) - }) -} - -function initSearxngCookies(test, from) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "searchProtocol", - "searxngNormalRedirectsChecks", - "searxngNormalCustomRedirects", - "searxngTorRedirectsChecks", - "searxngTorCustomRedirects", - "searxngI2pRedirectsChecks", - "searxngI2pCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(from); - if (![ - ...r.searxngNormalRedirectsChecks, - ...r.searxngNormalCustomRedirects, - ...r.searxngTorRedirectsChecks, - ...r.searxngTorCustomRedirects, - ...r.searxngI2pRedirectsChecks, - ...r.searxngI2pCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - let checkedInstances; - if (r.searchProtocol == 'normal') checkedInstances = [...r.searxngNormalRedirectsChecks, ...r.searxngNormalCustomRedirects]; - else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxngTorRedirectsChecks, ...r.searxngTorCustomRedirects]; - else if (r.searchProtocol == 'i2p') checkedInstances = [...r.searxngI2pRedirectsChecks, ...r.searxngI2pCustomRedirects]; - for (const to of checkedInstances) { - utils.copyCookie('searxng', from, to, 'autocomplete'); - utils.copyCookie('searxng', from, to, 'categories'); - utils.copyCookie('searxng', from, to, 'disabled_engines'); - utils.copyCookie('searxng', from, to, 'disabled_plugins'); - utils.copyCookie('searxng', from, to, 'doi_resolver'); - utils.copyCookie('searxng', from, to, 'enabled_plugins'); - utils.copyCookie('searxng', from, to, 'enabled_engines'); - utils.copyCookie('searxng', from, to, 'image_proxy'); - utils.copyCookie('searxng', from, to, 'infinite_scroll'); - utils.copyCookie('searxng', from, to, 'language'); - utils.copyCookie('searxng', from, to, 'locale'); - utils.copyCookie('searxng', from, to, 'maintab'); - utils.copyCookie('searxng', from, to, 'method'); - utils.copyCookie('searxng', from, to, 'query_in_title'); - utils.copyCookie('searxng', from, to, 'results_on_new_tab'); - utils.copyCookie('searxng', from, to, 'safesearch'); - utils.copyCookie('searxng', from, to, 'simple_style'); - utils.copyCookie('searxng', from, to, 'theme'); - utils.copyCookie('searxng', from, to, 'tokens'); - } - } - resolve(true); - } - ) - }) -} - -function setSearxngCookies() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "searchProtocol", - "disableSearch", - "searchFrontend", - "searxngNormalRedirectsChecks", - "searxngNormalCustomRedirects", - "searxngTorRedirectsChecks", - "searxngTorCustomRedirects", - ], - r => { - if (r.disableSearch || r.searchFrontend != 'searxng', r.searchProtocol === undefined) { resolve(); return; } - let checkedInstances; - if (r.searchProtocol == 'normal') checkedInstances = [...r.searxngNormalRedirectsChecks, ...r.searxngNormalCustomRedirects] - else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxngTorRedirectsChecks, ...r.searxngTorCustomRedirects] - for (const to of checkedInstances) { - utils.getCookiesFromStorage('searxng', to, 'autocomplete'); - utils.getCookiesFromStorage('searxng', to, 'categories'); - utils.getCookiesFromStorage('searxng', to, 'disabled_engines'); - utils.getCookiesFromStorage('searxng', to, 'disabled_plugins'); - utils.getCookiesFromStorage('searxng', to, 'doi_resolver'); - utils.getCookiesFromStorage('searxng', to, 'enabled_plugins'); - utils.getCookiesFromStorage('searxng', to, 'enabled_engines'); - utils.getCookiesFromStorage('searxng', to, 'image_proxy'); - utils.getCookiesFromStorage('searxng', to, 'infinite_scroll'); - utils.getCookiesFromStorage('searxng', to, 'language'); - utils.getCookiesFromStorage('searxng', to, 'locale'); - utils.getCookiesFromStorage('searxng', to, 'maintab'); - utils.getCookiesFromStorage('searxng', to, 'method'); - utils.getCookiesFromStorage('searxng', to, 'query_in_title'); - utils.getCookiesFromStorage('searxng', to, 'results_on_new_tab'); - utils.getCookiesFromStorage('searxng', to, 'safesearch'); - utils.getCookiesFromStorage('searxng', to, 'simple_style'); - utils.getCookiesFromStorage('searxng', to, 'theme'); - utils.getCookiesFromStorage('searxng', to, 'tokens'); - } - resolve(); - } - ) - }) -} - -function redirect(url) { - return new Promise(resolve => { +function init() { + return new Promise(async resolve => { browser.storage.local.get( [ "disableSearch", "searchFrontend", "searchRedirects", "searchProtocol", - "whoogleNormalRedirectsChecks", "whoogleNormalCustomRedirects", - "whoogleTorRedirectsChecks", "whoogleTorCustomRedirects", - "whoogleI2pRedirectsChecks", "whoogleI2pCustomRedirects", - "searxNormalRedirectsChecks", "searxNormalCustomRedirects", - "searxTorRedirectsChecks", "searxTorCustomRedirects", - "searxI2pRedirectsChecks", "searxI2pCustomRedirects", - "searxngNormalRedirectsChecks", "searxngNormalCustomRedirects", - "searxngTorRedirectsChecks", "searxngTorCustomRedirects", - "searxngI2pRedirectsChecks", "searxngI2pCustomRedirects", ], r => { - if (r.disableSearch) { resolve(); return; } - if (!targets.some(rx => rx.test(url.href))) { resolve(); return; } - if (url.searchParams.has('tbm')) { resolve(); return; } - if (url.hostname.includes('google') && !url.searchParams.has('q') && url.pathname != '/') { resolve(); return; } - let randomInstance; - let path; - if (r.searchFrontend == 'searx') { - let instancesList; - if (r.searchProtocol == 'normal') instancesList = [...r.searxNormalRedirectsChecks, ...r.searxNormalCustomRedirects]; - else if (r.searchProtocol == 'tor') instancesList = [...r.searxTorRedirectsChecks, ...r.searxTorCustomRedirects]; - else if (r.searchProtocol == 'i2p') instancesList = [...r.searxI2pRedirectsChecks, ...r.searxI2pCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - randomInstance = utils.getRandomInstance(instancesList) - path = "/"; - } - else if (r.searchFrontend == 'searxng') { - let instancesList; - if (r.searchProtocol == 'normal') instancesList = [...r.searxngNormalRedirectsChecks, ...r.searxngNormalCustomRedirects]; - else if (r.searchProtocol == 'tor') instancesList = [...r.searxngTorRedirectsChecks, ...r.searxngTorCustomRedirects]; - else if (r.searchProtocol == 'i2p') instancesList = [...r.searxngI2pRedirectsChecks, ...r.searxngI2pCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - randomInstance = utils.getRandomInstance(instancesList) - path = "/"; - } - else if (r.searchFrontend == 'whoogle') { - let instancesList; - if (r.searchProtocol == 'normal') instancesList = [...r.whoogleNormalRedirectsChecks, ...r.whoogleNormalCustomRedirects]; - if (r.searchProtocol == 'tor') instancesList = [...r.whoogleTorRedirectsChecks, ...r.whoogleTorCustomRedirects]; - if (r.searchProtocol == 'i2p') instancesList = [...r.whoogleI2pRedirectsChecks, ...r.whoogleI2pCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - randomInstance = utils.getRandomInstance(instancesList) - path = "/search"; - } - - 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=${url.searchParams.get('q')}`; - if (url.hostname.includes('yandex') && url.searchParams.has('text')) searchQuery = `?q=${url.searchParams.get('text')}`; - - resolve(`${randomInstance}${path}${searchQuery}`); - }) + disableSearch = r.disableSearch; + searchFrontend = r.searchFrontend; + searchRedirects = r.searchRedirects; + searchProtocol = r.searchProtocol; + whoogleNormalRedirectsChecks = r.whoogleNormalRedirectsChecks; + whoogleNormalCustomRedirects = r.whoogleNormalCustomRedirects; + whoogleTorRedirectsChecks = r.whoogleTorRedirectsChecks; + whoogleTorCustomRedirects = r.whoogleTorCustomRedirects; + whoogleI2pRedirectsChecks = r.whoogleI2pRedirectsChecks; + whoogleI2pCustomRedirects = r.whoogleI2pCustomRedirects; + searxNormalRedirectsChecks = r.searxNormalRedirectsChecks; + searxNormalCustomRedirects = r.searxNormalCustomRedirects; + searxTorRedirectsChecks = r.searxTorRedirectsChecks; + searxTorCustomRedirects = r.searxTorCustomRedirects; + searxI2pRedirectsChecks = r.searxI2pRedirectsChecks; + searxI2pCustomRedirects = r.searxI2pCustomRedirects; + searxngNormalRedirectsChecks = r.searxngNormalRedirectsChecks; + searxngNormalCustomRedirects = r.searxngNormalCustomRedirects; + searxngTorRedirectsChecks = r.searxngTorRedirectsChecks; + searxngTorCustomRedirects = r.searxngTorCustomRedirects; + searxngI2pRedirectsChecks = r.searxngI2pRedirectsChecks; + searxngI2pCustomRedirects = r.searxngI2pCustomRedirects; + resolve(); + } + ) }) } -async function switchInstance(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "searchFrontend", - "searchRedirects", - "searchProtocol", +init(); +browser.storage.onChanged.addListener(init) - "whoogleNormalRedirectsChecks", - "whoogleNormalCustomRedirects", - - "whoogleTorRedirectsChecks", - "whoogleTorCustomRedirects", - - "whoogleI2pRedirectsChecks", - "whoogleI2pCustomRedirects", +function initSearxCookies(test, from) { + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(from); + if (![ + ...searxNormalRedirectsChecks, + ...searxNormalCustomRedirects, + ...searxTorRedirectsChecks, + ...searxTorCustomRedirects, + ...searxI2pRedirectsChecks, + ...searxI2pCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + + if (!test) { + let checkedInstances; + if (searchProtocol == 'normal') checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects]; + else if (searchProtocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects]; + else if (searchProtocol == 'i2p') checkedInstances = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects]; + for (const to of checkedInstances) { + utils.copyCookie('searx', from, to, 'advanced_search'); + utils.copyCookie('searx', from, to, 'autocomplete'); + utils.copyCookie('searx', from, to, 'categories'); + utils.copyCookie('searx', from, to, 'disabled_engines'); + utils.copyCookie('searx', from, to, 'disabled_plugins'); + utils.copyCookie('searx', from, to, 'doi_resolver'); + utils.copyCookie('searx', from, to, 'enabled_engines'); + utils.copyCookie('searx', from, to, 'enabled_plugins'); + utils.copyCookie('searx', from, to, 'image_proxy'); + utils.copyCookie('searx', from, to, 'language'); + utils.copyCookie('searx', from, to, 'locale'); + utils.copyCookie('searx', from, to, 'method'); + utils.copyCookie('searx', from, to, 'oscar-style'); + utils.copyCookie('searx', from, to, 'results_on_new_tab'); + utils.copyCookie('searx', from, to, 'safesearch'); + utils.copyCookie('searx', from, to, 'theme'); + utils.copyCookie('searx', from, to, 'tokens'); + } + } + resolve(true); + }) +} - "searxNormalRedirectsChecks", - "searxNormalCustomRedirects", +function setSearxCookies() { + return new Promise(async resolve => { + await init(); + if (disableSearch || searchFrontend != 'searx') { resolve(); return; } + let checkedInstances; + if (searchProtocol == 'normal') checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects] + else if (searchProtocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects] + for (const to of checkedInstances) { + utils.getCookiesFromStorage('searx', to, 'advanced_search'); + utils.getCookiesFromStorage('searx', to, 'autocomplete'); + utils.getCookiesFromStorage('searx', to, 'categories'); + utils.getCookiesFromStorage('searx', to, 'disabled_engines'); + utils.getCookiesFromStorage('searx', to, 'disabled_plugins'); + utils.getCookiesFromStorage('searx', to, 'doi_resolver'); + utils.getCookiesFromStorage('searx', to, 'enabled_engines'); + utils.getCookiesFromStorage('searx', to, 'enabled_plugins'); + utils.getCookiesFromStorage('searx', to, 'image_proxy'); + utils.getCookiesFromStorage('searx', to, 'language'); + utils.getCookiesFromStorage('searx', to, 'locale'); + utils.getCookiesFromStorage('searx', to, 'method'); + utils.getCookiesFromStorage('searx', to, 'oscar-style'); + utils.getCookiesFromStorage('searx', to, 'results_on_new_tab'); + utils.getCookiesFromStorage('searx', to, 'safesearch'); + utils.getCookiesFromStorage('searx', to, 'theme'); + utils.getCookiesFromStorage('searx', to, 'tokens'); + } + resolve(); + }) +} - "searxTorRedirectsChecks", - "searxTorCustomRedirects", +function initSearxngCookies(test, from) { + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(from); + if (![ + ...searxngNormalRedirectsChecks, + ...searxngNormalCustomRedirects, + ...searxngTorRedirectsChecks, + ...searxngTorCustomRedirects, + ...searxngI2pRedirectsChecks, + ...searxngI2pCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + + if (!test) { + let checkedInstances; + if (searchProtocol == 'normal') checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects]; + else if (searchProtocol == 'tor') checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects]; + else if (searchProtocol == 'i2p') checkedInstances = [...searxngI2pRedirectsChecks, ...searxngI2pCustomRedirects]; + for (const to of checkedInstances) { + utils.copyCookie('searxng', from, to, 'autocomplete'); + utils.copyCookie('searxng', from, to, 'categories'); + utils.copyCookie('searxng', from, to, 'disabled_engines'); + utils.copyCookie('searxng', from, to, 'disabled_plugins'); + utils.copyCookie('searxng', from, to, 'doi_resolver'); + utils.copyCookie('searxng', from, to, 'enabled_plugins'); + utils.copyCookie('searxng', from, to, 'enabled_engines'); + utils.copyCookie('searxng', from, to, 'image_proxy'); + utils.copyCookie('searxng', from, to, 'infinite_scroll'); + utils.copyCookie('searxng', from, to, 'language'); + utils.copyCookie('searxng', from, to, 'locale'); + utils.copyCookie('searxng', from, to, 'maintab'); + utils.copyCookie('searxng', from, to, 'method'); + utils.copyCookie('searxng', from, to, 'query_in_title'); + utils.copyCookie('searxng', from, to, 'results_on_new_tab'); + utils.copyCookie('searxng', from, to, 'safesearch'); + utils.copyCookie('searxng', from, to, 'simple_style'); + utils.copyCookie('searxng', from, to, 'theme'); + utils.copyCookie('searxng', from, to, 'tokens'); + } + } + resolve(true); + }) +} - "searxI2pRedirectsChecks", - "searxI2pCustomRedirects", +function setSearxngCookies() { + return new Promise(async resolve => { + await init(); + if (disableSearch || searchFrontend != 'searxng', searchProtocol === undefined) { resolve(); return; } + let checkedInstances; + if (searchProtocol == 'normal') checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects] + else if (searchProtocol == 'tor') checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects] + for (const to of checkedInstances) { + utils.getCookiesFromStorage('searxng', to, 'autocomplete'); + utils.getCookiesFromStorage('searxng', to, 'categories'); + utils.getCookiesFromStorage('searxng', to, 'disabled_engines'); + utils.getCookiesFromStorage('searxng', to, 'disabled_plugins'); + utils.getCookiesFromStorage('searxng', to, 'doi_resolver'); + utils.getCookiesFromStorage('searxng', to, 'enabled_plugins'); + utils.getCookiesFromStorage('searxng', to, 'enabled_engines'); + utils.getCookiesFromStorage('searxng', to, 'image_proxy'); + utils.getCookiesFromStorage('searxng', to, 'infinite_scroll'); + utils.getCookiesFromStorage('searxng', to, 'language'); + utils.getCookiesFromStorage('searxng', to, 'locale'); + utils.getCookiesFromStorage('searxng', to, 'maintab'); + utils.getCookiesFromStorage('searxng', to, 'method'); + utils.getCookiesFromStorage('searxng', to, 'query_in_title'); + utils.getCookiesFromStorage('searxng', to, 'results_on_new_tab'); + utils.getCookiesFromStorage('searxng', to, 'safesearch'); + utils.getCookiesFromStorage('searxng', to, 'simple_style'); + utils.getCookiesFromStorage('searxng', to, 'theme'); + utils.getCookiesFromStorage('searxng', to, 'tokens'); + } + resolve(); + }) +} - "searxngNormalRedirectsChecks", - "searxngNormalCustomRedirects", - "searxngTorRedirectsChecks", - "searxngTorCustomRedirects", +function redirect(url) { + if (disableSearch) 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 (searchProtocol == 'normal') instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects]; + else if (searchProtocol == 'tor') instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects]; + else if (searchProtocol == 'i2p') instancesList = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects]; + if (instancesList.length === 0) return; + randomInstance = utils.getRandomInstance(instancesList) + path = "/"; + } + else if (searchFrontend == 'searxng') { + let instancesList; + if (searchProtocol == 'normal') instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects]; + else if (searchProtocol == 'tor') instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects]; + else if (searchProtocol == 'i2p') instancesList = [...searxngI2pRedirectsChecks, ...searxngI2pCustomRedirects]; + if (instancesList.length === 0) return; + randomInstance = utils.getRandomInstance(instancesList) + path = "/"; + } + else if (searchFrontend == 'whoogle') { + let instancesList; + if (searchProtocol == 'normal') instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects]; + if (searchProtocol == 'tor') instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects]; + if (searchProtocol == 'i2p') instancesList = [...whoogleI2pRedirectsChecks, ...whoogleI2pCustomRedirects]; + if (instancesList.length === 0) return; + randomInstance = utils.getRandomInstance(instancesList) + path = "/search"; + } - "searxngI2pRedirectsChecks", - "searxngI2pCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...r.searchRedirects.searx.normal, - ...r.searchRedirects.searx.tor, - ...r.searchRedirects.searx.i2p, - - ...r.searchRedirects.searxng.normal, - ...r.searchRedirects.searxng.tor, - ...r.searchRedirects.searxng.i2p, - - ...r.searchRedirects.whoogle.normal, - ...r.searchRedirects.whoogle.tor, - ...r.searchRedirects.whoogle.i2p, - - ...r.searxNormalCustomRedirects, - ...r.searxTorCustomRedirects, - ...r.searxI2pCustomRedirects, - - ...r.searxngNormalCustomRedirects, - ...r.searxngTorCustomRedirects, - ...r.searxngI2pCustomRedirects, - - ...r.whoogleNormalCustomRedirects, - ...r.whoogleTorCustomRedirects, - ...r.whoogleI2pCustomRedirects, - ].includes(protocolHost)) { - - resolve(); - } + 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=${url.searchParams.get('q')}`; + if (url.hostname.includes('yandex') && url.searchParams.has('text')) searchQuery = `?q=${url.searchParams.get('text')}`; + + return `${randomInstance}${path}${searchQuery}`; +} - let instancesList; - if (r.searchProtocol == 'normal') { - if (r.searchFrontend == 'searx') instancesList = [...r.searxNormalRedirectsChecks, ...r.searxNormalCustomRedirects]; - else if (r.searchFrontend == 'searxng') instancesList = [...r.searxngNormalRedirectsChecks, ...r.searxngNormalCustomRedirects]; - else if (r.searchFrontend == 'whoogle') instancesList = [...r.whoogleNormalRedirectsChecks, ...r.whoogleNormalCustomRedirects]; - } - else if (r.searchProtocol == 'tor') { - if (r.searchFrontend == 'searx') instancesList = [...r.searxTorRedirectsChecks, ...r.searxTorCustomRedirects]; - else if (r.searchFrontend == 'searxng') instancesList = [...r.searxngTorRedirectsChecks, ...r.searxngTorCustomRedirects]; - else if (r.searchFrontend == 'whoogle') instancesList = [...r.whoogleTorRedirectsChecks, ...r.whoogleTorCustomRedirects]; - } - else if (r.searchProtocol == 'i2p') { - if (r.searchFrontend == 'searx') instancesList = [...r.searxI2pRedirectsChecks, ...r.searxI2pCustomRedirects]; - else if (r.searchFrontend == 'searxng') instancesList = [...r.searxngI2pRedirectsChecks, ...r.searxngI2pCustomRedirects]; - else if (r.searchFrontend == 'whoogle') instancesList = [...r.whoogleI2pRedirectsChecks, ...r.whoogleI2pCustomRedirects]; - } +function switchInstance(url) { + return new Promise(async resolve => { + await init(); + 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, + + ...searxNormalCustomRedirects, + ...searxTorCustomRedirects, + ...searxI2pCustomRedirects, + + ...searxngNormalCustomRedirects, + ...searxngTorCustomRedirects, + ...searxngI2pCustomRedirects, + + ...whoogleNormalCustomRedirects, + ...whoogleTorCustomRedirects, + ...whoogleI2pCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + + let instancesList; + if (searchProtocol == 'normal') { + if (searchFrontend == 'searx') instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects]; + else if (searchFrontend == 'searxng') instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects]; + else if (searchFrontend == 'whoogle') instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects]; + } + else if (searchProtocol == 'tor') { + if (searchFrontend == 'searx') instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects]; + else if (searchFrontend == 'searxng') instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects]; + else if (searchFrontend == 'whoogle') instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects]; + } + else if (searchProtocol == 'i2p') { + if (searchFrontend == 'searx') instancesList = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects]; + else if (searchFrontend == 'searxng') instancesList = [...searxngI2pRedirectsChecks, ...searxngI2pCustomRedirects]; + else if (searchFrontend == 'whoogle') instancesList = [...whoogleI2pRedirectsChecks, ...whoogleI2pCustomRedirects]; + } - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) resolve(); + const i = instancesList.indexOf(protocolHost); + if (i > -1) instancesList.splice(i, 1); + if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + const randomInstance = utils.getRandomInstance(instancesList); + resolve(`${randomInstance}${url.pathname}${url.search}`); }) } @@ -505,13 +460,10 @@ function initDefaults() { export default { setRedirects, - initSearxCookies, setSearxCookies, - initSearxngCookies, setSearxngCookies, - redirect, initDefaults, switchInstance, diff --git a/src/assets/javascripts/helpers/sendTargets.js b/src/assets/javascripts/helpers/sendTargets.js index be99e0d9..c4caefb3 100644 --- a/src/assets/javascripts/helpers/sendTargets.js +++ b/src/assets/javascripts/helpers/sendTargets.js @@ -29,91 +29,88 @@ function setRedirects(val) { }) } -let sendNormalRedirectsChecks; - -function switchInstance(url) { +let + disableSendTarget, + sendTargetsRedirects, + sendNormalRedirectsChecks, + sendNormalCustomRedirects, + sendTorRedirectsChecks, + sendTorCustomRedirects, + sendTargetsProtocol; + +function init() { return new Promise(resolve => { browser.storage.local.get( [ "disableSendTarget", "sendTargetsRedirects", "sendTargetsProtocol", - "sendNormalRedirectsChecks", "sendNormalCustomRedirects", - "sendTorRedirectsChecks", "sendTorCustomRedirects", ], r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...r.sendTargetsRedirects.send.normal, - ...r.sendTargetsRedirects.send.tor, - ...r.sendNormalCustomRedirects, - ...r.sendTorCustomRedirects, - ].includes(protocolHost)) resolve(); - - if (url.pathname != '/') resolve(); - - let instancesList; - if (r.sendTargetsProtocol == 'normal') instancesList = [...r.sendNormalRedirectsChecks, ...r.sendNormalCustomRedirects]; - else if (r.sendTargetsProtocol == 'tor') instancesList = [...r.sendTorRedirectsChecks, ...r.sendTorCustomRedirects]; - - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) resolve(); - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); + disableSendTarget = r.disableSendTarget; + sendTargetsRedirects = r.sendTargetsRedirects; + sendNormalRedirectsChecks = r.sendNormalRedirectsChecks; + sendNormalCustomRedirects = r.sendNormalCustomRedirects; + sendTorRedirectsChecks = r.sendTorRedirectsChecks; + sendTorCustomRedirects = r.sendTorCustomRedirects; + sendTargetsProtocol = r.sendTargetsProtocol; + resolve(); } ) }) } -function redirect(url, type, initiator) { +init(); +browser.storage.onChanged.addListener(init) + +function all() { + return [ + ...sendTargetsRedirects.send.normal, + ...sendTargetsRedirects.send.tor, + ...sendNormalCustomRedirects, + ...sendTorRedirectsChecks, + ...sendTorCustomRedirects, + ]; +} + +function switchInstance(url) { return new Promise(resolve => { - browser.storage.local.get( - [ - "disableSendTarget", - "sendTargetsRedirects", + const protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost)) { resolve(); return; } + if (url.pathname != '/') { resolve(); return; } - "sendNormalRedirectsChecks", - "sendNormalCustomRedirects", + let instancesList; + if (sendTargetsProtocol == 'normal') instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]; + else if (sendTargetsProtocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects]; - "sendTorRedirectsChecks", - "sendTorCustomRedirects", + const i = instancesList.indexOf(protocolHost); + if (i > -1) instancesList.splice(i, 1); + if (instancesList.length === 0) { resolve(); return; } - "sendTargetsProtocol" - ], - r => { - if (r.disableSendTarget) { resolve(); return; } - if (type != "main_frame") { resolve(); return; } - if ( - initiator && ( - [ - ...r.sendTargetsRedirects.send.normal, - ...r.sendTargetsRedirects.send.tor, - ...r.sendNormalCustomRedirects, - ...r.sendTorRedirectsChecks - ].includes(initiator.origin) || - targets.includes(initiator.host) - ) - ) { resolve(); return; } - if (!targets.some(rx => rx.test(url.href))) { resolve(); return; } - - let instancesList; - if (r.sendTargetsProtocol == 'normal') instancesList = [...r.sendNormalRedirectsChecks, ...r.sendNormalCustomRedirects]; - if (r.sendTargetsProtocol == 'tor') instancesList = [...r.sendTorRedirectsChecks, ...r.sendTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(randomInstance); - } - ) + const randomInstance = utils.getRandomInstance(instancesList); + resolve(`${randomInstance}${url.pathname}${url.search}`); }) } +function redirect(url, type, initiator) { + if (disableSendTarget) 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 (sendTargetsProtocol == 'normal') instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]; + if (sendTargetsProtocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects]; + 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 => { diff --git a/src/assets/javascripts/helpers/tiktok.js b/src/assets/javascripts/helpers/tiktok.js index 897baf0a..750744e6 100644 --- a/src/assets/javascripts/helpers/tiktok.js +++ b/src/assets/javascripts/helpers/tiktok.js @@ -27,138 +27,116 @@ function setRedirects(val) { }) } -let proxiTokNormalRedirectsChecks; -let proxiTokTorRedirectsChecks; -let proxiTokNormalCustomRedirects = []; -let proxiTokTorCustomRedirects = []; - -let disable; // disableTiktok -let protocol; - function initProxiTokCookies(test, from) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "tiktokProtocol", - "proxiTokNormalRedirectsChecks", - "proxiTokNormalCustomRedirects", - "proxiTokTorRedirectsChecks", - "proxiTokTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(from); - if (![ - ...r.proxiTokNormalRedirectsChecks, - ...r.proxiTokNormalCustomRedirects, - ...r.proxiTokTorRedirectsChecks, - ...r.proxiTokTorCustomRedirects, - ].includes(protocolHost)) resolve(); - - if (!test) { - let checkedInstances; - if (r.tiktokProtocol == 'normal') checkedInstances = [...r.proxiTokNormalRedirectsChecks, ...r.proxiTokNormalCustomRedirects] - else if (r.tiktokProtocol == 'tor') checkedInstances = [...r.proxiTokTorRedirectsChecks, ...r.proxiTokTorCustomRedirects] - for (const to of checkedInstances) { - utils.copyCookie('proxitok', from, to, 'theme'); - utils.copyCookie('proxitok', from, to, 'api-legacy'); - } - } - resolve(true); + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(from); + if (![ + ...proxiTokNormalRedirectsChecks, + ...proxiTokNormalCustomRedirects, + ...proxiTokTorRedirectsChecks, + ...proxiTokTorCustomRedirects, + ].includes(protocolHost)) resolve(); + + if (!test) { + let checkedInstances; + if (tiktokProtocol == 'normal') checkedInstances = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects] + else if (tiktokProtocol == 'tor') checkedInstances = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects] + for (const to of checkedInstances) { + utils.copyCookie('proxitok', from, to, 'theme'); + utils.copyCookie('proxitok', from, to, 'api-legacy'); } - ) + } + resolve(true); }) } function setProxiTokCookies() { return new Promise(resolve => { - browser.storage.local.get( - [ - "tiktokProtocol", - "disableTiktok", - "proxiTokNormalRedirectsChecks", - "proxiTokNormalCustomRedirects", - "proxiTokTorRedirectsChecks", - "proxiTokTorCustomRedirects", - ], - r => { - if (r.disableTiktok || r.tiktokProtocol === undefined) { resolve(); return; } - let checkedInstances; - if (r.tiktokProtocol == 'normal') checkedInstances = [...r.proxiTokNormalRedirectsChecks, ...r.proxiTokNormalCustomRedirects] - else if (r.tiktokProtocol == 'tor') checkedInstances = [...r.proxiTokTorRedirectsChecks, ...r.proxiTokTorCustomRedirects] - for (const to of checkedInstances) { - utils.getCookiesFromStorage('proxitok', to, 'theme'); - utils.getCookiesFromStorage('proxitok', to, 'api-legacy'); - } - resolve(); - } - ) + if (disableTiktok || tiktokProtocol === undefined) { resolve(); return; } + let checkedInstances; + if (tiktokProtocol == 'normal') checkedInstances = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects] + else if (tiktokProtocol == 'tor') checkedInstances = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects] + for (const to of checkedInstances) { + utils.getCookiesFromStorage('proxitok', to, 'theme'); + utils.getCookiesFromStorage('proxitok', to, 'api-legacy'); + } + resolve(); }) } -function redirect(url, type, initiator) { - return new Promise(resolve => { +let + disableTiktok, + tiktokProtocol, + tiktokRedirects, + proxiTokNormalRedirectsChecks, + proxiTokNormalCustomRedirects, + proxiTokTorRedirectsChecks, + proxiTokTorCustomRedirects; + +function init() { + return new Promise(async resolve => { browser.storage.local.get( [ "disableTiktok", "tiktokProtocol", - "tiktokRedirects", - "proxiTokNormalRedirectsChecks", "proxiTokNormalCustomRedirects", - "proxiTokTorRedirectsChecks", "proxiTokTorCustomRedirects", ], r => { - if (r.disableTiktok) { resolve(); return; }; - if (type != "main_frame") { resolve(); return; }; - if (initiator && ( - [ - ...r.tiktokRedirects.proxiTok.normal, - ...r.proxiTokNormalCustomRedirects - ].includes(initiator.origin) || - targets.includes(initiator.host) - ) - ) { resolve(); return; }; - if (!targets.some(rx => rx.test(url.href))) { resolve(); return; }; - // https://www.tiktok.com/@keysikaspol/video/7061265241887345946 - // https://www.tiktok.com/@keysikaspol - - let instancesList; - if (r.tiktokProtocol == 'normal') instancesList = [...r.proxiTokNormalRedirectsChecks, ...r.proxiTokNormalCustomRedirects]; - if (r.tiktokProtocol == 'tor') instancesList = [...r.proxiTokTorRedirectsChecks, ...r.proxiTokTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; }; - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}`); + disableTiktok = r.disableTiktok; + tiktokProtocol = r.tiktokProtocol; + tiktokRedirects = r.tiktokRedirects; + proxiTokNormalRedirectsChecks = r.proxiTokNormalRedirectsChecks; + proxiTokNormalCustomRedirects = r.proxiTokNormalCustomRedirects; + proxiTokTorRedirectsChecks = r.proxiTokTorRedirectsChecks; + proxiTokTorCustomRedirects = r.proxiTokTorCustomRedirects; + resolve(); } ) }) } -async function reverse(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "tiktokRedirects", - "proxiTokNormalCustomRedirects", - "proxiTokTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if ( - ![ - ...r.tiktokRedirects.proxiTok.normal, - ...r.tiktokRedirects.proxiTok.tor, - ...r.proxiTokNormalCustomRedirects, - ...r.proxiTokTorCustomRedirects - ].includes(protocolHost) - ) { resolve(); return; } - - resolve(`https://tiktok.com${url.pathname}${url.search}`); - } - ) +init(); +browser.storage.onChanged.addListener(init) + +// https://www.tiktok.com/@keysikaspol/video/7061265241887345946 +// https://www.tiktok.com/@keysikaspol +function redirect(url, type, initiator) { + if (disableTiktok) 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 (tiktokProtocol == 'normal') instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]; + if (tiktokProtocol == 'tor') instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]; + 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 + ]; + if (!all.includes(protocolHost)) { resolve(); return; } + + resolve(`https://tiktok.com${url.pathname}${url.search}`); }) } diff --git a/src/assets/javascripts/helpers/translate/set_lingva_preferences.js b/src/assets/javascripts/helpers/translate/set_lingva_preferences.js index d40f28e4..01a3b85e 100644 --- a/src/assets/javascripts/helpers/translate/set_lingva_preferences.js +++ b/src/assets/javascripts/helpers/translate/set_lingva_preferences.js @@ -10,6 +10,7 @@ browser.storage.local.get( 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); + console.log('r.lingva_isauto', r.lingva_isauto, localStorage.getItem('isauto')) if (r.lingva_source !== undefined) localStorage.setItem('source', r.lingva_source); if (r.lingva_target !== undefined) localStorage.setItem('target', r.lingva_target); diff --git a/src/assets/javascripts/helpers/translate/translate.js b/src/assets/javascripts/helpers/translate/translate.js index 3e853160..74400040 100644 --- a/src/assets/javascripts/helpers/translate/translate.js +++ b/src/assets/javascripts/helpers/translate/translate.js @@ -18,8 +18,59 @@ let redirects = { }; let + translateDisable, + translateFrontend, + translateProtocol, + translateRedirects, simplyTranslateNormalRedirectsChecks, - lingvaNormalRedirectsChecks; + simplyTranslateNormalCustomRedirects, + simplyTranslateTorRedirectsChecks, + simplyTranslateTorCustomRedirects, + lingvaNormalRedirectsChecks, + lingvaNormalCustomRedirects, + lingvaTorRedirectsChecks, + lingvaTorCustomRedirects; + +function init() { + return new Promise(resolve => { + browser.storage.local.get( + [ + "translateDisable", + "translateFrontend", + "translateProtocol", + "translateRedirects", + + "simplyTranslateNormalRedirectsChecks", + "simplyTranslateNormalCustomRedirects", + "simplyTranslateTorRedirectsChecks", + "simplyTranslateTorCustomRedirects", + + "lingvaNormalRedirectsChecks", + "lingvaNormalCustomRedirects", + "lingvaTorRedirectsChecks", + "lingvaTorCustomRedirects", + ], + r => { + translateDisable = r.translateDisable; + translateFrontend = r.translateFrontend; + translateProtocol = r.translateProtocol; + translateRedirects = r.translateRedirects; + simplyTranslateNormalRedirectsChecks = r.simplyTranslateNormalRedirectsChecks; + simplyTranslateNormalCustomRedirects = r.simplyTranslateNormalCustomRedirects; + simplyTranslateTorRedirectsChecks = r.simplyTranslateTorRedirectsChecks; + simplyTranslateTorCustomRedirects = r.simplyTranslateTorCustomRedirects; + lingvaNormalRedirectsChecks = r.lingvaNormalRedirectsChecks; + lingvaNormalCustomRedirects = r.lingvaNormalCustomRedirects; + lingvaTorRedirectsChecks = r.lingvaTorRedirectsChecks; + lingvaTorCustomRedirects = r.lingvaTorCustomRedirects; + resolve(); + } + ) + }) +} + +init(); +browser.storage.onChanged.addListener(init) function setRedirects(val) { browser.storage.local.get('cloudflareList', r => { @@ -44,226 +95,153 @@ function setRedirects(val) { } function initLingvaLocalStorage(test, url, tabId) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "translateDisable", - "translateProtocol", - "translateFrontend", - "lingvaNormalRedirectsChecks", - "lingvaNormalCustomRedirects", - "lingvaTorRedirectsChecks", - "lingvaTorCustomRedirects", - ], - r => { - if (r.translateDisable || r.translateFrontend != 'lingva') { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (![ - ...r.lingvaNormalRedirectsChecks, - ...r.lingvaNormalCustomRedirects, - ...r.lingvaTorRedirectsChecks, - ...r.lingvaTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - browser.tabs.executeScript( - tabId, - { file: "/assets/javascripts/helpers/translate/get_lingva_preferences.js", runAt: "document_start" } - ); - - let checkedInstances; - if (r.translateProtocol == 'normal') checkedInstances = [...r.lingvaNormalRedirectsChecks, ...r.lingvaNormalCustomRedirects]; - if (r.translateProtocol == 'tor') checkedInstances = [...r.lingvaTorRedirectsChecks, ...r.lingvaTorCustomRedirects]; - 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/helpers/translate/set_lingva_preferences.js", runAt: "document_start" }) - ); - } - resolve(true); - } - ) - }) + return new Promise(async resolve => { + await init(); + if (translateDisable || translateFrontend != 'lingva') { resolve(); return; } + const protocolHost = utils.protocolHost(url); + if (![ + ...lingvaNormalRedirectsChecks, + ...lingvaNormalCustomRedirects, + ...lingvaTorRedirectsChecks, + ...lingvaTorCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + + if (!test) { + browser.tabs.executeScript( + tabId, + { file: "/assets/javascripts/helpers/translate/get_lingva_preferences.js", runAt: "document_start" } + ); + + let checkedInstances; + if (translateProtocol == 'normal') checkedInstances = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]; + if (translateProtocol == 'tor') checkedInstances = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]; + 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/helpers/translate/set_lingva_preferences.js", runAt: "document_start" }) + ); + } + resolve(true); + } + ) } function initSimplyTranslateCookies(test, from) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "translateProtocol", - "simplyTranslateNormalRedirectsChecks", - "simplyTranslateNormalCustomRedirects", - "simplyTranslateTorRedirectsChecks", - "simplyTranslateTorCustomRedirects", - "simplyTranslateI2pRedirectsChecks", - "simplyTranslateI2pCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(from); - if (![ - ...r.simplyTranslateNormalRedirectsChecks, - ...r.simplyTranslateNormalCustomRedirects, - ...r.simplyTranslateTorRedirectsChecks, - ...r.simplyTranslateTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - if (!test) { - let checkedInstances; - if (r.translateProtocol == 'normal') checkedInstances = [...r.simplyTranslateNormalRedirectsChecks, ...r.simplyTranslateNormalCustomRedirects] - else if (r.translateProtocol == 'tor') checkedInstances = [...r.simplyTranslateTorRedirectsChecks, ...r.simplyTranslateTorCustomRedirects] - for (const to of checkedInstances) { - utils.copyCookie('simplyTranslate', from, to, 'from_lang'); - utils.copyCookie('simplyTranslate', from, to, 'to_lang'); - utils.copyCookie('simplyTranslate', from, to, 'tts_enabled'); - utils.copyCookie('simplyTranslate', from, to, 'use_text_fields'); - } - } - resolve(true); + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(from); + if (![ + ...simplyTranslateNormalRedirectsChecks, + ...simplyTranslateNormalCustomRedirects, + ...simplyTranslateTorRedirectsChecks, + ...simplyTranslateTorCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + if (!test) { + let checkedInstances; + if (translateProtocol == 'normal') checkedInstances = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects] + else if (translateProtocol == 'tor') checkedInstances = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects] + for (const to of checkedInstances) { + utils.copyCookie('simplyTranslate', from, to, 'from_lang'); + utils.copyCookie('simplyTranslate', from, to, 'to_lang'); + utils.copyCookie('simplyTranslate', from, to, 'tts_enabled'); + utils.copyCookie('simplyTranslate', from, to, 'use_text_fields'); } - ) - }) + } + resolve(true); + } + ) } function setSimplyTranslateCookies() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "translateProtocol", - "translateDisable", - "translateFrontend", - "simplyTranslateNormalRedirectsChecks", - "simplyTranslateNormalCustomRedirects", - "simplyTranslateTorRedirectsChecks", - "simplyTranslateTorCustomRedirects", - ], - r => { - if (r.translateDisable || r.translateFrontend != 'simplyTranslate') { resolve(); return; } - let checkedInstances; - if (r.translateProtocol == 'normal') checkedInstances = [...r.simplyTranslateNormalRedirectsChecks, ...r.simplyTranslateNormalCustomRedirects] - else if (r.translateProtocol == 'tor') checkedInstances = [...r.simplyTranslateTorRedirectsChecks, ...r.simplyTranslateTorCustomRedirects] - for (const to of checkedInstances) { - utils.getCookiesFromStorage('simplyTranslate', to, 'from_lang'); - utils.getCookiesFromStorage('simplyTranslate', to, 'to_lang'); - utils.getCookiesFromStorage('simplyTranslate', to, 'tts_enabled'); - utils.getCookiesFromStorage('simplyTranslate', to, 'use_text_fields'); - } - resolve(); - } - ) - }) + return new Promise(async resolve => { + await init(); + if (translateDisable || translateFrontend != 'simplyTranslate') { resolve(); return; } + let checkedInstances; + if (translateProtocol == 'normal') checkedInstances = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects] + else if (translateProtocol == 'tor') checkedInstances = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects] + for (const to of checkedInstances) { + utils.getCookiesFromStorage('simplyTranslate', to, 'from_lang'); + utils.getCookiesFromStorage('simplyTranslate', to, 'to_lang'); + utils.getCookiesFromStorage('simplyTranslate', to, 'tts_enabled'); + utils.getCookiesFromStorage('simplyTranslate', to, 'use_text_fields'); + } + resolve(); + } + ) } function redirect(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "translateDisable", - "translateFrontend", - "translateProtocol", - "translateRedirects", + if (translateDisable) return; + if (!targets.some(rx => rx.test(url.href))) return; - "simplyTranslateNormalRedirectsChecks", - "simplyTranslateNormalCustomRedirects", - "simplyTranslateTorRedirectsChecks", - "simplyTranslateTorCustomRedirects", + if (translateFrontend == 'simplyTranslate') { + let instancesList; + if (translateProtocol == 'normal') instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]; + if (translateProtocol == 'tor') instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]; + if (instancesList.length === 0) return; - "lingvaNormalRedirectsChecks", - "lingvaNormalCustomRedirects", - "lingvaTorRedirectsChecks", - "lingvaTorCustomRedirects", - ], - r => { - if (r.translateDisable) { resolve(); return; }; - if (!targets.some(rx => rx.test(url.href))) { resolve(); return; }; - - if (r.translateFrontend == 'simplyTranslate') { - let instancesList; - if (r.translateProtocol == 'normal') instancesList = [...r.simplyTranslateNormalRedirectsChecks, ...r.simplyTranslateNormalCustomRedirects]; - if (r.translateProtocol == 'tor') instancesList = [...r.simplyTranslateTorRedirectsChecks, ...r.simplyTranslateTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; }; - - let randomInstance = utils.getRandomInstance(instancesList) - resolve(`${randomInstance}/${url.search}`); - } - else if (r.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 (r.translateProtocol == 'normal') instancesList = [...r.lingvaNormalRedirectsChecks, ...r.lingvaNormalCustomRedirects]; - if (r.translateProtocol == 'tor') instancesList = [...r.lingvaTorRedirectsChecks, ...r.lingvaTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - - let randomInstance = utils.getRandomInstance(instancesList) - if (params.sl && params.tl && params.text) { - resolve(`${randomInstance}/${params.sl}/${params.tl}/${params.text}`); return; - } - resolve(randomInstance); - } - } - ) - }) + 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 (translateProtocol == 'normal') instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]; + if (translateProtocol == 'tor') instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]; + 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) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "translateDisable", - "translateFrontend", - "translateProtocol", - "translateRedirects", - - "simplyTranslateNormalRedirectsChecks", - "simplyTranslateNormalCustomRedirects", - "simplyTranslateTorRedirectsChecks", - "simplyTranslateTorCustomRedirects", - - "lingvaNormalRedirectsChecks", - "lingvaNormalCustomRedirects", - "lingvaTorRedirectsChecks", - "lingvaTorCustomRedirects", - ], - r => { - if (r.translateDisable) { resolve(); return; }; - const protocolHost = utils.protocolHost(url); - if (![ - ...r.translateRedirects.simplyTranslate.normal, - ...r.translateRedirects.simplyTranslate.tor, - - ...r.simplyTranslateNormalCustomRedirects, - ...r.simplyTranslateTorCustomRedirects, - - ...r.translateRedirects.lingva.normal, - ...r.translateRedirects.lingva.tor, - - ...r.lingvaNormalCustomRedirects, - ...r.lingvaTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - let instancesList; - if (r.translateProtocol == 'normal') { - if (r.translateFrontend == 'simplyTranslate') instancesList = [...r.simplyTranslateNormalRedirectsChecks, ...r.simplyTranslateNormalCustomRedirects]; - else if (r.translateFrontend == 'lingva') instancesList = [...r.lingvaNormalRedirectsChecks, ...r.lingvaNormalCustomRedirects]; - } - else if (r.translateProtocol == 'tor') { - if (r.translateFrontend == 'simplyTranslate') instancesList = [...r.simplyTranslateTorRedirectsChecks, ...r.simplyTranslateTorCustomRedirects]; - else if (r.translateFrontend == 'lingva') instancesList = [...r.lingvaTorRedirectsChecks, ...r.lingvaTorCustomRedirects]; - } + return new Promise(async resolve => { + await init(); + if (translateDisable) { resolve(); return; } + const protocolHost = utils.protocolHost(url); + if (![ + ...translateRedirects.simplyTranslate.normal, + ...translateRedirects.simplyTranslate.tor, + + ...simplyTranslateNormalCustomRedirects, + ...simplyTranslateTorCustomRedirects, + + ...translateRedirects.lingva.normal, + ...translateRedirects.lingva.tor, + + ...lingvaNormalCustomRedirects, + ...lingvaTorCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + + let instancesList; + if (translateProtocol == 'normal') { + if (translateFrontend == 'simplyTranslate') instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]; + else if (translateFrontend == 'lingva') instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]; + } + else if (translateProtocol == 'tor') { + if (translateFrontend == 'simplyTranslate') instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]; + else if (translateFrontend == 'lingva') instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]; + } - const index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) { resolve(); return; } + const i = instancesList.indexOf(protocolHost); + if (i > -1) instancesList.splice(i, 1); + if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + const randomInstance = utils.getRandomInstance(instancesList); + resolve(`${randomInstance}${url.pathname}${url.search}`); }) } @@ -310,9 +288,7 @@ export default { initSimplyTranslateCookies, setSimplyTranslateCookies, initLingvaLocalStorage, - setRedirects, - redirect, initDefaults, switchInstance, diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js index 89077fb9..78beb86f 100644 --- a/src/assets/javascripts/helpers/twitter.js +++ b/src/assets/javascripts/helpers/twitter.js @@ -32,239 +32,172 @@ function setRedirects(val) { }) } -let nitterNormalRedirectsChecks; - -async function redirect(url, initiator) { - return new Promise(resolve => { +let + disableTwitter, + twitterProtocol, + twitterRedirects, + nitterNormalRedirectsChecks, + nitterNormalCustomRedirects, + nitterTorRedirectsChecks, + nitterTorCustomRedirects; + +function init() { + return new Promise(async resolve => { browser.storage.local.get( [ "disableTwitter", "twitterProtocol", - "twitterRedirects", - "nitterNormalRedirectsChecks", "nitterNormalCustomRedirects", - "nitterTorRedirectsChecks", "nitterTorCustomRedirects", ], r => { - if (r.disableTwitter) { resolve(); return; } - if (!targets.some(rx => rx.test(url.href))) { resolve(); return; } - if (url.pathname.split("/").includes("home")) { resolve(); return; } - - if ( - initiator && - [ - ...r.twitterRedirects.nitter.normal, - ...r.twitterRedirects.nitter.tor, - ...r.nitterTorCustomRedirects, - ...r.nitterNormalCustomRedirects - ].includes(initiator.origin) - ) { resolve('BYPASSTAB'); return; } - - let instancesList; - if (r.twitterProtocol == 'normal') instancesList = [...r.nitterNormalRedirectsChecks, ...r.nitterNormalCustomRedirects]; - else if (r.twitterProtocol == 'tor') instancesList = [...r.nitterTorRedirectsChecks, ...r.nitterTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - - let randomInstance = utils.getRandomInstance(instancesList) - console.log('randomInstance', randomInstance); - // https://pbs.twimg.com/profile_images/648888480974508032/66_cUYfj_400x400.jpg - if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") - resolve(`${randomInstance}/pic/${encodeURIComponent(`${url.host}${url.pathname}`)}`); - else if (url.pathname.split("/").includes("tweets")) - resolve(`${randomInstance}${url.pathname.replace("/tweets", "")}${url.search}`); - else if (url.host == 't.co') - resolve(`${randomInstance}/t.co${url.pathname}`); - else - resolve(`${randomInstance}${url.pathname}${url.search}`); + disableTwitter = r.disableTwitter; + twitterProtocol = r.twitterProtocol; + twitterRedirects = r.twitterRedirects; + nitterNormalRedirectsChecks = r.nitterNormalRedirectsChecks; + nitterNormalCustomRedirects = r.nitterNormalCustomRedirects; + nitterTorRedirectsChecks = r.nitterTorRedirectsChecks; + nitterTorCustomRedirects = r.nitterTorCustomRedirects; + resolve(); } ) }) } +init(); +browser.storage.onChanged.addListener(init) + +function all() { + return [ + ...nitterNormalRedirectsChecks, + ...nitterTorRedirectsChecks, + ...nitterNormalCustomRedirects, + ...nitterTorCustomRedirects, + ]; +} + +function redirect(url, initiator) { + if (disableTwitter) 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'; + + let instancesList; + if (twitterProtocol == 'normal') instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]; + else if (twitterProtocol == 'tor') instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]; + if (instancesList.length === 0) return; + + const randomInstance = utils.getRandomInstance(instancesList); + // https://pbs.twimg.com/profile_images/648888480974508032/66_cUYfj_400x400.jpg + if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") + return `${randomInstance}/pic/${encodeURIComponent(`${url.host}${url.pathname}`)}`; + else if (url.pathname.split("/").includes("tweets")) + return `${randomInstance}${url.pathname.replace("/tweets", "")}${url.search}`; + else if (url.host == 't.co') + return `${randomInstance}/t.co${url.pathname}`; + else + return `${randomInstance}${url.pathname}${url.search}`; +} + function reverse(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "twitterRedirects", - "nitterNormalCustomRedirects", - "nitterTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if ( - ![ - ...r.twitterRedirects.nitter.normal, - ...r.twitterRedirects.nitter.tor, - ...r.nitterNormalCustomRedirects, - ...r.nitterTorCustomRedirects - ].includes(protocolHost) - ) { resolve(); return; } - resolve(`https://twitter.com${url.pathname}${url.search}`); - } - ) + 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) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "twitterRedirects", - "twitterProtocol", - - "nitterNormalRedirectsChecks", - "nitterNormalCustomRedirects", - - "nitterTorRedirectsChecks", - "nitterTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...r.twitterRedirects.nitter.normal, - ...r.twitterRedirects.nitter.tor, - ...r.nitterNormalCustomRedirects, - ...r.nitterTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - let instancesList; - if (r.twitterProtocol == 'normal') instancesList = [...r.nitterNormalRedirectsChecks, ...r.nitterNormalCustomRedirects]; - else if (r.twitterProtocol == 'tor') instancesList = [...r.nitterTorRedirectsChecks, ...r.nitterTorCustomRedirects]; - - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) { resolve(); return; } - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + const protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost)) { resolve; return; } + let instancesList; + if (twitterProtocol == 'normal') instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]; + else if (twitterProtocol == 'tor') instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]; + + 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) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "twitterRedirects", - "twitterProtocol", - - "nitterNormalRedirectsChecks", - "nitterNormalCustomRedirects", - - "nitterTorRedirectsChecks", - "nitterTorCustomRedirects", - ], - r => { - let url = new URL(e.url); - let protocolHost = utils.protocolHost(url); - if ( - ![ - ...r.twitterRedirects.nitter.normal, - ...r.twitterRedirects.nitter.tor, - ...r.nitterNormalCustomRedirects, - ...r.nitterTorCustomRedirects, - ].includes(protocolHost) || - e.type != 'sub_frame' - ) { resolve(); 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; - } - if (isChanged) resolve({ responseHeaders: e.responseHeaders }); - } - ) - }) + let url = new URL(e.url); + let protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost) || e.type != 'sub_frame') 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; + } + if (isChanged) return { responseHeaders: e.responseHeaders }; } function initNitterCookies(test, from) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "twitterProtocol", - "nitterNormalRedirectsChecks", - "nitterNormalCustomRedirects", - "nitterTorRedirectsChecks", - "nitterTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(from); - if ( - ![ - ...r.nitterNormalRedirectsChecks, - ...r.nitterTorRedirectsChecks, - ...r.nitterNormalCustomRedirects, - ...r.nitterTorCustomRedirects, - ].includes(protocolHost) - ) { resolve(); return; } - - if (!test) { - let checkedInstances; - if (r.twitterProtocol == 'normal') checkedInstances = [...r.nitterNormalRedirectsChecks, ...r.nitterNormalCustomRedirects] - else if (r.twitterProtocol == 'tor') checkedInstances = [...r.nitterTorRedirectsChecks, ...r.nitterTorCustomRedirects] - for (const to of checkedInstances) { - utils.copyCookie('nitter', from, to, 'theme'); - utils.copyCookie('nitter', from, to, 'infiniteScroll'); - utils.copyCookie('nitter', from, to, 'stickyProfile'); - utils.copyCookie('nitter', from, to, 'bidiSupport'); - utils.copyCookie('nitter', from, to, 'hideTweetStats'); - utils.copyCookie('nitter', from, to, 'hideBanner'); - utils.copyCookie('nitter', from, to, 'hidePins'); - utils.copyCookie('nitter', from, to, 'hideReplies'); - utils.copyCookie('nitter', from, to, 'squareAvatars'); - utils.copyCookie('nitter', from, to, 'mp4Playback'); - utils.copyCookie('nitter', from, to, 'hlsPlayback'); - utils.copyCookie('nitter', from, to, 'proxyVideos'); - utils.copyCookie('nitter', from, to, 'muteVideos'); - utils.copyCookie('nitter', from, to, 'autoplayGifs'); - } - } - resolve(true); - }) + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(from); + if (!all().includes(protocolHost) + ) { resolve(); return; } + + if (!test) { + let checkedInstances; + if (twitterProtocol == 'normal') checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects] + else if (twitterProtocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects] + for (const to of checkedInstances) { + utils.copyCookie('nitter', from, to, 'theme'); + utils.copyCookie('nitter', from, to, 'infiniteScroll'); + utils.copyCookie('nitter', from, to, 'stickyProfile'); + utils.copyCookie('nitter', from, to, 'bidiSupport'); + utils.copyCookie('nitter', from, to, 'hideTweetStats'); + utils.copyCookie('nitter', from, to, 'hideBanner'); + utils.copyCookie('nitter', from, to, 'hidePins'); + utils.copyCookie('nitter', from, to, 'hideReplies'); + utils.copyCookie('nitter', from, to, 'squareAvatars'); + utils.copyCookie('nitter', from, to, 'mp4Playback'); + utils.copyCookie('nitter', from, to, 'hlsPlayback'); + utils.copyCookie('nitter', from, to, 'proxyVideos'); + utils.copyCookie('nitter', from, to, 'muteVideos'); + utils.copyCookie('nitter', from, to, 'autoplayGifs'); + } + } + resolve(true); }) } function setNitterCookies() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "twitterProtocol", - "disableTwitter", - "youtubeFrontend", - "nitterNormalRedirectsChecks", - "nitterNormalCustomRedirects", - "nitterTorRedirectsChecks", - "nitterTorCustomRedirects", - ], - r => { - if (r.disableYoutube || r.youtubeFrontend != 'nitter' || r.twitterProtocol === undefined) { resolve(); return; } - let checkedInstances; - if (r.youtubeProtocol == 'normal') checkedInstances = [...r.nitterNormalRedirectsChecks, ...r.nitterNormalCustomRedirects] - else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.nitterTorRedirectsChecks, ...r.nitterTorCustomRedirects] - for (const to of checkedInstances) { - utils.getCookiesFromStorage('nitter', to, 'theme'); - utils.getCookiesFromStorage('nitter', to, 'infiniteScroll'); - utils.getCookiesFromStorage('nitter', to, 'stickyProfile'); - utils.getCookiesFromStorage('nitter', to, 'bidiSupport'); - utils.getCookiesFromStorage('nitter', to, 'hideTweetStats'); - utils.getCookiesFromStorage('nitter', to, 'hideBanner'); - utils.getCookiesFromStorage('nitter', to, 'hidePins'); - utils.getCookiesFromStorage('nitter', to, 'hideReplies'); - utils.getCookiesFromStorage('nitter', to, 'squareAvatars'); - utils.getCookiesFromStorage('nitter', to, 'mp4Playback'); - utils.getCookiesFromStorage('nitter', to, 'hlsPlayback'); - utils.getCookiesFromStorage('nitter', to, 'proxyVideos'); - utils.getCookiesFromStorage('nitter', to, 'muteVideos'); - utils.getCookiesFromStorage('nitter', to, 'autoplayGifs'); - } - resolve(); - } - ) - }) + return new Promise(async resolve => { + await init(); + if (disableTwitter || twitterProtocol === undefined) { resolve(); return; } + let checkedInstances; + if (twitterProtocol == 'normal') checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects] + else if (twitterProtocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects] + for (const to of checkedInstances) { + utils.getCookiesFromStorage('nitter', to, 'theme'); + utils.getCookiesFromStorage('nitter', to, 'infiniteScroll'); + utils.getCookiesFromStorage('nitter', to, 'stickyProfile'); + utils.getCookiesFromStorage('nitter', to, 'bidiSupport'); + utils.getCookiesFromStorage('nitter', to, 'hideTweetStats'); + utils.getCookiesFromStorage('nitter', to, 'hideBanner'); + utils.getCookiesFromStorage('nitter', to, 'hidePins'); + utils.getCookiesFromStorage('nitter', to, 'hideReplies'); + utils.getCookiesFromStorage('nitter', to, 'squareAvatars'); + utils.getCookiesFromStorage('nitter', to, 'mp4Playback'); + utils.getCookiesFromStorage('nitter', to, 'hlsPlayback'); + utils.getCookiesFromStorage('nitter', to, 'proxyVideos'); + utils.getCookiesFromStorage('nitter', to, 'muteVideos'); + utils.getCookiesFromStorage('nitter', to, 'autoplayGifs'); + } + resolve(); + } + ) } function initDefaults() { @@ -297,14 +230,11 @@ function initDefaults() { export default { setRedirects, - redirect, switchInstance, reverse, removeXFrameOptions, - initNitterCookies, setNitterCookies, - initDefaults, }; diff --git a/src/assets/javascripts/helpers/utils.js b/src/assets/javascripts/helpers/utils.js index 38c35364..6d1956f6 100644 --- a/src/assets/javascripts/helpers/utils.js +++ b/src/assets/javascripts/helpers/utils.js @@ -313,16 +313,13 @@ function copyRaw(test, copyRawElement) { let currTab = tabs[0]; if (currTab) { let url; - try { - url = new URL(currTab.url); - } catch { resolve(); return; } - let newUrl; - newUrl = await youtubeHelper.reverse(url); - - 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 imgurHelper.reverse(url); + try { url = new URL(currTab.url); } + catch { resolve(); return; } + let newUrl = await youtubeHelper.reverse(url); + if (!newUrl) newUrl = twitterHelper.reverse(url); + if (!newUrl) newUrl = instagramHelper.reverse(url); + if (!newUrl) newUrl = tiktokHelper.reverse(url); + if (!newUrl) newUrl = imgurHelper.reverse(url); if (newUrl) { resolve(true); @@ -372,7 +369,7 @@ function unify(test, unifyElement) { if (!result) result = await translateHelper.initLingvaLocalStorage(test, url); if (result) { - if (!test) { + if (!test && unifyElement) { const textElement = unifyElement.getElementsByTagName('h4')[0] const oldHtml = textElement.innerHTML; textElement.innerHTML = 'Unified'; @@ -395,17 +392,17 @@ function switchInstance(test) { try { url = new URL(currTab.url); } catch { resolve(); return }; let newUrl = await youtubeHelper.switchInstance(url); - if (!newUrl) newUrl = await twitterHelper.switchInstance(url); - if (!newUrl) newUrl = await instagramHelper.switchInstance(url); - if (!newUrl) newUrl = await redditHelper.switchInstance(url); - if (!newUrl) newUrl = await searchHelper.switchInstance(url); + // if (!newUrl) newUrl = twitterHelper.switchInstance(url); + // if (!newUrl) newUrl = instagramHelper.switchInstance(url); + // if (!newUrl) newUrl = redditHelper.switchInstance(url); + // if (!newUrl) newUrl = searchHelper.switchInstance(url); if (!newUrl) newUrl = await translateHelper.switchInstance(url); - if (!newUrl) newUrl = await mediumHelper.switchInstance(url); - if (!newUrl) newUrl = await sendTargetsHelper.switchInstance(url); - if (!newUrl) newUrl = await peertubeHelper.switchInstance(url); - if (!newUrl) newUrl = await lbryHelper.switchInstance(url); - if (!newUrl) newUrl = await imgurHelper.switchInstance(url); - if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url); + // if (!newUrl) newUrl = mediumHelper.switchInstance(url); + // if (!newUrl) newUrl = sendTargetsHelper.switchInstance(url); + // if (!newUrl) newUrl = peertubeHelper.switchInstance(url); + // if (!newUrl) newUrl = lbryHelper.switchInstance(url); + // if (!newUrl) newUrl = imgurHelper.switchInstance(url); + // if (!newUrl) newUrl = wikipediaHelper.switchInstance(url); if (newUrl) { if (!test) diff --git a/src/assets/javascripts/helpers/wikipedia.js b/src/assets/javascripts/helpers/wikipedia.js index fa6fd8fc..59351c62 100644 --- a/src/assets/javascripts/helpers/wikipedia.js +++ b/src/assets/javascripts/helpers/wikipedia.js @@ -26,172 +26,157 @@ function setRedirects(val) { }) } -let wikilessNormalRedirectsChecks; - -function initWikilessCookies(test, from) { - return new Promise(resolve => { +let + disableWikipedia, + wikipediaRedirects, + wikipediaProtocol, + wikilessNormalRedirectsChecks, + wikilessTorRedirectsChecks, + wikilessI2pRedirectsChecks, + wikilessNormalCustomRedirects, + wikilessTorCustomRedirects, + wikilessI2pCustomRedirects; + +function init() { + return new Promise(async resolve => { browser.storage.local.get( [ + "disableWikipedia", + "wikipediaRedirects", "wikipediaProtocol", + "wikilessNormalRedirectsChecks", - "wikilessNormalCustomRedirects", "wikilessTorRedirectsChecks", - "wikilessTorCustomRedirects", "wikilessI2pRedirectsChecks", - "wikilessI2pCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(from); - if (![ - ...r.wikilessNormalRedirectsChecks, - ...r.wikilessNormalCustomRedirects, - ...r.wikilessTorRedirectsChecks, - ...r.wikilessTorCustomRedirects, - ...r.wikilessI2pRedirectsChecks, - ...r.wikilessI2pCustomRedirects, - ].includes(protocolHost)) resolve(); - - if (!test) { - let checkedInstances; - if (r.wikipediaProtocol == 'normal') checkedInstances = [...r.wikilessNormalRedirectsChecks, ...r.wikilessNormalCustomRedirects] - else if (r.wikipediaProtocol == 'tor') checkedInstances = [...r.wikilessTorRedirectsChecks, ...r.wikilessTorCustomRedirects] - else if (r.wikipediaProtocol == 'i2p') checkedInstances = [...r.wikilessI2pRedirectsChecks, ...r.wikilessI2pCustomRedirects] - - for (const to of checkedInstances) { - utils.copyCookie('wikiless', from, to, 'theme'); - utils.copyCookie('wikiless', from, to, 'default_lang'); - } - } - resolve(true); - } - ) - }) -} - -function setWikilessCookies() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableWikipedia", - "wikipediaProtocol", - "wikilessNormalRedirectsChecks", "wikilessNormalCustomRedirects", - "wikilessTorRedirectsChecks", "wikilessTorCustomRedirects", + "wikilessI2pCustomRedirects", ], r => { - if (r.disableWikipedia || r.wikipediaProtocol === undefined) { resolve(); return; } - let checkedInstances; - if (r.wikipediaProtocol == 'normal') checkedInstances = [...r.wikilessNormalRedirectsChecks, ...r.wikilessNormalCustomRedirects] - else if (r.wikipediaProtocol == 'tor') checkedInstances = [...r.wikilessTorRedirectsChecks, ...r.wikilessTorCustomRedirects] - for (const to of checkedInstances) { - utils.getCookiesFromStorage('wikiless', to, 'theme'); - utils.getCookiesFromStorage('wikiless', to, 'default_lang'); - } + disableWikipedia = r.disableWikipedia; + wikipediaRedirects = r.wikipediaRedirects; + wikipediaProtocol = r.wikipediaProtocol; + wikilessNormalRedirectsChecks = r.wikilessNormalRedirectsChecks; + wikilessTorRedirectsChecks = r.wikilessTorRedirectsChecks; + wikilessI2pRedirectsChecks = r.wikilessI2pRedirectsChecks; + wikilessNormalCustomRedirects = r.wikilessNormalCustomRedirects; + wikilessTorCustomRedirects = r.wikilessTorCustomRedirects; + wikilessI2pCustomRedirects = r.wikilessI2pCustomRedirects; resolve(); } ) }) } -function redirect(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableWikipedia", - "wikipediaRedirects", - "wikipediaProtocol", +init(); +browser.storage.onChanged.addListener(init) - "wikilessNormalRedirectsChecks", - "wikilessTorRedirectsChecks", - "wikilessI2pRedirectsChecks", - "wikilessNormalCustomRedirects", - "wikilessTorCustomRedirects", - "wikilessI2pCustomRedirects", - ], - r => { - if (r.disableWikipedia) { resolve(); return; } - if (!targets.test(url.href)) { resolve(); return; } - - 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 instancesList; - if (r.wikipediaProtocol == 'normal') instancesList = [...r.wikilessNormalRedirectsChecks, ...r.wikilessNormalCustomRedirects]; - else if (r.wikipediaProtocol == 'tor') instancesList = [...r.wikilessTorRedirectsChecks, ...r.wikilessTorCustomRedirects]; - else if (r.wikipediaProtocol == 'i2p') instancesList = [...r.wikilessI2pRedirectsChecks, ...r.wikilessI2pCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList) - - 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]; - - resolve(link); +function initWikilessCookies(test, from) { + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(from); + const all = [ + ...wikilessNormalRedirectsChecks, + ...wikilessNormalCustomRedirects, + ...wikilessTorRedirectsChecks, + ...wikilessTorCustomRedirects, + ...wikilessI2pRedirectsChecks, + ...wikilessI2pCustomRedirects, + ]; + if (!all.includes(protocolHost)) { resolve(); return; } + + if (!test) { + let checkedInstances; + if (wikipediaProtocol == 'normal') checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects] + else if (wikipediaProtocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects] + else if (wikipediaProtocol == 'i2p') checkedInstances = [...wikilessI2pRedirectsChecks, ...wikilessI2pCustomRedirects] + + for (const to of checkedInstances) { + utils.copyCookie('wikiless', from, to, 'theme'); + utils.copyCookie('wikiless', from, to, 'default_lang'); } - ) + } + resolve(true); }) } -function switchInstance(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "wikipediaRedirects", - "wikipediaProtocol", - - "wikilessNormalRedirectsChecks", - "wikilessTorRedirectsChecks", +function setWikilessCookies() { + return new Promise(async resolve => { + await init(); + if (disableWikipedia || wikipediaProtocol === undefined) { resolve(); return; } + let checkedInstances; + if (wikipediaProtocol == 'normal') checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects] + else if (wikipediaProtocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects] + for (const to of checkedInstances) { + utils.getCookiesFromStorage('wikiless', to, 'theme'); + utils.getCookiesFromStorage('wikiless', to, 'default_lang'); + } + resolve(); + }) +} - "wikilessI2pRedirectsChecks", - "wikilessNormalCustomRedirects", +function redirect(url) { + if (disableWikipedia) return; + if (!targets.test(url.href)) return; + + 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 instancesList; + if (wikipediaProtocol == 'normal') instancesList = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects]; + else if (wikipediaProtocol == 'tor') instancesList = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects]; + else if (wikipediaProtocol == 'i2p') instancesList = [...wikilessI2pRedirectsChecks, ...wikilessI2pCustomRedirects]; + if (instancesList.length === 0) return; + const randomInstance = utils.getRandomInstance(instancesList) + + 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; +} - "wikilessTorCustomRedirects", - "wikilessI2pCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - - let wikipediaList = [ - ...r.wikipediaRedirects.wikiless.normal, - ...r.wikipediaRedirects.wikiless.tor, - ...r.wikipediaRedirects.wikiless.i2p, - - ...r.wikilessNormalCustomRedirects, - ...r.wikilessTorCustomRedirects, - ...r.wikilessI2pCustomRedirects - ] - if (!wikipediaList.includes(protocolHost)) resolve(); - - let instancesList; - if (r.wikipediaProtocol == 'normal') instancesList = [...r.wikilessNormalCustomRedirects, ...r.wikilessNormalRedirectsChecks]; - else if (r.wikipediaProtocol == 'tor') instancesList = [...r.wikilessTorCustomRedirects, ...r.wikilessTorRedirectsChecks]; - else if (r.wikipediaProtocol == 'i2p') instancesList = [...r.wikilessI2pCustomRedirects, ...r.wikilessI2pRedirectsChecks]; - - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) resolve(); - - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - } - ) +function switchInstance(url) { + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(url); + const wikipediaList = [ + ...wikipediaRedirects.wikiless.normal, + ...wikipediaRedirects.wikiless.tor, + ...wikipediaRedirects.wikiless.i2p, + + ...wikilessNormalCustomRedirects, + ...wikilessTorCustomRedirects, + ...wikilessI2pCustomRedirects + ] + if (!wikipediaList.includes(protocolHost)) return; + + let instancesList; + if (wikipediaProtocol == 'normal') instancesList = [...wikilessNormalCustomRedirects, ...wikilessNormalRedirectsChecks]; + else if (wikipediaProtocol == 'tor') instancesList = [...wikilessTorCustomRedirects, ...wikilessTorRedirectsChecks]; + else if (wikipediaProtocol == 'i2p') instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks]; + + let index = instancesList.indexOf(protocolHost); + if (index > -1) instancesList.splice(index, 1); + if (instancesList.length === 0) return; + + const randomInstance = utils.getRandomInstance(instancesList); + return `${randomInstance}${url.pathname}${url.search}`; }) } diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js index 989e3f61..5660f448 100644 --- a/src/assets/javascripts/helpers/youtube/youtube.js +++ b/src/assets/javascripts/helpers/youtube/youtube.js @@ -57,16 +57,26 @@ function setRedirects(val) { } let + disableYoutube, + OnlyEmbeddedVideo, + youtubeFrontend, + youtubeProtocol, + youtubeEmbedFrontend, + youtubeRedirects, invidiousNormalRedirectsChecks, + invidiousNormalCustomRedirects, invidiousTorRedirectsChecks, - + invidiousTorCustomRedirects, pipedNormalRedirectsChecks, + pipedNormalCustomRedirects, pipedTorRedirectsChecks, - + pipedTorCustomRedirects, pipedMaterialNormalRedirectsChecks, - pipedMaterialTorRedirectsChecks; + pipedMaterialNormalCustomRedirects, + pipedMaterialTorRedirectsChecks, + pipedMaterialTorCustomRedirects; -function redirect(url, details, initiator) { +function init() { return new Promise(resolve => { browser.storage.local.get( [ @@ -75,231 +85,184 @@ function redirect(url, details, initiator) { "youtubeFrontend", "youtubeProtocol", "youtubeEmbedFrontend", - "youtubeRedirects", - "invidiousNormalRedirectsChecks", "invidiousNormalCustomRedirects", - "invidiousTorRedirectsChecks", "invidiousTorCustomRedirects", - "pipedNormalRedirectsChecks", "pipedNormalCustomRedirects", - "pipedTorRedirectsChecks", "pipedTorCustomRedirects", - "pipedMaterialNormalRedirectsChecks", "pipedMaterialNormalCustomRedirects", - "pipedMaterialTorRedirectsChecks", "pipedMaterialTorCustomRedirects", ], r => { - if (r.disableYoutube) { resolve(); return; } - if (!targets.some(rx => rx.test(url.href))) { resolve(); return; } - - if ( - initiator && ( - [ - ...r.youtubeRedirects.invidious.normal, - ...r.invidiousNormalCustomRedirects, - ...r.youtubeRedirects.invidious.tor, - ...r.invidiousTorCustomRedirects, - - ...r.youtubeRedirects.piped.normal, - ...r.youtubeRedirects.piped.tor, - ...r.pipedNormalCustomRedirects, - ...r.pipedTorCustomRedirects - ].includes(initiator.origin) - ) - ) { resolve('BYPASSTAB'); return; } - - const isInvidious = r.youtubeFrontend == 'invidious'; - const isPiped = r.youtubeFrontend == 'piped'; - const isPipedMaterial = r.youtubeFrontend == 'pipedMaterial' - const isFreetube = r.youtubeFrontend == 'freetube'; - const isYatte = r.youtubeFrontend == 'yatte'; - - const isFrontendYoutube = r.youtubeEmbedFrontend == "youtube"; - const isFrontendInvidious = r.youtubeEmbedFrontend == 'invidious'; - const isFrontendPiped = r.youtubeEmbedFrontend == 'piped'; - const isFrontendPipedMaterial = r.youtubeEmbedFrontend == 'pipedMaterial'; - - const isOnlyEmbeddedVideo = r.OnlyEmbeddedVideo == 'onlyNotEmbedded'; - const isOnlyNotEmbedded = r.OnlyEmbeddedVideo == 'onlyNotEmbedded' - - const is_main_frame = details.type === "main_frame"; - const is_sub_frame = details.type === "sub_frame"; - - if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) { resolve(); return; } // Don't redirect YouTube Player API. - - if (r.youtubeFrontend == 'yatte' && is_main_frame) - resolve(url.href.replace(/^https?:\/{2}/, 'yattee://')); - - else if (isFreetube && is_main_frame) - resolve(`freetube://https:${url.pathname}${url.search}`); - - else if (isFreetube && params && isFrontendYoutube) - resolve(); - - else if (isInvidious || ((isFreetube || isYatte) && isFrontendInvidious && is_sub_frame)) { - - if (isOnlyEmbeddedVideo && !is_sub_frame) { resolve(); return; } - if (isOnlyNotEmbedded && params && !((isFreetube || isYatte) && isFrontendInvidious && is_sub_frame)) { resolve(); return; } - - let instancesList; - if (r.youtubeProtocol == 'normal') instancesList = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects]; - else if (r.youtubeProtocol == 'tor') instancesList = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList); - - resolve(`${randomInstance}${url.pathname}${url.search}`); - } else if (isPiped || ((isFreetube || isYatte) && isFrontendPiped && is_sub_frame)) { - - if (isOnlyEmbeddedVideo && !is_sub_frame) { resolve(); return; } - if ( - isOnlyNotEmbedded && params && - !((isFreetube || isYatte) && isFrontendPiped && is_sub_frame) - ) { resolve(); return; } - - let instancesList; - if (r.youtubeProtocol == 'normal') instancesList = [...r.pipedNormalRedirectsChecks, ...r.pipedNormalCustomRedirects]; - else if (r.youtubeProtocol == 'tor') instancesList = [...r.pipedTorRedirectsChecks, ...r.pipedTorCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList); - - resolve(`${randomInstance}${url.pathname}${url.search}`) - } - else if (isPipedMaterial || ((isFreetube || isYatte) && isFrontendPipedMaterial && is_sub_frame)) { - if (isOnlyEmbeddedVideo && details.type !== "sub_frame") { resolve(); return; } - if ( - isOnlyNotEmbedded && params && - !((isFreetube || isYatte) && isFrontendPipedMaterial && is_sub_frame) - ) { resolve(); return; } - - let instancesList; - if (r.youtubeProtocol == 'normal') instancesList = [...r.pipedMaterialNormalRedirectsChecks, ...r.pipedMaterialNormalCustomRedirects]; - else if (r.youtubeProtocol == 'tor') instancesList = [...r.pipedMaterialTorRedirectsChecks, ...r.pipedMaterialTorCustomRedirects]; - let randomInstance = utils.getRandomInstance(instancesList); - - resolve(`${randomInstance}${url.pathname}${url.search}`); - } - else resolve('CANCEL'); + disableYoutube = r.disableYoutube; + OnlyEmbeddedVideo = r.OnlyEmbeddedVideo; + youtubeFrontend = r.youtubeFrontend; + youtubeProtocol = r.youtubeProtocol; + youtubeEmbedFrontend = r.youtubeEmbedFrontend; + youtubeRedirects = r.youtubeRedirects; + invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks; + invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects; + invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks; + invidiousTorCustomRedirects = r.invidiousTorCustomRedirects; + pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks; + pipedNormalCustomRedirects = r.pipedNormalCustomRedirects; + pipedTorRedirectsChecks = r.pipedTorRedirectsChecks; + pipedTorCustomRedirects = r.pipedTorCustomRedirects; + pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks; + pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects; + pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks; + pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects; + resolve(); } ) }) } -function reverse(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "youtubeRedirects", - "invidiousNormalCustomRedirects", - "invidiousTorCustomRedirects", - "pipedNormalCustomRedirects", - "pipedTorCustomRedirects", - "pipedMaterialNormalCustomRedirects", - "pipedMaterialTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...r.youtubeRedirects.invidious.normal, - ...r.youtubeRedirects.invidious.tor, +init(); +browser.storage.onChanged.addListener(init) - ...r.youtubeRedirects.piped.normal, - ...r.youtubeRedirects.piped.tor, +function all() { + return [ + ...youtubeRedirects.invidious.normal, + ...youtubeRedirects.invidious.tor, - ...r.youtubeRedirects.pipedMaterial.normal, - ...r.youtubeRedirects.pipedMaterial.tor, + ...youtubeRedirects.piped.normal, + ...youtubeRedirects.piped.tor, - ...r.invidiousNormalCustomRedirects, - ...r.invidiousTorCustomRedirects, + ...youtubeRedirects.pipedMaterial.normal, + ...youtubeRedirects.pipedMaterial.tor, - ...r.pipedNormalCustomRedirects, - ...r.pipedTorCustomRedirects, + ...invidiousNormalCustomRedirects, + ...invidiousTorCustomRedirects, - ...r.pipedMaterialNormalCustomRedirects, - ...r.pipedMaterialTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } + ...pipedNormalCustomRedirects, + ...pipedTorCustomRedirects, - resolve(`https://youtube.com${url.pathname}${url.search}`); - }) - }) + ...pipedMaterialNormalCustomRedirects, + ...pipedMaterialTorCustomRedirects, + ]; } -function switchInstance(url) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "youtubeRedirects", - "youtubeFrontend", - "youtubeProtocol", +function redirect(url, details, initiator) { + if (disableYoutube) return; + if (!targets.some(rx => rx.test(url.href))) return; + if (initiator && all().includes(initiator.origin)) return 'BYPASSTAB'; - "invidiousNormalRedirectsChecks", - "invidiousNormalCustomRedirects", + const isInvidious = youtubeFrontend == 'invidious'; + const isPiped = youtubeFrontend == 'piped'; + const isPipedMaterial = youtubeFrontend == 'pipedMaterial' + const isFreetube = youtubeFrontend == 'freetube'; + const isYatte = youtubeFrontend == 'yatte'; - "invidiousTorRedirectsChecks", - "invidiousTorCustomRedirects", + const isFrontendYoutube = youtubeEmbedFrontend == "youtube"; + const isFrontendInvidious = youtubeEmbedFrontend == 'invidious'; + const isFrontendPiped = youtubeEmbedFrontend == 'piped'; + const isFrontendPipedMaterial = youtubeEmbedFrontend == 'pipedMaterial'; - "pipedNormalRedirectsChecks", - "pipedNormalCustomRedirects", + const isOnlyEmbeddedVideo = OnlyEmbeddedVideo == 'onlyNotEmbedded'; + const isOnlyNotEmbedded = OnlyEmbeddedVideo == 'onlyNotEmbedded' - "pipedTorRedirectsChecks", - "pipedTorCustomRedirects", + const is_main_frame = details.type === "main_frame"; + const is_sub_frame = details.type === "sub_frame"; - "pipedMaterialNormalRedirectsChecks", - "pipedMaterialNormalCustomRedirects", + if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) return; // Don't redirect YouTube Player API. - "pipedMaterialTorRedirectsChecks", - "pipedMaterialTorCustomRedirects", - ], - r => { - let protocolHost = utils.protocolHost(url); - if (![ - ...r.youtubeRedirects.invidious.normal, - ...r.youtubeRedirects.invidious.tor, + if (youtubeFrontend == 'yatte' && is_main_frame) + return url.href.replace(/^https?:\/{2}/, 'yattee://'); - ...r.youtubeRedirects.piped.normal, - ...r.youtubeRedirects.piped.tor, + else if (isFreetube && is_main_frame) + return `freetube://https:${url.pathname}${url.search}`; - ...r.youtubeRedirects.pipedMaterial.normal, - ...r.youtubeRedirects.pipedMaterial.tor, + else if (isFreetube && params && isFrontendYoutube) + return; - ...r.invidiousNormalCustomRedirects, - ...r.invidiousTorCustomRedirects, + else if (isInvidious || ((isFreetube || isYatte) && isFrontendInvidious && is_sub_frame)) { - ...r.pipedNormalCustomRedirects, - ...r.pipedTorCustomRedirects, + if (isOnlyEmbeddedVideo && !is_sub_frame) return; + if (isOnlyNotEmbedded && params && !((isFreetube || isYatte) && isFrontendInvidious && is_sub_frame)) return; - ...r.pipedMaterialNormalCustomRedirects, - ...r.pipedMaterialTorCustomRedirects - ].includes(protocolHost)) { resolve(); return; } + let instancesList; + if (youtubeProtocol == 'normal') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; + else if (youtubeProtocol == 'tor') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; + if (instancesList.length === 0) return; + let randomInstance = utils.getRandomInstance(instancesList); + return `${randomInstance}${url.pathname}${url.search}`; + } else if (isPiped || ((isFreetube || isYatte) && isFrontendPiped && is_sub_frame)) { - let instancesList; - if (r.youtubeProtocol == 'normal') { - if (r.youtubeFrontend == 'invidious') instancesList = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects]; - else if (r.youtubeFrontend == 'piped') instancesList = [...r.pipedNormalRedirectsChecks, ...r.pipedNormalCustomRedirects]; - else if (r.youtubeFrontend == 'pipedMaterial') instancesList = [...r.pipedMaterialNormalRedirectsChecks, ...r.pipedMaterialNormalCustomRedirects]; - } - else if (r.youtubeProtocol == 'tor') { - if (r.youtubeFrontend == 'invidious') instancesList = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects]; - else if (r.youtubeFrontend == 'piped') instancesList = [...r.pipedTorRedirectsChecks, ...r.pipedTorCustomRedirects]; - else if (r.youtubeFrontend == 'pipedMaterial') instancesList = [...r.pipedMaterialTorRedirectsChecks, ...r.pipedMaterialTorCustomRedirects]; - } + if (isOnlyEmbeddedVideo && !is_sub_frame) return; + if ( + isOnlyNotEmbedded && params && + !((isFreetube || isYatte) && isFrontendPiped && is_sub_frame) + ) return; - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length == 0) { resolve(); return; } + let instancesList; + if (youtubeProtocol == 'normal') instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]; + else if (youtubeProtocol == 'tor') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]; + if (instancesList.length === 0) return; - let randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - } - ) + const randomInstance = utils.getRandomInstance(instancesList); + return `${randomInstance}${url.pathname}${url.search}`; + } + else if (isPipedMaterial || ((isFreetube || isYatte) && isFrontendPipedMaterial && is_sub_frame)) { + if (isOnlyEmbeddedVideo && details.type !== "sub_frame") return; + if ( + isOnlyNotEmbedded && params && + !((isFreetube || isYatte) && isFrontendPipedMaterial && is_sub_frame) + ) return; + + let instancesList; + if (youtubeProtocol == 'normal') instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]; + else if (youtubeProtocol == 'tor') instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects]; + + const randomInstance = utils.getRandomInstance(instancesList); + return `${randomInstance}${url.pathname}${url.search}`; + } + else return 'CANCEL'; +} + +function reverse(url) { + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(url); + const instances = all(); + if (!instances.includes(protocolHost)) { resolve(); return; } + + resolve(`https://youtube.com${url.pathname}${url.search}`); + }) +} + +function switchInstance(url) { + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(url); + const instances = all(); + if (!instances.includes(protocolHost)) { resolve(); return; } + + let instancesList; + if (youtubeProtocol == 'normal') { + if (youtubeFrontend == 'invidious') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; + else if (youtubeFrontend == 'piped') instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]; + else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]; + } + else if (youtubeProtocol == 'tor') { + if (youtubeFrontend == 'invidious') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; + else if (youtubeFrontend == 'piped') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]; + else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects]; + } + + 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}`); }) } @@ -365,207 +328,130 @@ function initDefaults() { } function initInvidiousCookies(test, from) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableYoutube", - "youtubeProtocol", - "youtubeFrontend", - "invidiousNormalRedirectsChecks", - "invidiousNormalCustomRedirects", - "invidiousTorRedirectsChecks", - "invidiousTorCustomRedirects", - ], - r => { - if (r.disableYoutube || r.youtubeFrontend != 'invidious') { resolve(); return; } - const protocolHost = utils.protocolHost(from); - if (![ - ...r.invidiousNormalRedirectsChecks, - ...r.invidiousTorRedirectsChecks, - ...r.invidiousNormalCustomRedirects, - ...r.invidiousTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - if (!test) { - let checkedInstances; - if (r.youtubeProtocol == 'normal') checkedInstances = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects] - else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects] - const i = checkedInstances.indexOf(protocolHost); - if (i !== -1) checkedInstances.splice(i, 1); - for (const to of checkedInstances) - utils.copyCookie('invidious', from, to, 'PREFS'); - } - resolve(true); - } - ) - }) + return new Promise(async resolve => { + await init(); + if (disableYoutube || youtubeFrontend != 'invidious') { resolve(); return; } + const protocolHost = utils.protocolHost(from); + if (![ + ...invidiousNormalRedirectsChecks, + ...invidiousTorRedirectsChecks, + ...invidiousNormalCustomRedirects, + ...invidiousTorCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + if (!test) { + let checkedInstances; + if (youtubeProtocol == 'normal') checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects] + else if (youtubeProtocol == 'tor') checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects] + const i = checkedInstances.indexOf(protocolHost); + if (i !== -1) checkedInstances.splice(i, 1); + for (const to of checkedInstances) + utils.copyCookie('invidious', from, to, 'PREFS'); + } + resolve(true); + } + ) } function setInvidiousCookies() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableYoutube", - "youtubeProtocol", - "youtubeFrontend", - "invidiousNormalRedirectsChecks", - "invidiousNormalCustomRedirects", - "invidiousTorRedirectsChecks", - "invidiousTorCustomRedirects", - ], - r => { - if (r.disableYoutube || r.youtubeFrontend != 'invidious') { resolve(); return; } - let checkedInstances; - if (r.youtubeProtocol == 'normal') checkedInstances = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects] - else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects] - for (const to of checkedInstances) - utils.getCookiesFromStorage('invidious', to, 'PREFS'); - resolve(); - } - ) + return new Promise(async resolve => { + await init(); + if (disableYoutube || youtubeFrontend != 'invidious') { resolve(); return; } + let checkedInstances; + if (youtubeProtocol == 'normal') checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects] + else if (youtubeProtocol == 'tor') checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects] + for (const to of checkedInstances) + utils.getCookiesFromStorage('invidious', to, 'PREFS'); + resolve(); }) } function initPipedLocalStorage(test, url, tabId) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableYoutube", - "youtubeProtocol", - "youtubeFrontend", - "pipedNormalRedirectsChecks", - "pipedNormalCustomRedirects", - "pipedTorRedirectsChecks", - "pipedTorCustomRedirects", - ], - r => { - if (r.disableYoutube || r.youtubeFrontend != 'piped') { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (![ - ...r.pipedNormalCustomRedirects, - ...r.pipedNormalRedirectsChecks, - ...r.pipedTorRedirectsChecks, - ...r.pipedTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - browser.tabs.executeScript(tabId, { file: "/assets/javascripts/helpers/youtube/get_piped_preferences.js", runAt: "document_start" }); - - let checkedInstances; - if (r.youtubeProtocol == 'normal') checkedInstances = [...r.pipedNormalCustomRedirects, ...r.pipedNormalRedirectsChecks] - else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.pipedTorRedirectsChecks, ...r.pipedTorCustomRedirects] - const i = checkedInstances.indexOf(protocolHost); - if (i !== -1) checkedInstances.splice(i, 1); - for (const to of checkedInstances) - browser.tabs.create( - { url: to }, - tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/helpers/youtube/set_piped_preferences.js", runAt: "document_start" }) - ); - } - resolve(true); + return new Promise(async resolve => { + await init(); + console.log('initPipedLocalStorage'); + if (disableYoutube || youtubeFrontend != 'piped') { resolve(); return; } + const protocolHost = utils.protocolHost(url); + if (![ + ...pipedNormalCustomRedirects, + ...pipedNormalRedirectsChecks, + ...pipedTorRedirectsChecks, + ...pipedTorCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + + if (!test) { + + browser.tabs.executeScript(tabId, { file: "/assets/javascripts/helpers/youtube/get_piped_preferences.js", runAt: "document_start" }); + + let checkedInstances; + if (youtubeProtocol == 'normal') checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks] + else if (youtubeProtocol == 'tor') checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] + const i = checkedInstances.indexOf(protocolHost); + if (i !== -1) checkedInstances.splice(i, 1); + for (const to of checkedInstances) { + browser.tabs.create( + { url: checkedInstances[0] }, + tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/helpers/youtube/set_piped_preferences.js", runAt: "document_start" }) + ); } - ) + } + resolve(true); }) } function initPipedMaterialLocalStorage(test, url, tabId,) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableYoutube", - "youtubeProtocol", - "youtubeFrontend", - "pipedMaterialNormalRedirectsChecks", - "pipedMaterialNormalCustomRedirects", - "pipedMaterialTorRedirectsChecks", - "pipedMaterialTorCustomRedirects", - ], - r => { - if (r.disableYoutube || r.youtubeFrontend != 'pipedMaterial') { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (![ - ...r.pipedMaterialNormalRedirectsChecks, - ...r.pipedMaterialNormalCustomRedirects, - ...r.pipedMaterialTorRedirectsChecks, - ...r.pipedMaterialTorCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - browser.tabs.executeScript(tabId, { file: "/assets/javascripts/helpers/youtube/get_pipedMaterial_preferences.js", runAt: "document_start" }); - - let checkedInstances; - if (r.youtubeProtocol == 'normal') checkedInstances = [...r.pipedMaterialNormalRedirectsChecks, ...r.pipedMaterialNormalCustomRedirects] - else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.pipedMaterialTorRedirectsChecks, ...r.pipedMaterialTorCustomRedirects] - const i = checkedInstances.indexOf(protocolHost); - if (i !== -1) checkedInstances.splice(i, 1); - for (const to of checkedInstances) - browser.tabs.create( - { url: to }, - tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/helpers/youtube/set_pipedMaterial_preferences.js", runAt: "document_start" }) - ); - } - resolve(true); - } - ) + return new Promise(async resolve => { + await init(); + if (disableYoutube || youtubeFrontend != 'pipedMaterial') { resolve(); return; } + const protocolHost = utils.protocolHost(url); + if (![ + ...pipedMaterialNormalRedirectsChecks, + ...pipedMaterialNormalCustomRedirects, + ...pipedMaterialTorRedirectsChecks, + ...pipedMaterialTorCustomRedirects, + ].includes(protocolHost)) { resolve(); return; } + + if (!test) { + browser.tabs.executeScript(tabId, { file: "/assets/javascripts/helpers/youtube/get_pipedMaterial_preferences.js", runAt: "document_start" }); + + let checkedInstances; + if (youtubeProtocol == 'normal') checkedInstances = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects] + else if (youtubeProtocol == 'tor') checkedInstances = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects] + const i = checkedInstances.indexOf(protocolHost); + if (i !== -1) checkedInstances.splice(i, 1); + for (const to of checkedInstances) + browser.tabs.create( + { url: to }, + tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/helpers/youtube/set_pipedMaterial_preferences.js", runAt: "document_start" }) + ); + } + resolve(true); }) } function removeXFrameOptions(e) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "youtubeRedirects", - "invidiousNormalCustomRedirects", - "invidiousTorCustomRedirects", - - "pipedNormalCustomRedirects", - "pipedTorCustomRedirects", - - "pipedMaterialNormalCustomRedirects", - "pipedMaterialTorCustomRedirects", - ], - r => { - const url = new URL(e.url); - let protocolHost = utils.protocolHost(url); - if (![ - ...r.youtubeRedirects.invidious.normal, - ...r.youtubeRedirects.invidious.tor, - ...r.youtubeRedirects.piped.normal, - ...r.youtubeRedirects.piped.tor, - - ...r.invidiousNormalCustomRedirects, - ...r.invidiousTorCustomRedirects, - - ...r.pipedNormalCustomRedirects, - ...r.pipedTorCustomRedirects, - - ...r.pipedMaterialNormalCustomRedirects, - ...r.pipedMaterialTorCustomRedirects, - ].includes(protocolHost) || e.type != 'sub_frame') { resolve(); 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; - } - if (isChanged) resolve({ responseHeaders: e.responseHeaders }); - }) - }) + const url = new URL(e.url); + let protocolHost = utils.protocolHost(url); + const instances = all(); + if (!instances.includes(protocolHost) || e.type != 'sub_frame') 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; + } + if (isChanged) return { responseHeaders: e.responseHeaders }; } export default { setRedirects, + initPipedLocalStorage, initPipedMaterialLocalStorage, initInvidiousCookies, setInvidiousCookies, - redirect, reverse, - switchInstance, - - initPipedLocalStorage, - initDefaults, - removeXFrameOptions, }; diff --git a/src/assets/javascripts/helpers/youtubeMusic.js b/src/assets/javascripts/helpers/youtubeMusic.js index 1b194c19..68fa4f24 100644 --- a/src/assets/javascripts/helpers/youtubeMusic.js +++ b/src/assets/javascripts/helpers/youtubeMusic.js @@ -16,59 +16,69 @@ let redirects = { }, }; +let + disableYoutubeMusic, + beatbumpNormalRedirectsChecks, + beatbumpNormalCustomRedirects; + +function init() { + browser.storage.local.get( + [ + "disableYoutubeMusic", + "beatbumpNormalRedirectsChecks", + "beatbumpNormalCustomRedirects", + ], + r => { + disableYoutubeMusic = r.disableYoutubeMusic; + beatbumpNormalRedirectsChecks = r.beatbumpNormalRedirectsChecks; + beatbumpNormalCustomRedirects = r.beatbumpNormalCustomRedirects; + } + ) +} + +init(); +browser.storage.onChanged.addListener(init) + +/* +Video +https://music.youtube.com/watch?v=_PkGiKBW-DA&list=RDAMVM_PkGiKBW-DA +https://beatbump.ml/listen?id=_PkGiKBW-DA&list=RDAMVM_PkGiKBW-DA + +Playlist +https://music.youtube.com/playlist?list=PLqxd0OMLeWy64zlwhjouj92ISc38FbOns +https://music.youtube.com/playlist?list=PLqxd0OMLeWy7lrJSzt9LnOJjbC1IaruPM +https://music.youtube.com/playlist?list=PLQod4DlD72ZMJmOrSNbmEmK_iZ1oXPzKd +https://beatbump.ml/playlist/VLPLqxd0OMLeWy64zlwhjouj92ISc38FbOns + +Channel +https://music.youtube.com/channel/UCfgmMDI7T5tOQqjnOBRe_wg +https://beatbump.ml/artist/UCfgmMDI7T5tOQqjnOBRe_wg + +Albums +https://music.youtube.com/playlist?list=OLAK5uy_n-9HVh3cryV2gREZM9Sc0JwEKYjjfi0dU +https://music.youtube.com/playlist?list=OLAK5uy_lcr5O1zS8f6WIFI_yxqVp2RK9Dyy2bbw0 +https://beatbump.ml/release?id=MPREb_3DURc4yEUtD +https://beatbump.ml/release?id=MPREb_evaZrV1WNdS + +https://music.youtube.com/playlist?list=OLAK5uy_n6OHVllUZUCnlIY1m-gUaH8uqkN3Y-Ca8 +https://music.youtube.com/playlist?list=OLAK5uy_nBOTxAc3_RGB82-Z54jdARGxGaCYlpngY +https://beatbump.ml/release?id=MPREb_QygdC0wEoLe + +https://music.youtube.com/watch?v=R6gSMSYKhKU&list=OLAK5uy_n-9HVh3cryV2gREZM9Sc0JwEKYjjfi0dU +*/ function redirect(url, type, initiator) { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableYoutubeMusic", - - "beatbumpNormalRedirectsChecks", - "beatbumpNormalCustomRedirects", - ], - r => { - /* - Video - https://music.youtube.com/watch?v=_PkGiKBW-DA&list=RDAMVM_PkGiKBW-DA - https://beatbump.ml/listen?id=_PkGiKBW-DA&list=RDAMVM_PkGiKBW-DA - - Playlist - https://music.youtube.com/playlist?list=PLqxd0OMLeWy64zlwhjouj92ISc38FbOns - https://music.youtube.com/playlist?list=PLqxd0OMLeWy7lrJSzt9LnOJjbC1IaruPM - https://music.youtube.com/playlist?list=PLQod4DlD72ZMJmOrSNbmEmK_iZ1oXPzKd - https://beatbump.ml/playlist/VLPLqxd0OMLeWy64zlwhjouj92ISc38FbOns - - Channel - https://music.youtube.com/channel/UCfgmMDI7T5tOQqjnOBRe_wg - https://beatbump.ml/artist/UCfgmMDI7T5tOQqjnOBRe_wg - - Albums - https://music.youtube.com/playlist?list=OLAK5uy_n-9HVh3cryV2gREZM9Sc0JwEKYjjfi0dU - https://music.youtube.com/playlist?list=OLAK5uy_lcr5O1zS8f6WIFI_yxqVp2RK9Dyy2bbw0 - https://beatbump.ml/release?id=MPREb_3DURc4yEUtD - https://beatbump.ml/release?id=MPREb_evaZrV1WNdS - - https://music.youtube.com/playlist?list=OLAK5uy_n6OHVllUZUCnlIY1m-gUaH8uqkN3Y-Ca8 - https://music.youtube.com/playlist?list=OLAK5uy_nBOTxAc3_RGB82-Z54jdARGxGaCYlpngY - https://beatbump.ml/release?id=MPREb_QygdC0wEoLe - - https://music.youtube.com/watch?v=R6gSMSYKhKU&list=OLAK5uy_n-9HVh3cryV2gREZM9Sc0JwEKYjjfi0dU - */ - if (r.disableYoutubeMusic) { resolve(); return; } - if (!targets.some(rx => rx.test(url.href))) { resolve(); return; } - - let instancesList = [...r.beatbumpNormalRedirectsChecks, ...r.beatbumpNormalCustomRedirects]; - if (instancesList.length === 0) { resolve(); return; } - let randomInstance = utils.getRandomInstance(instancesList); - - resolve( - `${randomInstance}${url.pathname}${url.search}` - .replace("/watch?v=", "/listen?id=") - .replace("/channel/", "/artist/") - .replace("/playlist?list=", "/playlist/VL") - ); - } - ) - }) + if (disableYoutubeMusic) return; + if (!targets.some(rx => rx.test(url.href))) return; + + let instancesList = [...beatbumpNormalRedirectsChecks, ...beatbumpNormalCustomRedirects]; + if (instancesList.length === 0) return; + const randomInstance = utils.getRandomInstance(instancesList); + resolve( + `${randomInstance}${url.pathname}${url.search}` + .replace("/watch?v=", "/listen?id=") + .replace("/channel/", "/artist/") + .replace("/playlist?list=", "/playlist/VL") + ); } async function initDefaults() { diff --git a/src/manifest.json b/src/manifest.json index c0d5621d..c82d6449 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,7 +1,7 @@ { "name": "__MSG_extensionName__", "description": "__MSG_extensionDescription__", - "version": "1.7.0", + "version": "2.0.0", "manifest_version": 2, "browser_specific_settings": { "gecko": { diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 211ecf98..aef21cd3 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -19,19 +19,8 @@ import sendTargetsHelper from "../../assets/javascripts/helpers/sendTargets.js"; import peertubeHelper from "../../assets/javascripts/helpers/peertube.js"; import lbryHelper from "../../assets/javascripts/helpers/lbry.js"; - window.browser = window.browser || window.chrome; -youtubeHelper.setInvidiousCookies(); -translateHelper.setSimplyTranslateCookies(); -twitterHelper.setNitterCookies(); -wikipediaHelper.setWikilessCookies(); -searchHelper.setSearxCookies(); -searchHelper.setSearxngCookies(); -redditHelper.setLibredditCookies(); -redditHelper.setTedditCookies(); -tiktokHelper.setProxiTokCookies(); - browser.runtime.onInstalled.addListener( async details => { if (details.reason == 'install') { @@ -58,8 +47,15 @@ browser.runtime.onInstalled.addListener( } ) -async function wholeInit() { -} +youtubeHelper.setInvidiousCookies(); +translateHelper.setSimplyTranslateCookies(); +twitterHelper.setNitterCookies(); +wikipediaHelper.setWikilessCookies(); +searchHelper.setSearxCookies(); +searchHelper.setSearxngCookies(); +redditHelper.setLibredditCookies(); +redditHelper.setTedditCookies(); +tiktokHelper.setProxiTokCookies(); let incognitoInit = false; browser.tabs.onCreated.addListener( @@ -75,39 +71,39 @@ browser.tabs.onCreated.addListener( let BYPASSTABs = []; browser.webRequest.onBeforeRequest.addListener( - async details => { + details => { const url = new URL(details.url); if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/(blocklist|data).json$/).test(url.href) && details.type == 'xmlhttprequest') return; - await wholeInit(); let initiator; - if (details.originUrl) - initiator = new URL(details.originUrl); - else if (details.initiator) - initiator = new URL(details.initiator); - - let newUrl = await youtubeMusicHelper.redirect(url, details.type) - if (!newUrl) newUrl = await youtubeHelper.redirect(url, details, initiator) - if (!newUrl) newUrl = await twitterHelper.redirect(url, initiator); - if (!newUrl) newUrl = await instagramHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = await mapsHelper.redirect(url, initiator); - if (!newUrl) newUrl = await redditHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = await mediumHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = await imgurHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = await tiktokHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = await sendTargetsHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = await peertubeHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = await lbryHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = await translateHelper.redirect(url); - if (!newUrl) newUrl = await searchHelper.redirect(url) - if (!newUrl) newUrl = await wikipediaHelper.redirect(url); + try { + if (details.originUrl) initiator = new URL(details.originUrl); + else if (details.initiator) initiator = new URL(details.initiator); + } + catch { return null; } + + + let newUrl = youtubeMusicHelper.redirect(url, details.type) + if (!newUrl) newUrl = youtubeHelper.redirect(url, details, initiator) + if (!newUrl) newUrl = twitterHelper.redirect(url, initiator); + if (!newUrl) newUrl = instagramHelper.redirect(url, details.type, initiator); + 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 = imgurHelper.redirect(url, details.type, initiator); + if (!newUrl) newUrl = tiktokHelper.redirect(url, details.type, initiator); + if (!newUrl) newUrl = sendTargetsHelper.redirect(url, details.type, initiator); + if (!newUrl) newUrl = peertubeHelper.redirect(url, details.type, initiator); + if (!newUrl) newUrl = lbryHelper.redirect(url, details.type, initiator); + if (!newUrl) newUrl = translateHelper.redirect(url); + if (!newUrl) newUrl = searchHelper.redirect(url) + if (!newUrl) newUrl = wikipediaHelper.redirect(url); if ( details.frameAncestors && details.frameAncestors.length > 0 && - await generalHelper.isException(new URL(details.frameAncestors[0].url)) + generalHelper.isException(new URL(details.frameAncestors[0].url)) ) newUrl = null; - if (await generalHelper.isException(url)) newUrl = 'BYPASSTAB'; - + if (generalHelper.isException(url)) newUrl = 'BYPASSTAB'; if (BYPASSTABs.includes(details.tabId)) newUrl = null; if (newUrl) { @@ -115,15 +111,13 @@ browser.webRequest.onBeforeRequest.addListener( console.log(`Canceled ${url}`); return { cancel: true }; } - else if (newUrl === 'BYPASSTAB') { + if (newUrl === 'BYPASSTAB') { console.log(`Bypassed ${details.tabId} ${url}`); if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId); return null; } - else { - console.info("Redirecting", url.href, "=>", newUrl); - return { redirectUrl: newUrl }; - } + console.info("Redirecting", url.href, "=>", newUrl); + return { redirectUrl: newUrl }; } return null; }, @@ -133,7 +127,7 @@ browser.webRequest.onBeforeRequest.addListener( browser.tabs.onRemoved.addListener( tabId => { - let i = BYPASSTABs.indexOf(tabId); + const i = BYPASSTABs.indexOf(tabId); if (i > -1) { BYPASSTABs.splice(i, 1); console.log("Removed BYPASSTABs", tabId); @@ -143,7 +137,6 @@ browser.tabs.onRemoved.addListener( browser.webRequest.onHeadersReceived.addListener( async e => { - await wholeInit(); let response = twitterHelper.removeXFrameOptions(e) if (!response) youtubeHelper.removeXFrameOptions(e) return response; @@ -153,20 +146,17 @@ browser.webRequest.onHeadersReceived.addListener( ); async function redirectOfflineInstance(url, tabId) { - await wholeInit(); - let newUrl; - - newUrl = youtubeHelper.switchInstance(url); - if (!newUrl) newUrl = twitterHelper.switchInstance(url); - if (!newUrl) newUrl = instagramHelper.switchInstance(url); - if (!newUrl) newUrl = redditHelper.switchInstance(url); - if (!newUrl) newUrl = searchHelper.switchInstance(url); - if (!newUrl) newUrl = translateHelper.switchInstance(url); - if (!newUrl) newUrl = mediumHelper.switchInstance(url); - if (!newUrl) newUrl = imgurHelper.switchInstance(url); - if (!newUrl) newUrl = wikipediaHelper.switchInstance(url); - if (!newUrl) newUrl = peertubeHelper.switchInstance(url); - if (!newUrl) newUrl = lbryHelper.switchInstance(url); + let newUrl = await youtubeHelper.switchInstance(url); + if (!newUrl) newUrl = await twitterHelper.switchInstance(url); + if (!newUrl) newUrl = await instagramHelper.switchInstance(url); + if (!newUrl) newUrl = await redditHelper.switchInstance(url); + 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 imgurHelper.switchInstance(url); + if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url); + if (!newUrl) newUrl = await peertubeHelper.switchInstance(url); + if (!newUrl) newUrl = await lbryHelper.switchInstance(url); if (newUrl) { if (counter >= 5) { @@ -194,13 +184,7 @@ function isAutoRedirect() { browser.webRequest.onResponseStarted.addListener( async details => { if (!await isAutoRedirect()) return null; - - if (details.type == 'main_frame' && (details.statusCode == 502 || details.statusCode == 503 || details.statusCode == 504)) { - // if (details.type == 'main_frame' && details.statusCode >= 200) { - // console.log("statusCode", details.statusCode); - const url = new URL(details.url); - redirectOfflineInstance(url, details.tabId); - } + if (details.type == 'main_frame' && details.statusCode >= 500) redirectOfflineInstance(new URL(details.url), details.tabId); }, { urls: ["<all_urls>"], } ) @@ -208,10 +192,7 @@ browser.webRequest.onResponseStarted.addListener( browser.webRequest.onErrorOccurred.addListener( async details => { if (!await isAutoRedirect()) return; - if (details.type == 'main_frame') { - const url = new URL(details.url); - redirectOfflineInstance(url, details.tabId); - } + if (details.type == 'main_frame') redirectOfflineInstance(new URL(details.url), details.tabId); }, { urls: ["<all_urls>"], } ) @@ -232,7 +213,7 @@ browser.contextMenus.create({ browser.contextMenus.create({ id: "switchInstance", - title: chrome.i18n.getMessage("switchInstance"), + title: browser.i18n.getMessage("switchInstance"), contexts: ["browser_action"] }); @@ -257,3 +238,7 @@ browser.contextMenus.onClicked.addListener( else if (info.menuItemId == 'unify') utils.unify(); } ); + +browser.runtime.onMessage.addListener(message => { + if (message.function === 'unify') utils.unify(); +}); diff --git a/src/pages/background/incognito.js b/src/pages/background/incognito.js index 600591d3..2ebbe545 100644 --- a/src/pages/background/incognito.js +++ b/src/pages/background/incognito.js @@ -9,7 +9,10 @@ import tiktokHelper from "../../assets/javascripts/helpers/tiktok.js"; window.browser = window.browser || window.chrome; await youtubeHelper.setInvidiousCookies(); +await youtubeHelper.initPipedLocalStorage(); +await youtubeHelper.initPipedMaterialLocalStorage(); await translateHelper.setSimplyTranslateCookies(); +await translateHelper.initLingvaLocalStorage(); await twitterHelper.setNitterCookies(); await wikipediaHelper.setWikilessCookies(); await searchHelper.setSearxCookies(); diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index 824f178b..84dbab04 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -94,7 +94,7 @@ utils.unify(true).then(r => { if (!r) document.getElementById('unify_div').style.display = 'none'; else { const unify = document.getElementById('unify'); - unify.addEventListener("click", () => utils.unify(false, unify)); + unify.addEventListener("click", () => browser.runtime.sendMessage({ function: 'unify' })); } }) @@ -108,4 +108,14 @@ browser.storage.local.get( document.getElementById(frontend).classList.add("hide") else document.getElementById(frontend).classList.remove("hide") - }); \ No newline at end of file + } +); + +for (const a of document.getElementsByTagName('a')) { + a.addEventListener('click', e => { + if (!a.classList.includes('button')) { + browser.tabs.create({ url: a.getAttribute('href') }); + e.preventDefault(); + } + }) +} \ No newline at end of file |