diff options
author | ManeraKai <manerakai@protonmail.com> | 2022-07-27 17:44:04 +0200 |
---|---|---|
committer | ManeraKai <manerakai@protonmail.com> | 2022-07-27 17:44:04 +0200 |
commit | a9a7dba5a329eb17e23ba08802406a4e2e2cb836 (patch) | |
tree | 2cb69c855b36e82128a00e5895d5f5409d5e0a5e /src/pages/background/background.js | |
parent | Merge branch 'BobIsMyManager-librex' (diff) | |
parent | , (diff) | |
download | libredirect-a9a7dba5a329eb17e23ba08802406a4e2e2cb836.zip |
Merge pull request 'Squashed a few bugs' (#10) from BobIsMyManager/libredirect:master into master
Reviewed-on: https://codeberg.org/LibRedirect/libredirect/pulls/10
Diffstat (limited to 'src/pages/background/background.js')
-rw-r--r-- | src/pages/background/background.js | 459 |
1 files changed, 224 insertions, 235 deletions
diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 293a2c84..359a912d 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -1,263 +1,252 @@ -"use strict"; - -import generalHelper from "../../assets/javascripts/general.js"; -import utils from "../../assets/javascripts/utils.js"; - -import youtubeHelper from "../../assets/javascripts/youtube/youtube.js"; -import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js"; -import twitterHelper from "../../assets/javascripts/twitter.js"; -import instagramHelper from "../../assets/javascripts/instagram.js"; -import redditHelper from "../../assets/javascripts/reddit.js"; -import searchHelper from "../../assets/javascripts/search.js"; -import translateHelper from "../../assets/javascripts/translate/translate.js"; -import mapsHelper from "../../assets/javascripts/maps.js"; -import wikipediaHelper from "../../assets/javascripts/wikipedia.js"; -import mediumHelper from "../../assets/javascripts/medium.js"; -import quoraHelper from "../../assets/javascripts/quora.js"; -import libremdbHelper from "../../assets/javascripts/imdb.js"; -import reutersHelper from "../../assets/javascripts/reuters.js"; -import imgurHelper from "../../assets/javascripts/imgur.js"; -import tiktokHelper from "../../assets/javascripts/tiktok.js"; -import sendTargetsHelper from "../../assets/javascripts/sendTargets.js"; -import peertubeHelper from "../../assets/javascripts/peertube.js"; -import lbryHelper from "../../assets/javascripts/lbry.js"; - - -window.browser = window.browser || window.chrome; - -browser.runtime.onInstalled.addListener( - details => { - function initDefaults() { - fetch('/instances/blacklist.json').then(response => response.text()).then(async data => { - browser.storage.local.clear( - () => { - browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, - () => { - browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, - () => { - generalHelper.initDefaults(); - youtubeHelper.initDefaults(); - youtubeMusicHelper.initDefaults(); - twitterHelper.initDefaults(); - instagramHelper.initDefaults(); - mapsHelper.initDefaults(); - searchHelper.initDefaults(); - translateHelper.initDefaults(); - mediumHelper.initDefaults(); - quoraHelper.initDefaults(); - libremdbHelper.initDefaults(); - reutersHelper.initDefaults(); - redditHelper.initDefaults(); - wikipediaHelper.initDefaults(); - imgurHelper.initDefaults(); - tiktokHelper.initDefaults(); - sendTargetsHelper.initDefaults(); - peertubeHelper.initDefaults(); - lbryHelper.initDefaults(); - }) - }) - }); - }) - }; - if (details.reason == 'install') initDefaults(); - - // if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) { - // if (details.reason == "update") - // browser.storage.local.get(null, r => { - // if (r.theme) { - // const old = encodeURIComponent(JSON.stringify(r)) - // browser.tabs.create({ url: browser.runtime.getURL(`/pages/background/reset_warning.html?data=${old}`) }); - // } - // initDefaults(); - // }) - // else initDefaults(); - // } - } -) - -youtubeHelper.pasteInvidiousCookies(); -translateHelper.pasteSimplyTranslateCookies(); -twitterHelper.pasteNitterCookies(); -wikipediaHelper.pasteWikilessCookies(); -searchHelper.pasteSearxCookies(); -searchHelper.pasteSearxngCookies(); -searchHelper.pasteLibrexCookies(); -redditHelper.pasteLibredditCookies(); -redditHelper.pasteTedditCookies(); -tiktokHelper.pasteProxiTokCookies(); - - -let BYPASSTABs = []; +"use strict" + +import generalHelper from "../../assets/javascripts/general.js" +import utils from "../../assets/javascripts/utils.js" + +import youtubeHelper from "../../assets/javascripts/youtube/youtube.js" +import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js" +import twitterHelper from "../../assets/javascripts/twitter.js" +import instagramHelper from "../../assets/javascripts/instagram.js" +import redditHelper from "../../assets/javascripts/reddit.js" +import searchHelper from "../../assets/javascripts/search.js" +import translateHelper from "../../assets/javascripts/translate/translate.js" +import mapsHelper from "../../assets/javascripts/maps.js" +import wikipediaHelper from "../../assets/javascripts/wikipedia.js" +import mediumHelper from "../../assets/javascripts/medium.js" +import quoraHelper from "../../assets/javascripts/quora.js" +import libremdbHelper from "../../assets/javascripts/imdb.js" +import reutersHelper from "../../assets/javascripts/reuters.js" +import imgurHelper from "../../assets/javascripts/imgur.js" +import tiktokHelper from "../../assets/javascripts/tiktok.js" +import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" +import peertubeHelper from "../../assets/javascripts/peertube.js" +import lbryHelper from "../../assets/javascripts/lbry.js" + +window.browser = window.browser || window.chrome + +browser.runtime.onInstalled.addListener(details => { + function initDefaults() { + fetch("/instances/blacklist.json") + .then(response => response.text()) + .then(async data => { + browser.storage.local.clear(() => { + browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, () => { + browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, () => { + generalHelper.initDefaults() + youtubeHelper.initDefaults() + youtubeMusicHelper.initDefaults() + twitterHelper.initDefaults() + instagramHelper.initDefaults() + mapsHelper.initDefaults() + searchHelper.initDefaults() + translateHelper.initDefaults() + mediumHelper.initDefaults() + quoraHelper.initDefaults() + libremdbHelper.initDefaults() + reutersHelper.initDefaults() + redditHelper.initDefaults() + wikipediaHelper.initDefaults() + imgurHelper.initDefaults() + tiktokHelper.initDefaults() + sendTargetsHelper.initDefaults() + peertubeHelper.initDefaults() + lbryHelper.initDefaults() + }) + }) + }) + }) + } + if (details.reason == "install") initDefaults() + + // if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) { + // if (details.reason == "update") + // browser.storage.local.get(null, r => { + // if (r.theme) { + // const old = encodeURIComponent(JSON.stringify(r)) + // browser.tabs.create({ url: browser.runtime.getURL(`/pages/background/reset_warning.html?data=${old}`) }); + // } + // initDefaults(); + // }) + // else initDefaults(); + // } +}) + +youtubeHelper.pasteInvidiousCookies() +translateHelper.pasteSimplyTranslateCookies() +twitterHelper.pasteNitterCookies() +wikipediaHelper.pasteWikilessCookies() +searchHelper.pasteSearxCookies() +searchHelper.pasteSearxngCookies() +searchHelper.pasteLibrexCookies() +redditHelper.pasteLibredditCookies() +redditHelper.pasteTedditCookies() +tiktokHelper.pasteProxiTokCookies() + +let BYPASSTABs = [] browser.webRequest.onBeforeRequest.addListener( - details => { - const url = new URL(details.url); - if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == 'xmlhttprequest') return; - let initiator; - 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.type, initiator) - if (!newUrl) newUrl = twitterHelper.redirect(url, details.type, 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 = quoraHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = libremdbHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = reutersHelper.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 && - generalHelper.isException(new URL(details.frameAncestors[0].url)) - ) newUrl = null; - - if (generalHelper.isException(url)) newUrl = 'BYPASSTAB'; - if (BYPASSTABs.includes(details.tabId)) newUrl = null; - - if (newUrl) { - if (newUrl === 'CANCEL') { - console.log(`Canceled ${url}`); - return { cancel: true }; - } - if (newUrl === 'BYPASSTAB') { - console.log(`Bypassed ${details.tabId} ${url}`); - if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId); - return null; - } - console.info("Redirecting", url.href, "=>", newUrl); - return { redirectUrl: newUrl }; - } - return null; - }, - { urls: ["<all_urls>"], }, - ["blocking"] -); + details => { + const url = new URL(details.url) + if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") return + let initiator + 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.type, initiator) + if (!newUrl) newUrl = twitterHelper.redirect(url, details.type, 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 = quoraHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = libremdbHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = reutersHelper.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 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null + + if (generalHelper.isException(url)) newUrl = "BYPASSTAB" + if (BYPASSTABs.includes(details.tabId)) newUrl = null + + if (newUrl) { + if (newUrl === "CANCEL") { + console.log(`Canceled ${url}`) + return { cancel: true } + } + if (newUrl === "BYPASSTAB") { + console.log(`Bypassed ${details.tabId} ${url}`) + if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId) + return null + } + console.info("Redirecting", url.href, "=>", newUrl) + return { redirectUrl: newUrl } + } + return null + }, + { urls: ["<all_urls>"] }, + ["blocking"] +) -browser.tabs.onRemoved.addListener( - tabId => { - const i = BYPASSTABs.indexOf(tabId); - if (i > -1) { - BYPASSTABs.splice(i, 1); - console.log("Removed BYPASSTABs", tabId); - } - } -); +browser.tabs.onRemoved.addListener(tabId => { + const i = BYPASSTABs.indexOf(tabId) + if (i > -1) { + BYPASSTABs.splice(i, 1) + console.log("Removed BYPASSTABs", tabId) + } +}) browser.webRequest.onHeadersReceived.addListener( - e => { - let response = youtubeHelper.removeXFrameOptions(e); - if (!response) response = twitterHelper.removeXFrameOptions(e); - return response; - }, - { urls: ["<all_urls>"] }, - ["blocking", "responseHeaders"] -); + e => { + let response = youtubeHelper.removeXFrameOptions(e) + if (!response) response = twitterHelper.removeXFrameOptions(e) + return response + }, + { urls: ["<all_urls>"] }, + ["blocking", "responseHeaders"] +) async function redirectOfflineInstance(url, tabId) { - 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 quoraHelper.switchInstance(url); - if (!newUrl) newUrl = await libremdbHelper.switchInstance(url); - if (!newUrl) newUrl = await tiktokHelper.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) { - browser.tabs.update(tabId, { url: `/pages/errors/instance_offline.html?url=${encodeURIComponent(newUrl)}` }); - counter = 0; - } else { - browser.tabs.update(tabId, { url: newUrl }); - counter++; - } - } + let newUrl = await youtubeHelper.switchInstance(url, true) + if (!newUrl) newUrl = await twitterHelper.switchInstance(url, true) + if (!newUrl) newUrl = await instagramHelper.switchInstance(url, true) + if (!newUrl) newUrl = await redditHelper.switchInstance(url, true) + if (!newUrl) newUrl = await searchHelper.switchInstance(url, true) + if (!newUrl) newUrl = await translateHelper.switchInstance(url, true) + if (!newUrl) newUrl = await mediumHelper.switchInstance(url, true) + if (!newUrl) newUrl = await quoraHelper.switchInstance(url, true) + if (!newUrl) newUrl = await libremdbHelper.switchInstance(url, true) + if (!newUrl) newUrl = await tiktokHelper.switchInstance(url, true) + if (!newUrl) newUrl = await imgurHelper.switchInstance(url, true) + if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url, true) + if (!newUrl) newUrl = await peertubeHelper.switchInstance(url, true) + if (!newUrl) newUrl = await lbryHelper.switchInstance(url, true) + if (!newUrl) newUrl = await youtubeMusicHelper.switchInstance(url, true) + + if (newUrl) { + if (counter >= 5) { + browser.tabs.update(tabId, { + url: `/pages/errors/instance_offline.html?url=${encodeURIComponent(newUrl)}`, + }) + counter = 0 + } else { + browser.tabs.update(tabId, { url: newUrl }) + counter++ + } + } } -let counter = 0; +let counter = 0 function isAutoRedirect() { - return new Promise(resolve => browser.storage.local.get('autoRedirect', r => resolve(r.autoRedirect == true))) + return new Promise(resolve => browser.storage.local.get("autoRedirect", r => resolve(r.autoRedirect == true))) } browser.webRequest.onResponseStarted.addListener( - async details => { - if (!await isAutoRedirect()) return null; - if (details.type == 'main_frame' && details.statusCode >= 500) redirectOfflineInstance(new URL(details.url), details.tabId); - }, - { urls: ["<all_urls>"] } + async details => { + if (!(await isAutoRedirect())) return null + if (details.type == "main_frame" && details.statusCode >= 500) redirectOfflineInstance(new URL(details.url), details.tabId) + }, + { urls: ["<all_urls>"] } ) browser.webRequest.onErrorOccurred.addListener( - async details => { - if (!await isAutoRedirect()) return; - if (details.type == 'main_frame') redirectOfflineInstance(new URL(details.url), details.tabId); - }, - { urls: ["<all_urls>"] } + async details => { + if (!(await isAutoRedirect())) return + if (details.type == "main_frame") redirectOfflineInstance(new URL(details.url), details.tabId) + }, + { urls: ["<all_urls>"] } ) -browser.commands.onCommand.addListener( - command => { - if (command === 'switchInstance') utils.switchInstance(); - else if (command == 'copyRaw') utils.copyRaw(); - else if (command == 'unify') utils.unify(); - } -) +browser.commands.onCommand.addListener(command => { + if (command === "switchInstance") utils.switchInstance() + else if (command == "copyRaw") utils.copyRaw() + else if (command == "unify") utils.unify() +}) browser.contextMenus.create({ - id: "settings", - title: browser.i18n.getMessage("Settings"), - contexts: ["browser_action"] -}); + id: "settings", + title: browser.i18n.getMessage("Settings"), + contexts: ["browser_action"], +}) browser.contextMenus.create({ - id: "switchInstance", - title: browser.i18n.getMessage("switchInstance"), - contexts: ["browser_action"] -}); + id: "switchInstance", + title: browser.i18n.getMessage("switchInstance"), + contexts: ["browser_action"], +}) browser.contextMenus.create({ - id: "copyRaw", - title: browser.i18n.getMessage("copyRaw"), - contexts: ["browser_action"] -}); + id: "copyRaw", + title: browser.i18n.getMessage("copyRaw"), + contexts: ["browser_action"], +}) browser.contextMenus.create({ - id: "unify", - title: browser.i18n.getMessage("unifySettings"), - contexts: ["browser_action"] -}); - - -browser.contextMenus.onClicked.addListener( - (info) => { - if (info.menuItemId == 'switchInstance') utils.switchInstance(); - else if (info.menuItemId == 'settings') browser.runtime.openOptionsPage() - else if (info.menuItemId == 'copyRaw') utils.copyRaw(); - else if (info.menuItemId == 'unify') utils.unify(); - } -); + id: "unify", + title: browser.i18n.getMessage("unifySettings"), + contexts: ["browser_action"], +}) + +browser.contextMenus.onClicked.addListener(info => { + if (info.menuItemId == "switchInstance") utils.switchInstance() + else if (info.menuItemId == "settings") browser.runtime.openOptionsPage() + else if (info.menuItemId == "copyRaw") utils.copyRaw() + else if (info.menuItemId == "unify") utils.unify() +}) browser.runtime.onMessage.addListener((message, sender, sendResponse) => { - if (message.function === 'unify') utils.unify(false).then(r => sendResponse({ response: r })) - return true; -}); + if (message.function === "unify") utils.unify(false).then(r => sendResponse({ response: r })) + return true +}) -browser.storage.local.set({"version": browser.runtime.getManifest().version}) +browser.storage.local.set({ version: browser.runtime.getManifest().version }) |