diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java new file mode 100644 index 00000000..1e1f6591 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java @@ -0,0 +1,283 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs.optional.net; + +import java.net.Authenticator; +import java.net.PasswordAuthentication; +import java.util.Properties; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.util.ProxySetup; + +/** + * Sets Java's web proxy properties, so that tasks and code run in + * the same JVM can have through-the-firewall access to remote web sites, + * and remote ftp sites. + * You can nominate an http and ftp proxy, or a socks server, reset the server + * settings, or do nothing at all. + * <p> + * Examples + * <pre><setproxy/></pre> + * do nothing + * <pre><setproxy proxyhost="firewall"/></pre> + * set the proxy to firewall:80 + * <pre><setproxy proxyhost="firewall" proxyport="81"/></pre> + * set the proxy to firewall:81 + * <pre><setproxy proxyhost=""/></pre> + * stop using the http proxy; don't change the socks settings + * <pre><setproxy socksproxyhost="socksy"/></pre> + * use socks via socksy:1080 + * <pre><setproxy socksproxyhost=""/></pre> + * stop using the socks server. + * <p> + * You can set a username and password for http with the <tt>proxyHost</tt> + * and <tt>proxyPassword</tt> attributes. These can also be + * used against SOCKS5 servers. + * </p> + * @see <a href="http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html"> + * java 1.5 network property list</a> + *@since Ant 1.5 + * @ant.task category="network" + */ +public class SetProxy extends Task { + private static final int HTTP_PORT = 80; + private static final int SOCKS_PORT = 1080; + // CheckStyle:VisibilityModifier OFF - bc + /** + * proxy details + */ + protected String proxyHost = null; + + /** + * name of proxy port + */ + protected int proxyPort = HTTP_PORT; + + // CheckStyle:VisibilityModifier ON + + /** + * socks host. + */ + private String socksProxyHost = null; + + /** + * Socks proxy port. Default is 1080. + */ + private int socksProxyPort = SOCKS_PORT; + + + /** + * list of non proxy hosts + */ + private String nonProxyHosts = null; + + /** + * user for http only + */ + private String proxyUser = null; + + /** + * password for http only + */ + private String proxyPassword = null; + + /** + * the HTTP/ftp proxy host. Set this to "" for the http proxy + * option to be disabled + * + * @param hostname the new proxy hostname + */ + public void setProxyHost(String hostname) { + proxyHost = hostname; + } + + + /** + * the HTTP/ftp proxy port number; default is 80 + * + * @param port port number of the proxy + */ + public void setProxyPort(int port) { + proxyPort = port; + } + + /** + * The name of a Socks server. Set to "" to turn socks + * proxying off. + * + * @param host The new SocksProxyHost value + */ + public void setSocksProxyHost(String host) { + this.socksProxyHost = host; + } + + + /** + * Set the ProxyPort for socks connections. The default value is 1080 + * + * @param port The new SocksProxyPort value + */ + public void setSocksProxyPort(int port) { + this.socksProxyPort = port; + } + + + /** + * A list of hosts to bypass the proxy on. These should be separated + * with the vertical bar character '|'. Only in Java 1.4 does ftp use + * this list. + * e.g. fozbot.corp.sun.com|*.eng.sun.com + * @param nonProxyHosts lists of hosts to talk direct to + */ + public void setNonProxyHosts(String nonProxyHosts) { + this.nonProxyHosts = nonProxyHosts; + } + + /** + * set the proxy user. Probably requires a password to accompany this + * setting. Default="" + * @param proxyUser username + * @since Ant1.6 + */ + public void setProxyUser(String proxyUser) { + this.proxyUser = proxyUser; + } + + /** + * Set the password for the proxy. Used only if the proxyUser is set. + * @param proxyPassword password to go with the username + * @since Ant1.6 + */ + public void setProxyPassword(String proxyPassword) { + this.proxyPassword = proxyPassword; + } + + /** + * if the proxy port and host settings are not null, then the settings + * get applied these settings last beyond the life of the object and + * apply to all network connections + * Relevant docs: buglist #4183340 + */ + + public void applyWebProxySettings() { + boolean settingsChanged = false; + boolean enablingProxy = false; + Properties sysprops = System.getProperties(); + if (proxyHost != null) { + settingsChanged = true; + if (proxyHost.length() != 0) { + traceSettingInfo(); + enablingProxy = true; + sysprops.put(ProxySetup.HTTP_PROXY_HOST, proxyHost); + String portString = Integer.toString(proxyPort); + sysprops.put(ProxySetup.HTTP_PROXY_PORT, portString); + sysprops.put(ProxySetup.HTTPS_PROXY_HOST, proxyHost); + sysprops.put(ProxySetup.HTTPS_PROXY_PORT, portString); + sysprops.put(ProxySetup.FTP_PROXY_HOST, proxyHost); + sysprops.put(ProxySetup.FTP_PROXY_PORT, portString); + if (nonProxyHosts != null) { + sysprops.put(ProxySetup.HTTP_NON_PROXY_HOSTS, nonProxyHosts); + sysprops.put(ProxySetup.HTTPS_NON_PROXY_HOSTS, nonProxyHosts); + sysprops.put(ProxySetup.FTP_NON_PROXY_HOSTS, nonProxyHosts); + } + if (proxyUser != null) { + sysprops.put(ProxySetup.HTTP_PROXY_USERNAME, proxyUser); + sysprops.put(ProxySetup.HTTP_PROXY_PASSWORD, proxyPassword); + } + } else { + log("resetting http proxy", Project.MSG_VERBOSE); + sysprops.remove(ProxySetup.HTTP_PROXY_HOST); + sysprops.remove(ProxySetup.HTTP_PROXY_PORT); + sysprops.remove(ProxySetup.HTTP_PROXY_USERNAME); + sysprops.remove(ProxySetup.HTTP_PROXY_PASSWORD); + sysprops.remove(ProxySetup.HTTPS_PROXY_HOST); + sysprops.remove(ProxySetup.HTTPS_PROXY_PORT); + sysprops.remove(ProxySetup.FTP_PROXY_HOST); + sysprops.remove(ProxySetup.FTP_PROXY_PORT); + } + } + + //socks + if (socksProxyHost != null) { + settingsChanged = true; + if (socksProxyHost.length() != 0) { + enablingProxy = true; + sysprops.put(ProxySetup.SOCKS_PROXY_HOST, socksProxyHost); + sysprops.put(ProxySetup.SOCKS_PROXY_PORT, Integer.toString(socksProxyPort)); + if (proxyUser != null) { + //this may be a java1.4 thingy only + sysprops.put(ProxySetup.SOCKS_PROXY_USERNAME, proxyUser); + sysprops.put(ProxySetup.SOCKS_PROXY_PASSWORD, proxyPassword); + } + + } else { + log("resetting socks proxy", Project.MSG_VERBOSE); + sysprops.remove(ProxySetup.SOCKS_PROXY_HOST); + sysprops.remove(ProxySetup.SOCKS_PROXY_PORT); + sysprops.remove(ProxySetup.SOCKS_PROXY_USERNAME); + sysprops.remove(ProxySetup.SOCKS_PROXY_PASSWORD); + } + } + + if (proxyUser != null) { + if (enablingProxy) { + Authenticator.setDefault(new ProxyAuth(proxyUser, + proxyPassword)); + } else if (settingsChanged) { + Authenticator.setDefault(new ProxyAuth("", "")); + } + } + } + + /** + * list out what is going on + */ + private void traceSettingInfo() { + log("Setting proxy to " + + (proxyHost != null ? proxyHost : "''") + + ":" + proxyPort, + Project.MSG_VERBOSE); + } + + /** + * Does the work. + * + * @exception BuildException thrown in unrecoverable error. + */ + public void execute() throws BuildException { + applyWebProxySettings(); + } + + /** + * @since 1.6.3 + */ + private static final class ProxyAuth extends Authenticator { + private PasswordAuthentication auth; + + private ProxyAuth(String user, String pass) { + auth = new PasswordAuthentication(user, pass.toCharArray()); + } + + protected PasswordAuthentication getPasswordAuthentication() { + return auth; + } + } +} + |