diff options
| author | Hygna <hygna@proton.me> | 2022-09-09 15:55:33 +0100 |
|---|---|---|
| committer | Hygna <hygna@proton.me> | 2022-09-09 15:55:33 +0100 |
| commit | 4cab752e05dd479c4c3da7c06c276de51ca9f637 (patch) | |
| tree | 8f42c2edea9aca343d5d8cf4f2e813a79d6f0d9f /src/pages | |
| parent | Make redirect not return on a single instance frontend (diff) | |
| download | libredirect-4cab752e05dd479c4c3da7c06c276de51ca9f637.zip | |
All irregular url structures completed
Diffstat (limited to '')
| -rw-r--r-- | src/pages/background/background.js | 499 |
1 files changed, 251 insertions, 248 deletions
diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 87d498e4..e93e3d03 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -1,248 +1,251 @@ -"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" - -import servicesHelper from "../../assets/javascripts/services.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 }, () => { - browser.storage.local.set({ offlineBlackList: JSON.parse(data).offline }, () => { - 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(); - // } -}) - -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) - */ - let newUrl = servicesHelper.redirect(url, details.type, initiator) - - 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.webRequest.onHeadersReceived.addListener( - 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, 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 - -function isAutoRedirect() { - 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>"] } -) - -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>"] } -) - -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"], -}) - -browser.contextMenus.create({ - id: "switchInstance", - title: browser.i18n.getMessage("switchInstance"), - contexts: ["browser_action"], -}) - -browser.contextMenus.create({ - 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() -}) - -browser.runtime.onMessage.addListener((message, sender, sendResponse) => { - if (message.function === "unify") utils.unify(false).then(r => sendResponse({ response: r })) - return true -}) - -browser.storage.local.set({ version: browser.runtime.getManifest().version }) +"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"
+
+import servicesHelper from "../../assets/javascripts/services.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 }, () => {
+ browser.storage.local.set({ offlineBlackList: JSON.parse(data).offline }, () => {
+ 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()
+ */
+ servicesHelper.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();
+ // }
+})
+
+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)
+ */
+ let newUrl = servicesHelper.redirect(url, details.type, initiator)
+
+ 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.webRequest.onHeadersReceived.addListener(
+ 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, 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
+
+function isAutoRedirect() {
+ 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>"] }
+)
+
+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>"] }
+)
+
+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"],
+})
+
+browser.contextMenus.create({
+ id: "switchInstance",
+ title: browser.i18n.getMessage("switchInstance"),
+ contexts: ["browser_action"],
+})
+
+browser.contextMenus.create({
+ 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()
+})
+
+browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
+ if (message.function === "unify") utils.unify(false).then(r => sendResponse({ response: r }))
+ return true
+})
+
+browser.storage.local.set({ version: browser.runtime.getManifest().version })
|
