/*
* 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.submit.filters;
import java.io.IOException;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.NTCredentials;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScheme;
import org.apache.commons.httpclient.auth.CredentialsNotAvailableException;
import org.apache.commons.httpclient.auth.CredentialsProvider;
import org.apache.commons.httpclient.auth.NTLMScheme;
import org.apache.commons.httpclient.auth.RFC2617Scheme;
import org.apache.log4j.Logger;
import com.eviware.soapui.impl.wsdl.WsdlRequest;
/**
* Provided credentials from equivilant WsdlRequest properties
*
* @author Ole.Matzura
*/
public final class WsdlRequestCredentialsProvider implements CredentialsProvider
{
private boolean checkedCredentials;
private final WsdlRequest wsdlRequest;
private final static Logger logger = Logger.getLogger( WsdlRequestCredentialsProvider.class );
public WsdlRequestCredentialsProvider( WsdlRequest wsdlRequest )
{
this.wsdlRequest = wsdlRequest;
}
public Credentials getCredentials( final AuthScheme authscheme, final String host, int port, boolean proxy )
throws CredentialsNotAvailableException
{
if( checkedCredentials )
throw new CredentialsNotAvailableException( "Missing valid credentials" );
if( authscheme == null )
{
return null;
}
try
{
String password = wsdlRequest.getPassword();
if( password == null )
password = "";
if( authscheme instanceof NTLMScheme )
{
logger.info( host + ":" + port + " requires Windows authentication" );
return new NTCredentials( wsdlRequest.getUsername(), password, host, wsdlRequest.getDomain() );
}
else if( authscheme instanceof RFC2617Scheme )
{
logger.info( host + ":" + port + " requires authentication with the realm '" + authscheme.getRealm() + "'" );
return new UsernamePasswordCredentials( wsdlRequest.getUsername(), password );
}
else
{
throw new CredentialsNotAvailableException( "Unsupported authentication scheme: "
+ authscheme.getSchemeName() );
}
}
catch( IOException e )
{
throw new CredentialsNotAvailableException( e.getMessage(), e );
}
finally
{
checkedCredentials = true;
}
}
}