aboutsummaryrefslogtreecommitdiffstats
path: root/src/pages/background
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/background')
-rw-r--r--src/pages/background/background.js249
-rw-r--r--src/pages/background/incognito.html35
-rw-r--r--src/pages/background/incognito.js22
-rw-r--r--src/pages/background/reset_warning.html59
-rw-r--r--src/pages/background/reset_warning.js7
5 files changed, 122 insertions, 250 deletions
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 359a912d..dd8f1715 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -2,87 +2,52 @@
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() {
+function initDefaults() {
+ browser.storage.local.clear(() => {
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()
- })
- })
+ browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
+ await generalHelper.initDefaults()
+ await 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();
- // }
+browser.runtime.onInstalled.addListener(details => {
+ if (details.previousVersion != browser.runtime.getManifest().version) {
+ switch (details.reason) {
+ case "install":
+ initDefaults()
+ break
+ case "update":
+ fetch("/instances/blacklist.json")
+ .then(response => response.text())
+ .then(async data => {
+ browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
+ switch (details.previousVersion) {
+ case "2.2.0":
+ case "2.2.1":
+ await generalHelper.initDefaults()
+ await servicesHelper.initDefaults()
+ await servicesHelper.upgradeOptions()
+ break
+ default:
+ await servicesHelper.processUpdate()
+ }
+ })
+ })
+ }
+ }
})
-youtubeHelper.pasteInvidiousCookies()
-translateHelper.pasteSimplyTranslateCookies()
-twitterHelper.pasteNitterCookies()
-wikipediaHelper.pasteWikilessCookies()
-searchHelper.pasteSearxCookies()
-searchHelper.pasteSearxngCookies()
-searchHelper.pasteLibrexCookies()
-redditHelper.pasteLibredditCookies()
-redditHelper.pasteTedditCookies()
-tiktokHelper.pasteProxiTokCookies()
-
-let BYPASSTABs = []
+let tabIdRedirects = {}
+// true == Always redirect, false == Never redirect, null/undefined == follow options for services
browser.webRequest.onBeforeRequest.addListener(
details => {
const url = new URL(details.url)
@@ -95,29 +60,12 @@ browser.webRequest.onBeforeRequest.addListener(
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 (tabIdRedirects[details.tabId] == false) return null
+ let newUrl = servicesHelper.redirect(url, details.type, initiator, tabIdRedirects[details.tabId])
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") {
@@ -126,7 +74,7 @@ browser.webRequest.onBeforeRequest.addListener(
}
if (newUrl === "BYPASSTAB") {
console.log(`Bypassed ${details.tabId} ${url}`)
- if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId)
+ if (tabIdRedirects[details.tabId] != false) tabIdRedirects[details.tabId] = false
return null
}
console.info("Redirecting", url.href, "=>", newUrl)
@@ -139,39 +87,14 @@ browser.webRequest.onBeforeRequest.addListener(
)
browser.tabs.onRemoved.addListener(tabId => {
- const i = BYPASSTABs.indexOf(tabId)
- if (i > -1) {
- BYPASSTABs.splice(i, 1)
- console.log("Removed BYPASSTABs", tabId)
+ if (tabIdRedirects[tabId] != undefined) {
+ delete tabIdRedirects[tabId]
+ console.log("Removed tab " + tabId + " from tabIdRedirects")
}
})
-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)
+ let newUrl = await servicesHelper.switchInstance(url, true)
if (newUrl) {
if (counter >= 5) {
@@ -188,7 +111,7 @@ async function redirectOfflineInstance(url, tabId) {
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("options", r => resolve(r.options.autoRedirect == true)))
}
browser.webRequest.onResponseStarted.addListener(
@@ -237,16 +160,88 @@ browser.contextMenus.create({
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.contextMenus.create({
+ id: "toggleTab",
+ title: browser.i18n.getMessage("toggleTab"),
+ contexts: ["page", "tab"],
+})
+
+browser.contextMenus.create({
+ id: "redirectLink",
+ title: browser.i18n.getMessage("redirectLink"),
+ contexts: ["link"],
+})
+
+function handleToggleTab(tab) {
+ return new Promise(async resolve => {
+ switch (tabIdRedirects[tab.id]) {
+ case false:
+ const newUrl = await servicesHelper.reverse(tab.url, true)
+ if (newUrl) browser.tabs.update(tab.id, { url: newUrl })
+ resolve()
+ return
+ case true:
+ browser.tabs.reload(tab.id)
+ resolve()
+ return
+ }
+ })
+}
+
+browser.contextMenus.onClicked.addListener((info, tab) => {
+ return new Promise(async resolve => {
+ switch (info.menuItemId) {
+ case "switchInstance":
+ utils.switchInstance()
+ resolve()
+ return
+ case "settings":
+ browser.runtime.openOptionsPage()
+ resolve()
+ return
+ case "copyRaw":
+ utils.copyRaw()
+ resolve()
+ return
+ case "unify":
+ utils.unify()
+ resolve()
+ return
+ case "toggleTab":
+ if (tabIdRedirects[tab.id] != undefined) {
+ tabIdRedirects[tab.id] = !tabIdRedirects[tab.id]
+ await handleToggleTab(tab)
+ resolve()
+ return
+ } else {
+ const url = new URL(tab.url)
+ const service = await servicesHelper.computeService(url)
+ if (service) {
+ browser.storage.local.get("options", async r => {
+ if (r.options[service].enabled) tabIdRedirects[tab.id] = false
+ else tabIdRedirects[tab.id] = true
+ await handleToggleTab(tab)
+ resolve()
+ return
+ })
+ } else {
+ tabIdRedirects[tab.id] = false
+ await handleToggleTab(tab)
+ resolve()
+ return
+ }
+ }
+ case "redirectLink":
+ const tmpUrl = new URL(info.linkUrl)
+ const newUrl = servicesHelper.redirect(tmpUrl, "main_frame", null, true)
+ if (newUrl) browser.tabs.create({ url: newUrl })
+ resolve()
+ return
+ }
+ })
})
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 })
diff --git a/src/pages/background/incognito.html b/src/pages/background/incognito.html
deleted file mode 100644
index 227d99e4..00000000
--- a/src/pages/background/incognito.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8" />
- <meta charset="UTF-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title data-localise="__MSG_instanceIsOff__">Initializing Cookies</title>
- <link href="../stylesheets/styles.css" rel="stylesheet" />
- <style>
- body {
- margin: 0;
- padding: 0;
- height: 100vh;
- width: 100vw;
- flex-wrap: wrap;
- justify-content: center;
- align-items: center;
- font-size: 30px;
- display: flex;
- }
-
- div {
- text-align: center;
- }
- </style>
- </head>
-
- <body>
- <div>
- <p>Initializing Cookies...</p>
- </div>
- <script type="module" src="incognito.js"></script>
- </body>
-</html>
diff --git a/src/pages/background/incognito.js b/src/pages/background/incognito.js
deleted file mode 100644
index c7ed2b7d..00000000
--- a/src/pages/background/incognito.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import youtubeHelper from "../../assets/javascripts/youtube/youtube.js"
-import twitterHelper from "../../assets/javascripts/twitter.js"
-import redditHelper from "../../assets/javascripts/reddit.js"
-import searchHelper from "../../assets/javascripts/search.js"
-import translateHelper from "../../assets/javascripts/translate/translate.js"
-import wikipediaHelper from "../../assets/javascripts/wikipedia.js"
-import tiktokHelper from "../../assets/javascripts/tiktok.js"
-
-window.browser = window.browser || window.chrome
-
-await youtubeHelper.pasteInvidiousCookies()
-await translateHelper.pasteSimplyTranslateCookies()
-await twitterHelper.pasteNitterCookies()
-await wikipediaHelper.pasteWikilessCookies()
-await searchHelper.pasteSearxCookies()
-await searchHelper.pasteSearxngCookies()
-await searchHelper.pasteLibrexCookies()
-await redditHelper.pasteLibredditCookies()
-await redditHelper.pasteTedditCookies()
-await tiktokHelper.pasteProxiTokCookies()
-
-window.close()
diff --git a/src/pages/background/reset_warning.html b/src/pages/background/reset_warning.html
deleted file mode 100644
index f1881ed8..00000000
--- a/src/pages/background/reset_warning.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title data-localise="__MSG_instanceIsOff__">Reset Warning</title>
- <link href="../stylesheets/styles.css" rel="stylesheet" />
- <style>
- body {
- margin: 0;
- padding: 0;
- height: 100vh;
- width: 100vw;
- flex-wrap: wrap;
- justify-content: center;
- align-items: center;
- font-size: 30px;
- display: flex;
- }
-
- div {
- width: 80%;
- }
-
- div.logo {
- display: flex;
- }
-
- img {
- width: 90px;
- height: auto;
- }
- </style>
- </head>
-
- <body>
- <div>
- <div class="logo">
- <img src="/assets/images/libredirect.svg" alt="LibRedirect icon" />
- <h1>LibRedirect</h1>
- </div>
-
- <p data-localise="__MSG_instanceOffline__">All settings have been reset as they're incompatible with the previous version.</p>
- <p>Sorry for the inconvenience, but we're going in a fast development process and can't support nor convert older settings. It will reach a stable plateau though.</p>
-
- <a id="export-settings" class="button button-inline">
- <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
- <path
- d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"
- ></path>
- </svg>
- &nbsp;
- <x data-localise="__MSG_exportSettings__">Export Settings</x>
- </a>
- </div>
- </body>
- <script src="reset_warning.js"></script>
-</html>
diff --git a/src/pages/background/reset_warning.js b/src/pages/background/reset_warning.js
deleted file mode 100644
index 9ce49c9a..00000000
--- a/src/pages/background/reset_warning.js
+++ /dev/null
@@ -1,7 +0,0 @@
-let params = new URLSearchParams(location.search)
-
-const resultString = JSON.stringify(JSON.parse(params.get("data")), null, " ")
-
-let exportSettingsElement = document.getElementById("export-settings")
-exportSettingsElement.href = "data:application/json;base64," + btoa(resultString)
-exportSettingsElement.download = "libredirect-settings.json"