rename TemporaryCredentials to SessionCredentials per aws sdk

This commit is contained in:
Adrian Cole 2013-02-25 19:14:16 -08:00
parent f9c8fc0b1f
commit a4fa0d5dfd
19 changed files with 213 additions and 234 deletions

View File

@ -32,7 +32,7 @@ import javax.inject.Inject;
import javax.inject.Provider; import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.crypto.Crypto; import org.jclouds.crypto.Crypto;
import org.jclouds.date.TimeStamp; import org.jclouds.date.TimeStamp;
import org.jclouds.domain.Credentials; import org.jclouds.domain.Credentials;
@ -70,15 +70,15 @@ public class RestAuthentication implements HttpRequestFilter, RequestSigner {
public HttpRequest filter(HttpRequest request) throws HttpException { public HttpRequest filter(HttpRequest request) throws HttpException {
Credentials current = creds.get(); Credentials current = creds.get();
if (current instanceof TemporaryCredentials) { if (current instanceof SessionCredentials) {
request = replaceSecurityTokenHeader(request, TemporaryCredentials.class.cast(current)); request = replaceSecurityTokenHeader(request, SessionCredentials.class.cast(current));
} }
request = replaceDateHeader(request, timeStampProvider.get()); request = replaceDateHeader(request, timeStampProvider.get());
String signature = sign(createStringToSign(request)); String signature = sign(createStringToSign(request));
return replaceAuthorizationHeader(request, signature); return replaceAuthorizationHeader(request, signature);
} }
private HttpRequest replaceSecurityTokenHeader(HttpRequest request, TemporaryCredentials current) { private HttpRequest replaceSecurityTokenHeader(HttpRequest request, SessionCredentials current) {
return request.toBuilder().replaceHeader("x-amz-security-token", current.getSessionToken()).build(); return request.toBuilder().replaceHeader("x-amz-security-token", current.getSessionToken()).build();
} }

View File

@ -39,7 +39,7 @@ import javax.inject.Singleton;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import org.jclouds.Constants; import org.jclouds.Constants;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.crypto.Crypto; import org.jclouds.crypto.Crypto;
import org.jclouds.crypto.CryptoStreams; import org.jclouds.crypto.CryptoStreams;
import org.jclouds.date.TimeStamp; import org.jclouds.date.TimeStamp;
@ -118,8 +118,8 @@ public class RequestAuthorizeSignature implements HttpRequestFilter, RequestSign
public HttpRequest filter(HttpRequest request) throws HttpException { public HttpRequest filter(HttpRequest request) throws HttpException {
request = replaceDateHeader(request); request = replaceDateHeader(request);
Credentials current = creds.get(); Credentials current = creds.get();
if (current instanceof TemporaryCredentials) { if (current instanceof SessionCredentials) {
request = replaceSecurityTokenHeader(request, TemporaryCredentials.class.cast(current)); request = replaceSecurityTokenHeader(request, SessionCredentials.class.cast(current));
} }
String signature = calculateSignature(createStringToSign(request)); String signature = calculateSignature(createStringToSign(request));
request = replaceAuthorizationHeader(request, signature); request = replaceAuthorizationHeader(request, signature);
@ -127,7 +127,7 @@ public class RequestAuthorizeSignature implements HttpRequestFilter, RequestSign
return request; return request;
} }
HttpRequest replaceSecurityTokenHeader(HttpRequest request, TemporaryCredentials current) { HttpRequest replaceSecurityTokenHeader(HttpRequest request, SessionCredentials current) {
return request.toBuilder().replaceHeader("x-amz-security-token", current.getSessionToken()).build(); return request.toBuilder().replaceHeader("x-amz-security-token", current.getSessionToken()).build();
} }

View File

@ -21,7 +21,7 @@ package org.jclouds.s3.filters;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import org.jclouds.ContextBuilder; import org.jclouds.ContextBuilder;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.date.TimeStamp; import org.jclouds.date.TimeStamp;
import org.jclouds.date.internal.SimpleDateFormatDateService; import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.domain.Credentials; import org.jclouds.domain.Credentials;
@ -47,8 +47,8 @@ import com.google.inject.Module;
* @author Adrian Cole * @author Adrian Cole
*/ */
// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire // NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
@Test(groups = "unit", testName = "RequestAuthorizeSignatureWithTemporaryCredentialsTest") @Test(groups = "unit", testName = "RequestAuthorizeSignatureWithSessionCredentialsTest")
public class RequestAuthorizeSignatureWithTemporaryCredentialsTest { public class RequestAuthorizeSignatureWithSessionCredentialsTest {
public static Injector injector(Credentials creds) { public static Injector injector(Credentials creds) {
return ContextBuilder.newBuilder("s3") return ContextBuilder.newBuilder("s3")
.credentialsSupplier(Suppliers.<Credentials> ofInstance(creds)) .credentialsSupplier(Suppliers.<Credentials> ofInstance(creds))
@ -68,7 +68,7 @@ public class RequestAuthorizeSignatureWithTemporaryCredentialsTest {
return injector(creds).getInstance(RequestAuthorizeSignature.class); return injector(creds).getInstance(RequestAuthorizeSignature.class);
} }
TemporaryCredentials temporaryCredentials = TemporaryCredentials.builder() SessionCredentials temporaryCredentials = SessionCredentials.builder()
.accessKeyId("AKIAIOSFODNN7EXAMPLE") .accessKeyId("AKIAIOSFODNN7EXAMPLE")
.secretAccessKey("wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY") .secretAccessKey("wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY")
.sessionToken("AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT") .sessionToken("AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT")

View File

@ -21,12 +21,12 @@ package org.jclouds.sts;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.jclouds.concurrent.Timeout; import org.jclouds.concurrent.Timeout;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.sts.domain.User; import org.jclouds.sts.domain.User;
import org.jclouds.sts.domain.UserAndTemporaryCredentials; import org.jclouds.sts.domain.UserAndSessionCredentials;
import org.jclouds.sts.options.AssumeRoleOptions; import org.jclouds.sts.options.AssumeRoleOptions;
import org.jclouds.sts.options.FederatedUserOptions; import org.jclouds.sts.options.FederatedUserOptions;
import org.jclouds.sts.options.TemporaryCredentialsOptions; import org.jclouds.sts.options.SessionCredentialsOptions;
/** /**
* Provides access to Amazon STS via the Query API * Provides access to Amazon STS via the Query API
@ -42,13 +42,13 @@ public interface STSApi {
* Returns a set of temporary credentials for an AWS account or IAM user, * Returns a set of temporary credentials for an AWS account or IAM user,
* with a default timeout * with a default timeout
*/ */
TemporaryCredentials createTemporaryCredentials(); SessionCredentials createTemporaryCredentials();
/** /**
* like {@link #createTemporaryCredentials()}, except you can modify the * like {@link #createTemporaryCredentials()}, except you can modify the
* timeout and other parameters. * timeout and other parameters.
*/ */
TemporaryCredentials createTemporaryCredentials(TemporaryCredentialsOptions options); SessionCredentials createTemporaryCredentials(SessionCredentialsOptions options);
/** /**
* Assumes a role for a specified session. Only IAM users can assume a role. * Assumes a role for a specified session. Only IAM users can assume a role.
@ -60,13 +60,13 @@ public interface STSApi {
* The Amazon Resource Name (ARN) of the role that the caller is * The Amazon Resource Name (ARN) of the role that the caller is
* assuming. * assuming.
*/ */
UserAndTemporaryCredentials assumeRole(String roleArn, String sessionName); UserAndSessionCredentials assumeRole(String roleArn, String sessionName);
/** /**
* like {@link #assumeRole(String, String)}, except you can modify the * like {@link #assumeRole(String, String)}, except you can modify the
* timeout and other parameters. * timeout and other parameters.
*/ */
UserAndTemporaryCredentials assumeRole(String roleArn, String sessionName, AssumeRoleOptions options); UserAndSessionCredentials assumeRole(String roleArn, String sessionName, AssumeRoleOptions options);
/** /**
* Returns a set of temporary credentials for a federated user with the user * Returns a set of temporary credentials for a federated user with the user
@ -76,12 +76,12 @@ public interface STSApi {
* The name of the federated user, included as part of * The name of the federated user, included as part of
* {@link User#getId}. * {@link User#getId}.
*/ */
UserAndTemporaryCredentials createFederatedUser(String userName); UserAndSessionCredentials createFederatedUser(String userName);
/** /**
* like {@link #createFederatedUser(String)}, except you can modify the * like {@link #createFederatedUser(String)}, except you can modify the
* timeout and other parameters. * timeout and other parameters.
*/ */
UserAndTemporaryCredentials createFederatedUser(String userName, FederatedUserOptions options); UserAndSessionCredentials createFederatedUser(String userName, FederatedUserOptions options);
} }

View File

@ -23,18 +23,18 @@ import javax.ws.rs.FormParam;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.aws.filters.FormSigner; import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.xml.TemporaryCredentialsHandler; import org.jclouds.aws.xml.SessionCredentialsHandler;
import org.jclouds.rest.annotations.FormParams; import org.jclouds.rest.annotations.FormParams;
import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.VirtualHost; import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser; import org.jclouds.rest.annotations.XMLResponseParser;
import org.jclouds.sts.domain.UserAndTemporaryCredentials; import org.jclouds.sts.domain.UserAndSessionCredentials;
import org.jclouds.sts.options.AssumeRoleOptions; import org.jclouds.sts.options.AssumeRoleOptions;
import org.jclouds.sts.options.FederatedUserOptions; import org.jclouds.sts.options.FederatedUserOptions;
import org.jclouds.sts.options.TemporaryCredentialsOptions; import org.jclouds.sts.options.SessionCredentialsOptions;
import org.jclouds.sts.xml.UserAndTemporaryCredentialsHandler; import org.jclouds.sts.xml.UserAndSessionCredentialsHandler;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@ -55,19 +55,19 @@ public interface STSAsyncApi {
@Named("GetSessionToken") @Named("GetSessionToken")
@POST @POST
@Path("/") @Path("/")
@XMLResponseParser(TemporaryCredentialsHandler.class) @XMLResponseParser(SessionCredentialsHandler.class)
@FormParams(keys = "Action", values = "GetSessionToken") @FormParams(keys = "Action", values = "GetSessionToken")
ListenableFuture<TemporaryCredentials> createTemporaryCredentials(); ListenableFuture<SessionCredentials> createTemporaryCredentials();
/** /**
* @see STSApi#createTemporaryCredentials(TemporaryCredentialsOptions) * @see STSApi#createTemporaryCredentials(SessionCredentialsOptions)
*/ */
@Named("GetSessionToken") @Named("GetSessionToken")
@POST @POST
@Path("/") @Path("/")
@XMLResponseParser(TemporaryCredentialsHandler.class) @XMLResponseParser(SessionCredentialsHandler.class)
@FormParams(keys = "Action", values = "GetSessionToken") @FormParams(keys = "Action", values = "GetSessionToken")
ListenableFuture<TemporaryCredentials> createTemporaryCredentials(TemporaryCredentialsOptions options); ListenableFuture<SessionCredentials> createTemporaryCredentials(SessionCredentialsOptions options);
/** /**
* @see STSApi#assumeRole(String, String) * @see STSApi#assumeRole(String, String)
@ -75,9 +75,9 @@ public interface STSAsyncApi {
@Named("AssumeRole") @Named("AssumeRole")
@POST @POST
@Path("/") @Path("/")
@XMLResponseParser(UserAndTemporaryCredentialsHandler.class) @XMLResponseParser(UserAndSessionCredentialsHandler.class)
@FormParams(keys = "Action", values = "AssumeRole") @FormParams(keys = "Action", values = "AssumeRole")
ListenableFuture<UserAndTemporaryCredentials> assumeRole(@FormParam("RoleArn") String roleArn, ListenableFuture<UserAndSessionCredentials> assumeRole(@FormParam("RoleArn") String roleArn,
@FormParam("RoleSessionName") String sessionName); @FormParam("RoleSessionName") String sessionName);
/** /**
@ -86,9 +86,9 @@ public interface STSAsyncApi {
@Named("AssumeRole") @Named("AssumeRole")
@POST @POST
@Path("/") @Path("/")
@XMLResponseParser(UserAndTemporaryCredentialsHandler.class) @XMLResponseParser(UserAndSessionCredentialsHandler.class)
@FormParams(keys = "Action", values = "AssumeRole") @FormParams(keys = "Action", values = "AssumeRole")
ListenableFuture<UserAndTemporaryCredentials> assumeRole(@FormParam("RoleArn") String roleArn, ListenableFuture<UserAndSessionCredentials> assumeRole(@FormParam("RoleArn") String roleArn,
@FormParam("RoleSessionName") String sessionName, AssumeRoleOptions options); @FormParam("RoleSessionName") String sessionName, AssumeRoleOptions options);
/** /**
@ -97,9 +97,9 @@ public interface STSAsyncApi {
@Named("GetFederationToken") @Named("GetFederationToken")
@POST @POST
@Path("/") @Path("/")
@XMLResponseParser(UserAndTemporaryCredentialsHandler.class) @XMLResponseParser(UserAndSessionCredentialsHandler.class)
@FormParams(keys = "Action", values = "GetFederationToken") @FormParams(keys = "Action", values = "GetFederationToken")
ListenableFuture<UserAndTemporaryCredentials> createFederatedUser(@FormParam("Name") String userName); ListenableFuture<UserAndSessionCredentials> createFederatedUser(@FormParam("Name") String userName);
/** /**
* @see STSApi#createFederatedUser(FederatedUserOptions) * @see STSApi#createFederatedUser(FederatedUserOptions)
@ -107,7 +107,7 @@ public interface STSAsyncApi {
@Named("GetFederationToken") @Named("GetFederationToken")
@POST @POST
@Path("/") @Path("/")
@XMLResponseParser(UserAndTemporaryCredentialsHandler.class) @XMLResponseParser(UserAndSessionCredentialsHandler.class)
@FormParams(keys = "Action", values = "GetFederationToken") @FormParams(keys = "Action", values = "GetFederationToken")
ListenableFuture<UserAndTemporaryCredentials> createFederatedUser(@FormParam("Name") String userName, FederatedUserOptions options); ListenableFuture<UserAndSessionCredentials> createFederatedUser(@FormParam("Name") String userName, FederatedUserOptions options);
} }

View File

@ -20,7 +20,7 @@ package org.jclouds.sts.domain;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import com.google.common.base.Objects; import com.google.common.base.Objects;
@ -28,7 +28,7 @@ import com.google.common.base.Objects;
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
public final class UserAndTemporaryCredentials { public final class UserAndSessionCredentials {
public static Builder builder() { public static Builder builder() {
return new Builder(); return new Builder();
} }
@ -39,11 +39,11 @@ public final class UserAndTemporaryCredentials {
public final static class Builder { public final static class Builder {
private User user; private User user;
private TemporaryCredentials credentials; private SessionCredentials credentials;
private int packedPolicySize; private int packedPolicySize;
/** /**
* @see UserAndTemporaryCredentials#getUser() * @see UserAndSessionCredentials#getUser()
*/ */
public Builder user(User user) { public Builder user(User user) {
this.user = user; this.user = user;
@ -51,42 +51,42 @@ public final class UserAndTemporaryCredentials {
} }
/** /**
* @see UserAndTemporaryCredentials#getCredentials() * @see UserAndSessionCredentials#getCredentials()
*/ */
public Builder credentials(TemporaryCredentials credentials) { public Builder credentials(SessionCredentials credentials) {
this.credentials = credentials; this.credentials = credentials;
return this; return this;
} }
/** /**
* @see UserAndTemporaryCredentials#getPackedPolicySize() * @see UserAndSessionCredentials#getPackedPolicySize()
*/ */
public Builder packedPolicySize(int packedPolicySize) { public Builder packedPolicySize(int packedPolicySize) {
this.packedPolicySize = packedPolicySize; this.packedPolicySize = packedPolicySize;
return this; return this;
} }
public UserAndTemporaryCredentials build() { public UserAndSessionCredentials build() {
return new UserAndTemporaryCredentials(user, credentials, packedPolicySize); return new UserAndSessionCredentials(user, credentials, packedPolicySize);
} }
public Builder from(UserAndTemporaryCredentials in) { public Builder from(UserAndSessionCredentials in) {
return this.user(in.user).credentials(in.credentials).packedPolicySize(in.packedPolicySize); return this.user(in.user).credentials(in.credentials).packedPolicySize(in.packedPolicySize);
} }
} }
private final User user; private final User user;
private final TemporaryCredentials credentials; private final SessionCredentials credentials;
private final int packedPolicySize; private final int packedPolicySize;
private UserAndTemporaryCredentials(User user, TemporaryCredentials credentials, int packedPolicySize) { private UserAndSessionCredentials(User user, SessionCredentials credentials, int packedPolicySize) {
this.user = checkNotNull(user, "user"); this.user = checkNotNull(user, "user");
this.credentials = checkNotNull(credentials, "credentials for %s", user); this.credentials = checkNotNull(credentials, "credentials for %s", user);
this.packedPolicySize = checkNotNull(packedPolicySize, "packedPolicySize for %s", user); this.packedPolicySize = checkNotNull(packedPolicySize, "packedPolicySize for %s", user);
} }
/** /**
* user correlating to {@link UserAndTemporaryCredentials#getCredentials()} * user correlating to {@link UserAndSessionCredentials#getCredentials()}
*/ */
public User getUser() { public User getUser() {
return user; return user;
@ -96,7 +96,7 @@ public final class UserAndTemporaryCredentials {
* The temporary security credentials, which includes an Access Key ID, a * The temporary security credentials, which includes an Access Key ID, a
* Secret Access Key, and a security token. * Secret Access Key, and a security token.
*/ */
public TemporaryCredentials getCredentials() { public SessionCredentials getCredentials() {
return credentials; return credentials;
} }
@ -120,7 +120,7 @@ public final class UserAndTemporaryCredentials {
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
UserAndTemporaryCredentials other = (UserAndTemporaryCredentials) obj; UserAndSessionCredentials other = (UserAndSessionCredentials) obj;
return Objects.equal(this.user, other.user) && Objects.equal(this.credentials, other.credentials) return Objects.equal(this.user, other.user) && Objects.equal(this.credentials, other.credentials)
&& Objects.equal(this.packedPolicySize, other.packedPolicySize); && Objects.equal(this.packedPolicySize, other.packedPolicySize);
} }

View File

@ -32,7 +32,7 @@ import com.google.common.collect.Multimap;
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
public class TemporaryCredentialsOptions extends BaseHttpRequestOptions implements Cloneable { public class SessionCredentialsOptions extends BaseHttpRequestOptions implements Cloneable {
// long as this is a more typical unit for duration, hence less casting // long as this is a more typical unit for duration, hence less casting
private Long durationSeconds; private Long durationSeconds;
@ -42,7 +42,7 @@ public class TemporaryCredentialsOptions extends BaseHttpRequestOptions implemen
/** /**
* The identification number of the MFA device for the user. * The identification number of the MFA device for the user.
*/ */
public TemporaryCredentialsOptions serialNumber(String serialNumber) { public SessionCredentialsOptions serialNumber(String serialNumber) {
this.serialNumber = serialNumber; this.serialNumber = serialNumber;
return this; return this;
} }
@ -51,7 +51,7 @@ public class TemporaryCredentialsOptions extends BaseHttpRequestOptions implemen
* The duration, in seconds, that the credentials should remain valid. 12 * The duration, in seconds, that the credentials should remain valid. 12
* hours is default. 15 minutes is current minimum. * hours is default. 15 minutes is current minimum.
*/ */
public TemporaryCredentialsOptions durationSeconds(long durationSeconds) { public SessionCredentialsOptions durationSeconds(long durationSeconds) {
this.durationSeconds = durationSeconds; this.durationSeconds = durationSeconds;
return this; return this;
} }
@ -59,7 +59,7 @@ public class TemporaryCredentialsOptions extends BaseHttpRequestOptions implemen
/** /**
* The value provided by the MFA device. * The value provided by the MFA device.
*/ */
public TemporaryCredentialsOptions tokenCode(String tokenCode) { public SessionCredentialsOptions tokenCode(String tokenCode) {
this.tokenCode = tokenCode; this.tokenCode = tokenCode;
return this; return this;
} }
@ -67,24 +67,24 @@ public class TemporaryCredentialsOptions extends BaseHttpRequestOptions implemen
public static class Builder { public static class Builder {
/** /**
* @see TemporaryCredentialsOptions#serialNumber * @see SessionCredentialsOptions#serialNumber
*/ */
public static TemporaryCredentialsOptions serialNumber(String serialNumber) { public static SessionCredentialsOptions serialNumber(String serialNumber) {
return new TemporaryCredentialsOptions().serialNumber(serialNumber); return new SessionCredentialsOptions().serialNumber(serialNumber);
} }
/** /**
* @see TemporaryCredentialsOptions#durationSeconds * @see SessionCredentialsOptions#durationSeconds
*/ */
public static TemporaryCredentialsOptions durationSeconds(long durationSeconds) { public static SessionCredentialsOptions durationSeconds(long durationSeconds) {
return new TemporaryCredentialsOptions().durationSeconds(durationSeconds); return new SessionCredentialsOptions().durationSeconds(durationSeconds);
} }
/** /**
* @see TemporaryCredentialsOptions#tokenCode * @see SessionCredentialsOptions#tokenCode
*/ */
public static TemporaryCredentialsOptions tokenCode(String tokenCode) { public static SessionCredentialsOptions tokenCode(String tokenCode) {
return new TemporaryCredentialsOptions().tokenCode(tokenCode); return new SessionCredentialsOptions().tokenCode(tokenCode);
} }
} }
@ -109,8 +109,8 @@ public class TemporaryCredentialsOptions extends BaseHttpRequestOptions implemen
} }
@Override @Override
public TemporaryCredentialsOptions clone() { public SessionCredentialsOptions clone() {
return new TemporaryCredentialsOptions().serialNumber(serialNumber).durationSeconds(durationSeconds) return new SessionCredentialsOptions().serialNumber(serialNumber).durationSeconds(durationSeconds)
.tokenCode(tokenCode); .tokenCode(tokenCode);
} }
@ -125,7 +125,7 @@ public class TemporaryCredentialsOptions extends BaseHttpRequestOptions implemen
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
TemporaryCredentialsOptions other = TemporaryCredentialsOptions.class.cast(obj); SessionCredentialsOptions other = SessionCredentialsOptions.class.cast(obj);
return Objects.equal(this.serialNumber, other.serialNumber) return Objects.equal(this.serialNumber, other.serialNumber)
&& Objects.equal(this.durationSeconds, other.durationSeconds) && Objects.equal(this.durationSeconds, other.durationSeconds)
&& Objects.equal(this.tokenCode, other.tokenCode); && Objects.equal(this.tokenCode, other.tokenCode);

View File

@ -21,10 +21,10 @@ package org.jclouds.sts.xml;
import static org.jclouds.util.SaxUtils.currentOrNull; import static org.jclouds.util.SaxUtils.currentOrNull;
import static org.jclouds.util.SaxUtils.equalsOrSuffix; import static org.jclouds.util.SaxUtils.equalsOrSuffix;
import org.jclouds.aws.xml.TemporaryCredentialsHandler; import org.jclouds.aws.xml.SessionCredentialsHandler;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.sts.domain.User; import org.jclouds.sts.domain.User;
import org.jclouds.sts.domain.UserAndTemporaryCredentials; import org.jclouds.sts.domain.UserAndSessionCredentials;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@ -34,27 +34,24 @@ import com.google.inject.Inject;
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
public class UserAndTemporaryCredentialsHandler extends ParseSax.HandlerForGeneratedRequestWithResult<UserAndTemporaryCredentials> { public class UserAndSessionCredentialsHandler extends ParseSax.HandlerForGeneratedRequestWithResult<UserAndSessionCredentials> {
private final TemporaryCredentialsHandler credsHandler; private final SessionCredentialsHandler credsHandler;
private StringBuilder currentText = new StringBuilder(); private StringBuilder currentText = new StringBuilder();
private UserAndTemporaryCredentials.Builder builder = UserAndTemporaryCredentials.builder(); private UserAndSessionCredentials.Builder builder = UserAndSessionCredentials.builder();
@Inject @Inject
public UserAndTemporaryCredentialsHandler(TemporaryCredentialsHandler credsHandler) { public UserAndSessionCredentialsHandler(SessionCredentialsHandler credsHandler) {
this.credsHandler = credsHandler; this.credsHandler = credsHandler;
} }
/**
* {@inheritDoc}
*/
@Override @Override
public UserAndTemporaryCredentials getResult() { public UserAndSessionCredentials getResult() {
try { try {
return builder.build(); return builder.build();
} finally { } finally {
builder = UserAndTemporaryCredentials.builder(); builder = UserAndSessionCredentials.builder();
} }
} }

View File

@ -20,7 +20,7 @@ package org.jclouds.sts;
import static org.jclouds.sts.options.AssumeRoleOptions.Builder.externalId; import static org.jclouds.sts.options.AssumeRoleOptions.Builder.externalId;
import static org.jclouds.sts.options.FederatedUserOptions.Builder.policy; import static org.jclouds.sts.options.FederatedUserOptions.Builder.policy;
import static org.jclouds.sts.options.TemporaryCredentialsOptions.Builder.serialNumber; import static org.jclouds.sts.options.SessionCredentialsOptions.Builder.serialNumber;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;

View File

@ -22,12 +22,12 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.MINUTES;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.sts.domain.UserAndTemporaryCredentials; import org.jclouds.sts.domain.UserAndSessionCredentials;
import org.jclouds.sts.internal.BaseSTSApiLiveTest; import org.jclouds.sts.internal.BaseSTSApiLiveTest;
import org.jclouds.sts.options.AssumeRoleOptions; import org.jclouds.sts.options.AssumeRoleOptions;
import org.jclouds.sts.options.FederatedUserOptions; import org.jclouds.sts.options.FederatedUserOptions;
import org.jclouds.sts.options.TemporaryCredentialsOptions; import org.jclouds.sts.options.SessionCredentialsOptions;
import org.testng.SkipException; import org.testng.SkipException;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -39,8 +39,8 @@ public class STSApiLiveTest extends BaseSTSApiLiveTest {
@Test @Test
protected void testCreateTemporaryCredentials() { protected void testCreateTemporaryCredentials() {
TemporaryCredentials creds = api().createTemporaryCredentials( SessionCredentials creds = api().createTemporaryCredentials(
new TemporaryCredentialsOptions().durationSeconds(MINUTES.toSeconds(15))); new SessionCredentialsOptions().durationSeconds(MINUTES.toSeconds(15)));
checkTemporaryCredentials(creds); checkTemporaryCredentials(creds);
// TODO: actually login to some service // TODO: actually login to some service
// //
@ -53,7 +53,7 @@ public class STSApiLiveTest extends BaseSTSApiLiveTest {
@Test @Test
protected void testCreateFederatedUser() { protected void testCreateFederatedUser() {
UserAndTemporaryCredentials user = api().createFederatedUser("Bob", new FederatedUserOptions().durationSeconds(MINUTES.toSeconds(15))); UserAndSessionCredentials user = api().createFederatedUser("Bob", new FederatedUserOptions().durationSeconds(MINUTES.toSeconds(15)));
checkTemporaryCredentials(user.getCredentials()); checkTemporaryCredentials(user.getCredentials());
assertTrue(user.getUser().getId().contains("Bob"), user + " id incorrect"); assertTrue(user.getUser().getId().contains("Bob"), user + " id incorrect");
assertTrue(user.getUser().getArn().contains("Bob"), user + " arn incorrect"); assertTrue(user.getUser().getArn().contains("Bob"), user + " arn incorrect");
@ -63,7 +63,7 @@ public class STSApiLiveTest extends BaseSTSApiLiveTest {
@Test @Test
protected void testAssumeRole() { protected void testAssumeRole() {
String arnToAssume = getTestArn(); String arnToAssume = getTestArn();
UserAndTemporaryCredentials role = api().assumeRole(arnToAssume, "session", UserAndSessionCredentials role = api().assumeRole(arnToAssume, "session",
new AssumeRoleOptions().durationSeconds(MINUTES.toSeconds(15))); new AssumeRoleOptions().durationSeconds(MINUTES.toSeconds(15)));
checkTemporaryCredentials(role.getCredentials()); checkTemporaryCredentials(role.getCredentials());
assertTrue(role.getUser().getId().contains("session"), role + " id incorrect"); assertTrue(role.getUser().getId().contains("session"), role + " id incorrect");
@ -75,7 +75,7 @@ public class STSApiLiveTest extends BaseSTSApiLiveTest {
throw new SkipException("TODO: need to query a valid arn to assume"); throw new SkipException("TODO: need to query a valid arn to assume");
} }
private void checkTemporaryCredentials(TemporaryCredentials creds) { private void checkTemporaryCredentials(SessionCredentials creds) {
checkNotNull(creds.getAccessKeyId(), "AccessKeyId cannot be null for TemporaryCredentials."); checkNotNull(creds.getAccessKeyId(), "AccessKeyId cannot be null for TemporaryCredentials.");
checkNotNull(creds.getSecretAccessKey(), "SecretAccessKey cannot be null for TemporaryCredentials."); checkNotNull(creds.getSecretAccessKey(), "SecretAccessKey cannot be null for TemporaryCredentials.");
checkNotNull(creds.getSessionToken(), "SessionToken cannot be null for TemporaryCredentials."); checkNotNull(creds.getSessionToken(), "SessionToken cannot be null for TemporaryCredentials.");

View File

@ -18,9 +18,9 @@
*/ */
package org.jclouds.sts.options; package org.jclouds.sts.options;
import static org.jclouds.sts.options.TemporaryCredentialsOptions.Builder.serialNumber; import static org.jclouds.sts.options.SessionCredentialsOptions.Builder.serialNumber;
import static org.jclouds.sts.options.TemporaryCredentialsOptions.Builder.durationSeconds; import static org.jclouds.sts.options.SessionCredentialsOptions.Builder.durationSeconds;
import static org.jclouds.sts.options.TemporaryCredentialsOptions.Builder.tokenCode; import static org.jclouds.sts.options.SessionCredentialsOptions.Builder.tokenCode;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -31,36 +31,36 @@ import com.google.common.collect.ImmutableSet;
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
@Test(groups = "unit", testName = "TemporaryCredentialsOptionsTest") @Test(groups = "unit", testName = "SessionCredentialsOptionsTest")
public class TemporaryCredentialsOptionsTest { public class SessionCredentialsOptionsTest {
public void testSerialNumber() { public void testSerialNumber() {
TemporaryCredentialsOptions options = new TemporaryCredentialsOptions().serialNumber("YourMFADeviceSerialNumber"); SessionCredentialsOptions options = new SessionCredentialsOptions().serialNumber("YourMFADeviceSerialNumber");
assertEquals(ImmutableSet.of("YourMFADeviceSerialNumber"), options.buildFormParameters().get("SerialNumber")); assertEquals(ImmutableSet.of("YourMFADeviceSerialNumber"), options.buildFormParameters().get("SerialNumber"));
} }
public void testSerialNumberStatic() { public void testSerialNumberStatic() {
TemporaryCredentialsOptions options = serialNumber("YourMFADeviceSerialNumber"); SessionCredentialsOptions options = serialNumber("YourMFADeviceSerialNumber");
assertEquals(ImmutableSet.of("YourMFADeviceSerialNumber"), options.buildFormParameters().get("SerialNumber")); assertEquals(ImmutableSet.of("YourMFADeviceSerialNumber"), options.buildFormParameters().get("SerialNumber"));
} }
public void testDurationSeconds() { public void testDurationSeconds() {
TemporaryCredentialsOptions options = new TemporaryCredentialsOptions().durationSeconds(3600); SessionCredentialsOptions options = new SessionCredentialsOptions().durationSeconds(3600);
assertEquals(ImmutableSet.of("3600"), options.buildFormParameters().get("DurationSeconds")); assertEquals(ImmutableSet.of("3600"), options.buildFormParameters().get("DurationSeconds"));
} }
public void testDurationSecondsStatic() { public void testDurationSecondsStatic() {
TemporaryCredentialsOptions options = durationSeconds(3600); SessionCredentialsOptions options = durationSeconds(3600);
assertEquals(ImmutableSet.of("3600"), options.buildFormParameters().get("DurationSeconds")); assertEquals(ImmutableSet.of("3600"), options.buildFormParameters().get("DurationSeconds"));
} }
public void testTokenCode() { public void testTokenCode() {
TemporaryCredentialsOptions options = new TemporaryCredentialsOptions().tokenCode("123456"); SessionCredentialsOptions options = new SessionCredentialsOptions().tokenCode("123456");
assertEquals(ImmutableSet.of("123456"), options.buildFormParameters().get("TokenCode")); assertEquals(ImmutableSet.of("123456"), options.buildFormParameters().get("TokenCode"));
} }
public void testTokenCodeStatic() { public void testTokenCodeStatic() {
TemporaryCredentialsOptions options = tokenCode("123456"); SessionCredentialsOptions options = tokenCode("123456");
assertEquals(ImmutableSet.of("123456"), options.buildFormParameters().get("TokenCode")); assertEquals(ImmutableSet.of("123456"), options.buildFormParameters().get("TokenCode"));
} }

View File

@ -23,9 +23,9 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.sts.domain.UserAndTemporaryCredentials; import org.jclouds.sts.domain.UserAndSessionCredentials;
import org.jclouds.sts.domain.User; import org.jclouds.sts.domain.User;
import org.jclouds.sts.xml.UserAndTemporaryCredentialsHandler; import org.jclouds.sts.xml.UserAndSessionCredentialsHandler;
import org.testng.annotations.Test; import org.testng.annotations.Test;
/** /**
@ -38,18 +38,18 @@ public class AssumeRoleResponseTest extends BaseHandlerTest {
public void test() { public void test() {
InputStream is = getClass().getResourceAsStream("/assume_role.xml"); InputStream is = getClass().getResourceAsStream("/assume_role.xml");
UserAndTemporaryCredentials expected = expected(); UserAndSessionCredentials expected = expected();
UserAndTemporaryCredentialsHandler handler = injector.getInstance(UserAndTemporaryCredentialsHandler.class); UserAndSessionCredentialsHandler handler = injector.getInstance(UserAndSessionCredentialsHandler.class);
UserAndTemporaryCredentials result = factory.create(handler).parse(is); UserAndSessionCredentials result = factory.create(handler).parse(is);
assertEquals(result, expected); assertEquals(result, expected);
assertEquals(result.getUser(), expected.getUser()); assertEquals(result.getUser(), expected.getUser());
assertEquals(result.getPackedPolicySize(), expected.getPackedPolicySize()); assertEquals(result.getPackedPolicySize(), expected.getPackedPolicySize());
} }
public UserAndTemporaryCredentials expected() { public UserAndSessionCredentials expected() {
return UserAndTemporaryCredentials.builder() return UserAndSessionCredentials.builder()
.credentials(new GetSessionTokenResponseTest().expected()) .credentials(new GetSessionTokenResponseTest().expected())
.user(User.fromIdAndArn("ARO123EXAMPLE123:Bob", "arn:aws:sts::123456789012:assumed-role/demo/Bob")) .user(User.fromIdAndArn("ARO123EXAMPLE123:Bob", "arn:aws:sts::123456789012:assumed-role/demo/Bob"))
.packedPolicySize(6).build(); .packedPolicySize(6).build();

View File

@ -23,9 +23,9 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.sts.domain.UserAndTemporaryCredentials; import org.jclouds.sts.domain.UserAndSessionCredentials;
import org.jclouds.sts.domain.User; import org.jclouds.sts.domain.User;
import org.jclouds.sts.xml.UserAndTemporaryCredentialsHandler; import org.jclouds.sts.xml.UserAndSessionCredentialsHandler;
import org.testng.annotations.Test; import org.testng.annotations.Test;
/** /**
@ -38,18 +38,18 @@ public class GetFederationTokenResponseTest extends BaseHandlerTest {
public void test() { public void test() {
InputStream is = getClass().getResourceAsStream("/federation_token.xml"); InputStream is = getClass().getResourceAsStream("/federation_token.xml");
UserAndTemporaryCredentials expected = expected(); UserAndSessionCredentials expected = expected();
UserAndTemporaryCredentialsHandler handler = injector.getInstance(UserAndTemporaryCredentialsHandler.class); UserAndSessionCredentialsHandler handler = injector.getInstance(UserAndSessionCredentialsHandler.class);
UserAndTemporaryCredentials result = factory.create(handler).parse(is); UserAndSessionCredentials result = factory.create(handler).parse(is);
assertEquals(result, expected); assertEquals(result, expected);
assertEquals(result.getUser(), expected.getUser()); assertEquals(result.getUser(), expected.getUser());
assertEquals(result.getPackedPolicySize(), expected.getPackedPolicySize()); assertEquals(result.getPackedPolicySize(), expected.getPackedPolicySize());
} }
public UserAndTemporaryCredentials expected() { public UserAndSessionCredentials expected() {
return UserAndTemporaryCredentials.builder() return UserAndSessionCredentials.builder()
.credentials(new GetSessionTokenResponseTest().expected()) .credentials(new GetSessionTokenResponseTest().expected())
.user(User.fromIdAndArn("123456789012:Bob", "arn:aws:sts::123456789012:federated-user/Bob")) .user(User.fromIdAndArn("123456789012:Bob", "arn:aws:sts::123456789012:federated-user/Bob"))
.packedPolicySize(6).build(); .packedPolicySize(6).build();

View File

@ -22,8 +22,8 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.aws.xml.TemporaryCredentialsHandler; import org.jclouds.aws.xml.SessionCredentialsHandler;
import org.jclouds.date.internal.SimpleDateFormatDateService; import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -38,10 +38,10 @@ public class GetSessionTokenResponseTest extends BaseHandlerTest {
public void test() { public void test() {
InputStream is = getClass().getResourceAsStream("/session_token.xml"); InputStream is = getClass().getResourceAsStream("/session_token.xml");
TemporaryCredentials expected = expected(); SessionCredentials expected = expected();
TemporaryCredentialsHandler handler = injector.getInstance(TemporaryCredentialsHandler.class); SessionCredentialsHandler handler = injector.getInstance(SessionCredentialsHandler.class);
TemporaryCredentials result = factory.create(handler).parse(is); SessionCredentials result = factory.create(handler).parse(is);
assertEquals(result, expected); assertEquals(result, expected);
assertEquals(result.getAccessKeyId(), expected.getAccessKeyId()); assertEquals(result.getAccessKeyId(), expected.getAccessKeyId());
@ -50,8 +50,8 @@ public class GetSessionTokenResponseTest extends BaseHandlerTest {
assertEquals(result.getExpiration(), expected.getExpiration()); assertEquals(result.getExpiration(), expected.getExpiration());
} }
public TemporaryCredentials expected() { public SessionCredentials expected() {
return TemporaryCredentials.builder() return SessionCredentials.builder()
.accessKeyId("AKIAIOSFODNN7EXAMPLE") .accessKeyId("AKIAIOSFODNN7EXAMPLE")
.secretAccessKey("wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY") .secretAccessKey("wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY")
.sessionToken("AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT") .sessionToken("AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT")

View File

@ -25,7 +25,7 @@ import java.util.Date;
import org.jclouds.domain.Credentials; import org.jclouds.domain.Credentials;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import com.google.common.base.Supplier; import com.google.common.base.Optional;
/** /**
* AWS credentials for API authentication. * AWS credentials for API authentication.
@ -36,77 +36,12 @@ import com.google.common.base.Supplier;
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
public final class TemporaryCredentials extends Credentials { public final class SessionCredentials extends Credentials {
public static Builder builder() {
return new Builder();
}
public Builder toBuilder() {
return builder().from(this);
}
public final static class Builder extends Credentials.Builder<TemporaryCredentials> {
private String accessKeyId;
private String secretAccessKey;
private String sessionToken;
private Date expiration;
@Override
public Builder identity(String identity) {
return accessKeyId(identity);
}
@Override
public Builder credential(String credential) {
return secretAccessKey(credential);
}
/**
* @see TemporaryCredentials#getAccessKeyId()
*/
public Builder accessKeyId(String accessKeyId) {
this.accessKeyId = accessKeyId;
return this;
}
/**
* @see TemporaryCredentials#getSecretAccessKey()
*/
public Builder secretAccessKey(String secretAccessKey) {
this.secretAccessKey = secretAccessKey;
return this;
}
/**
* @see TemporaryCredentials#getSessionToken()
*/
public Builder sessionToken(String sessionToken) {
this.sessionToken = sessionToken;
return this;
}
/**
* @see TemporaryCredentials#getExpiration()
*/
public Builder expiration(Date expiration) {
this.expiration = expiration;
return this;
}
public TemporaryCredentials build() {
return new TemporaryCredentials(accessKeyId, secretAccessKey, sessionToken, expiration);
}
public Builder from(TemporaryCredentials in) {
return this.accessKeyId(in.identity).secretAccessKey(in.credential).sessionToken(in.sessionToken)
.expiration(in.expiration);
}
}
private final String sessionToken; private final String sessionToken;
private final Date expiration; private final Optional<Date> expiration;
private TemporaryCredentials(String accessKeyId, String secretAccessKey, String sessionToken, Date expiration) { private SessionCredentials(String accessKeyId, String secretAccessKey, String sessionToken, Optional<Date> expiration) {
super(checkNotNull(accessKeyId, "accessKeyId"), checkNotNull(secretAccessKey, "secretAccessKey for %s", super(checkNotNull(accessKeyId, "accessKeyId"), checkNotNull(secretAccessKey, "secretAccessKey for %s",
accessKeyId)); accessKeyId));
this.sessionToken = checkNotNull(sessionToken, "sessionToken for %s", accessKeyId); this.sessionToken = checkNotNull(sessionToken, "sessionToken for %s", accessKeyId);
@ -138,21 +73,15 @@ public final class TemporaryCredentials extends Credentials {
/** /**
* The date on which these credentials expire. * The date on which these credentials expire.
*/ */
public Date getExpiration() { public Optional<Date> getExpiration() {
return expiration; return expiration;
} }
/**
* {@inheritDoc}
*/
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hashCode(identity, credential, sessionToken, expiration); return Objects.hashCode(identity, credential, sessionToken, expiration);
} }
/**
* {@inheritDoc}
*/
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (this == obj) if (this == obj)
@ -161,17 +90,80 @@ public final class TemporaryCredentials extends Credentials {
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
TemporaryCredentials other = (TemporaryCredentials) obj; SessionCredentials other = (SessionCredentials) obj;
return Objects.equal(this.identity, other.identity) && Objects.equal(this.credential, other.credential) return Objects.equal(this.identity, other.identity) && Objects.equal(this.credential, other.credential)
&& Objects.equal(this.sessionToken, other.sessionToken) && Objects.equal(this.expiration, other.expiration); && Objects.equal(this.sessionToken, other.sessionToken) && Objects.equal(this.expiration, other.expiration);
} }
/**
* {@inheritDoc}
*/
@Override @Override
public String toString() { public String toString() {
return Objects.toStringHelper(this).add("accessKeyId", identity).add("sessionToken", sessionToken) return Objects.toStringHelper(this).omitNullValues().add("accessKeyId", identity)
.add("expiration", expiration).toString(); .add("sessionToken", sessionToken).add("expiration", expiration.orNull()).toString();
}
public static Builder builder() {
return new Builder();
}
public Builder toBuilder() {
return builder().from(this);
}
public final static class Builder extends Credentials.Builder<SessionCredentials> {
private String accessKeyId;
private String secretAccessKey;
private String sessionToken;
private Optional<Date> expiration = Optional.absent();
@Override
public Builder identity(String identity) {
return accessKeyId(identity);
}
@Override
public Builder credential(String credential) {
return secretAccessKey(credential);
}
/**
* @see SessionCredentials#getAccessKeyId()
*/
public Builder accessKeyId(String accessKeyId) {
this.accessKeyId = accessKeyId;
return this;
}
/**
* @see SessionCredentials#getSecretAccessKey()
*/
public Builder secretAccessKey(String secretAccessKey) {
this.secretAccessKey = secretAccessKey;
return this;
}
/**
* @see SessionCredentials#getSessionToken()
*/
public Builder sessionToken(String sessionToken) {
this.sessionToken = sessionToken;
return this;
}
/**
* @see SessionCredentials#getExpiration()
*/
public Builder expiration(Date expiration) {
this.expiration = Optional.fromNullable(expiration);
return this;
}
public SessionCredentials build() {
return new SessionCredentials(accessKeyId, secretAccessKey, sessionToken, expiration);
}
public Builder from(SessionCredentials in) {
return this.accessKeyId(in.identity).secretAccessKey(in.credential).sessionToken(in.sessionToken)
.expiration(in.expiration.orNull());
}
} }
} }

View File

@ -45,7 +45,7 @@ import javax.inject.Singleton;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import org.jclouds.Constants; import org.jclouds.Constants;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.crypto.Crypto; import org.jclouds.crypto.Crypto;
import org.jclouds.date.TimeStamp; import org.jclouds.date.TimeStamp;
import org.jclouds.domain.Credentials; import org.jclouds.domain.Credentials;
@ -203,8 +203,8 @@ public class FormSigner implements HttpRequestFilter, RequestSigner {
params.removeAll(SIGNATURE); params.removeAll(SIGNATURE);
params.removeAll(SECURITY_TOKEN); params.removeAll(SECURITY_TOKEN);
Credentials current = creds.get(); Credentials current = creds.get();
if (current instanceof TemporaryCredentials) { if (current instanceof SessionCredentials) {
params.put(SECURITY_TOKEN, TemporaryCredentials.class.cast(current).getSessionToken()); params.put(SECURITY_TOKEN, SessionCredentials.class.cast(current).getSessionToken());
} }
params.replaceValues(SIGNATURE_METHOD, ImmutableList.of("HmacSHA256")); params.replaceValues(SIGNATURE_METHOD, ImmutableList.of("HmacSHA256"));
params.replaceValues(SIGNATURE_VERSION, ImmutableList.of("2")); params.replaceValues(SIGNATURE_VERSION, ImmutableList.of("2"));

View File

@ -20,7 +20,7 @@ package org.jclouds.aws.xml;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.date.DateService; import org.jclouds.date.DateService;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils; import org.jclouds.util.SaxUtils;
@ -32,32 +32,26 @@ import org.jclouds.util.SaxUtils;
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
public class TemporaryCredentialsHandler extends ParseSax.HandlerForGeneratedRequestWithResult<TemporaryCredentials> { public class SessionCredentialsHandler extends ParseSax.HandlerForGeneratedRequestWithResult<SessionCredentials> {
private final DateService dateService; private final DateService dateService;
@Inject @Inject
protected TemporaryCredentialsHandler(DateService dateService) { protected SessionCredentialsHandler(DateService dateService) {
this.dateService = dateService; this.dateService = dateService;
} }
private StringBuilder currentText = new StringBuilder(); private StringBuilder currentText = new StringBuilder();
private TemporaryCredentials.Builder builder = TemporaryCredentials.builder(); private SessionCredentials.Builder builder = SessionCredentials.builder();
/**
* {@inheritDoc}
*/
@Override @Override
public TemporaryCredentials getResult() { public SessionCredentials getResult() {
try { try {
return builder.build(); return builder.build();
} finally { } finally {
builder = TemporaryCredentials.builder(); builder = SessionCredentials.builder();
} }
} }
/**
* {@inheritDoc}
*/
@Override @Override
public void endElement(String uri, String name, String qName) { public void endElement(String uri, String name, String qName) {
if (qName.equals("AccessKeyId")) { if (qName.equals("AccessKeyId")) {
@ -72,12 +66,8 @@ public class TemporaryCredentialsHandler extends ParseSax.HandlerForGeneratedReq
currentText = new StringBuilder(); currentText = new StringBuilder();
} }
/**
* {@inheritDoc}
*/
@Override @Override
public void characters(char ch[], int start, int length) { public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length); currentText.append(ch, start, length);
} }
} }

View File

@ -24,7 +24,7 @@ import static org.testng.Assert.assertEquals;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import org.jclouds.ContextBuilder; import org.jclouds.ContextBuilder;
import org.jclouds.aws.xml.TemporaryCredentialsHandlerTest; import org.jclouds.aws.xml.SessionCredentialsHandlerTest;
import org.jclouds.date.TimeStamp; import org.jclouds.date.TimeStamp;
import org.jclouds.domain.Credentials; import org.jclouds.domain.Credentials;
import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpRequest;
@ -84,7 +84,7 @@ public class FormSignerTest {
@Test @Test
void testAddsSecurityToken() { void testAddsSecurityToken() {
HttpRequest filtered = filter(new TemporaryCredentialsHandlerTest().expected()).filter(request); HttpRequest filtered = filter(new SessionCredentialsHandlerTest().expected()).filter(request);
assertEquals( assertEquals(
filtered.getPayload().getRawContent(), filtered.getPayload().getRawContent(),
"Action=DescribeImages&ImageId.1=ami-2bb65342&SecurityToken=AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT&Signature=/8ReFVH1tvyNORsJb%2BSBieT9zvdqREQQr/olwmxC7VY%3D&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2009-11-08T15%3A54%3A08.897Z&Version=apiVersion&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE"); "Action=DescribeImages&ImageId.1=ami-2bb65342&SecurityToken=AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT&Signature=/8ReFVH1tvyNORsJb%2BSBieT9zvdqREQQr/olwmxC7VY%3D&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2009-11-08T15%3A54%3A08.897Z&Version=apiVersion&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE");

View File

@ -22,8 +22,8 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import org.jclouds.aws.domain.TemporaryCredentials; import org.jclouds.aws.domain.SessionCredentials;
import org.jclouds.aws.xml.TemporaryCredentialsHandler; import org.jclouds.aws.xml.SessionCredentialsHandler;
import org.jclouds.date.internal.SimpleDateFormatDateService; import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -32,16 +32,16 @@ import org.testng.annotations.Test;
* @author Adrian Cole * @author Adrian Cole
*/ */
// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire // NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
@Test(groups = "unit", testName = "TemporaryCredentialsHandlerTest") @Test(groups = "unit", testName = "SessionCredentialsHandlerTest")
public class TemporaryCredentialsHandlerTest extends BaseHandlerTest { public class SessionCredentialsHandlerTest extends BaseHandlerTest {
public void test() { public void test() {
InputStream is = getClass().getResourceAsStream("/credentials.xml"); InputStream is = getClass().getResourceAsStream("/credentials.xml");
TemporaryCredentials expected = expected(); SessionCredentials expected = expected();
TemporaryCredentialsHandler handler = injector.getInstance(TemporaryCredentialsHandler.class); SessionCredentialsHandler handler = injector.getInstance(SessionCredentialsHandler.class);
TemporaryCredentials result = factory.create(handler).parse(is); SessionCredentials result = factory.create(handler).parse(is);
assertEquals(result, expected); assertEquals(result, expected);
assertEquals(result.getAccessKeyId(), expected.getAccessKeyId()); assertEquals(result.getAccessKeyId(), expected.getAccessKeyId());
@ -50,8 +50,8 @@ public class TemporaryCredentialsHandlerTest extends BaseHandlerTest {
assertEquals(result.getExpiration(), expected.getExpiration()); assertEquals(result.getExpiration(), expected.getExpiration());
} }
public TemporaryCredentials expected() { public SessionCredentials expected() {
return TemporaryCredentials.builder() return SessionCredentials.builder()
.accessKeyId("AKIAIOSFODNN7EXAMPLE") .accessKeyId("AKIAIOSFODNN7EXAMPLE")
.secretAccessKey("wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY") .secretAccessKey("wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY")
.sessionToken("AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT") .sessionToken("AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT")