202 lines
6.6 KiB
JavaScript
202 lines
6.6 KiB
JavaScript
window.browser = window.browser || window.chrome
|
|
|
|
import utils from "./utils.js"
|
|
|
|
const frontends = new Array("simpleertube")
|
|
const protocols = new Array("normal", "tor", "i2p", "loki")
|
|
|
|
let redirects = {}
|
|
|
|
for (let i = 0; i < frontends.length; i++) {
|
|
redirects[frontends[i]] = {}
|
|
for (let x = 0; x < protocols.length; x++) {
|
|
redirects[frontends[i]][protocols[x]] = []
|
|
}
|
|
}
|
|
|
|
function setRedirects(val) {
|
|
browser.storage.local.get("cloudflareBlackList", r => {
|
|
redirects.simpleertube = val
|
|
simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal]
|
|
for (const instance of r.cloudflareBlackList) {
|
|
const a = simpleertubeNormalRedirectsChecks.indexOf(instance)
|
|
if (a > -1) simpleertubeNormalRedirectsChecks.splice(a, 1)
|
|
}
|
|
browser.storage.local.set({
|
|
peertubeRedirects: redirects,
|
|
simpleertubeNormalRedirectsChecks,
|
|
})
|
|
})
|
|
}
|
|
|
|
let disablePeertubeTargets,
|
|
peertubeRedirects,
|
|
simpleertubeNormalRedirectsChecks,
|
|
simpleertubeNormalCustomRedirects,
|
|
simpleertubeTorRedirectsChecks,
|
|
simpleertubeTorCustomRedirects,
|
|
simpleertubeI2pRedirectsChecks,
|
|
simpleertubeI2pCustomRedirects,
|
|
simpleertubeLokiRedirectsChecks,
|
|
simpleertubeLokiCustomRedirects,
|
|
peerTubeTargets,
|
|
protocol,
|
|
protocolFallback
|
|
|
|
function init() {
|
|
return new Promise(resolve => {
|
|
browser.storage.local.get(
|
|
[
|
|
"disablePeertubeTargets",
|
|
"peertubeRedirects",
|
|
"simpleertubeNormalRedirectsChecks",
|
|
"simpleertubeNormalCustomRedirects",
|
|
"simpleertubeTorRedirectsChecks",
|
|
"simpleertubeTorCustomRedirects",
|
|
"simpleertubeI2pRedirectsChecks",
|
|
"simpleertubeI2pCustomRedirects",
|
|
"simpleertubeLokiRedirectsChecks",
|
|
"simpleertubeLokiCustomRedirects",
|
|
"peerTubeTargets",
|
|
"protocol",
|
|
"protocolFallback",
|
|
],
|
|
r => {
|
|
disablePeertubeTargets = r.disablePeertubeTargets
|
|
peertubeRedirects = r.peertubeRedirects
|
|
simpleertubeNormalRedirectsChecks = r.simpleertubeNormalRedirectsChecks
|
|
simpleertubeNormalCustomRedirects = r.simpleertubeNormalCustomRedirects
|
|
simpleertubeTorRedirectsChecks = r.simpleertubeTorRedirectsChecks
|
|
simpleertubeTorCustomRedirects = r.simpleertubeTorCustomRedirects
|
|
simpleertubeI2pRedirectsChecks = r.simpleertubeI2pRedirectsChecks
|
|
simpleertubeI2pCustomRedirects = r.simpleertubeI2pCustomRedirects
|
|
simpleertubeLokiRedirectsChecks = r.simpleertubeLokiRedirectsChecks
|
|
simpleertubeLokiCustomRedirects = r.simpleertubeLokiCustomRedirects
|
|
peerTubeTargets = r.peerTubeTargets
|
|
protocol = r.protocol
|
|
protocolFallback = r.protocolFallback
|
|
resolve()
|
|
}
|
|
)
|
|
})
|
|
}
|
|
|
|
init()
|
|
browser.storage.onChanged.addListener(init)
|
|
|
|
function all() {
|
|
return [
|
|
...simpleertubeNormalRedirectsChecks,
|
|
...simpleertubeTorRedirectsChecks,
|
|
...simpleertubeI2pRedirectsChecks,
|
|
...simpleertubeLokiRedirectsChecks,
|
|
...simpleertubeNormalCustomRedirects,
|
|
...simpleertubeTorCustomRedirects,
|
|
...simpleertubeI2pCustomRedirects,
|
|
...simpleertubeLokiCustomRedirects,
|
|
]
|
|
}
|
|
|
|
function redirect(url, type, initiator, disableOverride) {
|
|
if (disablePeertubeTargets && !disableOverride) 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 (protocol == "loki") instancesList = [...simpleertubeLokiRedirectsChecks, ...simpleertubeLokiCustomRedirects]
|
|
else if (protocol == "i2p") instancesList = [...simpleertubeI2pRedirectsChecks, ...simpleertubeI2pCustomRedirects]
|
|
else if (protocol == "tor") instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects]
|
|
if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
|
|
instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]
|
|
}
|
|
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}`
|
|
}
|
|
|
|
function switchInstance(url, disableOverride) {
|
|
return new Promise(async resolve => {
|
|
await init()
|
|
if (disablePeertubeTargets && !disableOverride) {
|
|
resolve()
|
|
return
|
|
}
|
|
const protocolHost = utils.protocolHost(url)
|
|
if (!all().includes(protocolHost)) {
|
|
resolve()
|
|
return
|
|
}
|
|
|
|
let instancesList = []
|
|
if (protocol == "loki") instancesList = [...simpleertubeLokiRedirectsChecks, ...simpleertubeLokiCustomRedirects]
|
|
else if (protocol == "i2p") instancesList = [...simpleertubeI2pRedirectsChecks, ...simpleertubeI2pCustomRedirects]
|
|
else if (protocol == "tor") instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects]
|
|
if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
|
|
instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]
|
|
}
|
|
|
|
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}`)
|
|
})
|
|
}
|
|
|
|
function initDefaults() {
|
|
return new Promise(resolve => {
|
|
fetch("/instances/data.json")
|
|
.then(response => response.text())
|
|
.then(data => {
|
|
let dataJson = JSON.parse(data)
|
|
for (let i = 0; i < frontends.length; i++) {
|
|
redirects[frontends[i]] = dataJson[frontends[i]]
|
|
}
|
|
browser.storage.local.get("cloudflareBlackList", async r => {
|
|
simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal]
|
|
for (const instance of r.cloudflareBlackList) {
|
|
let i = simpleertubeNormalRedirectsChecks.indexOf(instance)
|
|
if (i > -1) simpleertubeNormalRedirectsChecks.splice(i, 1)
|
|
}
|
|
browser.storage.local.set(
|
|
{
|
|
peerTubeTargets: ["https://search.joinpeertube.org", ...dataJson.peertube],
|
|
disablePeertubeTargets: true,
|
|
peertubeRedirects: redirects,
|
|
|
|
simpleertubeNormalRedirectsChecks: simpleertubeNormalRedirectsChecks,
|
|
simpleertubeNormalCustomRedirects: [],
|
|
|
|
simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor],
|
|
simpleertubeTorCustomRedirects: [],
|
|
|
|
simpleertubeI2pRedirectsChecks: [...redirects.simpleertube.i2p],
|
|
simpleertubeI2pCustomRedirects: [],
|
|
|
|
simpleertubeLokiRedirectsChecks: [...redirects.simpleertube.loki],
|
|
simpleertubeLokiCustomRedirects: [],
|
|
},
|
|
() => resolve()
|
|
)
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
export default {
|
|
setRedirects,
|
|
switchInstance,
|
|
redirect,
|
|
initDefaults,
|
|
}
|