libredirect/src/assets/javascripts/helpers/sendTargets.js

204 lines
6.2 KiB
JavaScript

window.browser = window.browser || window.chrome;
import commonHelper from './common.js'
const targets = [
/^https?:\/{2}send.invalid\/$/,
/^ https ?: \/\/send\.firefox\.com\/$/,
/^https?:\/{2}sendfiles\.online\/$/
];
let redirects = {
"send": {
"normal": [],
"tor": []
}
}
const getRedirects = () => redirects;
const getCustomRedirects = function () {
return {
"send": {
"normal": [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects],
"tor": [...sendTorRedirectsChecks, ...sendTorCustomRedirects]
},
};
};
function setRedirects(val) {
redirects.send = val;
browser.storage.local.set({ sendTargetsRedirects: redirects })
console.log("sendTargetsRedirects: ", val)
for (const item of sendNormalRedirectsChecks)
if (!redirects.send.normal.includes(item)) {
var index = sendNormalRedirectsChecks.indexOf(item);
if (index !== -1) sendNormalRedirectsChecks.splice(index, 1);
}
setSendNormalRedirectsChecks(sendNormalRedirectsChecks);
for (const item of sendTorRedirectsChecks)
if (!redirects.send.normal.includes(item)) {
var index = sendTorRedirectsChecks.indexOf(item);
if (index !== -1) sendTorRedirectsChecks.splice(index, 1);
}
setSendTorRedirectsChecks(sendTorRedirectsChecks);
}
let sendNormalRedirectsChecks;
const getSendNormalRedirectsChecks = () => sendNormalRedirectsChecks;
function setSendNormalRedirectsChecks(val) {
sendNormalRedirectsChecks = val;
browser.storage.local.set({ sendNormalRedirectsChecks })
console.log("sendNormalRedirectsChecks: ", val)
}
let sendTorRedirectsChecks;
const getSendTorRedirectsChecks = () => sendTorRedirectsChecks;
function setSendTorRedirectsChecks(val) {
sendTorRedirectsChecks = val;
browser.storage.local.set({ sendTorRedirectsChecks })
console.log("sendTorRedirectsChecks: ", val)
}
let sendNormalCustomRedirects = [];
const getSendNormalCustomRedirects = () => sendNormalCustomRedirects;
function setSendNormalCustomRedirects(val) {
sendNormalCustomRedirects = val;
browser.storage.local.set({ sendNormalCustomRedirects })
console.log("sendNormalCustomRedirects: ", val)
}
let sendTorCustomRedirects = [];
const getSendTorCustomRedirects = () => sendTorCustomRedirects;
function setSendTorCustomRedirects(val) {
sendTorCustomRedirects = val;
browser.storage.local.set({ sendTorCustomRedirects })
console.log("sendTorCustomRedirects: ", val)
}
let disable;
const getDisable = () => disable;
function setDisable(val) {
disable = val;
browser.storage.local.set({ disableSendTarget: disable })
}
let protocol;
const getProtocol = () => protocol;
function setProtocol(val) {
protocol = val;
browser.storage.local.set({ sendTargetsProtocol: val })
console.log("sendTargetsProtocol: ", val)
}
function switchInstance(url) {
let protocolHost = commonHelper.protocolHost(url);
let sendList = [
...redirects.send.normal,
...redirects.send.tor,
...sendNormalCustomRedirects,
...sendTorCustomRedirects,
];
if (!sendList.includes(protocolHost)) return;
if (url.pathname != '/') return;
let instancesList;
if (protocol == 'normal') instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects];
else if (protocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects];
console.log("instancesList", instancesList);
let index = instancesList.indexOf(protocolHost);
if (index > -1) instancesList.splice(index, 1);
if (instancesList.length === 0) return null;
let randomInstance = commonHelper.getRandomInstance(instancesList);
return `${randomInstance}${url.pathname}${url.search}`;
}
function redirect(url, type, initiator) {
if (disable) return null;
if (initiator && ([...redirects.send.normal, ...sendNormalCustomRedirects].includes(initiator.origin) || targets.includes(initiator.host))) return null;
if (!targets.some(rx => rx.test(url.href))) return null;
if (type != "main_frame") return null;
let instancesList;
if (protocol == 'normal') instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects];
if (protocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects];
if (instancesList.length === 0) return null;
let randomInstance = commonHelper.getRandomInstance(instancesList);
return randomInstance;
}
async function init() {
return new Promise(resolve => {
fetch('/instances/data.json').then(response => response.text()).then(data => {
let dataJson = JSON.parse(data);
browser.storage.local.get(
[
"disableSendTarget",
"sendTargetsRedirects",
"sendNormalRedirectsChecks",
"sendNormalCustomRedirects",
"sendTorRedirectsChecks",
"sendTorCustomRedirects",
"sendTargetsProtocol"
],
r => {
redirects.send = dataJson.send;
disable = r.disableSendTarget ?? false;
protocol = r.sendTargetsProtocol ?? "normal";
if (r.sendTargetsRedirects) redirects = r.sendTargetsRedirects;
sendNormalRedirectsChecks = r.sendNormalRedirectsChecks ?? [...redirects.send.normal];
sendNormalCustomRedirects = r.sendNormalCustomRedirects ?? [];
sendTorRedirectsChecks = r.sendTorRedirectsChecks ?? [...redirects.send.tor];
sendTorCustomRedirects = r.sendTorCustomRedirects ?? [];
resolve();
}
)
});
});
}
export default {
getRedirects,
getCustomRedirects,
setRedirects,
getDisable,
setDisable,
getProtocol,
setProtocol,
getSendNormalRedirectsChecks,
setSendNormalRedirectsChecks,
getSendTorRedirectsChecks,
setSendTorRedirectsChecks,
getSendTorCustomRedirects,
setSendTorCustomRedirects,
getSendNormalCustomRedirects,
setSendNormalCustomRedirects,
switchInstance,
redirect,
init,
};