diff options
author | ManeraKai <manerakai@protonmail.com> | 2022-05-30 01:02:59 +0300 |
---|---|---|
committer | ManeraKai <manerakai@protonmail.com> | 2022-05-30 01:02:59 +0300 |
commit | c5a6623e0f320b2a789e0d2667ccfe2e1bd4335f (patch) | |
tree | dabfa0f2cecf137771f276996f9368922c5aeb64 /src/assets/javascripts/sendTargets.js | |
parent | Fixed typo for CopyRaw #291 (diff) | |
download | libredirect-c5a6623e0f320b2a789e0d2667ccfe2e1bd4335f.zip |
Fixed settings theme and translation flashing #286
Diffstat (limited to 'src/assets/javascripts/sendTargets.js')
-rw-r--r-- | src/assets/javascripts/sendTargets.js | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/src/assets/javascripts/sendTargets.js b/src/assets/javascripts/sendTargets.js new file mode 100644 index 00000000..a3e87268 --- /dev/null +++ b/src/assets/javascripts/sendTargets.js @@ -0,0 +1,149 @@ +window.browser = window.browser || window.chrome; + +import utils from './utils.js' + +const targets = [ + /^https?:\/{2}send\.libredirect\.invalid\/$/, + /^ https ?: \/\/send\.firefox\.com\/$/, + /^https?:\/{2}sendfiles\.online\/$/ +]; + +let redirects = { + "send": { + "normal": [], + "tor": [] + } +} +function setRedirects(val) { + browser.storage.local.get('cloudflareList', r => { + redirects.send = val; + sendNormalRedirectsChecks = [...redirects.send.normal]; + for (const instance of r.cloudflareList) { + const a = sendNormalRedirectsChecks.indexOf(instance); + if (a > -1) sendNormalRedirectsChecks.splice(a, 1); + } + browser.storage.local.set({ + sendTargetsRedirects: redirects, + sendNormalRedirectsChecks, + }) + }) +} + +let + disableSendTarget, + sendTargetsRedirects, + sendNormalRedirectsChecks, + sendNormalCustomRedirects, + sendTorRedirectsChecks, + sendTorCustomRedirects, + sendTargetsProtocol; + +function init() { + return new Promise(resolve => { + browser.storage.local.get( + [ + "disableSendTarget", + "sendTargetsRedirects", + "sendTargetsProtocol", + "sendNormalRedirectsChecks", + "sendNormalCustomRedirects", + "sendTorRedirectsChecks", + "sendTorCustomRedirects", + ], + r => { + disableSendTarget = r.disableSendTarget; + sendTargetsRedirects = r.sendTargetsRedirects; + sendNormalRedirectsChecks = r.sendNormalRedirectsChecks; + sendNormalCustomRedirects = r.sendNormalCustomRedirects; + sendTorRedirectsChecks = r.sendTorRedirectsChecks; + sendTorCustomRedirects = r.sendTorCustomRedirects; + sendTargetsProtocol = r.sendTargetsProtocol; + resolve(); + } + ) + }) +} + +init(); +browser.storage.onChanged.addListener(init) + +function all() { + return [ + ...sendTargetsRedirects.send.normal, + ...sendTargetsRedirects.send.tor, + ...sendNormalCustomRedirects, + ...sendTorRedirectsChecks, + ...sendTorCustomRedirects, + ]; +} + +function switchInstance(url) { + return new Promise(async resolve => { + await init(); + const protocolHost = utils.protocolHost(url); + if (!all().includes(protocolHost)) { resolve(); return; } + if (url.pathname != '/') { resolve(); return; } + + let instancesList; + if (sendTargetsProtocol == 'normal') instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]; + else if (sendTargetsProtocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects]; + + 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 redirect(url, type, initiator) { + if (disableSendTarget) return; + if (type != "main_frame") return; + if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return; + if (!targets.some(rx => rx.test(url.href))) return; + + let instancesList; + if (sendTargetsProtocol == 'normal') instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]; + if (sendTargetsProtocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects]; + if (instancesList.length === 0) return; + + const randomInstance = utils.getRandomInstance(instancesList); + return randomInstance; +} + +function initDefaults() { + return new Promise(resolve => { + fetch('/instances/data.json').then(response => response.text()).then(async data => { + let dataJson = JSON.parse(data); + redirects.send = dataJson.send; + browser.storage.local.get('cloudflareList', async r => { + sendNormalRedirectsChecks = [...redirects.send.normal]; + for (const instance of r.cloudflareList) { + let i = sendNormalRedirectsChecks.indexOf(instance); + if (i > -1) sendNormalRedirectsChecks.splice(i, 1); + } + await browser.storage.local.set({ + disableSendTarget: false, + sendTargetsRedirects: redirects, + + sendNormalRedirectsChecks: sendNormalRedirectsChecks, + sendNormalCustomRedirects: [], + + sendTorRedirectsChecks: [...redirects.send.tor], + sendTorCustomRedirects: [], + + sendTargetsProtocol: "normal", + }) + resolve(); + }) + }) + }) +} + +export default { + setRedirects, + redirect, + switchInstance, + initDefaults, +}; |