From f670bef983387f3b2b6e9dc03b9359dd2d61592b Mon Sep 17 00:00:00 2001 From: idk Date: Sun, 10 Nov 2019 22:24:10 -0500 Subject: [PATCH] introduce a proxy health check --- README.md | 4 ++++ info.css | 4 ++++ info.js | 29 +++++++++++++++++++++++ proxy.js | 56 +++++++++++++++++++++++++++++++++------------ scrub.js | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++- window.html | 8 +++++-- 6 files changed, 150 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 094517e..aa5ec96 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,10 @@ submission to AMO. ![Visiting i2p-projekt.i2p](i2psetproxy.js.png) +![Visiting clearweb](clearweb.png) + +![Visiting routerconsole](routerconsole.png) + ![Video of the plugin in action](i2psetproxy.js.gif) Super Extra Important Background Info: diff --git a/info.css b/info.css index 91381cc..38f42c3 100644 --- a/info.css +++ b/info.css @@ -16,3 +16,7 @@ span.identity { display: inline-block; margin-left: 1em; } + +figcaption { + display: inline; +} \ No newline at end of file diff --git a/info.js b/info.js index b0acd93..9f0014d 100644 --- a/info.js +++ b/info.js @@ -55,3 +55,32 @@ document.addEventListener("click", e => { e.preventDefault(); }); + +function proxyReadiness() { + console.log(this.responseText); +} + +//document.addEventListener("onpageshow", e => { +console.log("(Check) Checking Proxy Readiness"); +const Http = new XMLHttpRequest(); +Http.addEventListener("load", proxyReadiness); +const url = "http://proxy.i2p"; ///themes/console/images/favicon.ico"; +Http.open("GET", url); +Http.send(); +//}); + +function transferComplete(evt) { + console.log("The transfer is complete.", this.status, this.statusText, this.responseText); +} + +function transferFailed(evt) { + console.log("An error occurred while transferring the file.", this.status, this.statusText, this.responseText); +} + +function transferCanceled(evt) { + console.log("The transfer has been canceled by the user.", this.status, this.statusText, this.responseText); +} + +Http.addEventListener("load", transferComplete); +Http.addEventListener("error", transferFailed); +Http.addEventListener("abort", transferCanceled); diff --git a/proxy.js b/proxy.js index 95c8302..f31f003 100644 --- a/proxy.js +++ b/proxy.js @@ -39,19 +39,39 @@ var handleContextProxyRequest = async function(requestDetails) { ); return proxy; } else if (context.name == "routerconsole") { - if (i2pHost(requestDetails.url)) { - proxy = { - type: getScheme(), - host: getHost(), - port: getPort() - }; + if (routerHost(requestDetails.url)) { + return proxy; } else if (!routerHost(requestDetails.url)) { proxy = { type: "http", host: "localhost", - port: "1" + port: "65535" }; } + proxy = { + type: getScheme(), + host: getHost(), + port: getPort() + }; + console.log( + "(proxy)", + context.name, + "Using", + proxy.type, + "proxy ", + proxy.host + ":" + proxy.port + ); + return proxy; + } else if (context.name == "Personal") { + if (localHost(requestDetails.url)) { + if (!routerHost(requestDetails.url)) { + proxy = { + type: "http", + host: "localhost", + port: "65535" + }; + } + } console.log( "(proxy)", context.name, @@ -63,18 +83,18 @@ var handleContextProxyRequest = async function(requestDetails) { return proxy; } } - if (i2pHost(requestDetails.url)) { + if (!routerHost(requestDetails.url)) { + proxy = { + type: "http", + host: "localhost", + port: "65535" + }; + } else if (i2pHost(requestDetails.url)) { proxy = { type: getScheme(), host: getHost(), port: getPort() }; - } else if (!routerHost(requestDetails.url)) { - proxy = { - type: "http", - host: "localhost", - port: "1" - }; } return proxy; }; @@ -111,6 +131,7 @@ var handleContextProxyRequest = async function(requestDetails) { if (requestDetails.tabId > 0) { if (proxyHost(requestDetails.url)) { + console.log("(Proxy)I2P Proxy test URL detected, ", requestDetails.url); return { type: getScheme(), host: getHost(), @@ -132,6 +153,13 @@ var handleContextProxyRequest = async function(requestDetails) { console.log("(proxy)Returning I2P Proxy", proxy); return proxy; } + proxy = { + type: getScheme(), + host: getHost(), + port: getPort() + }; + console.log("(proxy)Returning I2P Proxy", proxy); + return proxy; } } catch (error) { console.log("(proxy)Not using I2P Proxy.", error); diff --git a/scrub.js b/scrub.js index 71569c9..b864a5d 100644 --- a/scrub.js +++ b/scrub.js @@ -80,7 +80,7 @@ var contextScrub = async function(requestDetails) { tab = tabGet(requestDetails.tabId); context = tab.then(contextGet); req = await context.then(headerScrub); - console.log("(scrub)Scrubbing I2P Request", req); + console.log("(scrub)Scrubbing non-I2P Request", req); return req; } } @@ -168,6 +168,44 @@ var contextSetup = async function(requestDetails) { console.log("(isolate)Context Error", error); } }; + var anyTabFind = async function(tabId) { + try { + var context = await browser.contextualIdentities.query({ + name: "Personal" + }); + 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}`); + } + var created = browser.tabs.create({ + active: true, + cookieStoreId: context[0].cookieStoreId, + url: requestDetails.url, + windowId: window.id + }); + created.then(onCreated, onError); + } + var 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); @@ -178,6 +216,9 @@ var contextSetup = async function(requestDetails) { } }; if (requestDetails.tabId > 0) { + if (proxyHost(requestDetails.url)){ + return requestDetails; + } if (i2pHost(requestDetails.url)) { var tab = tabGet(requestDetails.tabId); var mtab = tab.then(tabFind); @@ -188,7 +229,13 @@ var contextSetup = async function(requestDetails) { var mtab = tab.then(routerTabFind); return requestDetails; } + var tab = tabGet(requestDetails.tabId); + var mtab = tab.then(anyTabFind); + return requestDetails; } + //var tab = tabGet(requestDetails.tabId); + //var mtab = tab.then(anyTabFind); + return requestDetails; } catch (error) { console.log("(isolate)Not an I2P request, blackholing", error); } @@ -222,6 +269,23 @@ function proxyHost(url) { return false; } +function localHost(url) { + let hostname = ""; + if (url.indexOf("://") > -1) { + hostname = url.split("/")[2]; + } else { + hostname = url.split("/")[0]; + } + hostname = hostname.split(":")[0]; + if (hostname === "127.0.0.1") { + return true; + } else if (hostname === "localhost") { + return true; + } + + return false; +} + function routerHost(url) { let hostname = ""; if (url.indexOf("://") > -1) { diff --git a/window.html b/window.html index 0a1595e..db08246 100644 --- a/window.html +++ b/window.html @@ -35,7 +35,11 @@
- Check I2P Router Health
+ +
+ Proxy is not ready yet +
I2P Proxy is Ready
+
@@ -47,7 +51,7 @@ - +