diff --git a/apps/proxyscript/i2pProxy.pac b/apps/proxyscript/i2pProxy.pac new file mode 100644 index 0000000000..9ea0d34437 --- /dev/null +++ b/apps/proxyscript/i2pProxy.pac @@ -0,0 +1,147 @@ +/******************************************************* +** Proxy Auto Configure Script with I2P Host Detection. +** +** Author: Cervantes +** License: Public Domain +** Date: 11 May 2004 +** +** Revised: 17 May 2004 +** Added: +** Ability for the user to control the proxy +** status on a per browser-session basis. +********************************************************/ + +/* C O N F I G U R A T I O N +*/ + +/* Replace normal with "PROXY yourproxy:port" if you run +** behind a Proxy Server by default. +*/ +var normal = "DIRECT"; + +/* Specify the I2P proxy connection details here. +*/ + +var i2pProxy = "PROXY 127.0.0.1:4444"; + +/* Set the default status of proxy detection here: +** +** +** [1] "auto" => Proxy will be used automatically if +** '-> an ".i2p" url is detected. +** '-> You will only be anonymous for ".i2p" domains. +** +** [2] "on" => Proxy is enabled all the time. (safest) +** '-> NB. Normal web available only via +** '-> i2p outproxies. +** '-> You can be fairly confident of anonymity. +** +** [3] "off" => Completely Bypass the proxy and therefore i2p. +** '-> no i2p sites will be accessible... +** '-> ...your browsing habits can potentially +** '-> be traced back to you! +** +*/ + +var proxyStatus = "auto"; + +/* By setting statusKeyword to "all" you can set these options at runtime +** for the duration of the browser session by entering special commands +** into your browser address bar. +** +** Due to limitations in the way proxy scripting works, a malicious site +** could change your status mode by linking to command keywords... +** eg. All proxy status urls are available. +** '-> i2p.on, i2p.off, i2p.auto (respective to proxyStatus settings) +** '-> WARNING: Setting "all" is a big risk to your anonymity! +** +** [2] "limited" => Only i2p.on is available.. +** '-> This setting lasts for the duration of the browser setting. +** '-> You have to close your browser in order to revert to +** '-> your default proxyStatus configuration. +** +** [3] "off" => No command urls available. +** '-> The status mode can only be altered by editing the above +** '-> proxyStatus setting. (safest) +** +*/ + +var statusKeyword = "limited"; + +/* +** By default if proxyStatus is set to "auto" the config script +** will fall back to your normal connection settings if the +** i2p proxy is offline. This is handy for browsing your locally +** hosted eepsites when your router is not running (for instance). +** However this can mean that requests to external eepsites could +** be forwarded to the outweb and potentially compromise some of +** your rights to anonymity. +** Setting "true" here enables strict mode where all requests to ".i2p" +** sites will be rejected if the i2p proxy is offline. (safest) +*/ + +var strict = false; + + +/* E N D C O N F I G U R A T I O N +*/ + + +/* Allows the proxy to fallback on "normal" settings +** '-> if the i2p router is offline. +*/ + +if (strict == false) { + i2pProxy = i2pProxy + "; " + normal; +} + +/* This function gets called every time a url is submitted +*/ + +function FindProxyForURL(url, host) { + /* checks for a special command url that + ** '-> changes the status of the proxy script. + */ + + if (statusKeyword != "off") { + if (host == "i2p.off" && statusKeyword == "all") { + /*Proxy is bypassed - outweb available only + */ + proxyStatus = "off"; + } else if (host == "i2p.auto" && statusKeyword == "all") { + /* Proxy is used only for .i2p hosts otherwise + ** '-> browse as normal. + */ + proxyStatus = "auto"; + } else if (host == "i2p.on" && statusKeyword == "limited") { + /* Only I2P traffic is accepted. + */ + proxyStatus = "on"; + } + } + + if (proxyStatus == "off") { + /* Proxy is completely bypassed. + */ + return normal; + } else if (proxyStatus == "on") { + /* All requests are forward to the proxy. + */ + return i2pProxy; + } + + host = host.toLowerCase(); + /* check tld for "i2p" - if found then redirect + ** '-> request to the i2p proxy + */ + + if (shExpMatch(host, "*.i2p")) { // seems more reliable than: + return i2pProxy; // dnsDomainIs(host, ".i2p") || + } else { // i2pRegex.test(host) + return normal; + } +}