Files
I2P_in_Private_Browsing_Mod…/host.js

182 lines
4.5 KiB
JavaScript
Raw Normal View History

function isProxyHost(requestDetails) {
let requestUrl = new URL(requestDetails.url);
let hostname = requestUrl.hostname;
2023-06-20 13:19:49 -04:00
console.log("(proxy) proxyinfo proxy.i2p check", hostname);
2022-10-16 16:50:28 -04:00
if (
2023-05-25 03:49:17 +00:00
hostname === "proxy.i2p" ||
hostname === "c6lilt4cr5x7jifxridpkesf2zgfwqfchtp6laihr4pdqomq25iq.b32.i2p"
2022-10-16 16:50:28 -04:00
) {
2023-06-20 13:19:49 -04:00
console.log("(proxy) proxyinfo proxy.i2p positive", hostname);
2022-10-16 16:50:28 -04:00
return true;
}
console.log("(proxy) proxyinfo proxy.i2p check negative", hostname);
2022-10-16 16:50:28 -04:00
return false;
2019-11-23 18:41:18 -05:00
}
2023-05-25 03:49:17 +00:00
function isLocalHost(url) {
console.log("(host) checking local host", url);
let requestUrl = new URL(url);
let hostname = requestUrl.hostname;
if (hostname === "localhost" || hostname === "127.0.0.1") {
2023-05-25 03:49:17 +00:00
if (url.includes(":8084")) {
return "blog";
}
2023-05-25 03:49:17 +00:00
if (url.includes(":7669")) {
return "irc";
}
2023-05-25 03:49:17 +00:00
if (url.includes(":7695")) {
return "tor";
}
return true;
2022-10-16 16:50:28 -04:00
}
return false;
2019-11-23 18:41:18 -05:00
}
function isExtensionHost(url) {
const extensionPrefix = browser.runtime
2022-10-24 19:57:51 -04:00
.getURL("")
.replace("moz-extension://", "")
.replace("/", "");
let isHost = false;
2022-10-16 16:50:28 -04:00
if (url.originUrl !== undefined) {
const originUrl = url.originUrl
2022-10-24 19:57:51 -04:00
.replace("moz-extension://", "")
.replace("/", "");
isHost = originUrl.startsWith(extensionPrefix);
} else if (url.documentUrl !== undefined) {
const documentUrl = url.documentUrl
.replace("moz-extension://", "")
.replace("/", "");
isHost = documentUrl.startsWith(extensionPrefix);
2022-10-16 16:50:28 -04:00
}
console.log(`(urlcheck) Is URL from extension host? ${isHost}`);
return isHost;
}
2019-11-23 18:41:18 -05:00
function i2pHostName(url) {
2022-10-24 19:57:51 -04:00
let hostname = "";
const u = new URL(url);
2022-10-24 19:57:51 -04:00
if (u.host.endsWith(".i2p")) {
2022-10-16 16:50:28 -04:00
hostname = u.host;
} else if (url.includes("=") && url.includes(".i2p")) {
const lsit = url.split("=");
for (const item of lsit) {
const items = item.split(" % "); //"\%")
for (const p of items) {
if (p.includes(".i2p")) {
hostname = p.replace("3D", 1);
2022-10-16 16:50:28 -04:00
break;
}
}
if (hostname !== "") {
break;
}
2022-10-16 16:50:28 -04:00
}
2022-10-24 19:57:51 -04:00
} else if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
2022-10-16 16:50:28 -04:00
} else {
2022-10-24 19:57:51 -04:00
hostname = url.split("/")[0];
2022-10-16 16:50:28 -04:00
}
return hostname;
2019-11-23 18:41:18 -05:00
}
function i2pHost(url) {
if (isProxyHost(url)) {
2022-10-24 19:57:51 -04:00
console.warn("(host) proxy.i2p", url.url);
2022-10-16 16:50:28 -04:00
return false;
}
console.log("(host) i2p", url.url);
let requestUrl = new URL(url.url);
return requestUrl.hostname.endsWith(".i2p")
2019-11-23 18:41:18 -05:00
}
function notAnImage(url, path) {
if (!url.includes(".png")) {
return path;
}
}
function getPathApplication(url) {
let requestUrl = new URL(url);
const path = requestUrl.pathname.split("/")[1];
if (path === "i2ptunnelmgr" || path === "i2ptunnel") {
return "i2ptunnelmgr";
}
if (
path === "i2psnark" ||
path === "torrents" ||
path.startsWith("transmission") ||
path.startsWith("tracker") ||
url.includes(":7662")
) {
return "i2psnark";
}
if (path === "webmail" || path === "susimail") {
return "webmail";
}
if (path.startsWith("MuWire")) {
return notAnImage("muwire");
}
if (path.startsWith("i2pbote")) {
return notAnImage("i2pbote");
}
if (
path === "home" ||
path === "console" ||
path === "dns" ||
path === "susidns" ||
path.startsWith("susidns") ||
path === "sitemap" ||
path.startsWith("config") ||
path === ""
) {
return "routerconsole";
}
console.warn("(host) unknown path", path);
return true;
}
2023-05-25 03:49:17 +00:00
function isRouterHost(url) {
let requestUrl = new URL(url);
let hostname = requestUrl.hostname;
let path = requestUrl.pathname;
let protocol = requestUrl.protocol;
2022-02-15 21:15:47 -05:00
if (identifyProtocolHandler(url)) {
2023-05-25 03:49:17 +00:00
const newUrl = identifyProtocolHandler(url);
2023-06-20 15:38:33 -04:00
console.log("(host) testing router host protocol handler identified");
2023-05-25 03:49:17 +00:00
return isRouterHost(newUrl);
2022-10-16 16:50:28 -04:00
}
2023-06-20 15:24:37 -04:00
console.log("(host) testing router hostname", hostname, path);
2023-05-25 03:49:17 +00:00
2023-06-20 15:24:37 -04:00
const localHosts = ["localhost", "127.0.0.1", control_host()];
2023-05-25 03:49:17 +00:00
const controlPort = control_port();
2023-06-20 15:24:37 -04:00
for (const host of localHosts) {
let controlHost = host;
console.log("(host) testing router hostname", hostname);
if (hostname === `${controlHost}:${controlPort}` || isLocalHost(url)) {
return getPathApplication(url);
2023-06-20 15:24:37 -04:00
}
2022-10-16 16:50:28 -04:00
}
2023-05-25 03:49:17 +00:00
return false;
}
function identifyProtocolHandler(url) {
//console.log("looking for handler-able requests")
if (url.includes(encodeURIComponent("ext+rc:"))) {
return url.replace(encodeURIComponent("ext+rc:"), "");
} else if (url.includes("ext+rc:")) {
return url.replace("ext+rc:", "");
}
2022-10-16 16:50:28 -04:00
return false;
}