You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2017/10/03 09:41:14 UTC

httpcomponents-client git commit: HTTPCLIENT-1855: Update DIGEST nonce counter in auth cache after auth challenge

Repository: httpcomponents-client
Updated Branches:
  refs/heads/4.6.x 5a44282ca -> c82799f1e


HTTPCLIENT-1855: Update DIGEST nonce counter in auth cache after auth challenge


Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/commit/c82799f1
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/tree/c82799f1
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/diff/c82799f1

Branch: refs/heads/4.6.x
Commit: c82799f1eb29e3f74bac0c7be61c8f3e37d702e4
Parents: 5a44282
Author: alessandro.gherardi <al...@schneider-electric.com>
Authored: Mon Oct 2 10:06:07 2017 -0600
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Tue Oct 3 11:36:33 2017 +0200

----------------------------------------------------------------------
 .../http/client/protocol/RequestAuthCache.java  |  4 ++-
 .../client/protocol/TestRequestAuthCache.java   | 32 ++++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/c82799f1/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthCache.java
----------------------------------------------------------------------
diff --git a/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthCache.java b/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthCache.java
index aa30073..7bf37e6 100644
--- a/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthCache.java
+++ b/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthCache.java
@@ -44,6 +44,7 @@ import org.apache.http.auth.AuthState;
 import org.apache.http.auth.Credentials;
 import org.apache.http.client.AuthCache;
 import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.config.AuthSchemes;
 import org.apache.http.conn.routing.RouteInfo;
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.util.Args;
@@ -135,7 +136,8 @@ public class RequestAuthCache implements HttpRequestInterceptor {
         final Credentials creds = credsProvider.getCredentials(authScope);
 
         if (creds != null) {
-            if ("BASIC".equalsIgnoreCase(authScheme.getSchemeName())) {
+            if (AuthSchemes.BASIC.equalsIgnoreCase(authScheme.getSchemeName())
+                    || AuthSchemes.DIGEST.equalsIgnoreCase(authScheme.getSchemeName())) {
                 authState.setState(AuthProtocolState.CHALLENGED);
             } else {
                 authState.setState(AuthProtocolState.SUCCESS);

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/c82799f1/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAuthCache.java
----------------------------------------------------------------------
diff --git a/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAuthCache.java b/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAuthCache.java
index 6bc3d95..1c0d323 100644
--- a/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAuthCache.java
+++ b/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAuthCache.java
@@ -37,6 +37,7 @@ import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.AuthCache;
 import org.apache.http.conn.routing.HttpRoute;
 import org.apache.http.impl.auth.BasicScheme;
+import org.apache.http.impl.auth.DigestScheme;
 import org.apache.http.impl.client.BasicAuthCache;
 import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.message.BasicHttpRequest;
@@ -55,6 +56,8 @@ public class TestRequestAuthCache {
     private AuthScope authscope2;
     private BasicScheme authscheme1;
     private BasicScheme authscheme2;
+    private DigestScheme digestAuthscheme1;
+    private DigestScheme digestAuthscheme2;
     private BasicCredentialsProvider credProvider;
     private AuthState targetState;
     private AuthState proxyState;
@@ -71,6 +74,8 @@ public class TestRequestAuthCache {
         this.authscope2 = new AuthScope(this.proxy);
         this.authscheme1 = new BasicScheme();
         this.authscheme2 = new BasicScheme();
+        this.digestAuthscheme1 = new DigestScheme();
+        this.digestAuthscheme2 = new DigestScheme();
 
         this.credProvider.setCredentials(this.authscope1, this.creds1);
         this.credProvider.setCredentials(this.authscope2, this.creds2);
@@ -119,6 +124,33 @@ public class TestRequestAuthCache {
     }
 
     @Test
+    public void testPreemptiveTargetAndProxyAuthDigest() throws Exception {
+        final HttpRequest request = new BasicHttpRequest("GET", "/");
+
+        final HttpClientContext context = HttpClientContext.create();
+        context.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credProvider);
+        context.setAttribute(HttpCoreContext.HTTP_TARGET_HOST, this.target);
+        context.setAttribute(HttpClientContext.HTTP_ROUTE, new HttpRoute(this.target, null, this.proxy, false));
+        context.setAttribute(HttpClientContext.TARGET_AUTH_STATE, this.targetState);
+        context.setAttribute(HttpClientContext.PROXY_AUTH_STATE, this.proxyState);
+
+        final AuthCache authCache = new BasicAuthCache();
+        authCache.put(this.target, this.digestAuthscheme1);
+        authCache.put(this.proxy, this.digestAuthscheme2);
+
+        context.setAttribute(HttpClientContext.AUTH_CACHE, authCache);
+
+        final HttpRequestInterceptor interceptor = new RequestAuthCache();
+        interceptor.process(request, context);
+        Assert.assertNotNull(this.targetState.getAuthScheme());
+        Assert.assertSame(this.targetState.getState(), AuthProtocolState.CHALLENGED);
+        Assert.assertSame(this.creds1, this.targetState.getCredentials());
+        Assert.assertNotNull(this.proxyState.getAuthScheme());
+        Assert.assertSame(this.proxyState.getState(), AuthProtocolState.CHALLENGED);
+        Assert.assertSame(this.creds2, this.proxyState.getCredentials());
+    }
+
+    @Test
     public void testCredentialsProviderNotSet() throws Exception {
         final HttpRequest request = new BasicHttpRequest("GET", "/");