Package com.eviware.soapui.impl.wsdl.support.http

Source Code of com.eviware.soapui.impl.wsdl.support.http.ProxyUtils

/*
*  soapUI, copyright (C) 2004-2011 eviware.com
*
*  soapUI is free software; you can redistribute it and/or modify it under the
*  terms of version 2.1 of the GNU Lesser General Public License as published by
*  the Free Software Foundation.
*
*  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
*  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*  See the GNU Lesser General Public License for more details at gnu.org.
*/

package com.eviware.soapui.impl.wsdl.support.http;

import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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.auth.AuthScope;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.model.propertyexpansion.PropertyExpander;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansionContext;
import com.eviware.soapui.model.settings.Settings;
import com.eviware.soapui.settings.ProxySettings;
import com.eviware.soapui.support.StringUtils;

/**
* Utilities for setting proxy-servers correctly
*
* @author ole.matzura
*/

public class ProxyUtils
{
  private static boolean proxyEnabled = SoapUI.getSettings().getBoolean( ProxySettings.ENABLE_PROXY );

  public static HostConfiguration initProxySettings( Settings settings, HttpState httpState,
      HostConfiguration hostConfiguration, String urlString, PropertyExpansionContext context )
  {
    boolean enabled = proxyEnabled;

    // check system properties first
    String proxyHost = System.getProperty( "http.proxyHost" );
    String proxyPort = System.getProperty( "http.proxyPort" );
    if( proxyHost == null && enabled )
      proxyHost = PropertyExpander.expandProperties( context, settings.getString( ProxySettings.HOST, "" ) );
    if( proxyPort == null && proxyHost != null && enabled )
      proxyPort = PropertyExpander.expandProperties( context, settings.getString( ProxySettings.PORT, "" ) );

    if( !StringUtils.isNullOrEmpty( proxyHost ) && !StringUtils.isNullOrEmpty( proxyPort ) )
    {
      // check excludes
      String[] excludes = PropertyExpander.expandProperties( context,
          settings.getString( ProxySettings.EXCLUDES, "" ) ).split( "," );

      try
      {
        URL url = new URL( urlString );

        if( !excludes( excludes, url.getHost(), url.getPort() ) )
        {
          hostConfiguration.setProxy( proxyHost, Integer.parseInt( proxyPort ) );

          String proxyUsername = PropertyExpander.expandProperties( context,
              settings.getString( ProxySettings.USERNAME, null ) );
          String proxyPassword = PropertyExpander.expandProperties( context,
              settings.getString( ProxySettings.PASSWORD, null ) );

          if( proxyUsername != null && proxyPassword != null )
          {
            Credentials proxyCreds = new UsernamePasswordCredentials( proxyUsername, proxyPassword == null ? ""
                : proxyPassword );

            // check for nt-username
            int ix = proxyUsername.indexOf( '\\' );
            if( ix > 0 )
            {
              String domain = proxyUsername.substring( 0, ix );
              if( proxyUsername.length() > ix + 1 )
              {
                String user = proxyUsername.substring( ix + 1 );
                proxyCreds = new NTCredentials( user, proxyPassword, proxyHost, domain );
              }
            }

            httpState.setProxyCredentials( AuthScope.ANY, proxyCreds );
          }
        }
      }
      catch( MalformedURLException e )
      {
        SoapUI.logError( e );
      }
    }

    return hostConfiguration;
  }

  public static boolean excludes( String[] excludes, String proxyHost, int proxyPort )
  {
    for( int c = 0; c < excludes.length; c++ )
    {
      String exclude = excludes[c].trim();
      if( exclude.length() == 0 )
        continue;

      // check for port
      int ix = exclude.indexOf( ':' );

      if( ix >= 0 && exclude.length() > ix + 1 )
      {
        String excludePort = exclude.substring( ix + 1 );
        if( proxyPort != -1 && excludePort.equals( String.valueOf( proxyPort ) ) )
        {
          exclude = exclude.substring( 0, ix );
        }
        else
        {
          continue;
        }
      }

      /*
       * This will exclude addresses with wildcard *, too.
       */
      // if( proxyHost.endsWith( exclude ) )
      // return true;
      String excludeIp = exclude.indexOf( '*' ) >= 0 ? exclude : nslookup( exclude, true );
      String ip = nslookup( proxyHost, true );
      Pattern pattern = Pattern.compile( excludeIp );
      Matcher matcher = pattern.matcher( ip );
      Matcher matcher2 = pattern.matcher( proxyHost );
      if( matcher.find() || matcher2.find() )
        return true;
    }

    return false;
  }

  private static String nslookup( String s, boolean ip )
  {

    InetAddress host;
    String address;

    // get the bytes of the IP address
    try
    {
      host = InetAddress.getByName( s );
      if( ip )
        address = host.getHostAddress();
      else
        address = host.getHostName();
    }
    catch( UnknownHostException ue )
    {
      return s; // no host
    }

    return address;

  } // end lookup

  public static boolean isProxyEnabled()
  {
    return proxyEnabled;
  }

  public static void setProxyEnabled( boolean proxyEnabled )
  {
    ProxyUtils.proxyEnabled = proxyEnabled;
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.support.http.ProxyUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.