diff options
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r-- | src/assets/javascripts/general.js | 22 | ||||
-rw-r--r-- | src/assets/javascripts/services.js | 192 | ||||
-rw-r--r-- | src/assets/javascripts/utils.js | 16 |
3 files changed, 133 insertions, 97 deletions
diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 35ead2f0..3a8987ac 100644 --- a/src/assets/javascripts/general.js +++ b/src/assets/javascripts/general.js @@ -25,17 +25,19 @@ async function initDefaults() { return new Promise(resolve => browser.storage.local.set( { - exceptions: { - url: [], - regex: [], + options: { + exceptions: { + url: [], + regex: [], + }, + theme: "DEFAULT", + popupServices: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], + autoRedirect: false, + firstPartyIsolate: false, + network: "clearnet", + networkFallback: true, + latencyThreshold: 1000, }, - theme: "DEFAULT", - popupServices: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], - autoRedirect: false, - firstPartyIsolate: false, - network: "clearnet", - networkFallback: true, - latencyThreshold: 1000, }, () => resolve() ) diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 25e998d2..9fc5a0a3 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -2,9 +2,7 @@ window.browser = window.browser || window.chrome import utils from "./utils.js" -let config = {}, - redirects = {}, - options = {} +let config, redirects, options, targets, blacklists async function getConfig() { return new Promise(resolve => { @@ -19,48 +17,44 @@ async function getConfig() { function init() { return new Promise(async resolve => { - await getConfig() - browser.storage.local.get(["network", "networkFallback", "redirects"], r => { - options.network = r.network - options.networkFallback = r.networkFallback + // await getConfig() + browser.storage.local.get(["options", "targets", "redirects", "blacklists"], r => { + blacklists = r.blacklists redirects = r.redirects + targets = r.targets + options = r.options + resolve() }) - for (const service in config.services) { - options[service] = {} - browser.storage.local.get([`${service}Enabled`, `${service}RedirectType`, `${service}Frontend`], r => { - options[service].enabled = r[service + "Enabled"] - options[service].frontend = r[service + "Frontend"] - options[service].redirectType = r[service + "RedirectType"] - }) - for (const frontend in config.services[service].frontends) { - options[frontend] = {} - for (const network in config.networks) { - options[frontend][network] = {} - options[frontend][network] = {} - browser.storage.local.get([`${frontend}${utils.camelCase(network)}RedirectsChecks`, `${frontend}${utils.camelCase(network)}CustomRedirects`], r => { - options[frontend][network].checks = r[frontend + utils.camelCase(network) + "RedirectsChecks"] - options[frontend][network].custom = r[frontend + utils.camelCase(network) + "CustomRedirects"] - }) - } - } - } - resolve() }) } -function all(service) { - init() +await init() +await getConfig() + +function fetchFrontendInstanceList(service, frontend) { let tmp = [] - for (const frontend in config.services[service].frontends) { - if (config.services[service].frontends[frontend].instanceList) { - for (const network in config.networks) { - tmp.push(...redirects[frontend][network], ...options[frontend][network].custom) - } - } else if (config.services[service].frontends[frontend].singleInstance != undefined) tmp.push(config.services[service].frontends[frontend].singleInstance) - } + if (!config.services[service].frontends[frontend].singleInstance) { + for (const network in config.networks) { + tmp.push(...redirects[frontend][network], ...options[frontend][network].custom) + } + } else if (config.services[service].frontends[frontend].singleInstance != undefined) tmp = config.services[service].frontends[frontend].singleInstance return tmp } +function all(service, frontend) { + // init() + // getConfig() + let instances = [] + if (!frontend) { + for (const frontend in config.services[service].frontends) { + instances.push(...fetchFrontendInstanceList(service, frontend)) + } + } else { + instances.push(...fetchFrontendInstanceList(service, frontend)) + } + return instances +} + function regexArray(service, url) { let targets if (config.services[service].targets == "datajson") { @@ -77,8 +71,6 @@ function regexArray(service, url) { return false } -getConfig() -init() browser.storage.onChanged.addListener(init) function redirect(url, type, initiator) { @@ -101,8 +93,8 @@ function redirect(url, type, initiator) { } if (config.services[service].frontends[frontend].instanceList) { - let instanceList = [...options[frontend][network].checks, ...options[frontend][network].custom] - if (instanceList.length === 0 && options.networkFallback) instanceList = [...options[frontend].clearnet.checks, ...options[frontend].clearnet.custom] + let instanceList = [...options[frontend][network].enabled, ...options[frontend][network].custom] + if (instanceList.length === 0 && options.networkFallback) instanceList = [...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom] if (instanceList.length === 0) return randomInstance = utils.getRandomInstance(instanceList) } else if (config.services[service].frontends[frontend].singleInstance) randomInstance = config.services[service].frontends[frontend].singleInstance @@ -401,45 +393,37 @@ function initDefaults() { fetch("/instances/data.json") .then(response => response.text()) .then(async data => { - let dataJson = JSON.parse(data) - let tmpRedirects = JSON.parse(data) - browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList", "offlineBlackList"], async r => { + browser.storage.local.get(["options", "blacklists"], async r => { + let redirects = JSON.parse(data) + let options = r.options + let targets = {} for (const service in config.services) { + options[service] = {} if (config.services[service].targets == "datajson") { - browser.storage.local.set({ [service + "Targets"]: [...dataJson[service]] }) - delete dataJson[service] + targets[service] = redirects[service] + //delete dataJson[service] } for (const defaultOption in config.services[service].options) { - browser.storage.local.set({ [service + utils.camelCase(defaultOption)]: config.services[service].options[defaultOption] }) + options[service][defaultOption] = config.services[service].options[defaultOption] } for (const frontend in config.services[service].frontends) { if (config.services[service].frontends[frontend].instanceList) { - let clearnetChecks = tmpRedirects[frontend].clearnet - for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList, ...r.offlineBlackList]) { - let i = clearnetChecks.indexOf(instance) - if (i > -1) clearnetChecks.splice(i, 1) - } + options[frontend] = {} for (const network in config.networks) { - switch (network) { - case "clearnet": - browser.storage.local.set({ - [frontend + "ClearnetRedirectsChecks"]: [...clearnetChecks], - [frontend + "ClearnetCustomRedirects"]: [], - }) - break - default: - browser.storage.local.set({ - [frontend + utils.camelCase(network) + "RedirectsChecks"]: [...tmpRedirects[frontend][network]], - [frontend + utils.camelCase(network) + "CustomRedirects"]: [], - }) + options[frontend][network] = {} + options[frontend][network].enabled = redirects[frontend][network] + options[frontend][network].custom = [] + } + for (const blacklist in r.blacklists) { + for (const instance of blacklist) { + let i = options[frontend].clearnet.enabled.indexOf(instance) + if (i > -1) options[frontend].clearnet.enabled.splice(i, 1) } } } } } - browser.storage.local.set({ - redirects: dataJson, - }) + browser.storage.local.set({ redirects, options, targets }) resolve() }) }) @@ -459,15 +443,15 @@ function computeService(url) { function switchInstance(url) { return new Promise(async resolve => { - await init() - await getConfig() + // await init() + // await getConfig() const protocolHost = utils.protocolHost(url) for (const service in config.services) { if (!options[service].enabled) continue if (!all(service).includes(protocolHost)) continue - let instancesList = [...options[options[service].frontend][options.network].checks, ...options[options[service].frontend][options.network].custom] - if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.checks, ...options[options[service].frontend].clearnet.custom] + let instancesList = [...options[options[service].frontend][options.network].enabled, ...options[options[service].frontend][options.network].custom] + if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.enabled, ...options[options[service].frontend].clearnet.custom] let oldInstance const i = instancesList.indexOf(protocolHost) @@ -492,8 +476,8 @@ function switchInstance(url) { function reverse(url) { return new Promise(async resolve => { - await init() - await getConfig() + // await init() + // await getConfig() let protocolHost = utils.protocolHost(url) let currentService for (const service in config.services) { @@ -504,6 +488,8 @@ function reverse(url) { case "instagram": 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(config.services[currentService].url + url.pathname + url.search) + return case "youtube": case "imdb": case "imgur": @@ -518,10 +504,72 @@ function reverse(url) { }) } +function unifyPreferences(url) { + return new Promise(async resolve => { + // await init() + // await getConfig() + const protocolHost = utils.protocolHost(url) + let currentFrontend, currentService + serviceloop: for (const service in config.services) { + for (const frontend in config.services[service].frontends) { + if (all(service, frontend).includes(protocolHost)) { + currentFrontend = frontend + currentService = service + break serviceloop + } + } + } + let instancesList = [...options[currentFrontend][options.network].enabled, ...options[currentFrontend][options.network].custom] + if (options.networkFallback && options.network != "clearnet") instancesList.push(...options[currentFrontend].clearnet.enabled, ...options[currentFrontend].clearnet.custom) + + const frontend = config.services[currentService].frontends[currentFrontend] + if ("cookies" in frontend.preferences) { + for (const cookie in frontend.preferences.cookies) { + await utils.copyCookie(currentFrontend, url, instancesList, cookie) + } + } + if ("localStorage" in frontend.preferences) { + } + if ("indexeddb" in frontend.preferences) { + } + if ("token" in frontend.preferences) { + } + resolve(true) + }) +} + +function setRedirects(redirects) { + browser.storage.local.get(["options", "blacklists"], async r => { + let options = r.options + let targets = {} + for (const service in config.services) { + if (config.services[service].targets == "datajson") { + targets[service] = redirects[service] + } + for (const frontend in config.services[service].frontends) { + if (config.services[service].frontends[frontend].instanceList) { + for (const network in config.networks) { + options[frontend][network].enabled = redirects[frontend][network] + } + for (const blacklist in r.blacklists) { + for (const instance of blacklist) { + let i = options[frontend].clearnet.enabled.indexOf(instance) + if (i > -1) options[frontend].clearnet.enabled.splice(i, 1) + } + } + } + } + } + browser.storage.local.set({ redirects, targets, options }) + }) +} + export default { redirect, initDefaults, computeService, switchInstance, reverse, + unifyPreferences, + setRedirects, } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index c28af018..0e8acb3c 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -440,21 +440,7 @@ function unify(test) { return } - let result = await youtubeHelper.copyPasteInvidiousCookies(test, url) - if (!result) result = await youtubeHelper.copyPastePipedLocalStorage(test, url, currTab.id) - if (!result) result = await youtubeHelper.copyPastePipedMaterialLocalStorage(test, url, currTab.id) - - if (!result) result = await twitterHelper.initNitterCookies(test, url) - if (!result) result = await redditHelper.initLibredditCookies(test, url) - if (!result) result = await redditHelper.initTedditCookies(test, url) - if (!result) result = await searchHelper.initSearxCookies(test, url) - if (!result) result = await searchHelper.initSearxngCookies(test, url) - if (!result) result = await searchHelper.initLibrexCookies(test, url) - if (!result) result = await tiktokHelper.initProxiTokCookies(test, url) - if (!result) result = await wikipediaHelper.initWikilessCookies(test, url) - if (!result) result = await translateHelper.copyPasteSimplyTranslateCookies(test, url) - if (!result) result = await translateHelper.copyPasteLingvaLocalStorage(test, url) - if (!result) result = await instagramHelper.initBibliogramPreferences(test, url) + let result = await servicesHelper.unifyPreferences(url) resolve(result) } |