Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2008-12-03 16:44:41 +0000
committerslewis2008-12-03 16:44:41 +0000
commit03b774c0efa2a5b5769b1bf1a8ca04a3b714a640 (patch)
tree4de4c49abbd5b436c559399079cc58623a1bf090
parentc81c3fc195e055a8d01c5ad5d856d48f2dd4dbc2 (diff)
downloadorg.eclipse.ecf-03b774c0efa2a5b5769b1bf1a8ca04a3b714a640.tar.gz
org.eclipse.ecf-03b774c0efa2a5b5769b1bf1a8ca04a3b714a640.tar.xz
org.eclipse.ecf-03b774c0efa2a5b5769b1bf1a8ca04a3b714a640.zip
Applied patch from bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=252002
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.filetransfer.httpclient/src/org/eclipse/ecf/provider/filetransfer/httpclient/HttpClientRetrieveFileTransfer.java58
1 files changed, 49 insertions, 9 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer.httpclient/src/org/eclipse/ecf/provider/filetransfer/httpclient/HttpClientRetrieveFileTransfer.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer.httpclient/src/org/eclipse/ecf/provider/filetransfer/httpclient/HttpClientRetrieveFileTransfer.java
index b175e94b7..c9650e172 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer.httpclient/src/org/eclipse/ecf/provider/filetransfer/httpclient/HttpClientRetrieveFileTransfer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer.httpclient/src/org/eclipse/ecf/provider/filetransfer/httpclient/HttpClientRetrieveFileTransfer.java
@@ -14,7 +14,7 @@ import java.net.HttpURLConnection;
import java.net.URL;
import javax.security.auth.login.LoginException;
import org.apache.commons.httpclient.*;
-import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.auth.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
@@ -38,8 +38,6 @@ public class HttpClientRetrieveFileTransfer extends AbstractRetrieveFileTransfer
/**
* gzip encoding wrapper for httpclient class. Copied from Mylyn project, bug 205708
*
- * @author Maarten Meijer
- *
*/
public class GzipGetMethod extends GetMethod {
@@ -129,8 +127,6 @@ public class HttpClientRetrieveFileTransfer extends AbstractRetrieveFileTransfer
private String password;
- private Proxy proxy;
-
private int responseCode = -1;
private String remoteFileName;
@@ -311,6 +307,23 @@ public class HttpClientRetrieveFileTransfer extends AbstractRetrieveFileTransfer
}
}
+ final class ECFCredentialsProvider implements CredentialsProvider {
+
+ /**
+ * @throws CredentialsNotAvailableException
+ */
+ public Credentials getCredentials(AuthScheme scheme, String host, int port, boolean isProxyAuthenticating) throws CredentialsNotAvailableException {
+ if ("ntlm".equalsIgnoreCase(scheme.getSchemeName())) { //$NON-NLS-1$
+ return createNTLMCredentials(getProxy());
+ }
+ return null;
+ }
+ }
+
+ Proxy getProxy() {
+ return proxy;
+ }
+
/* (non-Javadoc)
* @see org.eclipse.ecf.provider.filetransfer.retrieve.AbstractRetrieveFileTransfer#openStreams()
*/
@@ -327,7 +340,9 @@ public class HttpClientRetrieveFileTransfer extends AbstractRetrieveFileTransfer
getMethod = new GzipGetMethod(urlString);
getMethod.setFollowRedirects(true);
-
+ // Define a CredentialsProvider - found that possibility while debugging in org.apache.commons.httpclient.HttpMethodDirector.processProxyAuthChallenge(HttpMethod)
+ // Seems to be another way to select the credentials.
+ getMethod.getParams().setParameter(CredentialsProvider.PROVIDER, new ECFCredentialsProvider());
setRequestHeaderValues();
final int code = httpClient.executeMethod(getMethod);
@@ -492,11 +507,9 @@ public class HttpClientRetrieveFileTransfer extends AbstractRetrieveFileTransfer
throw new FileNotFoundException(urlString);
} else if (code == HttpURLConnection.HTTP_UNAUTHORIZED || code == HttpURLConnection.HTTP_FORBIDDEN) {
getMethod.getResponseBody();
- // login or reauthenticate due to an expired session
getMethod.releaseConnection();
- // XXX throw new IncomingFileTransferException(Messages.HttpClientRetrieveFileTransfer_Unauthorized, code);
+ //throw new IncomingFileTransferException(Messages.HttpClientRetrieveFileTransfer_Unauthorized, code);
throw new IncomingFileTransferException(Messages.HttpClientRetrieveFileTransfer_Unauthorized);
-
} else if (code == HttpURLConnection.HTTP_PROXY_AUTH) {
getMethod.releaseConnection();
throw new LoginException(Messages.HttpClientRetrieveFileTransfer_Proxy_Auth_Required);
@@ -553,4 +566,31 @@ public class HttpClientRetrieveFileTransfer extends AbstractRetrieveFileTransfer
}
}
+ protected NTCredentials createNTLMCredentials(Proxy p) {
+ if (p == null) {
+ return null;
+ }
+ String un = getNTLMUserName(p);
+ String domain = getNTLMDomainName(p);
+ if (un == null || domain == null)
+ return null;
+ return new NTCredentials(un, p.getPassword(), p.getAddress().getHostName(), domain);
+ }
+
+ protected String getNTLMDomainName(Proxy p) {
+ String domainUsername = p.getUsername();
+ int slashloc = domainUsername.indexOf('\\');
+ if (slashloc == -1)
+ return null;
+ return domainUsername.substring(0, slashloc);
+ }
+
+ protected String getNTLMUserName(Proxy p) {
+ String domainUsername = p.getUsername();
+ int slashloc = domainUsername.indexOf('\\');
+ if (slashloc == -1)
+ return null;
+ return domainUsername.substring(slashloc + 1);
+ }
+
}

Back to the top