mirror of
https://github.com/moparisthebest/davmail
synced 2024-12-12 10:42:21 -05:00
httpclient patch for iis proxy compatibility
(use basic instead of ntlm auth) git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@4 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
0351a49c9d
commit
db7ea2b7e1
@ -0,0 +1,169 @@
|
||||
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
|
||||
// Jad home page: http://kpdus.tripod.com/jad.html
|
||||
// Decompiler options: packimports(3)
|
||||
// Source File Name: HttpAuthenticator.java
|
||||
|
||||
package org.apache.commons.httpclient.auth;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.httpclient.*;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
// Referenced classes of package org.apache.commons.httpclient.auth:
|
||||
// NTLMScheme, DigestScheme, BasicScheme, AuthenticationException,
|
||||
// MalformedChallengeException, AuthChallengeParser, AuthScheme
|
||||
|
||||
public final class HttpAuthenticator {
|
||||
|
||||
public HttpAuthenticator() {
|
||||
}
|
||||
|
||||
public static AuthScheme selectAuthScheme(Header challenges[])
|
||||
throws MalformedChallengeException {
|
||||
LOG.trace("enter HttpAuthenticator.selectAuthScheme(Header[])");
|
||||
if (challenges == null)
|
||||
throw new IllegalArgumentException("Array of challenges may not be null");
|
||||
if (challenges.length == 0)
|
||||
throw new IllegalArgumentException("Array of challenges may not be empty");
|
||||
String challenge = null;
|
||||
Map challengemap = new HashMap(challenges.length);
|
||||
for (int i = 0; i < challenges.length; i++) {
|
||||
challenge = challenges[i].getValue();
|
||||
String s = AuthChallengeParser.extractScheme(challenge);
|
||||
challengemap.put(s, challenge);
|
||||
}
|
||||
|
||||
challenge = (String) challengemap.get("digest");
|
||||
if (challenge != null)
|
||||
return new DigestScheme(challenge);
|
||||
challenge = (String) challengemap.get("basic");
|
||||
if (challenge != null)
|
||||
return new BasicScheme(challenge);
|
||||
// patch ntlm last priority
|
||||
challenge = (String) challengemap.get("ntlm");
|
||||
if (challenge != null)
|
||||
return new NTLMScheme(challenge);
|
||||
else
|
||||
throw new UnsupportedOperationException("Authentication scheme(s) not supported: " + challengemap.toString());
|
||||
}
|
||||
|
||||
private static boolean doAuthenticateDefault(HttpMethod method, HttpConnection conn, HttpState state, boolean proxy)
|
||||
throws AuthenticationException {
|
||||
if (method == null)
|
||||
throw new IllegalArgumentException("HTTP method may not be null");
|
||||
if (state == null)
|
||||
throw new IllegalArgumentException("HTTP state may not be null");
|
||||
String host = null;
|
||||
if (conn != null)
|
||||
host = proxy ? conn.getProxyHost() : conn.getHost();
|
||||
org.apache.commons.httpclient.Credentials credentials = proxy ? state.getProxyCredentials(null, host) : state.getCredentials(null, host);
|
||||
if (credentials == null) {
|
||||
if (LOG.isWarnEnabled())
|
||||
LOG.warn("Default credentials for " + host + " not available");
|
||||
return false;
|
||||
}
|
||||
if (!(credentials instanceof UsernamePasswordCredentials))
|
||||
throw new AuthenticationException("Credentials cannot be used for basic authentication: " + credentials.toString());
|
||||
String auth = BasicScheme.authenticate((UsernamePasswordCredentials) credentials);
|
||||
if (auth != null) {
|
||||
String s = proxy ? "Proxy-Authorization" : "Authorization";
|
||||
method.setRequestHeader(s, auth);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean authenticateDefault(HttpMethod method, HttpConnection conn, HttpState state)
|
||||
throws AuthenticationException {
|
||||
LOG.trace("enter HttpAuthenticator.authenticateDefault(HttpMethod, HttpConnection, HttpState)");
|
||||
return doAuthenticateDefault(method, conn, state, false);
|
||||
}
|
||||
|
||||
public static boolean authenticateProxyDefault(HttpMethod method, HttpConnection conn, HttpState state)
|
||||
throws AuthenticationException {
|
||||
LOG.trace("enter HttpAuthenticator.authenticateProxyDefault(HttpMethod, HttpState)");
|
||||
return doAuthenticateDefault(method, conn, state, true);
|
||||
}
|
||||
|
||||
private static boolean doAuthenticate(AuthScheme authscheme, HttpMethod method, HttpConnection conn, HttpState state, boolean proxy)
|
||||
throws AuthenticationException {
|
||||
if (authscheme == null)
|
||||
throw new IllegalArgumentException("Authentication scheme may not be null");
|
||||
if (method == null)
|
||||
throw new IllegalArgumentException("HTTP method may not be null");
|
||||
if (state == null)
|
||||
throw new IllegalArgumentException("HTTP state may not be null");
|
||||
String host = null;
|
||||
if (conn != null)
|
||||
if (proxy) {
|
||||
host = conn.getProxyHost();
|
||||
} else {
|
||||
host = conn.getVirtualHost();
|
||||
if (host == null)
|
||||
host = conn.getHost();
|
||||
}
|
||||
String realm = authscheme.getRealm();
|
||||
if (LOG.isDebugEnabled()) {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("Authenticating with the ");
|
||||
if (realm == null) {
|
||||
buffer.append("default");
|
||||
} else {
|
||||
buffer.append('\'');
|
||||
buffer.append(realm);
|
||||
buffer.append('\'');
|
||||
}
|
||||
buffer.append(" authentication realm at ");
|
||||
buffer.append(host);
|
||||
LOG.debug(buffer.toString());
|
||||
}
|
||||
if (realm == null)
|
||||
realm = host;
|
||||
org.apache.commons.httpclient.Credentials credentials = proxy ? state.getProxyCredentials(realm, host) : state.getCredentials(realm, host);
|
||||
if (credentials == null)
|
||||
throw new AuthenticationException("No credentials available for the '" + authscheme.getRealm() + "' authentication realm at " + host);
|
||||
String auth = authscheme.authenticate(credentials, method.getName(), method.getPath());
|
||||
if (auth != null) {
|
||||
String s = proxy ? "Proxy-Authorization" : "Authorization";
|
||||
method.setRequestHeader(s, auth);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean authenticate(AuthScheme authscheme, HttpMethod method, HttpConnection conn, HttpState state)
|
||||
throws AuthenticationException {
|
||||
LOG.trace("enter HttpAuthenticator.authenticate(AuthScheme, HttpMethod, HttpConnection, HttpState)");
|
||||
return doAuthenticate(authscheme, method, conn, state, false);
|
||||
}
|
||||
|
||||
public static boolean authenticateProxy(AuthScheme authscheme, HttpMethod method, HttpConnection conn, HttpState state)
|
||||
throws AuthenticationException {
|
||||
LOG.trace("enter HttpAuthenticator.authenticateProxy(AuthScheme, HttpMethod, HttpState)");
|
||||
return doAuthenticate(authscheme, method, conn, state, true);
|
||||
}
|
||||
|
||||
static Class _mthclass$(String x0) {
|
||||
try {
|
||||
return Class.forName(x0);
|
||||
}
|
||||
catch (ClassNotFoundException x1) {
|
||||
throw new NoClassDefFoundError(x1.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static final Log LOG;
|
||||
public static final String WWW_AUTH = "WWW-Authenticate";
|
||||
public static final String WWW_AUTH_RESP = "Authorization";
|
||||
public static final String PROXY_AUTH = "Proxy-Authenticate";
|
||||
public static final String PROXY_AUTH_RESP = "Proxy-Authorization";
|
||||
|
||||
static {
|
||||
LOG = LogFactory.getLog(org.apache.commons.httpclient.auth.HttpAuthenticator.class);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user