Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@
<groupId>org.javadelight</groupId>
<artifactId>delight-nashorn-sandbox</artifactId>
</dependency>
<dependency>
<groupId>org.javadelight</groupId>
<artifactId>delight-rhino-sandbox</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
Expand Down Expand Up @@ -99,6 +103,13 @@
<artifactId>delight-nashorn-sandbox</artifactId>
<version>0.1.14</version>
</dependency>
<dependency>
<groupId>org.javadelight</groupId>
<artifactId>delight-rhino-sandbox</artifactId>
<version>0.0.9</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
Expand Down
48 changes: 40 additions & 8 deletions src/main/java/com/github/markusbernhardt/proxy/ProxySearch.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public class ProxySearch implements ProxySearchStrategy {
private int pacCacheSize;
private long pacCacheTTL;
private CacheScope pacCacheScope;
private ScriptingEngineType engineType = ScriptingEngineType.NASHORHN;

/*****************************************************************************
* Types of proxy detection supported by the builder.
Expand Down Expand Up @@ -83,6 +84,18 @@ public enum Strategy {
/// Use Java Networking system properties
JAVA
}

/*****************************************************************************
* Types of supported scripting engines.
****************************************************************************/

public enum ScriptingEngineType {
// embedded in java
NASHORHN,

// Mozilla Rhino, open-source implementation of JavaScript written entirely in Java.
RHINO
}

/*************************************************************************
* Constructor
Expand Down Expand Up @@ -137,16 +150,16 @@ public void addStrategy(Strategy strategy) {
this.strategies.add(new DesktopProxySearchStrategy());
break;
case WPAD:
this.strategies.add(new WpadProxySearchStrategy());
this.strategies.add(new WpadProxySearchStrategy(engineType));
break;
case BROWSER:
this.strategies.add(getDefaultBrowserStrategy());
break;
case FIREFOX:
this.strategies.add(new FirefoxProxySearchStrategy());
this.strategies.add(new FirefoxProxySearchStrategy(engineType));
break;
case IE:
this.strategies.add(new IEProxySearchStrategy());
this.strategies.add(new IEProxySearchStrategy(engineType));
break;
case ENV_VAR:
this.strategies.add(new EnvProxySearchStrategy());
Expand All @@ -155,11 +168,11 @@ public void addStrategy(Strategy strategy) {
this.strategies.add(new WinProxySearchStrategy());
break;
case KDE:
this.strategies.add(new KdeProxySearchStrategy());
this.strategies.add(new KdeProxySearchStrategy(engineType));
break;
case GNOME:
this.strategies.add(new GnomeDConfProxySearchStrategy());
this.strategies.add(new GnomeProxySearchStrategy());
this.strategies.add(new GnomeDConfProxySearchStrategy(engineType));
this.strategies.add(new GnomeProxySearchStrategy(engineType));
break;
case JAVA:
this.strategies.add(new JavaProxySearchStrategy());
Expand Down Expand Up @@ -200,9 +213,9 @@ public void setPacCacheSettings(int size, long ttl, CacheScope cacheScope) {
private ProxySearchStrategy getDefaultBrowserStrategy() {
switch (PlatformUtil.getDefaultBrowser()) {
case IE:
return new IEProxySearchStrategy();
return new IEProxySearchStrategy(engineType);
case FIREFOX:
return new FirefoxProxySearchStrategy();
return new FirefoxProxySearchStrategy(engineType);
}
return null;
}
Expand Down Expand Up @@ -303,4 +316,23 @@ public void log(Class<?> clazz, LogLevel loglevel, String msg, Object... params)
ps.getProxySelector();
}

/*************************************************************************
*
* Returns scripting engine used to evaluate PAC scripts
*
************************************************************************/
public ScriptingEngineType getScriptingEngine() {
return engineType;
}

/*************************************************************************
*
* Configures scripting engine used to evaluate PAC scripts
*
* @param scriptingEngine
************************************************************************/
public void setScriptingEngine(ScriptingEngineType scriptingEngine) {
this.engineType = scriptingEngine;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.Properties;

import com.github.markusbernhardt.proxy.ProxySearchStrategy;
import com.github.markusbernhardt.proxy.ProxySearch.ScriptingEngineType;
import com.github.markusbernhardt.proxy.search.desktop.DesktopProxySearchStrategy;
import com.github.markusbernhardt.proxy.search.wpad.WpadProxySearchStrategy;
import com.github.markusbernhardt.proxy.selector.direct.NoProxySelector;
Expand Down Expand Up @@ -71,6 +72,7 @@ public class FirefoxProxySearchStrategy implements ProxySearchStrategy {

private FirefoxProfileSource profileScanner;
private FirefoxSettingParser settingsParser;
private ScriptingEngineType engineType = ScriptingEngineType.NASHORHN;

/*************************************************************************
* ProxySelector
Expand All @@ -89,6 +91,18 @@ public FirefoxProxySearchStrategy() {
}
this.settingsParser = new FirefoxSettingParser();
}

/*************************************************************************
* ProxySelector
*
* @see java.net.ProxySelector#ProxySelector()
************************************************************************/

public FirefoxProxySearchStrategy(ScriptingEngineType engineType) {
this();
this.engineType = engineType;
}


/*************************************************************************
* Loads the proxy settings and initializes a proxy selector for the firefox
Expand Down Expand Up @@ -123,7 +137,7 @@ public ProxySelector getProxySelector() throws ProxyException {
case 2: // PAC Script
String pacScriptUrl = settings.getProperty("network.proxy.autoconfig_url", "");
Logger.log(getClass(), LogLevel.TRACE, "Firefox uses script (PAC) {0}", pacScriptUrl);
result = ProxyUtil.buildPacSelectorForUrl(pacScriptUrl);
result = ProxyUtil.buildPacSelectorForUrl(engineType, pacScriptUrl);
break;
case 3: // Backward compatibility to netscape.
Logger.log(getClass(), LogLevel.TRACE, "Netscape compability mode -> uses no proxy");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.net.ProxySelector;
import java.util.Properties;

import com.github.markusbernhardt.proxy.ProxySearch.ScriptingEngineType;
import com.github.markusbernhardt.proxy.jna.win.WinHttp;
import com.github.markusbernhardt.proxy.jna.win.WinHttpCurrentUserIEProxyConfig;
import com.github.markusbernhardt.proxy.jna.win.WinHttpHelpers;
Expand All @@ -24,6 +25,17 @@

public class IEProxySearchStrategy extends CommonWindowsSearchStrategy {

public IEProxySearchStrategy() {
}

public IEProxySearchStrategy(ScriptingEngineType engineType) {
this();
this.engineType = engineType;
}


private ScriptingEngineType engineType = ScriptingEngineType.NASHORHN;

/*************************************************************************
* getProxySelector
*
Expand Down Expand Up @@ -111,7 +123,7 @@ private PacProxySelector createPacSelector(IEProxyConfig ieProxyConfig) {
if (pacUrl.startsWith("file://") && !pacUrl.startsWith("file:///")) {
pacUrl = "file:///" + pacUrl.substring(7);
}
return ProxyUtil.buildPacSelectorForUrl(pacUrl);
return ProxyUtil.buildPacSelectorForUrl(engineType, pacUrl);
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.Properties;

import com.github.markusbernhardt.proxy.ProxySearchStrategy;
import com.github.markusbernhardt.proxy.ProxySearch.ScriptingEngineType;
import com.github.markusbernhardt.proxy.selector.direct.NoProxySelector;
import com.github.markusbernhardt.proxy.selector.fixed.FixedProxySelector;
import com.github.markusbernhardt.proxy.selector.misc.ProtocolDispatchSelector;
Expand Down Expand Up @@ -67,6 +68,8 @@

public class GnomeDConfProxySearchStrategy implements ProxySearchStrategy {

private ScriptingEngineType engineType = ScriptingEngineType.NASHORHN;

/*************************************************************************
* ProxySelector
*
Expand All @@ -76,6 +79,11 @@ public class GnomeDConfProxySearchStrategy implements ProxySearchStrategy {
public GnomeDConfProxySearchStrategy() {
super();
}

public GnomeDConfProxySearchStrategy(ScriptingEngineType engineType) {
this();
this.engineType = engineType;
}

/*************************************************************************
* Loads the proxy settings and initializes a proxy selector for the Gnome
Expand Down Expand Up @@ -115,7 +123,7 @@ public ProxySelector getProxySelector() throws ProxyException {
if ("auto".equals(type)) {
String pacScriptUrl = settings.getProperty("org.gnome.system.proxy autoconfig-url", "");
Logger.log(getClass(), LogLevel.TRACE, "Gnome uses autodetect script {0}", pacScriptUrl);
result = ProxyUtil.buildPacSelectorForUrl(pacScriptUrl);
result = ProxyUtil.buildPacSelectorForUrl(engineType, pacScriptUrl);
}

// Wrap into white-list filter?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.xml.sax.SAXException;

import com.github.markusbernhardt.proxy.ProxySearchStrategy;
import com.github.markusbernhardt.proxy.ProxySearch.ScriptingEngineType;
import com.github.markusbernhardt.proxy.selector.direct.NoProxySelector;
import com.github.markusbernhardt.proxy.selector.fixed.FixedProxySelector;
import com.github.markusbernhardt.proxy.selector.misc.ProtocolDispatchSelector;
Expand Down Expand Up @@ -73,6 +74,8 @@

public class GnomeProxySearchStrategy implements ProxySearchStrategy {

private ScriptingEngineType engineType = ScriptingEngineType.NASHORHN;

/*************************************************************************
* ProxySelector
*
Expand All @@ -82,7 +85,12 @@ public class GnomeProxySearchStrategy implements ProxySearchStrategy {
public GnomeProxySearchStrategy() {
super();
}


public GnomeProxySearchStrategy(ScriptingEngineType engineType) {
this();
this.engineType = engineType;
}

/*************************************************************************
* Loads the proxy settings and initializes a proxy selector for the Gnome
* proxy settings.
Expand Down Expand Up @@ -120,7 +128,7 @@ public ProxySelector getProxySelector() throws ProxyException {
if ("auto".equals(type)) {
String pacScriptUrl = settings.getProperty("/system/proxy/autoconfig_url", "");
Logger.log(getClass(), LogLevel.TRACE, "Gnome uses autodetect script {0}", pacScriptUrl);
result = ProxyUtil.buildPacSelectorForUrl(pacScriptUrl);
result = ProxyUtil.buildPacSelectorForUrl(engineType, pacScriptUrl);
}

// Wrap into white-list filter?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.Properties;

import com.github.markusbernhardt.proxy.ProxySearchStrategy;
import com.github.markusbernhardt.proxy.ProxySearch.ScriptingEngineType;
import com.github.markusbernhardt.proxy.search.env.EnvProxySearchStrategy;
import com.github.markusbernhardt.proxy.search.wpad.WpadProxySearchStrategy;
import com.github.markusbernhardt.proxy.selector.direct.NoProxySelector;
Expand Down Expand Up @@ -49,6 +50,8 @@

public class KdeProxySearchStrategy implements ProxySearchStrategy {

private ScriptingEngineType engineType = ScriptingEngineType.NASHORHN;

private KdeSettingsParser settingsParser;

/*************************************************************************
Expand All @@ -60,6 +63,11 @@ public class KdeProxySearchStrategy implements ProxySearchStrategy {
public KdeProxySearchStrategy() {
this(new KdeSettingsParser());
}

public KdeProxySearchStrategy(ScriptingEngineType engineType) {
this();
this.engineType = engineType;
}

/*************************************************************************
* ProxySelector
Expand Down Expand Up @@ -107,7 +115,7 @@ public ProxySelector getProxySelector() throws ProxyException {
case 2: // PAC Script
String pacScriptUrl = settings.getProperty("Proxy Config Script", "");
Logger.log(getClass(), LogLevel.TRACE, "Kde uses autodetect script {0}", pacScriptUrl);
result = ProxyUtil.buildPacSelectorForUrl(pacScriptUrl);
result = ProxyUtil.buildPacSelectorForUrl(engineType, pacScriptUrl);
break;
case 3: // WPAD
Logger.log(getClass(), LogLevel.TRACE, "Kde uses WPAD to detect the proxy");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import java.util.List;

import com.github.markusbernhardt.proxy.ProxySearchStrategy;
import com.github.markusbernhardt.proxy.ProxySearch.ScriptingEngineType;
import com.github.markusbernhardt.proxy.search.browser.ie.IELocalByPassFilter;
import com.github.markusbernhardt.proxy.search.wpad.WpadProxySearchStrategy;
import com.github.markusbernhardt.proxy.selector.direct.NoProxySelector;
Expand Down Expand Up @@ -62,6 +63,8 @@ public class OsxProxySearchStrategy implements ProxySearchStrategy {

private static final String SETTINGS_FILE = "/Library/Preferences/SystemConfiguration/preferences.plist";

private ScriptingEngineType engineType = ScriptingEngineType.NASHORHN;

/*************************************************************************
* ProxySelector
*
Expand All @@ -71,6 +74,11 @@ public class OsxProxySearchStrategy implements ProxySearchStrategy {
public OsxProxySearchStrategy() {
super();
}

public OsxProxySearchStrategy(ScriptingEngineType engineType) {
this();
this.engineType = engineType;
}

/*************************************************************************
* Loads the proxy settings and initializes a proxy selector for the OSX
Expand Down Expand Up @@ -323,7 +331,7 @@ private ProxySelector autodetectProxyIfAvailable(Dict proxySettings, ProxySelect
private ProxySelector installPacProxyIfAvailable(Dict proxySettings, ProxySelector result) {
if (isActive(proxySettings.get("ProxyAutoConfigEnable"))) {
String url = (String) proxySettings.get("ProxyAutoConfigURLString");
result = ProxyUtil.buildPacSelectorForUrl(url);
result = ProxyUtil.buildPacSelectorForUrl(engineType, url);
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.util.Random;

import com.github.markusbernhardt.proxy.ProxySearchStrategy;
import com.github.markusbernhardt.proxy.ProxySearch.ScriptingEngineType;
import com.github.markusbernhardt.proxy.search.wpad.dhcp.DHCPMessage;
import com.github.markusbernhardt.proxy.search.wpad.dhcp.DHCPOptions;
import com.github.markusbernhardt.proxy.search.wpad.dhcp.DHCPSocket;
Expand Down Expand Up @@ -45,13 +46,20 @@

public class WpadProxySearchStrategy implements ProxySearchStrategy {

private ScriptingEngineType engineType = ScriptingEngineType.NASHORHN;

/*************************************************************************
* Constructor
************************************************************************/

public WpadProxySearchStrategy() {
super();
}

public WpadProxySearchStrategy(ScriptingEngineType engineType) {
this();
this.engineType = engineType;
}

/*************************************************************************
* Loads the proxy settings from a PAC file. The location of the PAC file is
Expand All @@ -75,7 +83,7 @@ public ProxySelector getProxySelector() throws ProxyException {
return null;
}
Logger.log(getClass(), LogLevel.TRACE, "PAC script url found: {0}", pacScriptUrl);
return ProxyUtil.buildPacSelectorForUrl(pacScriptUrl);
return ProxyUtil.buildPacSelectorForUrl(engineType, pacScriptUrl);
} catch (IOException e) {
Logger.log(getClass(), LogLevel.ERROR, "Error during WPAD search.", e);
throw new ProxyException(e);
Expand Down
Loading