Repository: jclouds
Updated Branches:
  refs/heads/master 7a110b31b -> db00f679e


JCLOUDS-255: Consistently use query string auth

Fixes regressions introduced in
7a110b31ba7a7bd68c9c180a922391a46ff5510e.


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

Branch: refs/heads/master
Commit: db00f679ef32831bc65bcea02ecb05bc5330a5b9
Parents: 7a110b3
Author: Andrew Gaul <[email protected]>
Authored: Tue Apr 18 20:40:45 2017 -0700
Committer: Andrew Gaul <[email protected]>
Committed: Wed Apr 19 00:54:33 2017 -0700

----------------------------------------------------------------------
 .../s3/blobstore/S3BlobRequestSigner.java       | 12 ++---
 .../s3/filters/RequestAuthorizeSignatureV2.java |  2 +-
 .../s3/blobstore/S3BlobSignerExpectTest.java    | 41 ++++++--------
 .../s3/blobstore/AWSS3BlobSignerExpectTest.java | 56 +++++++++++++++-----
 4 files changed, 67 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/db00f679/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobRequestSigner.java
----------------------------------------------------------------------
diff --git 
a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobRequestSigner.java 
b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobRequestSigner.java
index 261d734..e110012 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobRequestSigner.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobRequestSigner.java
@@ -41,6 +41,9 @@ import com.google.common.reflect.Invokable;
 
 @Singleton
 public class S3BlobRequestSigner<T extends S3Client> implements 
BlobRequestSigner {
+   /** Matches Amazon default when Expiry parameter not present. */
+   private static final int DEFAULT_EXPIRY_SECONDS = 15 * 60;
+
    private final RequestAuthorizeSignature authSigner;
 
    protected final RestAnnotationProcessor processor;
@@ -67,9 +70,7 @@ public class S3BlobRequestSigner<T extends S3Client> 
implements BlobRequestSigne
 
    @Override
    public HttpRequest signGetBlob(String container, String name) {
-      checkNotNull(container, "container");
-      checkNotNull(name, "name");
-      return cleanRequest(processor.apply(Invocation.create(getMethod, 
ImmutableList.<Object> of(container, name))));
+      return signGetBlob(container, name, DEFAULT_EXPIRY_SECONDS);
    }
 
    @Override
@@ -82,10 +83,7 @@ public class S3BlobRequestSigner<T extends S3Client> 
implements BlobRequestSigne
 
    @Override
    public HttpRequest signPutBlob(String container, Blob blob) {
-      checkNotNull(container, "container");
-      checkNotNull(blob, "blob");
-      return cleanRequest(processor.apply(Invocation.create(createMethod,
-            ImmutableList.<Object> of(container, blobToObject.apply(blob)))));
+      return signPutBlob(container, blob, DEFAULT_EXPIRY_SECONDS);
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/db00f679/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV2.java
----------------------------------------------------------------------
diff --git 
a/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV2.java 
b/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV2.java
index c1b4719..caee79b 100644
--- 
a/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV2.java
+++ 
b/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV2.java
@@ -291,8 +291,8 @@ public class RequestAuthorizeSignatureV2 implements 
RequestAuthorizeSignature, R
          // signature will be converted to a space by a subsequent 
addQueryParameter.
          // See HttpRequestTest.testAddBase64AndUrlEncodedQueryParams for more 
details.
          .addQueryParam(S3Constants.TEMPORARY_SIGNATURE_PARAM, signature)
-         // remove signer created by RestAnnotationProcessor
          .removeHeader(HttpHeaders.DATE)
+         // remove signer created by RestAnnotationProcessor
          .filters(ImmutableList.<HttpRequestFilter>of())
          .build();
       return ret;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/db00f679/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java
----------------------------------------------------------------------
diff --git 
a/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java 
b/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java
index ac7768b..de59322 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java
@@ -22,7 +22,6 @@ import org.jclouds.http.HttpRequest;
 import org.jclouds.rest.ConfiguresHttpApi;
 import org.jclouds.s3.S3Client;
 import org.jclouds.s3.config.S3HttpApiModule;
-import org.testng.SkipException;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Supplier;
@@ -42,23 +41,20 @@ public class S3BlobSignerExpectTest extends 
BaseBlobSignerExpectTest {
    protected HttpRequest getBlob() {
       return HttpRequest.builder().method("GET")
                         .endpoint("http://localhost/container/name";)
-                        .addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
-                        .addHeader("Authorization", "AWS 
identity:0uvBv1wEskuhFHYJF/L6kEV9A7o=").build();
+                        .addQueryParam("Expires", "1212684799")
+                        .addQueryParam("AWSAccessKeyId", "identity")
+                        .addQueryParam("Signature", 
"Z0UqrkQv83rykFxvI3f0dQtxEAM=")
+                        .build();
    }
 
    @Override
-   @Test
-   public void testSignGetBlobWithTime() {
-      throw new SkipException("not yet implemented");
-   }
-
-   //TODO
-   @Override
    protected HttpRequest getBlobWithTime() {
       return HttpRequest.builder().method("GET")
-            .endpoint("http://locahost/container/name";)
-            .addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
-            .addHeader("Authorization", "AWS 
identity:0uvBv1wEskuhFHYJF/L6kEV9A7o=").build();
+            .endpoint("http://localhost/container/name";)
+            .addQueryParam("Expires", "1212683902")
+            .addQueryParam("AWSAccessKeyId", "identity")
+            .addQueryParam("Signature", "Y4Ac4sZfBemGZmgfG78F7IX+IFg=")
+            .build();
    }
 
    @Override
@@ -74,25 +70,22 @@ public class S3BlobSignerExpectTest extends 
BaseBlobSignerExpectTest {
    protected HttpRequest putBlob() {
       return HttpRequest.builder().method("PUT")
             .endpoint("http://localhost/container/name";)
+            .addQueryParam("Expires", "1212684799")
+            .addQueryParam("AWSAccessKeyId", "identity")
+            .addQueryParam("Signature", "N3+nS6ogzOqgT+YaThFN6RU/+xs=")
             .addHeader("Expect", "100-continue")
-            .addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
-            .addHeader("Authorization", "AWS 
identity:zM2oT+71KcoOSxv1SU5L12UXnT8=").build();
+            .build();
    }
 
    @Override
-   @Test
-   public void testSignPutBlobWithTime() throws Exception {
-      throw new SkipException("not yet implemented");
-   }
-
-   //TODO
-   @Override
    protected HttpRequest putBlobWithTime() {
       return HttpRequest.builder().method("PUT")
             .endpoint("http://localhost/container/name";)
+            .addQueryParam("Expires", "1212683902")
+            .addQueryParam("AWSAccessKeyId", "identity")
+            .addQueryParam("Signature", "genkB2vLxe3AWV/bPvRTMqQts7E=")
             .addHeader("Expect", "100-continue")
-            .addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
-            .addHeader("Authorization", "AWS 
identity:zM2oT+71KcoOSxv1SU5L12UXnT8=").build();
+            .build();
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/db00f679/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
index 14c273f..4577427 100644
--- 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
+++ 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
@@ -18,12 +18,17 @@ package org.jclouds.aws.s3.blobstore;
 
 import static org.testng.Assert.assertEquals;
 
+import java.util.Date;
 import java.util.Map;
 
+import javax.inject.Named;
+
+import org.jclouds.Constants;
 import org.jclouds.aws.s3.config.AWSS3HttpApiModule;
 import org.jclouds.aws.s3.filters.AWSRequestAuthorizeSignature;
 import org.jclouds.blobstore.BlobStore;
 import org.jclouds.blobstore.domain.Blob;
+import org.jclouds.date.DateService;
 import org.jclouds.date.TimeStamp;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.rest.ConfiguresHttpApi;
@@ -33,6 +38,7 @@ import org.testng.annotations.Test;
 
 import com.google.common.base.Splitter;
 import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
 import com.google.inject.Module;
 import com.google.inject.Scopes;
 
@@ -49,9 +55,14 @@ public class AWSS3BlobSignerExpectTest extends 
S3BlobSignerExpectTest {
    protected HttpRequest getBlob() {
       return HttpRequest.builder().method("GET")
             .endpoint("https://container.s3.amazonaws.com/name";)
+            .addQueryParam("X-Amz-Algorithm", "AWS4-HMAC-SHA256")
+            .addQueryParam("X-Amz-Credential", 
"identity/20080605/us-east-1/s3/aws4_request")
+            .addQueryParam("X-Amz-Date", "20080605T163819Z")
+            .addQueryParam("X-Amz-Expires", "900")
+            .addQueryParam("X-Amz-SignedHeaders", "host")
+            .addQueryParam("X-Amz-Signature", 
"1aa13b18ef9c4a9a98db7539e9eeb2c63afadbab649e14e28d5b765dfd96c32b")
             .addHeader("Host", HOST)
-            .addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
-            .addHeader("Authorization", "AWS 
identity:0uvBv1wEskuhFHYJF/L6kEV9A7o=").build();
+            .build();
    }
 
    @Override
@@ -71,8 +82,10 @@ public class AWSS3BlobSignerExpectTest extends 
S3BlobSignerExpectTest {
             .endpoint("https://container.s3.amazonaws.com/name";)
             .addHeader("Host", HOST)
             .addHeader("Range", "bytes=0-1")
-            .addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
-            .addHeader("Authorization", "AWS 
identity:0uvBv1wEskuhFHYJF/L6kEV9A7o=").build();
+            .addHeader("x-amz-content-sha256", 
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
+            .addHeader("X-Amz-Date", "20080605T163819Z")
+            .addHeader("Authorization", "AWS4-HMAC-SHA256 
Credential=identity/20080605/us-east-1/s3/aws4_request, 
SignedHeaders=host;x-amz-content-sha256;x-amz-date, 
Signature=8f6a70bf43f31c92a67095510b080f574154df8a5ccb988ec8a6cbcce03dd5b8")
+            .build();
    }
 
    private void compareRequestComponents(final HttpRequest request, final 
HttpRequest compare) {
@@ -80,15 +93,16 @@ public class AWSS3BlobSignerExpectTest extends 
S3BlobSignerExpectTest {
       String query = request.getEndpoint().toString().split("\\?")[1];
       final Map<String, String> params = 
Splitter.on('&').trimResults().withKeyValueSeparator("=").split(query);
       assertEquals(params.get("X-Amz-Algorithm"), "AWS4-HMAC-SHA256");
-      assertEquals(params.get("X-Amz-Expires"), "3");
+      assertEquals(params.get("X-Amz-Expires"), "900");
       assertEquals(params.get("X-Amz-SignedHeaders"), "host");
    }
 
+   @Override
    @Test
    public void testSignGetBlobWithTime() {
       BlobStore getBlobWithTime = requestsSendResponses(init());
       HttpRequest compare = getBlobWithTime();
-      HttpRequest request = 
getBlobWithTime.getContext().getSigner().signGetBlob(container, name, 3L /* 
seconds */);
+      HttpRequest request = 
getBlobWithTime.getContext().getSigner().signGetBlob(container, name, 900L /* 
seconds */);
       compareRequestComponents(request, compare);
    }
 
@@ -119,18 +133,33 @@ public class AWSS3BlobSignerExpectTest extends 
S3BlobSignerExpectTest {
    protected HttpRequest removeBlob() {
       return HttpRequest.builder().method("DELETE")
             .endpoint("https://container.s3.amazonaws.com/name";)
+            .addHeader("x-amz-content-sha256", 
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
+            .addHeader("X-Amz-Date", "20080605T163819Z")
+            .addHeader("Authorization", "AWS4-HMAC-SHA256 
Credential=identity/20080605/us-east-1/s3/aws4_request, 
SignedHeaders=host;x-amz-content-sha256;x-amz-date, 
Signature=b068a3b2a76f06bf1d73b907243602f43962f5572ea1e588ed193c8c656118fe")
             .addHeader("Host", HOST)
-            .addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
-            .addHeader("Authorization", "AWS 
identity:4FnyjdX/ULdDMRbVlLNjZfEo9RQ=").build();
+            .build();
+   }
+
+   @Override
+   @Test
+   public void testSignPutBlob() throws Exception {
+      BlobStore signPutBloblWithTime = requestsSendResponses(init());
+      Blob blob = 
signPutBloblWithTime.blobBuilder(name).payload(text).contentType("text/plain").build();
+      HttpRequest compare = putBlobWithTime();
+      compare.setPayload(blob.getPayload());
+      HttpRequest request = 
signPutBloblWithTime.getContext().getSigner().signPutBlob(container, blob);
+      compareRequestComponents(request, compare);
+      assertEquals(request.getPayload(), compare.getPayload());
    }
 
+   @Override
    @Test
    public void testSignPutBlobWithTime() throws Exception {
       BlobStore signPutBloblWithTime = requestsSendResponses(init());
       Blob blob = 
signPutBloblWithTime.blobBuilder(name).payload(text).contentType("text/plain").build();
       HttpRequest compare = putBlobWithTime();
       compare.setPayload(blob.getPayload());
-      HttpRequest request = 
signPutBloblWithTime.getContext().getSigner().signPutBlob(container, blob, 3L 
/* seconds */);
+      HttpRequest request = 
signPutBloblWithTime.getContext().getSigner().signPutBlob(container, blob, 900L 
/* seconds */);
       compareRequestComponents(request, compare);
       assertEquals(request.getPayload(), compare.getPayload());
    }
@@ -148,10 +177,13 @@ public class AWSS3BlobSignerExpectTest extends 
S3BlobSignerExpectTest {
          return DATE;
       }
 
-      // subclass expects v2 signatures
       @Override
-      protected void bindRequestSigner() {
-         
bind(RequestAuthorizeSignature.class).to(AWSRequestAuthorizeSignature.class).in(Scopes.SINGLETON);
+      @TimeStamp
+      protected Supplier<Date> provideTimeStampCacheDate(
+            @Named(Constants.PROPERTY_SESSION_INTERVAL) long seconds,
+            @TimeStamp final Supplier<String> timestamp,
+            final DateService dateService) {
+         return Suppliers.ofInstance(new Date(1212683899000L));
       }
    }
 }

Reply via email to