Skip to content
This repository has been archived by the owner on Jul 25, 2020. It is now read-only.

add aws s3 signature v4 #678

Closed
wants to merge 14 commits into from
42 changes: 40 additions & 2 deletions apis/s3/src/main/java/org/jclouds/s3/config/S3HttpApiModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.jclouds.s3.config;

import java.net.URI;
import java.util.Date;
import java.util.Set;
import java.util.concurrent.TimeUnit;

Expand All @@ -33,6 +34,7 @@
import org.jclouds.date.DateService;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.HttpErrorHandler;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpRetryHandler;
import org.jclouds.http.annotation.ClientError;
import org.jclouds.http.annotation.Redirection;
Expand Down Expand Up @@ -172,13 +174,26 @@ protected void bindErrorHandlers() {
}

protected void bindRequestSigner() {
bind(RequestAuthorizeSignature.class).in(Scopes.SINGLETON);
bind(RequestAuthorizeSignature.class).to(RequestAuthorizeSignature.RequestAuthorizeSignatureV2.class).in(Scopes.SINGLETON);
}

@Provides
@Singleton
protected RequestSigner provideRequestSigner(RequestAuthorizeSignature in) {
return in;
if (in instanceof RequestSigner) {
return (RequestSigner) in;
}
return new RequestSigner() {
@Override
public String createStringToSign(HttpRequest input) {
return null;
}

@Override
public String sign(String toSign) {
return null;
}
};
}

@Override
Expand Down Expand Up @@ -208,4 +223,27 @@ public String get() {
}
}, seconds, TimeUnit.SECONDS);
}

@Provides
@TimeStamp
protected Date provideTimeStampDate(@TimeStamp Supplier<Date> cache) {
return cache.get();
}

/**
* borrowing concurrency code to ensure that caching takes place properly
*/
@Provides
@TimeStamp
@Singleton
protected Supplier<Date> provideTimeStampCacheDate(
@Named(Constants.PROPERTY_SESSION_INTERVAL) long seconds,
@TimeStamp final Supplier<String> timestamp,
final DateService dateService) {
return Suppliers.memoizeWithExpiration(new Supplier<Date>() {
public Date get() {
return dateService.rfc822DateParse(timestamp.get());
}
}, seconds, TimeUnit.SECONDS);
}
}