Files
I2P_in_Private_Browsing_Mod…/scrub.js

268 lines
7.5 KiB
JavaScript
Raw Normal View History

var contextScrub = async function(requestDetails) {
2019-10-06 15:18:10 -04:00
console.log("(scrub)Scrubbing info from contextualized request");
try {
var headerScrub = function(context) {
if (!context) {
console.error("Context not found");
} else {
if ((context.name = "i2pbrowser")) {
var ua = "MYOB/6.66 (AN/ON)";
if (i2pHost(requestUrl.url)) {
for (var header of requestDetails.requestHeaders) {
if (header.name.toLowerCase() === "user-agent") {
header.value = ua;
console.log("(scrub)User-Agent header modified", header.value);
}
}
2019-10-06 15:18:10 -04:00
}
return {
requestHeaders: requestDetails.requestHeaders
};
}
2019-10-06 15:18:10 -04:00
}
};
var contextGet = async function(tabInfo) {
try {
console.log("(scrub)Tab info from Function", tabInfo);
context = await browser.contextualIdentities.get(tabInfo.cookieStoreId);
return context;
} catch (error) {
console.log("(scrub)Conext Error", error);
}
};
var tabFind = async function(tabId) {
try {
context = await browser.contextualIdentities.query({
name: "i2pbrowser"
});
tabId.cookieStoreId = context[0].cookieStoreId;
console.log("(scrub) forcing context", tabId.cookieStoreId);
return tabId;
} catch (error) {
console.log("(scrub)Context Error", error);
}
};
2019-10-06 15:18:10 -04:00
var tabGet = async function(tabId) {
try {
console.log("(scrub)Tab ID from Request", tabId);
let tabInfo = await browser.tabs.get(tabId);
return tabInfo;
} catch (error) {
console.log("(scrub)Tab error", error);
}
};
if (requestDetails.tabId > 0) {
2019-10-08 19:10:13 -04:00
if (i2pHost(requestDetails.url)) {
console.log("(Proxy)I2P URL detected, ");
var tab = tabGet(requestDetails.tabId);
var mtab = tab.then(tabFind);
requestDetails.tabId = mtab;
var context = mtab.then(contextGet);
var req = await context.then(headerScrub);
console.log("(scrub)Scrubbing I2P Request", req);
return req;
} else {
var tab = tabGet(requestDetails.tabId);
var context = tab.then(contextGet);
var req = await context.then(headerScrub);
console.log("(scrub)Scrubbing I2P Request", req);
return req;
}
}
2019-10-06 15:18:10 -04:00
} catch (error) {
console.log("(scrub)Not scrubbing non-I2P request.", error);
}
};
var contextSetup = async function(requestDetails) {
console.log("(isolate)Forcing I2P requests into context");
try {
var tabFind = async function(tabId) {
try {
context = await browser.contextualIdentities.query({
name: "i2pbrowser"
});
if (tabId.cookieStoreId != context[0].cookieStoreId) {
console.log(
"(isolate) forcing",
requestDetails.url,
" context",
tabId.cookieStoreId,
context[0].cookieStoreId
);
function Create(window) {
function onCreated(tab) {
console.log("(isolate) Closing old, un-isolated tab");
browser.tabs.remove(tabId.id);
2019-10-08 19:10:13 -04:00
browser.tabs.remove(window.tabs[0].id);
}
function onError(error) {
console.log(`Error: ${error}`);
}
created = browser.tabs.create({
active: true,
cookieStoreId: context[0].cookieStoreId,
url: requestDetails.url,
windowId: window.id
});
created.then(onCreated, onError);
}
getting = browser.windows.getCurrent();
2019-10-08 19:10:13 -04:00
getting.then(Create);
return tabId;
}
} catch (error) {
console.log("(isolate)Context Error", error);
}
};
var routerTabFind = async function(tabId) {
try {
context = await browser.contextualIdentities.query({
name: "routerconsole"
});
if (tabId.cookieStoreId != context[0].cookieStoreId) {
console.log(
"(isolate) forcing",
requestDetails.url,
" context",
tabId.cookieStoreId,
context[0].cookieStoreId
);
function Create(window) {
function onCreated(tab) {
console.log("(isolate) Closing old, un-isolated tab");
browser.tabs.remove(tabId.id);
browser.tabs.remove(window.tabs[0].id);
}
function onError(error) {
console.log(`Error: ${error}`);
}
created = browser.tabs.create({
active: true,
cookieStoreId: context[0].cookieStoreId,
url: requestDetails.url,
windowId: window.id
});
created.then(onCreated, onError);
}
getting = browser.windows.getCurrent();
getting.then(Create);
return tabId;
}
} catch (error) {
console.log("(isolate)Context Error", error);
}
};
var tabGet = async function(tabId) {
try {
console.log("(isolate)Tab ID from Request", tabId);
let tabInfo = await browser.tabs.get(tabId);
return tabInfo;
} catch (error) {
console.log("(isolate)Tab error", error);
}
};
if (requestDetails.tabId > 0) {
2019-10-08 19:10:13 -04:00
if (i2pHost(requestDetails.url)) {
var tab = tabGet(requestDetails.tabId);
var mtab = tab.then(tabFind);
return requestDetails;
2019-10-08 19:10:13 -04:00
}
if (routerHost(requestDetails.url)) {
var tab = tabGet(requestDetails.tabId);
2019-10-08 19:10:13 -04:00
var mtab = tab.then(routerTabFind);
return requestDetails;
}
}
} catch (error) {
console.log(
"(isolate)Not an I2P request, no need to force into alternate cookiestore.",
error
);
2019-10-06 15:18:10 -04:00
}
};
function i2pHostName(url) {
2019-10-08 19:10:13 -04:00
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split("/")[0];
}
return hostname;
}
function i2pHost(url) {
let hostname = i2pHostName(url);
2019-10-08 19:10:13 -04:00
return hostname.endsWith(".i2p");
}
2019-10-28 01:11:16 -04:00
function proxyHost(url) {
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split("/")[0];
}
if (hostname == "proxy.i2p") {
return true;
}
return false;
}
2019-10-08 19:10:13 -04:00
function routerHost(url) {
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split("/")[0];
}
if (hostname === "127.0.0.1:7657") {
return true;
} else if (hostname === "localhost:7657") {
return true;
}
2019-10-09 17:48:38 -04:00
if (hostname === "127.0.0.1:7070") {
return true;
} else if (hostname === "localhost:7070") {
return true;
}
2019-10-08 19:10:13 -04:00
return false;
}
browser.webRequest.onBeforeRequest.addListener(
contextSetup,
{ urls: ["<all_urls>"] },
["blocking"]
);
browser.webRequest.onBeforeSendHeaders.addListener(
2019-10-06 15:18:10 -04:00
contextScrub,
{ urls: ["<all_urls>"] },
["blocking", "requestHeaders"]
);
2019-10-28 01:11:16 -04:00
/*
function notify(message) {
var response = await fetch('https://proxy.i2p', {
credentials: 'include'
});
const myJson = await response.json();
console.log(JSON.stringify(myJson));
console.log(message);
const Http = new XMLHttpRequest();
Http.mozAnon = true;
Http.withCredentials = true;
const url = "http://proxy.i2p";
Http.open("GET", url);
Http.send();
Http.onreadystatechange = e => {
console.log(Http.responseText);
browser.runtime.sendMessage(Http.responseText);
};
}
*/