add isolators for reseed and reseed and Tor management, integrate Socks plugin

This commit is contained in:
idk
2022-01-28 17:54:05 -05:00
parent 2805bbb0e9
commit 92184a4282
7 changed files with 247 additions and 192 deletions

View File

@@ -159,6 +159,10 @@
"message": "Tor Management",
"description": "Preface for the browser titlebar"
},
"reseedPreface": {
"message": "Reseed Management",
"description": "Preface for the browser titlebar"
},
"webPreface": {
"message": "Web Browser",
"description": "Preface for the browser titlebar"

View File

@@ -159,6 +159,10 @@
"message": "Tor Management",
"description": "Preface for the browser titlebar"
},
"reseedPreface": {
"message": "Reseed Management",
"description": "Preface for the browser titlebar"
},
"webPreface": {
"message": "Navegador web",
"description": "Prefacio de la barra de título del navegador"

View File

@@ -19,6 +19,7 @@ var botepref = chrome.i18n.getMessage('botePreface');
var blogpref = chrome.i18n.getMessage('blogPreface');
var blogprefpriv = chrome.i18n.getMessage('blogPrefacePrivate');
var torpref = chrome.i18n.getMessage('torPreface');
var reseedpref = chrome.i18n.getMessage('reseedPreface');
function onError(err) {
console.log('(background)', err);
@@ -136,6 +137,15 @@ function onContextsGot(contexts) {
})
.then(onCreated, onNotCreated);
}
if (ids.indexOf(reseedpref) == -1) {
browser.contextualIdentities
.create({
name: reseedpref,
color: 'green',
icon: 'briefcase'
})
.then(onCreated, onNotCreated);
}
}
function onContextsError() {

View File

@@ -27,11 +27,17 @@ function localHost(url) {
console.log('(urlcheck) hostname localhost', hostname);
console.log('(urlcheck) url localhost', url);
if (hostname === '127.0.0.1') {
if (url.indexOf(':7671') != -1) return 'reseed';
if (url.indexOf(':8084') != -1) return 'blog';
if (url.indexOf(':7672') != -1) return 'blog';
if (url.indexOf(':7673') != -1) return 'blog';
if (url.indexOf(':7669') != -1) return 'irc';
if (url.indexOf(':7695') != -1) return 'tortab';
} else if (hostname === 'localhost') {
if (url.indexOf(':7671') != -1) return 'reseed';
if (url.indexOf(':8084') != -1) return 'blog';
if (url.indexOf(':7672') != -1) return 'blog';
if (url.indexOf(':7673') != -1) return 'blog';
if (url.indexOf(':7669') != -1) return 'irc';
if (url.indexOf(':7695') != -1) return 'tortab';
}

View File

@@ -11,6 +11,7 @@ var botepref = chrome.i18n.getMessage('botePreface');
var blogpref = chrome.i18n.getMessage('blogPreface');
var blogprefpriv = chrome.i18n.getMessage('blogPrefacePrivate');
var torpref = chrome.i18n.getMessage('torPreface');
var reseedpref = chrome.i18n.getMessage('reseedPreface');
browser.privacy.network.peerConnectionEnabled.set({
value: true
@@ -77,6 +78,22 @@ var handleContextProxyRequest = async function(requestDetails) {
}
}
function reseedProxy() {
if (!requestDetails.url.includes('7671')) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort(),
failoverTimeout: 864000
};
return proxy;
}
if (requestDetails.url.includes(':7671')) {
proxy = null;
return proxy;
}
}
function btProxy() {
proxy = routerProxy();
if (requestDetails.url.includes(':7662')) {
@@ -151,6 +168,9 @@ var handleContextProxyRequest = async function(requestDetails) {
} else if (context.name == torpref) {
proxy = torManagerProxy();
return proxy;
} else if (context.name == reseedpref) {
proxy = reseedProxy();
return proxy;
} else if (context.name == routerpref) {
proxy = routerProxy();
return proxy;

View File

@@ -11,6 +11,7 @@ var botepref = chrome.i18n.getMessage('botePreface');
var blogpref = chrome.i18n.getMessage('blogPreface');
var blogprefpriv = chrome.i18n.getMessage('blogPrefacePrivate');
var torpref = chrome.i18n.getMessage('torPreface');
var reseedpref = chrome.i18n.getMessage('reseedPreface');
var contextScrub = async function(requestDetails) {
function onHeaderError() {
@@ -342,6 +343,17 @@ var contextSetup = function(requestDetails) {
console.error('(isolate)Context Error', error);
}
};
var reseedTabFind = async function(tabId) {
console.info('(isolate)Context Discovery Reseed Manager');
try {
var context = await browser.contextualIdentities.query({
name: reseedpref
});
return forceIntoIsolation(tabId, reseedpref, tab);
} catch (error) {
console.error('(isolate)Context Error', error);
}
};
var tabGet = async function(tabId) {
try {
//console.log("(isolate)Tab ID from Request", tabId);
@@ -402,7 +414,11 @@ var contextSetup = function(requestDetails) {
} else if (localhost === 'tortab') {
var tortab = tab.then(torTabFind, onContextError);
return requestDetails;
} else if (localhost === 'reseed') {
var reseedtab = tab.then(reseedTabFind, onContextError);
return requestDetails;
}
}
}
// if (oldtab.cookieStoreId == 'firefox-default') {

View File

@@ -3,220 +3,216 @@
////// Session extraction
function setupExtractor() {
browser.webRequest.onHeadersReceived.removeListener(extractSession);
browser.storage.local.get('server').then(({ server }) => {
if (!server) {
return;
}
console.log('Session extractor setup for', server.base_url);
browser.webRequest.onBeforeSendHeaders.addListener(
extractSession,
{ urls: [server.base_url + '*'] },
['requestHeaders']
);
});
browser.webRequest.onHeadersReceived.removeListener(extractSession);
browser.storage.local.get('server').then(({ server }) => {
if (!server) {
return;
}
console.log('Session extractor setup for', server.base_url);
browser.webRequest.onBeforeSendHeaders.addListener(
extractSession, { urls: [server.base_url + '*'] }, ['requestHeaders']
);
});
}
setupExtractor();
function extractSession(requestDetails) {
const hdr = requestDetails.requestHeaders.filter(
(x) => x.name.toLowerCase() === "x-transmission-session-id"
)[0];
if (!hdr) {
return;
}
browser.storage.local.get("server").then(({ server }) => {
server.session = hdr.value;
browser.storage.local.set({ server });
});
const hdr = requestDetails.requestHeaders.filter(
(x) => x.name.toLowerCase() === "x-transmission-session-id"
)[0];
if (!hdr) {
return;
}
browser.storage.local.get("server").then(({ server }) => {
server.session = hdr.value;
browser.storage.local.set({ server });
});
}
////// Adding
function blobToBase64(blob) {
return new Promise((resolve, reject) => {
const rdr = new FileReader();
rdr.onload = () => resolve(rdr.result.substr(rdr.result.indexOf(",") + 1));
rdr.onerror = reject;
rdr.readAsDataURL(blob);
});
return new Promise((resolve, reject) => {
const rdr = new FileReader();
rdr.onload = () => resolve(rdr.result.substr(rdr.result.indexOf(",") + 1));
rdr.onerror = reject;
rdr.readAsDataURL(blob);
});
}
function addUrl(torrentUrl, downloadDir) {
let p,
params = {};
if (downloadDir) {
params = { "download-dir": downloadDir };
}
if (torrentUrl.startsWith("magnet:")) {
console.log("Adding magnet", torrentUrl);
params.filename = torrentUrl;
p = rpcCall("torrent-add", params);
} else {
// Download the torrent file *in the browser* to support private torrents
console.log("Downloading torrent", torrentUrl);
p = fetch(torrentUrl, {
method: "GET",
credentials: "include",
})
.then((resp) => {
if (resp.ok) {
return resp.blob();
}
throw new Error("Could not download torrent");
})
.then(blobToBase64)
.then((b64) => {
params.metainfo = b64;
return rpcCall("torrent-add", params);
});
}
return p.then((x) => {
updateBadge();
return x;
});
let p,
params = {};
if (downloadDir) {
params = { "download-dir": downloadDir };
}
if (torrentUrl.startsWith("magnet:")) {
console.log("Adding magnet", torrentUrl);
params.filename = torrentUrl;
p = rpcCall("torrent-add", params);
} else {
// Download the torrent file *in the browser* to support private torrents
console.log("Downloading torrent", torrentUrl);
p = fetch(torrentUrl, {
method: "GET",
credentials: "include",
})
.then((resp) => {
if (resp.ok) {
return resp.blob();
}
throw new Error("Could not download torrent");
})
.then(blobToBase64)
.then((b64) => {
params.metainfo = b64;
return rpcCall("torrent-add", params);
});
}
return p.then((x) => {
updateBadge();
return x;
});
}
////// magnet: Handler
function handleUrl(requestDetails) {
return addUrl(
decodeURIComponent(
requestDetails.url.replace("http://transmitter.web-extension/", "")
)
).then((x) => {
return browser.storage.local.get("server").then(({ server }) => {
return { redirectUrl: server.base_url + "web/" };
return addUrl(
decodeURIComponent(
requestDetails.url.replace("http://transmitter.web-extension/", "")
)
).then((x) => {
return browser.storage.local.get("server").then(({ server }) => {
return { redirectUrl: server.base_url + "web/" };
});
});
});
}
browser.webRequest.onBeforeRequest.addListener(
handleUrl,
{ urls: ["http://transmitter.web-extension/*"] },
["blocking"]
handleUrl, { urls: ["http://transmitter.web-extension/*"] }, ["blocking"]
);
////// Context menu
function createContextMenu() {
browser.storage.local.get("server").then(({ server }) => {
browser.contextMenus.removeAll();
if (!server || !server.locations || !server.locations.length) {
browser.contextMenus.create({
id: "transmitter-add",
title: "Download with Transmission remote",
contexts: ["link"],
});
} else {
browser.contextMenus.create({
id: "transmitter-add",
title: "Download to Default location",
contexts: ["link"],
});
server.locations.forEach((location) => {
browser.contextMenus.create({
id: "transmitter-add-loc-" + location.index,
title: "Download to " + location.name,
contexts: ["link"],
});
});
}
});
browser.storage.local.get("server").then(({ server }) => {
browser.contextMenus.removeAll();
if (!server || !server.locations || !server.locations.length) {
browser.contextMenus.create({
id: "transmitter-add",
title: "Download with Transmission remote",
contexts: ["link"],
});
} else {
browser.contextMenus.create({
id: "transmitter-add",
title: "Download to Default location",
contexts: ["link"],
});
server.locations.forEach((location) => {
browser.contextMenus.create({
id: "transmitter-add-loc-" + location.index,
title: "Download to " + location.name,
contexts: ["link"],
});
});
}
});
}
if (browser.windows != undefined) {
createContextMenu();
createContextMenu();
browser.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === "transmitter-add") {
return addUrl(info.linkUrl);
} else if (info.menuItemId.startsWith("transmitter-add-loc-")) {
let index = parseInt(
info.menuItemId.substr("transmitter-add-loc-".length)
);
browser.storage.local.get("server").then(({ server }) => {
let path = server.locations[index].path;
addUrl(info.linkUrl, path);
});
}
});
browser.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === "transmitter-add") {
return addUrl(info.linkUrl);
} else if (info.menuItemId.startsWith("transmitter-add-loc-")) {
let index = parseInt(
info.menuItemId.substr("transmitter-add-loc-".length)
);
browser.storage.local.get("server").then(({ server }) => {
let path = server.locations[index].path;
addUrl(info.linkUrl, path);
});
}
});
}
////// Badge
function updateBadge() {
browser.storage.local.get("server").then(({ server }) => {
if (
server.badge !== "num" &&
server.badge !== "dl" &&
server.badge !== "ul" &&
server.badge !== "auto"
) {
return;
}
return rpcCall("session-stats", {}).then((response) => {
const args = response.arguments; // lol the name 'arguments' means destructuring in strict mode is impossible
switch (server.badge) {
case "num":
browser.browserAction.setBadgeBackgroundColor({ color: "gray" });
browser.browserAction.setBadgeText({
text: "" + args.activeTorrentCount,
});
break;
case "dl":
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.downloadSpeed),
});
break;
case "ul":
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.uploadSpeed),
});
break;
case "auto":
if (args.downloadSpeed > 0) {
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.downloadSpeed),
});
} else if (args.uploadSpeed > 0) {
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.uploadSpeed),
});
} else {
browser.browserAction.setBadgeBackgroundColor({ color: "gray" });
browser.browserAction.setBadgeText({
text: "" + args.activeTorrentCount,
});
}
break;
}
browser.storage.local.get("server").then(({ server }) => {
if (
server.badge !== "num" &&
server.badge !== "dl" &&
server.badge !== "ul" &&
server.badge !== "auto"
) {
return;
}
return rpcCall("session-stats", {}).then((response) => {
const args = response.arguments; // lol the name 'arguments' means destructuring in strict mode is impossible
switch (server.badge) {
case "num":
browser.browserAction.setBadgeBackgroundColor({ color: "gray" });
browser.browserAction.setBadgeText({
text: "" + args.activeTorrentCount,
});
break;
case "dl":
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.downloadSpeed),
});
break;
case "ul":
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.uploadSpeed),
});
break;
case "auto":
if (args.downloadSpeed > 0) {
browser.browserAction.setBadgeBackgroundColor({ color: "green" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.downloadSpeed),
});
} else if (args.uploadSpeed > 0) {
browser.browserAction.setBadgeBackgroundColor({ color: "blue" });
browser.browserAction.setBadgeText({
text: formatSpeed(args.uploadSpeed),
});
} else {
browser.browserAction.setBadgeBackgroundColor({ color: "gray" });
browser.browserAction.setBadgeText({
text: "" + args.activeTorrentCount,
});
}
break;
}
});
});
});
}
browser.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === "transmitter-badge-update") {
return updateBadge();
}
if (alarm.name === "transmitter-badge-update") {
return updateBadge();
}
});
function setupBadge() {
browser.alarms.clear("transmitter-badge-update").then((x) => {
browser.storage.local.get("server").then(({ server }) => {
if (!server) {
return;
}
browser.alarms.create("transmitter-badge-update", {
periodInMinutes: parseInt(server.badge_interval || "1"),
});
updateBadge();
browser.alarms.clear("transmitter-badge-update").then((x) => {
browser.storage.local.get("server").then(({ server }) => {
if (!server) {
return;
}
browser.alarms.create("transmitter-badge-update", {
periodInMinutes: parseInt(server.badge_interval || "1"),
});
updateBadge();
});
});
});
}
setupBadge();
@@ -224,27 +220,26 @@ setupBadge();
////// Storage updates
browser.storage.onChanged.addListener((changes, area) => {
if (!Object.keys(changes).includes("server")) {
return;
}
const oldv = changes.server.oldValue;
const newv = changes.server.newValue;
if (
!oldv ||
oldv.base_url !== newv.base_url ||
oldv.username !== newv.username ||
oldv.password !== newv.password ||
oldv.badge_interval !== newv.badge_interval ||
oldv.badge !== newv.badge ||
arraysEqualDeep(oldv.locations, newv.locations)
) {
setupExtractor();
setupBadge();
updateBadge();
createContextMenu();
}
if (!Object.keys(changes).includes("server")) {
return;
}
const oldv = changes.server.oldValue;
const newv = changes.server.newValue;
if (!oldv ||
oldv.base_url !== newv.base_url ||
oldv.username !== newv.username ||
oldv.password !== newv.password ||
oldv.badge_interval !== newv.badge_interval ||
oldv.badge !== newv.badge ||
arraysEqualDeep(oldv.locations, newv.locations)
) {
setupExtractor();
setupBadge();
updateBadge();
createContextMenu();
}
});
function arraysEqualDeep(arr1, arr2) {
return JSON.stringify(arr1) !== JSON.stringify(arr2);
}
return JSON.stringify(arr1) !== JSON.stringify(arr2);
}