blob: e9a813f453581f2f6b045c75a17c31ed40ce9ef4 [file] [log] [blame]
/*
* 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.ode.axis2.httpbinding;
import org.apache.axis2.transport.http.HttpTransportProperties;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.NTCredentials;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.params.HttpParams;
import org.apache.ode.axis2.Properties;
/**
* The purpose of this class is to configure proxy for HttpClient.
*/
public class ProxyConf {
// these properties are java system properties
// see http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html
public static final String HTTP_PROXY_HOST = "http.proxyHost";
public static final String HTTP_PROXY_PORT = "http.proxyPort";
public static final String HTTP_NON_PROXY_HOSTS = "http.nonProxyHosts";
public static void configure(HostConfiguration hostConfig, HttpState state, HttpTransportProperties.ProxyProperties proxyProperties) {
String proxyHost = proxyProperties.getProxyHostName();
int proxyPort = proxyProperties.getProxyPort();
//Setting credentials
String userName = proxyProperties.getUserName();
String password = proxyProperties.getPassWord();
String domain = proxyProperties.getDomain();
Credentials proxyCred;
if (userName != null && password != null && domain != null) {
proxyCred = new NTCredentials(userName, password, proxyHost, domain);
} else if (userName != null) {
proxyCred = new UsernamePasswordCredentials(userName, password);
} else {
proxyCred = new UsernamePasswordCredentials("", "");
}
//Using Java Networking Properties
String host = System.getProperty(HTTP_PROXY_HOST);
if (host != null) {
proxyHost = host;
proxyCred = new UsernamePasswordCredentials("", "");
}
String port = System.getProperty(HTTP_PROXY_PORT);
if (port != null) {
proxyPort = Integer.parseInt(port);
}
state.setProxyCredentials(AuthScope.ANY, proxyCred);
hostConfig.setProxy(proxyHost, proxyPort);
}
/**
* @return true if a proxy is set in the params, or in the system property "http.proxyHost"
* and the host is not mentionnned in the system property "http.nonProxyHosts"
* @see Properties#PROP_HTTP_PROXY_PREFIX
*/
public static boolean isProxyEnabled(HttpParams params, String targetHost) throws URIException {
// from IL properties
boolean isSet = params.isParameterSet(Properties.PROP_HTTP_PROXY_PREFIX);
// from Java Networking Properties
isSet |= System.getProperty(HTTP_PROXY_HOST) != null;
boolean isNonProxyHost = isNonProxyHost(targetHost);
return isSet && !isNonProxyHost;
}
/**
*
* @return true if the targetHost is mentioned in the system properties "http.nonProxyHosts"
* @see http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html
*/
public static boolean isNonProxyHost(String targetHost) {
String nonProxyHosts = System.getProperty(HTTP_NON_PROXY_HOSTS);
if (nonProxyHosts != null) {
String[] splitted = nonProxyHosts.split("\\|");
for (int i = 0; i < splitted.length; i++) {
if (targetHost.matches(splitted[i])) return true;
}
}
return false;
}
}