diff --git a/manifest.json b/manifest.json index d60a04a..c535d23 100644 --- a/manifest.json +++ b/manifest.json @@ -48,7 +48,7 @@ "background.js", "proxy.js", "info.js", - "i2pcontrol.js", + "i2pcontrol/i2pcontrol.js", "scrub.js", "bookmarks.js" ] diff --git a/options/options.js b/options/options.js index b645ae9..55ac6a8 100644 --- a/options/options.js +++ b/options/options.js @@ -24,47 +24,172 @@ function SetControlHostText() { controlhostid.textContent = chrome.i18n.getMessage("controlHostText"); } +var handleContextProxyRequest = async function(requestDetails) { + console.log("(proxy)Searching for proxy by context"); + try { + var handleProxyRequest = function(context) { + proxy = { + failoverTimeout: 0, + proxyDns: false + }; + if (context != undefined) { + if (context.name == "i2pbrowser") { + 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 == "routerconsole") { + if (routerHost(requestDetails.url)) { + return proxy; + } else if (!routerHost(requestDetails.url)) { + proxy = { + type: "http", + host: "localhost", + 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 == "fenced-default") { + if (localHost(requestDetails.url)) { + if (!routerHost(requestDetails.url)) { + proxy = { + type: "http", + host: "localhost", + port: "65535" + }; + } + } + console.log( + "(proxy)", + context.name, + "Using", + proxy.type, + "proxy ", + proxy.host + ":" + proxy.port + ); + return proxy; + } + } + if (!routerHost(requestDetails.url)) { + proxy = { + type: "http", + host: "localhost", + port: "65535" + }; + } else if (i2pHost(requestDetails.url)) { + proxy = { + type: getScheme(), + host: getHost(), + port: getPort() + }; + } + return proxy; + }; + var contextGet = async function(tabInfo) { + try { + console.log("(proxy)Tab info from Function", tabInfo); + context = await browser.contextualIdentities.get(tabInfo.cookieStoreId); + return context; + } catch (error) { + console.log("(proxy)Context Error", error); + } + }; + var tabFind = async function(tabId) { + try { + context = await browser.contextualIdentities.query({ + name: "i2pbrowser" + }); + tabId.cookieStoreId = context[0].cookieStoreId; + console.log("(proxy) forcing context", tabId.cookieStoreId); + return tabId; + } catch (error) { + console.log("(proxy)Context Error", error); + } + }; + var tabGet = async function(tabId) { + try { + console.log("(proxy)Tab ID from Request", tabId); + let tabInfo = await browser.tabs.get(tabId); + return tabInfo; + } catch (error) { + console.log("(proxy)Tab error", error); + } + }; + + if (requestDetails.tabId > 0) { + if (proxyHost(requestDetails.url)) { + console.log("(Proxy)I2P Proxy test URL detected, ", requestDetails.url); + return { + type: getScheme(), + host: getHost(), + port: getPort() + }; + } else 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 proxy = await context.then(handleProxyRequest); + console.log("(proxy)Returning I2P Proxy", proxy); + return proxy; + } else { + var tab = tabGet(requestDetails.tabId); + var context = tab.then(contextGet); + var proxy = await context.then(handleProxyRequest); + 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); + } +}; + function setupProxy() { var controlHost = getControlHost(); var controlPort = getControlPort(); var Host = getHost(); var Port = getPort(); var Scheme = getScheme(); - if (!getChrome()) { - function handleProxyRequest(requestInfo) { - console.log("proxying request via listener"); - console.log(" ", Scheme, Host, ":", Port); - return { - type: Scheme, - host: Host, - port: Port, - proxyDns: true - }; - } - console.log("Setting up Firefox WebExtension proxy"); - browser.proxy.onRequest.addListener(handleProxyRequest, { - urls: [""] - }); - console.log("i2p settings created for WebExtension Proxy"); - } else { - var config = { - mode: "fixed_servers", - rules: { - singleProxy: { - scheme: Scheme, - host: Host, - port: parseInt(Port) - } - } - }; - chrome.proxy.settings.set( - { - value: config, - scope: "regular" - }, - function() {} - ); - } + + /**/ + console.log("Setting up Firefox WebExtension proxy"); + browser.proxy.onRequest.addListener(handleContextProxyRequest, { + urls: [""] + }); + console.log("i2p settings created for WebExtension Proxy"); + /**/ } function SetControlPortText() { @@ -126,23 +251,77 @@ function getControlPort() { } function checkStoredSettings(storedSettings) { - let defaultSettings = {}; - if (!storedSettings.proxy_scheme) { - defaultSettings["proxy_scheme"] = "http"; + function gotProxyInfo(info) { + let defaultSettings = {}; + let host = info.value.http.split(":")[0]; + let port = info.value.http.split(":")[1]; + console.log("proxy", "'" + host + "'", ":", port); + if (!storedSettings.proxy_scheme) { + defaultSettings["proxy_scheme"] = "http"; + } + if (!storedSettings.proxy_host) { + if (host == "") { + defaultSettings["proxy_host"] = "127.0.0.1"; + } else { + defaultSettings["proxy_host"] = host; + } + } else { + if (host != "") { + defaultSettings["proxy_host"] = host; + } else { + defaultSettings["proxy_host"] = storedSettings.proxy_host; + } + } + if (!storedSettings.proxy_port) { + if (port == undefined) { + defaultSettings["proxy_port"] = 4444; + } else { + defaultSettings["proxy_port"] = port; + } + } else { + if (port != undefined) { + defaultSettings["proxy_port"] = port; + } else { + defaultSettings["proxy_port"] = storedSettings.proxy_port; + } + } + if (!storedSettings.control_host) { + if (host == "") { + defaultSettings["control_host"] = "127.0.0.1"; + } else { + defaultSettings["control_host"] = host; + } + } else { + if (host != "") { + defaultSettings["control_host"] = host; + } else { + defaultSettings["control_host"] = storedSettings.control_host; + } + } + if (!storedSettings.control_port) { + if (port == undefined) { + defaultSettings["control_port"] = 4444; + } else { + defaultSettings["control_port"] = port; + } + } else { + if (port != undefined) { + defaultSettings["control_port"] = port; + } else { + defaultSettings["control_port"] = storedSettings.control_port; + } + } + console.log("(browserinfo) NATIVE PROXYSETTINGS", info.value); + console.log( + defaultSettings["proxy_host"], + defaultSettings["proxy_port"], + defaultSettings["control_host"], + defaultSettings["control_port"] + ); + chrome.storage.local.set(defaultSettings); } - if (!storedSettings.proxy_host) { - defaultSettings["proxy_host"] = "127.0.0.1"; - } - if (!storedSettings.proxy_port) { - defaultSettings["proxy_port"] = 4444; - } - if (!storedSettings.control_host) { - defaultSettings["control_host"] = "127.0.0.1"; - } - if (!storedSettings.control_port) { - defaultSettings["control_port"] = 4444; - } - chrome.storage.local.set(defaultSettings); + var gettingInfo = browser.proxy.settings.get({}); + gettingInfo.then(gotProxyInfo); } function onError(e) { diff --git a/proxy.js b/proxy.js index 2ce453c..13e20a0 100644 --- a/proxy.js +++ b/proxy.js @@ -242,25 +242,86 @@ function setupProxy() { } function checkStoredSettings(storedSettings) { - let defaultSettings = {}; - if (!storedSettings.proxy_scheme) { - defaultSettings["proxy_scheme"] = "http"; + function gotProxyInfo(info) { + let defaultSettings = {}; + let host = info.value.http.split(":")[0]; + let port = info.value.http.split(":")[1]; + console.log("proxy", "'" + host + "'", ":", port); + if (!storedSettings.proxy_scheme) { + defaultSettings["proxy_scheme"] = "http"; + } + if (!storedSettings.proxy_host) { + if (host == "") { + defaultSettings["proxy_host"] = "127.0.0.1"; + } else { + defaultSettings["proxy_host"] = host; + } + } else { + if (host != "") { + defaultSettings["proxy_host"] = host; + } else { + defaultSettings["proxy_host"] = storedSettings.proxy_host; + } + } + if (!storedSettings.proxy_port) { + if (port == undefined) { + defaultSettings["proxy_port"] = 4444; + } else { + defaultSettings["proxy_port"] = port; + } + } else { + if (port != undefined) { + defaultSettings["proxy_port"] = port; + } else { + defaultSettings["proxy_port"] = storedSettings.proxy_port; + } + } + if (!storedSettings.control_host) { + if (host == "") { + defaultSettings["control_host"] = "127.0.0.1"; + } else { + defaultSettings["control_host"] = host; + } + } else { + if (host != "") { + defaultSettings["control_host"] = host; + } else { + defaultSettings["control_host"] = storedSettings.control_host; + } + } + if (!storedSettings.control_port) { + if (port == undefined) { + defaultSettings["control_port"] = 4444; + } else { + defaultSettings["control_port"] = port; + } + } else { + if (port != undefined) { + defaultSettings["control_port"] = port; + } else { + defaultSettings["control_port"] = storedSettings.control_port; + } + } + console.log("(browserinfo) NATIVE PROXYSETTINGS", info.value); + console.log( + defaultSettings["proxy_host"], + defaultSettings["proxy_port"], + defaultSettings["control_host"], + defaultSettings["control_port"] + ); + chrome.storage.local.set(defaultSettings); } - if (!storedSettings.proxy_host) { - defaultSettings["proxy_host"] = "127.0.0.1"; - } - if (!storedSettings.proxy_port) { - defaultSettings["proxy_port"] = 4444; - } - if (!storedSettings.control_host) { - defaultSettings["control_host"] = "127.0.0.1"; - } - if (!storedSettings.control_port) { - defaultSettings["control_port"] = 4444; - } - chrome.storage.local.set(defaultSettings); + var gettingInfo = browser.proxy.settings.get({}); + gettingInfo.then(gotProxyInfo); } +//function gotProxyInfo(info) { +//console.log("(browserinfo)", info.value); +//} + +//var gettingInfo = browser.proxy.settings.get({}); +//gettingInfo.then(gotProxyInfo); + function update(restoredSettings) { proxy_scheme = restoredSettings.proxy_scheme; console.log("restoring proxy scheme:", proxy_scheme);