Repository: jclouds Updated Branches: refs/heads/master 24f961eac -> 7a110b31b
JCLOUDS-255: Support S3 signed URLs with expiry Mostly code motion from AWSS3BlobRequestSigner to S3BlobRequestSigner with some additional cleanups. Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/7a110b31 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/7a110b31 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/7a110b31 Branch: refs/heads/master Commit: 7a110b31ba7a7bd68c9c180a922391a46ff5510e Parents: 24f961e Author: Andrew Gaul <[email protected]> Authored: Tue Apr 18 12:48:19 2017 -0700 Committer: Andrew Gaul <[email protected]> Committed: Tue Apr 18 18:51:22 2017 -0700 ---------------------------------------------------------------------- .../s3/blobstore/S3BlobRequestSigner.java | 20 +++- .../s3/filters/RequestAuthorizeSignature.java | 2 + .../s3/filters/RequestAuthorizeSignatureV2.java | 38 ++++++- .../s3/filters/RequestAuthorizeSignatureV4.java | 1 + .../org/jclouds/s3/reference/S3Constants.java | 2 + .../integration/S3BlobSignerLiveTest.java | 57 ++--------- .../s3/blobstore/AWSS3BlobRequestSigner.java | 102 ------------------- .../s3/blobstore/AWSS3BlobRequestSignerV4.java | 8 +- .../filters/AWSRequestAuthorizeSignature.java | 8 +- .../filters/AWSRequestAuthorizeSignatureV4.java | 2 +- .../integration/AWSS3BlobSignerLiveTest.java | 5 - 11 files changed, 74 insertions(+), 171 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/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 a335754..261d734 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 @@ -33,6 +33,7 @@ import org.jclouds.rest.internal.RestAnnotationProcessor; import org.jclouds.s3.S3Client; import org.jclouds.s3.blobstore.functions.BlobToObject; import org.jclouds.s3.domain.S3Object; +import org.jclouds.s3.filters.RequestAuthorizeSignature; import org.jclouds.s3.options.PutObjectOptions; import com.google.common.collect.ImmutableList; @@ -40,6 +41,8 @@ import com.google.common.reflect.Invokable; @Singleton public class S3BlobRequestSigner<T extends S3Client> implements BlobRequestSigner { + private final RequestAuthorizeSignature authSigner; + protected final RestAnnotationProcessor processor; protected final BlobToObject blobToObject; protected final BlobToHttpGetOptions blob2HttpGetOptions; @@ -50,14 +53,16 @@ public class S3BlobRequestSigner<T extends S3Client> implements BlobRequestSigne @Inject public S3BlobRequestSigner(RestAnnotationProcessor processor, BlobToObject blobToObject, - BlobToHttpGetOptions blob2HttpGetOptions, Class<T> interfaceClass) throws SecurityException, - NoSuchMethodException { + BlobToHttpGetOptions blob2HttpGetOptions, Class<T> interfaceClass, + RequestAuthorizeSignature authSigner) + throws SecurityException, NoSuchMethodException { this.processor = checkNotNull(processor, "processor"); this.blobToObject = checkNotNull(blobToObject, "blobToObject"); this.blob2HttpGetOptions = checkNotNull(blob2HttpGetOptions, "blob2HttpGetOptions"); this.getMethod = method(interfaceClass, "getObject", String.class, String.class, GetOptions[].class); this.deleteMethod = method(interfaceClass, "deleteObject", String.class, String.class); this.createMethod = method(interfaceClass, "putObject", String.class, S3Object.class, PutObjectOptions[].class); + this.authSigner = authSigner; } @Override @@ -69,7 +74,10 @@ public class S3BlobRequestSigner<T extends S3Client> implements BlobRequestSigne @Override public HttpRequest signGetBlob(String container, String name, long timeInSeconds) { - throw new UnsupportedOperationException(); + checkNotNull(container, "container"); + checkNotNull(name, "name"); + HttpRequest request = processor.apply(Invocation.create(getMethod, ImmutableList.<Object> of(container, name))); + return cleanRequest(authSigner.signForTemporaryAccess(request, timeInSeconds)); } @Override @@ -82,7 +90,11 @@ public class S3BlobRequestSigner<T extends S3Client> implements BlobRequestSigne @Override public HttpRequest signPutBlob(String container, Blob blob, long timeInSeconds) { - throw new UnsupportedOperationException(); + checkNotNull(container, "container"); + checkNotNull(blob, "blob"); + HttpRequest request = processor.apply(Invocation.create(createMethod, + ImmutableList.<Object>of(container, blobToObject.apply(blob)))); + return cleanRequest(authSigner.signForTemporaryAccess(request, timeInSeconds)); } @Override http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignature.java ---------------------------------------------------------------------- diff --git a/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignature.java b/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignature.java index 75dd648..4dadeb9 100644 --- a/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignature.java +++ b/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignature.java @@ -16,6 +16,7 @@ */ package org.jclouds.s3.filters; +import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpRequestFilter; /** @@ -23,4 +24,5 @@ import org.jclouds.http.HttpRequestFilter; */ public interface RequestAuthorizeSignature extends HttpRequestFilter { + HttpRequest signForTemporaryAccess(HttpRequest request, long timeInSeconds); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/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 dab003c..c1b4719 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 @@ -29,9 +29,11 @@ import static org.jclouds.s3.reference.S3Constants.PROPERTY_S3_VIRTUAL_HOST_BUCK import static org.jclouds.util.Strings2.toInputStream; import java.util.Collection; +import java.util.Date; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import javax.inject.Inject; @@ -42,14 +44,17 @@ import javax.inject.Singleton; import org.jclouds.Constants; import org.jclouds.aws.domain.SessionCredentials; import org.jclouds.crypto.Crypto; +import org.jclouds.date.DateService; import org.jclouds.date.TimeStamp; import org.jclouds.domain.Credentials; import org.jclouds.http.HttpException; import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpRequestFilter; import org.jclouds.http.HttpUtils; import org.jclouds.http.internal.SignatureWire; import org.jclouds.logging.Logger; import org.jclouds.rest.RequestSigner; +import org.jclouds.s3.reference.S3Constants; import org.jclouds.s3.util.S3Utils; import com.google.common.annotations.VisibleForTesting; @@ -90,13 +95,15 @@ public class RequestAuthorizeSignatureV2 implements RequestAuthorizeSignature, R private final String headerTag; private final String servicePath; private final boolean isVhostStyle; + private final DateService dateService; @Inject public RequestAuthorizeSignatureV2(SignatureWire signatureWire, @Named(PROPERTY_AUTH_TAG) String authTag, @Named(PROPERTY_S3_VIRTUAL_HOST_BUCKETS) boolean isVhostStyle, @Named(PROPERTY_S3_SERVICE_PATH) String servicePath, @Named(PROPERTY_HEADER_TAG) String headerTag, @org.jclouds.location.Provider Supplier<Credentials> creds, - @TimeStamp Provider<String> timeStampProvider, Crypto crypto, HttpUtils utils) { + @TimeStamp Provider<String> timeStampProvider, Crypto crypto, HttpUtils utils, + DateService dateService) { this.isVhostStyle = isVhostStyle; this.servicePath = servicePath; this.headerTag = headerTag; @@ -106,6 +113,7 @@ public class RequestAuthorizeSignatureV2 implements RequestAuthorizeSignature, R this.timeStampProvider = timeStampProvider; this.crypto = crypto; this.utils = utils; + this.dateService = dateService; } public HttpRequest filter(HttpRequest request) throws HttpException { @@ -261,4 +269,32 @@ public class RequestAuthorizeSignatureV2 implements RequestAuthorizeSignature, R } } } + + @Override + public HttpRequest signForTemporaryAccess(HttpRequest request, long timeInSeconds) { + // Update the 'DATE' header + String dateString = request.getFirstHeaderOrNull(HttpHeaders.DATE); + if (dateString == null) { + dateString = timeStampProvider.get(); + } + Date date = dateService.rfc1123DateParse(dateString); + String expiration = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(date.getTime()) + timeInSeconds); + HttpRequest.Builder<?> builder = request.toBuilder() + .removeHeader(HttpHeaders.AUTHORIZATION) + .replaceHeader(HttpHeaders.DATE, expiration); + String stringToSign = createStringToSign(builder.build()); + String signature = sign(stringToSign); + HttpRequest ret = builder + .addQueryParam(HttpHeaders.EXPIRES, expiration) + .addQueryParam("AWSAccessKeyId", creds.get().identity) + // Signature MUST be the last parameter because if it isn't, even encoded '+' values in the + // 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) + .filters(ImmutableList.<HttpRequestFilter>of()) + .build(); + return ret; + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4.java ---------------------------------------------------------------------- diff --git a/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4.java b/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4.java index c3eae42..f50b730 100644 --- a/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4.java +++ b/apis/s3/src/main/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4.java @@ -106,6 +106,7 @@ public class RequestAuthorizeSignatureV4 implements RequestAuthorizeSignature { * For example, you might store videos in an Amazon S3 bucket and make them available on your website by using presigned URLs. * Identifies the version of AWS Signature and the algorithm that you used to calculate the signature. */ + @Override public HttpRequest signForTemporaryAccess(HttpRequest request, long timeInSeconds) { return signerForQueryString.sign(request, timeInSeconds); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/apis/s3/src/main/java/org/jclouds/s3/reference/S3Constants.java ---------------------------------------------------------------------- diff --git a/apis/s3/src/main/java/org/jclouds/s3/reference/S3Constants.java b/apis/s3/src/main/java/org/jclouds/s3/reference/S3Constants.java index 7569573..f5f876c 100644 --- a/apis/s3/src/main/java/org/jclouds/s3/reference/S3Constants.java +++ b/apis/s3/src/main/java/org/jclouds/s3/reference/S3Constants.java @@ -33,6 +33,8 @@ public final class S3Constants { public static final String PROPERTY_S3_VIRTUAL_HOST_BUCKETS = "jclouds.s3.virtual-host-buckets"; public static final String PROPERTY_JCLOUDS_S3_CHUNKED_SIZE = "jclouds.s3.chunked.size"; + public static final String TEMPORARY_SIGNATURE_PARAM = "Signature"; + private S3Constants() { throw new AssertionError("intentionally unimplemented"); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3BlobSignerLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3BlobSignerLiveTest.java b/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3BlobSignerLiveTest.java index 4270b97..c3ca35d 100644 --- a/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3BlobSignerLiveTest.java +++ b/apis/s3/src/test/java/org/jclouds/s3/blobstore/integration/S3BlobSignerLiveTest.java @@ -16,13 +16,10 @@ */ package org.jclouds.s3.blobstore.integration; -import static org.testng.Assert.fail; - import java.io.IOException; import org.jclouds.blobstore.integration.internal.BaseBlobSignerLiveTest; import org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest; -import org.testng.SkipException; import org.testng.annotations.Test; @Test(groups = "live", testName = "S3BlobSignerLiveTest") @@ -33,59 +30,17 @@ public class S3BlobSignerLiveTest extends BaseBlobSignerLiveTest { BaseBlobStoreIntegrationTest.SANITY_CHECK_RETURNED_BUCKET_NAME = true; } - protected boolean supportsUrlWithTime() { - return false; - } - - @Test - public void testSignGetUrlWithTime() throws InterruptedException, IOException { - try { - super.testSignGetUrlWithTime(); - if (!supportsUrlWithTime()) { - fail(); - } - } catch (UnsupportedOperationException uoe) { - throw new SkipException("not supported by S3 signer", uoe); - } - } - @Test public void testSignGetUrlWithTimeExpired() throws InterruptedException, IOException { - try { - // Intentionally try with a timeout of 0. AWS signature v4 throws an error if - // the timeout is negative. - super.testSignGetUrlWithTime(/*timeout=*/ 0); - if (!supportsUrlWithTime()) { - fail(); - } - } catch (UnsupportedOperationException uoe) { - throw new SkipException("not supported by S3 signer", uoe); - } - } - - @Test - public void testSignPutUrlWithTime() throws Exception { - try { - super.testSignPutUrlWithTime(); - if (!supportsUrlWithTime()) { - fail(); - } - } catch (UnsupportedOperationException uoe) { - throw new SkipException("not supported by S3 signer", uoe); - } + // Intentionally try with a timeout of 0. AWS signature v4 throws an error if + // the timeout is negative. + super.testSignGetUrlWithTime(/*timeout=*/ 0); } @Test public void testSignPutUrlWithTimeExpired() throws Exception { - try { - // Intentionally try with a timeout of 0. AWS signature v4 throws an error if - // the timeout is negative. - super.testSignPutUrlWithTime(/*timeout=*/ 0); - if (!supportsUrlWithTime()) { - fail(); - } - } catch (UnsupportedOperationException uoe) { - throw new SkipException("not supported by S3 signer", uoe); - } + // Intentionally try with a timeout of 0. AWS signature v4 throws an error if + // the timeout is negative. + super.testSignPutUrlWithTime(/*timeout=*/ 0); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java ---------------------------------------------------------------------- diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java deleted file mode 100644 index aa967c9..0000000 --- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.aws.s3.blobstore; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.blobstore.util.BlobStoreUtils.cleanRequest; - -import java.util.Date; -import java.util.concurrent.TimeUnit; - -import org.jclouds.aws.s3.AWSS3Client; -import org.jclouds.blobstore.domain.Blob; -import org.jclouds.blobstore.functions.BlobToHttpGetOptions; -import org.jclouds.date.DateService; -import org.jclouds.date.TimeStamp; -import org.jclouds.domain.Credentials; -import org.jclouds.http.HttpRequest; -import org.jclouds.reflect.Invocation; -import org.jclouds.rest.internal.RestAnnotationProcessor; -import org.jclouds.s3.blobstore.S3BlobRequestSigner; -import org.jclouds.s3.blobstore.functions.BlobToObject; -import org.jclouds.s3.filters.RequestAuthorizeSignatureV2; - -import com.google.common.base.Supplier; -import com.google.common.collect.ImmutableList; -import com.google.common.net.HttpHeaders; -import com.google.inject.Inject; -import com.google.inject.Provider; - -public class AWSS3BlobRequestSigner extends S3BlobRequestSigner<AWSS3Client> { - public static final String TEMPORARY_SIGNATURE_PARAM = "Signature"; - - private final RequestAuthorizeSignatureV2 authSigner; - private final String identity; - private final DateService dateService; - private final Provider<String> timeStampProvider; - - @Inject - public AWSS3BlobRequestSigner(RestAnnotationProcessor processor, BlobToObject blobToObject, - BlobToHttpGetOptions blob2HttpGetOptions, Class<AWSS3Client> interfaceClass, - @org.jclouds.location.Provider Supplier<Credentials> credentials, - RequestAuthorizeSignatureV2 authSigner, @TimeStamp Provider<String> timeStampProvider, - DateService dateService) throws SecurityException, NoSuchMethodException { - super(processor, blobToObject, blob2HttpGetOptions, interfaceClass); - this.authSigner = authSigner; - this.identity = credentials.get().identity; - this.dateService = dateService; - this.timeStampProvider = timeStampProvider; - } - - @Override - public HttpRequest signGetBlob(String container, String name, long timeInSeconds) { - checkNotNull(container, "container"); - checkNotNull(name, "name"); - HttpRequest request = processor.apply(Invocation.create(getMethod, ImmutableList.<Object> of(container, name))); - return cleanRequest(signForTemporaryAccess(request, timeInSeconds)); - } - - @Override - public HttpRequest signPutBlob(String container, Blob blob, long timeInSeconds) { - checkNotNull(container, "container"); - checkNotNull(blob, "blob"); - HttpRequest request = processor.apply(Invocation.create(createMethod, - ImmutableList.<Object>of(container, blobToObject.apply(blob)))); - return cleanRequest(signForTemporaryAccess(request, timeInSeconds)); - } - - private HttpRequest signForTemporaryAccess(HttpRequest request, long timeInSeconds) { - // Update the 'DATE' header - String dateString = request.getFirstHeaderOrNull(HttpHeaders.DATE); - if (dateString == null) { - dateString = timeStampProvider.get(); - } - Date date = dateService.rfc1123DateParse(dateString); - String expiration = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(date.getTime()) + timeInSeconds); - HttpRequest.Builder<?> builder = request.toBuilder().replaceHeader(HttpHeaders.DATE, expiration); - String stringToSign = authSigner.createStringToSign(builder.build()); - String signature = authSigner.sign(stringToSign); - HttpRequest ret = builder.addQueryParam(HttpHeaders.EXPIRES, expiration) - .addQueryParam("AWSAccessKeyId", identity) - // Signature MUST be the last parameter because if it isn't, even encoded '+' values in the - // signature will be converted to a space by a subsequent addQueryParameter. - // See HttpRequestTest.testAddBase64AndUrlEncodedQueryParams for more details. - .addQueryParam(TEMPORARY_SIGNATURE_PARAM, signature) - .build(); - return ret; - } -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSignerV4.java ---------------------------------------------------------------------- diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSignerV4.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSignerV4.java index f470999..14112e1 100644 --- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSignerV4.java +++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSignerV4.java @@ -28,20 +28,20 @@ import org.jclouds.reflect.Invocation; import org.jclouds.rest.internal.RestAnnotationProcessor; import org.jclouds.s3.blobstore.S3BlobRequestSigner; import org.jclouds.s3.blobstore.functions.BlobToObject; -import org.jclouds.s3.filters.RequestAuthorizeSignatureV4; +import org.jclouds.s3.filters.RequestAuthorizeSignature; import com.google.common.collect.ImmutableList; import com.google.inject.Inject; public class AWSS3BlobRequestSignerV4 extends S3BlobRequestSigner<AWSS3Client> { - private final RequestAuthorizeSignatureV4 authSigner; + private final RequestAuthorizeSignature authSigner; @Inject public AWSS3BlobRequestSignerV4(RestAnnotationProcessor processor, BlobToObject blobToObject, BlobToHttpGetOptions blob2HttpGetOptions, Class<AWSS3Client> interfaceClass, - RequestAuthorizeSignatureV4 authSigner) throws SecurityException, NoSuchMethodException { - super(processor, blobToObject, blob2HttpGetOptions, interfaceClass); + RequestAuthorizeSignature authSigner) throws SecurityException, NoSuchMethodException { + super(processor, blobToObject, blob2HttpGetOptions, interfaceClass, authSigner); this.authSigner = authSigner; } http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java ---------------------------------------------------------------------- diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java index f494ba1..6eac649 100644 --- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java +++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java @@ -18,10 +18,10 @@ package org.jclouds.aws.s3.filters; import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AUTH_TAG; import static org.jclouds.aws.reference.AWSConstants.PROPERTY_HEADER_TAG; -import static org.jclouds.aws.s3.blobstore.AWSS3BlobRequestSigner.TEMPORARY_SIGNATURE_PARAM; import static org.jclouds.http.utils.Queries.queryParser; import static org.jclouds.s3.reference.S3Constants.PROPERTY_S3_SERVICE_PATH; import static org.jclouds.s3.reference.S3Constants.PROPERTY_S3_VIRTUAL_HOST_BUCKETS; +import static org.jclouds.s3.reference.S3Constants.TEMPORARY_SIGNATURE_PARAM; import javax.inject.Inject; import javax.inject.Named; @@ -29,6 +29,7 @@ import javax.inject.Provider; import javax.inject.Singleton; import org.jclouds.crypto.Crypto; +import org.jclouds.date.DateService; import org.jclouds.date.TimeStamp; import org.jclouds.domain.Credentials; import org.jclouds.http.HttpRequest; @@ -47,9 +48,10 @@ public class AWSRequestAuthorizeSignature extends RequestAuthorizeSignatureV2 { @Named(PROPERTY_S3_VIRTUAL_HOST_BUCKETS) boolean isVhostStyle, @Named(PROPERTY_S3_SERVICE_PATH) String servicePath, @Named(PROPERTY_HEADER_TAG) String headerTag, @org.jclouds.location.Provider Supplier<Credentials> creds, - @TimeStamp Provider<String> timeStampProvider, Crypto crypto, HttpUtils utils) { + @TimeStamp Provider<String> timeStampProvider, Crypto crypto, HttpUtils utils, + DateService dateService) { super(signatureWire, authTag, isVhostStyle, servicePath, headerTag, creds, timeStampProvider, crypto, - utils); + utils, dateService); } @Override http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignatureV4.java ---------------------------------------------------------------------- diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignatureV4.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignatureV4.java index f65040a..3450d9d 100644 --- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignatureV4.java +++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignatureV4.java @@ -17,8 +17,8 @@ package org.jclouds.aws.s3.filters; import static org.jclouds.http.utils.Queries.queryParser; -import static org.jclouds.aws.s3.blobstore.AWSS3BlobRequestSigner.TEMPORARY_SIGNATURE_PARAM; import static org.jclouds.s3.filters.AwsSignatureV4Constants.AMZ_SIGNATURE_PARAM; +import static org.jclouds.s3.reference.S3Constants.TEMPORARY_SIGNATURE_PARAM; import javax.inject.Inject; import javax.inject.Singleton; http://git-wip-us.apache.org/repos/asf/jclouds/blob/7a110b31/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/integration/AWSS3BlobSignerLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/integration/AWSS3BlobSignerLiveTest.java b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/integration/AWSS3BlobSignerLiveTest.java index 6a85d0a..769ded7 100644 --- a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/integration/AWSS3BlobSignerLiveTest.java +++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/integration/AWSS3BlobSignerLiveTest.java @@ -35,9 +35,4 @@ public class AWSS3BlobSignerLiveTest extends S3BlobSignerLiveTest { overrides.setProperty(Constants.PROPERTY_SESSION_INTERVAL, "1"); return overrides; } - - @Override - protected boolean supportsUrlWithTime() { - return true; - } }
