You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2015/04/15 21:41:33 UTC
[28/39] jclouds git commit: JCLOUDS-750 Remove need for custom json
type adapters on OAuth.
JCLOUDS-750 Remove need for custom json type adapters on OAuth.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/eb8b1548
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/eb8b1548
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/eb8b1548
Branch: refs/heads/master
Commit: eb8b154869087e79cd1511e3ab5e3aabe0c08941
Parents: 3515656
Author: Adrian Cole <ad...@gmail.com>
Authored: Sat Nov 1 12:31:04 2014 -0700
Committer: Adrian Cole <ad...@apache.org>
Committed: Sun Nov 2 08:28:42 2014 -0800
----------------------------------------------------------------------
.../org/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 | 34 ++++
.../org/jclouds/oauth/v2/domain/Header.java | 3 +
.../java/org/jclouds/oauth/v2/domain/Token.java | 6 +-
.../jclouds/oauth/v2/domain/TokenRequest.java | 8 +-
.../oauth/v2/functions/BuildTokenRequest.java | 19 +--
.../oauth/v2/binders/OAuthTokenBinderTest.java | 14 +-
.../oauth/v2/features/OAuthApiLiveTest.java | 14 +-
.../oauth/v2/features/OAuthApiMockTest.java | 15 +-
.../BaseOAuthAuthenticatedApiLiveTest.java | 15 +-
.../oauth/v2/internal/BaseOAuthParseTest.java | 30 ----
.../jclouds/oauth/v2/parse/ParseTokenTest.java | 4 +-
14 files changed, 96 insertions(+), 271 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/main/java/org/jclouds/oauth/v2/OAuthApiMetadata.java
----------------------------------------------------------------------
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 d946d70..2690c15 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<OAuthApi> {
.documentation(URI.create("TODO"))
.version("2")
.defaultProperties(OAuthApiMetadata.defaultProperties())
- .defaultModules(ImmutableSet
- .<Class<? extends Module>>of(OAuthModule.class, OAuthParserModule.class, OAuthHttpApiModule.class));
+ .defaultModules(ImmutableSet.<Class<? extends Module>>of(OAuthModule.class, OAuthHttpApiModule.class));
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/main/java/org/jclouds/oauth/v2/config/OAuthParserModule.java
----------------------------------------------------------------------
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 4768e6b..0000000
--- 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<TypeAdapterFactory> typeAdapterFactories() {
- return ImmutableSet
- .<TypeAdapterFactory>of(new HeaderTypeAdapter(), new ClaimSetTypeAdapter(), new TokenAdapter());
- }
-
- private static final class HeaderTypeAdapter extends SubtypeAdapterFactory<Header> {
- 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<ClaimSet> {
- ClaimSetTypeAdapter() {
- super(ClaimSet.class);
- }
-
- @Override public void write(JsonWriter out, ClaimSet value) throws IOException {
- out.beginObject();
- for (Map.Entry<String, String> 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<String, String> claims = new LinkedHashMap<String, String>();
- 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<Token> {
- 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<T> extends TypeAdapter<T> implements TypeAdapterFactory {
- private final Class<T> baseClass;
-
- private SubtypeAdapterFactory(Class<T> baseClass) {
- this.baseClass = baseClass;
- }
-
- @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
- if (!(baseClass.isAssignableFrom(typeToken.getRawType()))) {
- return null;
- }
- return (TypeAdapter<T>) this;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/ClaimSet.java
----------------------------------------------------------------------
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 e265e90..0000000
--- 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 <a href="https://developers.google.com/accounts/docs/OAuth2ServiceAccount">doc</a>
- */
-@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<String, String> claims();
-
- public static ClaimSet create(long emissionTime, long expirationTime, Map<String, String> claims) {
- return new AutoValue_ClaimSet(emissionTime, expirationTime, claims);
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Claims.java
----------------------------------------------------------------------
diff --git a/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Claims.java b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Claims.java
new file mode 100644
index 0000000..07b03f6
--- /dev/null
+++ b/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Claims.java
@@ -0,0 +1,34 @@
+/*
+ * 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;
+
+/**
+ * Description of Claims corresponding to a {@linkplain Token JWT Token}.
+ *
+ * @see <a href="https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-30#section-4">registered list</a>
+ */
+public final class Claims {
+ /** The time at which the JWT was issued, in seconds since the epoch. */
+ public static final String ISSUED_AT = "iat";
+
+ /** The expiration time, in seconds since {@link #ISSUED_AT}. */
+ public static final String EXPIRATION_TIME = "exp";
+
+ private Claims(){
+ throw new AssertionError("intentionally unimplemented");
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Header.java
----------------------------------------------------------------------
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 9146824..ea83a91 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);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/Token.java
----------------------------------------------------------------------
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 cf7ce57..548a83f 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);
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/main/java/org/jclouds/oauth/v2/domain/TokenRequest.java
----------------------------------------------------------------------
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 a0154bf..b08a20b 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<String, Object> claimSet();
- public static TokenRequest create(Header header, ClaimSet claimSet) {
- return new AutoValue_TokenRequest(header, claimSet);
+ public static TokenRequest create(Header header, Map<String, Object> claims) {
+ return new AutoValue_TokenRequest(header, claims);
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java
----------------------------------------------------------------------
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 bcce004..7d94349 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<GeneratedHttpRequest, TokenRequest> {
- // exp and ist (expiration and emission times) are assumed mandatory already
- private static final List<String> REQUIRED_CLAIMS = ImmutableList.of("iss", "scope", "aud");
-
private final String assertionTargetDescription;
private final String signatureAlgorithm;
private final Supplier<OAuthCredentials> credentialsSupplier;
@@ -92,18 +88,15 @@ public final class BuildTokenRequest implements Function<GeneratedHttpRequest, T
// fetch the token
Header header = Header.create(signatureAlgorithm, "JWT");
- Map<String, String> claims = new LinkedHashMap<String, String>();
+ Map<String, Object> claims = new LinkedHashMap<String, Object>();
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) {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/test/java/org/jclouds/oauth/v2/binders/OAuthTokenBinderTest.java
----------------------------------------------------------------------
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 b73d49b..fedb691 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<String, Object> claims = ImmutableMap.<String, Object>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);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiLiveTest.java
----------------------------------------------------------------------
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 5b1e0e6..fa4bed5 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<String, Object> claims = ImmutableMap.<String, Object>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);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/test/java/org/jclouds/oauth/v2/features/OAuthApiMockTest.java
----------------------------------------------------------------------
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 95cc537..f76a360 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<String, Object> CLAIMS = ImmutableMap.<String, Object>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");
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthAuthenticatedApiLiveTest.java
----------------------------------------------------------------------
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 4652c0c..c88f65f 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<A extends Closeable> ext
long now = SECONDS.convert(System.currentTimeMillis(), MILLISECONDS);
- ClaimSet claimSet = ClaimSet.create(now, now + 3600,
- ImmutableMap.of("aud", audience, "scope", scopes, "iss", identity));
+ Map<String, Object> claims = ImmutableMap.<String, Object>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);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthParseTest.java
----------------------------------------------------------------------
diff --git a/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthParseTest.java b/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthParseTest.java
deleted file mode 100644
index ae47cfd..0000000
--- a/apis/oauth/src/test/java/org/jclouds/oauth/v2/internal/BaseOAuthParseTest.java
+++ /dev/null
@@ -1,30 +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.internal;
-
-import org.jclouds.json.BaseItemParserTest;
-import org.jclouds.json.config.GsonModule;
-import org.jclouds.oauth.v2.config.OAuthParserModule;
-
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-public abstract class BaseOAuthParseTest<T> extends BaseItemParserTest<T> {
- @Override protected Injector injector() {
- return Guice.createInjector(new GsonModule(), new OAuthParserModule());
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb8b1548/apis/oauth/src/test/java/org/jclouds/oauth/v2/parse/ParseTokenTest.java
----------------------------------------------------------------------
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 d564359..416ec5e 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<Token> {
+public class ParseTokenTest extends BaseItemParserTest<Token> {
@Override
public String resource() {