All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.markusbernhardt.proxy.search.desktop.kde.KdeProxySearchStrategy Maven / Gradle / Ivy

package com.github.markusbernhardt.proxy.search.desktop.kde;

import java.io.IOException;
import java.net.ProxySelector;
import java.util.Properties;
import com.github.markusbernhardt.proxy.ProxySearchStrategy;
import com.github.markusbernhardt.proxy.search.env.EnvProxySearchStrategy;
import com.github.markusbernhardt.proxy.search.wpad.WpadProxySearchStrategy;
import com.github.markusbernhardt.proxy.selector.direct.NoProxySelector;
import com.github.markusbernhardt.proxy.selector.fixed.FixedProxySelector;
import com.github.markusbernhardt.proxy.selector.misc.ProtocolDispatchSelector;
import com.github.markusbernhardt.proxy.selector.whitelist.ProxyBypassListSelector;
import com.github.markusbernhardt.proxy.selector.whitelist.UseProxyWhiteListSelector;
import com.github.markusbernhardt.proxy.util.Logger;
import com.github.markusbernhardt.proxy.util.Logger.LogLevel;
import com.github.markusbernhardt.proxy.util.ProxyException;
import com.github.markusbernhardt.proxy.util.ProxyUtil;

/*****************************************************************************
 * Loads the KDE4 proxy settings from the KDE kioslaverc file. This will
 * load properties from the file
 * 

* .kde/share/config/kioslaverc *

* starting from the current users home directory. *

* The following settings are extracted from the section "[Proxy Settings]": *

*
    *
  • AuthMode -> 0 = no auth., 1 = use login.
  • *
  • ProxyType -> 0 = direct 1 = use fixed settings, 2 = use PAC, 3 * = automatic (WPAD) , 4 = Use environment variables?
  • *
  • Proxy Config Script -> URL to PAC file
  • *
  • ftpProxy -> Fixed ftp proxy address e.g. * http://www.ftp-proxy.com:8080
  • *
  • httpProxy -> Fixed http proxy e.g * http://www.http-proxy.com:8080
  • *
  • httpsProxy -> Fixed https proxy e.g * http://www.https-proxy.com:8080
  • *
  • NoProxyFor -> Proxy white list
  • *
  • ReversedException -> false = use NoProxyFor, true = revert * meaning of the NoProxyFor list
  • *
* * @author Markus Bernhardt, Copyright 2016 * @author Bernd Rosstauscher, Copyright 2009 ****************************************************************************/ public class KdeProxySearchStrategy implements ProxySearchStrategy { private KdeSettingsParser settingsParser; /************************************************************************* * ProxySelector using the given parser. * * @see java.net.ProxySelector#ProxySelector() ************************************************************************/ public KdeProxySearchStrategy() { this(new KdeSettingsParser()); } /************************************************************************* * ProxySelector * * @param settingsParser * the KdeSettingsParser instance to use. * @see java.net.ProxySelector#ProxySelector() ************************************************************************/ public KdeProxySearchStrategy(KdeSettingsParser settingsParser) { super(); this.settingsParser = settingsParser; } /************************************************************************* * Loads the proxy settings and initializes a proxy selector for the firefox * proxy settings. * * @return a configured ProxySelector, null if none is found. * @throws ProxyException * on file reading error. ************************************************************************/ @Override public ProxySelector getProxySelector() throws ProxyException { Logger.log(getClass(), LogLevel.TRACE, "Detecting Kde proxy settings"); Properties settings = readSettings(); if (settings == null) { return null; } ProxySelector result = null; int type = Integer.parseInt(settings.getProperty("ProxyType", "-1")); switch (type) { case 0: // Use no proxy Logger.log(getClass(), LogLevel.TRACE, "Kde uses no proxy"); result = NoProxySelector.getInstance(); break; case 1: // Fixed settings Logger.log(getClass(), LogLevel.TRACE, "Kde uses manual proxy settings"); result = setupFixedProxySelector(settings); break; case 2: // PAC Script String pacScriptUrl = settings.getProperty("Proxy Config Script", ""); Logger.log(getClass(), LogLevel.TRACE, "Kde uses autodetect script {}", pacScriptUrl); result = ProxyUtil.buildPacSelectorForUrl(pacScriptUrl); break; case 3: // WPAD Logger.log(getClass(), LogLevel.TRACE, "Kde uses WPAD to detect the proxy"); result = new WpadProxySearchStrategy().getProxySelector(); break; case 4: // Use environment variables Logger.log(getClass(), LogLevel.TRACE, "Kde reads proxy from environment"); result = setupEnvVarSelector(settings); break; default: break; } return result; } /************************************************************************* * Gets the printable name of the search strategy. * * @return the printable name of the search strategy ************************************************************************/ @Override public String getName() { return "kde"; } /************************************************************************* * Reads the settings and stores them in a properties map. * * @return the parsed settings. * @throws ProxyException ************************************************************************/ private Properties readSettings() throws ProxyException { try { return this.settingsParser.parseSettings(); } catch (IOException e) { Logger.log(getClass(), LogLevel.ERROR, "Can't parse settings.", e); throw new ProxyException(e); } } /************************************************************************* * Builds an environment variable selector. * * @param settings * the settings to read from. * @return the ProxySelector using environment variables. ************************************************************************/ private ProxySelector setupEnvVarSelector(Properties settings) { ProxySelector result; result = new EnvProxySearchStrategy(settings.getProperty("httpProxy"), settings.getProperty("httpsProxy"), settings.getProperty("ftpProxy"), settings.getProperty("NoProxyFor")).getProxySelector(); return result; } /************************************************************************* * Parse the fixed proxy settings and build an ProxySelector for this a * chained configuration. * * @param settings * the proxy settings to evaluate. ************************************************************************/ private ProxySelector setupFixedProxySelector(Properties settings) { String proxyVar = settings.getProperty("httpProxy", null); FixedProxySelector httpPS = ProxyUtil.parseProxySettings(proxyVar); if (httpPS == null) { Logger.log(getClass(), LogLevel.TRACE, "Kde http proxy is {}", proxyVar); return null; } ProtocolDispatchSelector ps = new ProtocolDispatchSelector(); ps.setSelector("http", httpPS); proxyVar = settings.getProperty("httpsProxy", null); FixedProxySelector httpsPS = ProxyUtil.parseProxySettings(proxyVar); if (httpsPS != null) { Logger.log(getClass(), LogLevel.TRACE, "Kde https proxy is {}", proxyVar); ps.setSelector("https", httpsPS); } proxyVar = settings.getProperty("ftpProxy", null); FixedProxySelector ftpPS = ProxyUtil.parseProxySettings(proxyVar); if (ftpPS != null) { Logger.log(getClass(), LogLevel.TRACE, "Kde ftp proxy is {}", proxyVar); ps.setSelector("ftp", ftpPS); } // Wrap in white list filter. String noProxyList = settings.getProperty("NoProxyFor", null); if (noProxyList != null && noProxyList.trim().length() > 0) { boolean reverse = "true".equals(settings.getProperty("ReversedException", "false")); if (reverse) { Logger.log(getClass(), LogLevel.TRACE, "Kde proxy blacklist is {}", noProxyList); return new UseProxyWhiteListSelector(noProxyList, ps); } else { Logger.log(getClass(), LogLevel.TRACE, "Kde proxy whitelist is {}", noProxyList); return new ProxyBypassListSelector(noProxyList, ps); } } return ps; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy