From eb8b154869087e79cd1511e3ab5e3aabe0c08941 Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Sat, 1 Nov 2014 12:31:04 -0700 Subject: [PATCH] JCLOUDS-750 Remove need for custom json type adapters on OAuth. --- .../jclouds/oauth/v2/OAuthApiMetadata.java | 4 +- .../oauth/v2/config/OAuthParserModule.java | 159 ------------------ .../org/jclouds/oauth/v2/domain/ClaimSet.java | 42 ----- .../org/jclouds/oauth/v2/domain/Claims.java} | 22 ++- .../org/jclouds/oauth/v2/domain/Header.java | 3 + .../org/jclouds/oauth/v2/domain/Token.java | 6 +- .../jclouds/oauth/v2/domain/TokenRequest.java | 8 +- .../oauth/v2/functions/BuildTokenRequest.java | 19 +-- .../v2/binders/OAuthTokenBinderTest.java | 14 +- .../oauth/v2/features/OAuthApiLiveTest.java | 14 +- .../oauth/v2/features/OAuthApiMockTest.java | 15 +- .../BaseOAuthAuthenticatedApiLiveTest.java | 15 +- .../oauth/v2/parse/ParseTokenTest.java | 4 +- 13 files changed, 75 insertions(+), 250 deletions(-) delete mode 100644 apis/oauth/src/main/java/org/jclouds/oauth/v2/config/OAuthParserModule.java delete mode 100644 apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/ClaimSet.java rename apis/oauth/src/{test/java/org/jclouds/oauth/v2/internal/BaseOAuthParseTest.java => main/java/org/jclouds/oauth/v2/domain/Claims.java} (57%) diff --git a/apis/oauth/src/main/java/org/jclouds/oauth/v2/OAuthApiMetadata.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/OAuthApiMetadata.java index d946d702f5..2690c15ff0 100644 --- a/apis/oauth/src/main/java/org/jclouds/oauth/v2/OAuthApiMetadata.java +++ b/apis/oauth/src/main/java/org/jclouds/oauth/v2/OAuthApiMetadata.java @@ -25,7 +25,6 @@ import java.util.Properties; import org.jclouds.apis.ApiMetadata; import org.jclouds.oauth.v2.config.OAuthHttpApiModule; import org.jclouds.oauth.v2.config.OAuthModule; -import org.jclouds.oauth.v2.config.OAuthParserModule; import org.jclouds.rest.internal.BaseHttpApiMetadata; import com.google.auto.service.AutoService; @@ -65,8 +64,7 @@ public class OAuthApiMetadata extends BaseHttpApiMetadata { .documentation(URI.create("TODO")) .version("2") .defaultProperties(OAuthApiMetadata.defaultProperties()) - .defaultModules(ImmutableSet - .>of(OAuthModule.class, OAuthParserModule.class, OAuthHttpApiModule.class)); + .defaultModules(ImmutableSet.>of(OAuthModule.class, OAuthHttpApiModule.class)); } @Override diff --git a/apis/oauth/src/main/java/org/jclouds/oauth/v2/config/OAuthParserModule.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/config/OAuthParserModule.java deleted file mode 100644 index 4768e6b644..0000000000 --- a/apis/oauth/src/main/java/org/jclouds/oauth/v2/config/OAuthParserModule.java +++ /dev/null @@ -1,159 +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.oauth.v2.config; - -import java.io.IOException; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; - -import javax.inject.Singleton; - -import org.jclouds.oauth.v2.domain.ClaimSet; -import org.jclouds.oauth.v2.domain.Header; -import org.jclouds.oauth.v2.domain.Token; - -import com.google.common.collect.ImmutableSet; -import com.google.gson.Gson; -import com.google.gson.TypeAdapter; -import com.google.gson.TypeAdapterFactory; -import com.google.gson.reflect.TypeToken; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; -import com.google.inject.AbstractModule; -import com.google.inject.Provides; - -/** Configures type adapter factories for {@link Header}, {@link ClaimSet}, and {@link Token}. */ -public final class OAuthParserModule extends AbstractModule { - @Override protected void configure() { - } - - // TODO: change jclouds core to use collaborative set bindings - @Provides @Singleton public Set typeAdapterFactories() { - return ImmutableSet - .of(new HeaderTypeAdapter(), new ClaimSetTypeAdapter(), new TokenAdapter()); - } - - private static final class HeaderTypeAdapter extends SubtypeAdapterFactory
{ - HeaderTypeAdapter() { - super(Header.class); - } - - @Override public void write(JsonWriter out, Header value) throws IOException { - out.beginObject(); - out.name("alg"); - out.value(value.signerAlgorithm()); - out.name("typ"); - out.value(value.type()); - out.endObject(); - } - - @Override public Header read(JsonReader in) throws IOException { - in.beginObject(); - in.nextName(); - String signerAlgorithm = in.nextString(); - in.nextName(); - String type = in.nextString(); - in.endObject(); - return Header.create(signerAlgorithm, type); - } - } - - private static final class ClaimSetTypeAdapter extends SubtypeAdapterFactory { - ClaimSetTypeAdapter() { - super(ClaimSet.class); - } - - @Override public void write(JsonWriter out, ClaimSet value) throws IOException { - out.beginObject(); - for (Map.Entry entry : value.claims().entrySet()) { - out.name(entry.getKey()); - out.value(entry.getValue()); - } - out.name("exp"); - out.value(value.expirationTime()); - out.name("iat"); - out.value(value.emissionTime()); - out.endObject(); - } - - @Override public ClaimSet read(JsonReader in) throws IOException { - Map claims = new LinkedHashMap(); - in.beginObject(); - while (in.hasNext()) { - claims.put(in.nextName(), in.nextString()); - } - in.endObject(); - return ClaimSet.create(0, 0, Collections.unmodifiableMap(claims)); - } - } - - /** OAuth is used in apis that may not default to snake case. Explicity control case format. */ - private static final class TokenAdapter extends SubtypeAdapterFactory { - TokenAdapter() { - super(Token.class); - } - - @Override public void write(JsonWriter out, Token value) throws IOException { - out.beginObject(); - out.name("access_token"); - out.value(value.accessToken()); - out.name("token_type"); - out.value(value.tokenType()); - out.name("expires_in"); - out.value(value.expiresIn()); - out.endObject(); - } - - @Override public Token read(JsonReader in) throws IOException { - String accessToken = null; - String tokenType = null; - int expiresIn = 0; - in.beginObject(); - while (in.hasNext()) { - String name = in.nextName(); - if (name.equals("access_token")) { - accessToken = in.nextString(); - } else if (name.equals("token_type")) { - tokenType = in.nextString(); - } else if (name.equals("expires_in")) { - expiresIn = in.nextInt(); - } else { - in.skipValue(); - } - } - in.endObject(); - return Token.create(accessToken, tokenType, expiresIn); - } - } - - private abstract static class SubtypeAdapterFactory extends TypeAdapter implements TypeAdapterFactory { - private final Class baseClass; - - private SubtypeAdapterFactory(Class baseClass) { - this.baseClass = baseClass; - } - - @Override public TypeAdapter create(Gson gson, TypeToken typeToken) { - if (!(baseClass.isAssignableFrom(typeToken.getRawType()))) { - return null; - } - return (TypeAdapter) this; - } - } -} diff --git a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/ClaimSet.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/ClaimSet.java deleted file mode 100644 index e265e905db..0000000000 --- a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/ClaimSet.java +++ /dev/null @@ -1,42 +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.oauth.v2.domain; - -import java.util.Map; - -import com.google.auto.value.AutoValue; - -/** - * The claimset for the {@linkplain Token}. - * - * @see doc - */ -@AutoValue -public abstract class ClaimSet { - - /** The emission time, in seconds since the epoch. */ - public abstract long emissionTime(); - - /** The expiration time, in seconds since the emission time. */ - public abstract long expirationTime(); - - public abstract Map claims(); - - public static ClaimSet create(long emissionTime, long expirationTime, Map claims) { - return new AutoValue_ClaimSet(emissionTime, expirationTime, claims); - } -} diff --git a/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthParseTest.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Claims.java similarity index 57% rename from apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthParseTest.java rename to apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Claims.java index ae47cfdc7e..07b03f646e 100644 --- a/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthParseTest.java +++ b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Claims.java @@ -14,17 +14,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jclouds.oauth.v2.internal; +package org.jclouds.oauth.v2.domain; -import org.jclouds.json.BaseItemParserTest; -import org.jclouds.json.config.GsonModule; -import org.jclouds.oauth.v2.config.OAuthParserModule; +/** + * Description of Claims corresponding to a {@linkplain Token JWT Token}. + * + * @see registered list + */ +public final class Claims { + /** The time at which the JWT was issued, in seconds since the epoch. */ + public static final String ISSUED_AT = "iat"; -import com.google.inject.Guice; -import com.google.inject.Injector; + /** The expiration time, in seconds since {@link #ISSUED_AT}. */ + public static final String EXPIRATION_TIME = "exp"; -public abstract class BaseOAuthParseTest extends BaseItemParserTest { - @Override protected Injector injector() { - return Guice.createInjector(new GsonModule(), new OAuthParserModule()); + private Claims(){ + throw new AssertionError("intentionally unimplemented"); } } diff --git a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Header.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Header.java index 9146824654..ea83a91697 100644 --- a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Header.java +++ b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Header.java @@ -16,6 +16,8 @@ */ package org.jclouds.oauth.v2.domain; +import org.jclouds.json.SerializedNames; + import com.google.auto.value.AutoValue; /** @@ -32,6 +34,7 @@ public abstract class Header { /** The type of the token, e.g., {@code JWT}. */ public abstract String type(); + @SerializedNames({ "alg", "typ" }) public static Header create(String signerAlgorithm, String type){ return new AutoValue_Header(signerAlgorithm, type); } diff --git a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Token.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Token.java index cf7ce577f1..548a83f23b 100644 --- a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Token.java +++ b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Token.java @@ -16,6 +16,8 @@ */ package org.jclouds.oauth.v2.domain; +import org.jclouds.json.SerializedNames; + import com.google.auto.value.AutoValue; /** @@ -32,8 +34,8 @@ public abstract class Token { /** In how many seconds this token expires. */ public abstract long expiresIn(); - public static Token - create(String accessToken, String tokenType, long expiresIn) { + @SerializedNames({"access_token", "token_type", "expires_in"}) + public static Token create(String accessToken, String tokenType, long expiresIn) { return new AutoValue_Token(accessToken, tokenType, expiresIn); } } diff --git a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/TokenRequest.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/TokenRequest.java index a0154bf4b1..b08a20ba90 100644 --- a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/TokenRequest.java +++ b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/TokenRequest.java @@ -16,14 +16,16 @@ */ package org.jclouds.oauth.v2.domain; +import java.util.Map; + import com.google.auto.value.AutoValue; @AutoValue public abstract class TokenRequest { public abstract Header header(); - public abstract ClaimSet claimSet(); + public abstract Map claimSet(); - public static TokenRequest create(Header header, ClaimSet claimSet) { - return new AutoValue_TokenRequest(header, claimSet); + public static TokenRequest create(Header header, Map claims) { + return new AutoValue_TokenRequest(header, claims); } } diff --git a/apis/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java index bcce0047ad..7d94349b51 100644 --- a/apis/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java +++ b/apis/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java @@ -21,15 +21,15 @@ import static org.jclouds.oauth.v2.OAuthConstants.ADDITIONAL_CLAIMS; import static org.jclouds.oauth.v2.config.OAuthProperties.AUDIENCE; import static org.jclouds.oauth.v2.config.OAuthProperties.SCOPES; import static org.jclouds.oauth.v2.config.OAuthProperties.SIGNATURE_OR_MAC_ALGORITHM; +import static org.jclouds.oauth.v2.domain.Claims.EXPIRATION_TIME; +import static org.jclouds.oauth.v2.domain.Claims.ISSUED_AT; import java.util.Collections; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import org.jclouds.Constants; import org.jclouds.oauth.v2.config.OAuthScopes; -import org.jclouds.oauth.v2.domain.ClaimSet; import org.jclouds.oauth.v2.domain.Header; import org.jclouds.oauth.v2.domain.OAuthCredentials; import org.jclouds.oauth.v2.domain.TokenRequest; @@ -38,7 +38,6 @@ import org.jclouds.rest.internal.GeneratedHttpRequest; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Supplier; -import com.google.common.collect.ImmutableList; import com.google.common.reflect.Invokable; import com.google.inject.Inject; import com.google.inject.name.Named; @@ -51,9 +50,6 @@ import com.google.inject.name.Named; * TODO scopes etc should come from the REST method and not from a global property */ public final class BuildTokenRequest implements Function { - // exp and ist (expiration and emission times) are assumed mandatory already - private static final List REQUIRED_CLAIMS = ImmutableList.of("iss", "scope", "aud"); - private final String assertionTargetDescription; private final String signatureAlgorithm; private final Supplier credentialsSupplier; @@ -92,18 +88,15 @@ public final class BuildTokenRequest implements Function claims = new LinkedHashMap(); + Map claims = new LinkedHashMap(); claims.put("iss", credentialsSupplier.get().identity); claims.put("scope", getOAuthScopes(request)); claims.put("aud", assertionTargetDescription); + claims.put(EXPIRATION_TIME, now + tokenDuration); + claims.put(ISSUED_AT, now); claims.putAll(additionalClaims); - checkState(claims.keySet().containsAll(REQUIRED_CLAIMS), - "not all required claims were present"); - - ClaimSet claimSet = ClaimSet.create(now, now + tokenDuration, Collections.unmodifiableMap(claims)); - - return TokenRequest.create(header, claimSet); + return TokenRequest.create(header, claims); } private String getOAuthScopes(GeneratedHttpRequest request) { diff --git a/apis/oauth/src/test/java/org/jclouds/oauth/v2/binders/OAuthTokenBinderTest.java b/apis/oauth/src/test/java/org/jclouds/oauth/v2/binders/OAuthTokenBinderTest.java index b73d49bb05..fedb691999 100644 --- a/apis/oauth/src/test/java/org/jclouds/oauth/v2/binders/OAuthTokenBinderTest.java +++ b/apis/oauth/src/test/java/org/jclouds/oauth/v2/binders/OAuthTokenBinderTest.java @@ -16,17 +16,19 @@ */ package org.jclouds.oauth.v2.binders; +import static org.jclouds.oauth.v2.domain.Claims.EXPIRATION_TIME; +import static org.jclouds.oauth.v2.domain.Claims.ISSUED_AT; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertSame; import static org.testng.Assert.assertTrue; import java.io.IOException; +import java.util.Map; import org.jclouds.ContextBuilder; import org.jclouds.http.HttpRequest; import org.jclouds.oauth.v2.OAuthApiMetadata; import org.jclouds.oauth.v2.OAuthTestUtils; -import org.jclouds.oauth.v2.domain.ClaimSet; import org.jclouds.oauth.v2.domain.Header; import org.jclouds.oauth.v2.domain.TokenRequest; import org.jclouds.util.Strings2; @@ -48,9 +50,13 @@ public class OAuthTokenBinderTest { (OAuthTestUtils.defaultProperties(null)).build().utils() .injector().getInstance(OAuthTokenBinder.class); Header header = Header.create("a", "b"); - ClaimSet claimSet = ClaimSet.create(0, 0, - ImmutableMap.of("ist", STRING_THAT_GENERATES_URL_UNSAFE_BASE64_ENCODING)); - TokenRequest tokenRequest = TokenRequest.create(header, claimSet); + + Map claims = ImmutableMap.builder() + .put(ISSUED_AT, 0) + .put(EXPIRATION_TIME, 0) + .put("ist", STRING_THAT_GENERATES_URL_UNSAFE_BASE64_ENCODING).build(); + + TokenRequest tokenRequest = TokenRequest.create(header, claims); HttpRequest request = tokenRequestFormat.bindToRequest( HttpRequest.builder().method("GET").endpoint("http://localhost").build(), tokenRequest); diff --git a/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiLiveTest.java b/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiLiveTest.java index 5b1e0e6215..fa4bed5646 100644 --- a/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiLiveTest.java +++ b/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiLiveTest.java @@ -21,13 +21,15 @@ import static org.jclouds.oauth.v2.OAuthTestUtils.getMandatoryProperty; import static org.jclouds.oauth.v2.config.OAuthProperties.AUDIENCE; import static org.jclouds.oauth.v2.config.OAuthProperties.SCOPES; import static org.jclouds.oauth.v2.config.OAuthProperties.SIGNATURE_OR_MAC_ALGORITHM; +import static org.jclouds.oauth.v2.domain.Claims.EXPIRATION_TIME; +import static org.jclouds.oauth.v2.domain.Claims.ISSUED_AT; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; +import java.util.Map; import java.util.Properties; import org.jclouds.oauth.v2.OAuthConstants; -import org.jclouds.oauth.v2.domain.ClaimSet; import org.jclouds.oauth.v2.domain.Header; import org.jclouds.oauth.v2.domain.Token; import org.jclouds.oauth.v2.domain.TokenRequest; @@ -71,10 +73,14 @@ public class OAuthApiLiveTest extends BaseOAuthApiLiveTest { long now = nowInSeconds(); - ClaimSet claimSet = ClaimSet.create(now, now + 3600, - ImmutableMap.of("aud", audience, "scope", scopes, "iss", identity)); + Map claims = ImmutableMap.builder() + .put("iss", identity) + .put("scope", scopes) + .put("aud", audience) + .put(EXPIRATION_TIME, now + 3600) + .put(ISSUED_AT, now).build(); - TokenRequest tokenRequest = TokenRequest.create(header, claimSet); + TokenRequest tokenRequest = TokenRequest.create(header, claims); Token token = api.authenticate(tokenRequest); assertNotNull(token, "no token when authenticating " + tokenRequest); diff --git a/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiMockTest.java b/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiMockTest.java index 95cc5375be..f76a360946 100644 --- a/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiMockTest.java +++ b/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiMockTest.java @@ -22,11 +22,14 @@ import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor import static javax.ws.rs.core.MediaType.APPLICATION_JSON; import static org.jclouds.Constants.PROPERTY_MAX_RETRIES; import static org.jclouds.oauth.v2.config.OAuthProperties.AUDIENCE; +import static org.jclouds.oauth.v2.domain.Claims.EXPIRATION_TIME; +import static org.jclouds.oauth.v2.domain.Claims.ISSUED_AT; import static org.jclouds.util.Strings2.toStringAndClose; import static org.testng.Assert.assertEquals; import java.io.IOException; import java.net.URL; +import java.util.Map; import java.util.Properties; import org.jclouds.ContextBuilder; @@ -34,7 +37,6 @@ import org.jclouds.concurrent.config.ExecutorServiceModule; import org.jclouds.oauth.v2.OAuthApi; import org.jclouds.oauth.v2.OAuthApiMetadata; import org.jclouds.oauth.v2.OAuthTestUtils; -import org.jclouds.oauth.v2.domain.ClaimSet; import org.jclouds.oauth.v2.domain.Header; import org.jclouds.oauth.v2.domain.Token; import org.jclouds.oauth.v2.domain.TokenRequest; @@ -61,9 +63,12 @@ public class OAuthApiMockTest { private static final Token TOKEN = Token.create("1/8xbJqaOZXSUZbHLl5EOtu1pxz3fmmetKx9W8CV4t79M", "Bearer", 3600); - private static final ClaimSet CLAIM_SET = ClaimSet.create(1328569781, 1328573381, ImmutableMap - .of("iss", "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com", "scope", - "https://www.googleapis.com/auth/prediction", "aud", "https://accounts.google.com/o/oauth2/token")); + private static final Map CLAIMS = ImmutableMap.builder() + .put("iss", "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com") + .put("scope", "https://www.googleapis.com/auth/prediction") + .put("aud", "https://accounts.google.com/o/oauth2/token") + .put(EXPIRATION_TIME, 1328573381) + .put(ISSUED_AT, 1328569781).build(); private static final Header HEADER = Header.create("RS256", "JWT"); @@ -78,7 +83,7 @@ public class OAuthApiMockTest { OAuthApi api = api(server.getUrl("/")); - assertEquals(api.authenticate(TokenRequest.create(HEADER, CLAIM_SET)), TOKEN); + assertEquals(api.authenticate(TokenRequest.create(HEADER, CLAIMS)), TOKEN); RecordedRequest request = server.takeRequest(); assertEquals(request.getMethod(), "POST"); diff --git a/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthAuthenticatedApiLiveTest.java b/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthAuthenticatedApiLiveTest.java index 4652c0c9c2..c88f65f8ee 100644 --- a/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthAuthenticatedApiLiveTest.java +++ b/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthAuthenticatedApiLiveTest.java @@ -15,22 +15,25 @@ * limitations under the License. */ package org.jclouds.oauth.v2.internal; + import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; import static org.jclouds.oauth.v2.config.OAuthProperties.AUDIENCE; import static org.jclouds.oauth.v2.config.OAuthProperties.SIGNATURE_OR_MAC_ALGORITHM; +import static org.jclouds.oauth.v2.domain.Claims.EXPIRATION_TIME; +import static org.jclouds.oauth.v2.domain.Claims.ISSUED_AT; import static org.testng.Assert.assertNotNull; import java.io.Closeable; +import java.util.Map; import java.util.Properties; import org.jclouds.apis.BaseApiLiveTest; import org.jclouds.config.ValueOfConfigurationKeyOrNull; import org.jclouds.oauth.v2.OAuthApi; import org.jclouds.oauth.v2.OAuthConstants; -import org.jclouds.oauth.v2.domain.ClaimSet; import org.jclouds.oauth.v2.domain.Header; import org.jclouds.oauth.v2.domain.Token; import org.jclouds.oauth.v2.domain.TokenRequest; @@ -80,10 +83,14 @@ public abstract class BaseOAuthAuthenticatedApiLiveTest ext long now = SECONDS.convert(System.currentTimeMillis(), MILLISECONDS); - ClaimSet claimSet = ClaimSet.create(now, now + 3600, - ImmutableMap.of("aud", audience, "scope", scopes, "iss", identity)); + Map claims = ImmutableMap.builder() + .put("iss", identity) + .put("scope", scopes) + .put("aud", audience) + .put(EXPIRATION_TIME, now + 3600) + .put(ISSUED_AT, now).build(); - TokenRequest tokenRequest = TokenRequest.create(header, claimSet); + TokenRequest tokenRequest = TokenRequest.create(header, claims); Token token = oauthApi.authenticate(tokenRequest); diff --git a/apis/oauth/src/test/java/org/jclouds/oauth/v2/parse/ParseTokenTest.java b/apis/oauth/src/test/java/org/jclouds/oauth/v2/parse/ParseTokenTest.java index d5643591b4..416ec5ef18 100644 --- a/apis/oauth/src/test/java/org/jclouds/oauth/v2/parse/ParseTokenTest.java +++ b/apis/oauth/src/test/java/org/jclouds/oauth/v2/parse/ParseTokenTest.java @@ -20,12 +20,12 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON; import javax.ws.rs.Consumes; +import org.jclouds.json.BaseItemParserTest; import org.jclouds.oauth.v2.domain.Token; -import org.jclouds.oauth.v2.internal.BaseOAuthParseTest; import org.testng.annotations.Test; @Test(groups = "unit", testName = "ParseTokenTest") -public class ParseTokenTest extends BaseOAuthParseTest { +public class ParseTokenTest extends BaseItemParserTest { @Override public String resource() {