Repository: jclouds Updated Branches: refs/heads/keystonev3 05b9195b7 -> f3f96b58c
Add support for scoped authentication Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/f3f96b58 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/f3f96b58 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/f3f96b58 Branch: refs/heads/keystonev3 Commit: f3f96b58c076cadf481ef1ee7da81286e30db384 Parents: 05b9195 Author: Ignasi Barrera <[email protected]> Authored: Wed Dec 20 12:31:59 2017 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Wed Dec 20 12:31:59 2017 +0100 ---------------------------------------------------------------------- .../keystone/auth/config/CredentialType.java | 1 - .../keystone/auth/config/CredentialTypes.java | 2 - .../auth/domain/TenantAndCredentials.java | 2 + .../auth/functions/BaseAuthenticator.java | 7 +- .../keystone/config/KeystoneProperties.java | 17 +++ .../openstack/keystone/v3/KeystoneApi.java | 26 +++- .../keystone/v3/KeystoneApiMetadata.java | 5 +- .../v3/binders/BindAuthToJsonPayload.java | 8 +- .../binders/BindPasswordAuthToJsonPayload.java | 13 +- .../v3/binders/BindTokenAuthToJsonPayload.java | 9 +- .../v3/config/KeystoneHttpApiModule.java | 18 +-- .../v3/config/KeystoneParserModule.java | 31 ----- .../openstack/keystone/v3/domain/Auth.java | 53 ++++---- .../openstack/keystone/v3/domain/Project.java | 50 +++++++ .../openstack/keystone/v3/domain/User.java | 18 +-- .../openstack/keystone/v3/features/AuthApi.java | 83 ++++++++++++ .../keystone/v3/features/CatalogApi.java | 54 ++++++++ .../keystone/v3/features/ProjectApi.java | 50 +++++++ .../keystone/v3/features/RegionApi.java | 50 +++++++ .../keystone/v3/features/TokenApi.java | 135 ------------------- .../v3/parsers/ParseTokenFromHttpResponse.java | 2 +- .../v3/auth/V3AuthenticationApiLiveTest.java | 1 + .../keystone/v3/features/TokenApiLiveTest.java | 17 +-- .../keystone/v3/features/TokenApiMockTest.java | 10 +- 24 files changed, 411 insertions(+), 251 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialType.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialType.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialType.java index 171426f..d395296 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialType.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialType.java @@ -32,7 +32,6 @@ import javax.inject.Qualifier; public @interface CredentialType { /** * @see CredentialTypes - * */ String value(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialTypes.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialTypes.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialTypes.java index ed9764a..7cfb6d7 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialTypes.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/config/CredentialTypes.java @@ -44,12 +44,10 @@ public class CredentialTypes { public static <T> Map<String, T> indexByCredentialType(Iterable<T> iterable) { return Maps.uniqueIndex(iterable, new Function<T, String>() { - @Override public String apply(T input) { return credentialTypeOf(input); } - }); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/domain/TenantAndCredentials.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/domain/TenantAndCredentials.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/domain/TenantAndCredentials.java index 5988c67..caac935 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/domain/TenantAndCredentials.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/domain/TenantAndCredentials.java @@ -29,6 +29,7 @@ public abstract class TenantAndCredentials<T> { @Nullable public abstract String tenantId(); @Nullable public abstract String tenantName(); + @Nullable public abstract String projectId(); public abstract T credentials(); TenantAndCredentials() { @@ -43,6 +44,7 @@ public abstract class TenantAndCredentials<T> { public abstract static class Builder<T> { public abstract Builder<T> tenantId(String tenantId); public abstract Builder<T> tenantName(String tenantName); + public abstract Builder<T> projectId(String projectId); public abstract Builder<T> credentials(T credentials); public abstract TenantAndCredentials<T> build(); http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/functions/BaseAuthenticator.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/functions/BaseAuthenticator.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/functions/BaseAuthenticator.java index 05b2b94..7d07da4 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/functions/BaseAuthenticator.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/auth/functions/BaseAuthenticator.java @@ -17,6 +17,7 @@ package org.jclouds.openstack.keystone.auth.functions; import static com.google.common.base.Preconditions.checkState; +import static org.jclouds.openstack.keystone.config.KeystoneProperties.PROJECT_ID; import static org.jclouds.openstack.keystone.config.KeystoneProperties.REQUIRES_TENANT; import static org.jclouds.openstack.keystone.config.KeystoneProperties.TENANT_ID; import static org.jclouds.openstack.keystone.config.KeystoneProperties.TENANT_NAME; @@ -49,6 +50,10 @@ public abstract class BaseAuthenticator<C> implements Function<Credentials, Auth @Inject(optional = true) @Named(REQUIRES_TENANT) protected boolean requiresTenant; + + @Inject(optional = true) + @Named(PROJECT_ID) + protected String projectId; @PostConstruct public void checkPropertiesAreCompatible() { @@ -76,7 +81,7 @@ public abstract class BaseAuthenticator<C> implements Function<Credentials, Auth C creds = createCredentials(usernameOrAccessKey, passwordOrSecretKeyOrToken); TenantAndCredentials<C> credsWithTenant = TenantAndCredentials.<C> builder().tenantId(defaultTenantId) - .tenantName(tenantName).credentials(creds).build(); + .tenantName(tenantName).projectId(projectId).credentials(creds).build(); return authenticate(credsWithTenant); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/config/KeystoneProperties.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/config/KeystoneProperties.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/config/KeystoneProperties.java index ece0129..177bd92 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/config/KeystoneProperties.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/config/KeystoneProperties.java @@ -17,6 +17,7 @@ package org.jclouds.openstack.keystone.config; import org.jclouds.openstack.keystone.auth.config.CredentialTypes; +import org.jclouds.rest.annotations.SinceApiVersion; /** * Configuration properties and constants used in Keystone connections. @@ -64,6 +65,22 @@ public final class KeystoneProperties { * @see <a href="http://wiki.openstack.org/CLIAuth">openstack docs</a> */ public static final String REQUIRES_TENANT = "jclouds.keystone.requires-tenant"; + + /** + * set this property to specify the authentication must be scoped to the project. + * + * @see <a href="http://wiki.openstack.org/CLIAuth">openstack docs</a> + */ + @SinceApiVersion("3") + public static final String SCOPED_AUTH = "jclouds.keystone.scoped-auth"; + + /** + * set this property to specify project id to sue for scoped authentication. + * <p> + * if not present, jclouds will automatically scope the authentication to the current user's project + */ + @SinceApiVersion("3") + public static final String PROJECT_ID = "jclouds.keystone.project-id"; /** * type of the keystone service. ex. {@code compute} http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApi.java index 6c2bca5..d4c2176 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApi.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApi.java @@ -18,7 +18,10 @@ package org.jclouds.openstack.keystone.v3; import java.io.Closeable; -import org.jclouds.openstack.keystone.v3.features.TokenApi; +import org.jclouds.openstack.keystone.v3.features.AuthApi; +import org.jclouds.openstack.keystone.v3.features.CatalogApi; +import org.jclouds.openstack.keystone.v3.features.ProjectApi; +import org.jclouds.openstack.keystone.v3.features.RegionApi; import org.jclouds.rest.annotations.Delegate; /** @@ -27,9 +30,26 @@ import org.jclouds.rest.annotations.Delegate; public interface KeystoneApi extends Closeable { /** - * Provides access to Token features + * Provides access to authentication and token management features. */ @Delegate - TokenApi getTokenApi(); + AuthApi getAuthApi(); + /** + * Provides access to service catalog features. + */ + @Delegate + CatalogApi getCatalogApi(); + + /** + * Provides access to region features. + */ + @Delegate + RegionApi getRegionApi(); + + /** + * Provides access to project features. + */ + @Delegate + ProjectApi getProjectApi(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java index 52c400c..37da75a 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java @@ -28,7 +28,6 @@ import org.jclouds.openstack.keystone.auth.config.AuthenticationModule; import org.jclouds.openstack.keystone.catalog.config.KeystoneAdminURLModule; import org.jclouds.openstack.keystone.catalog.config.ServiceCatalogModule; import org.jclouds.openstack.keystone.v3.config.KeystoneHttpApiModule; -import org.jclouds.openstack.keystone.v3.config.KeystoneParserModule; import org.jclouds.openstack.v2_0.ServiceType; import org.jclouds.rest.internal.BaseHttpApiMetadata; @@ -79,8 +78,8 @@ public class KeystoneApiMetadata extends BaseHttpApiMetadata<KeystoneApi> { .add(AuthenticationModule.class) .add(ServiceCatalogModule.class) .add(KeystoneAdminURLModule.class) - .add(KeystoneParserModule.class) - .add(KeystoneHttpApiModule.class).build()); + .add(KeystoneHttpApiModule.class) + .build()); } @Override http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindAuthToJsonPayload.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindAuthToJsonPayload.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindAuthToJsonPayload.java index f100988..84f754f 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindAuthToJsonPayload.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindAuthToJsonPayload.java @@ -27,6 +27,8 @@ import org.jclouds.http.HttpRequest; import org.jclouds.json.Json; import org.jclouds.openstack.keystone.auth.domain.TenantAndCredentials; import org.jclouds.openstack.keystone.v3.domain.Auth; +import org.jclouds.openstack.keystone.v3.domain.Auth.Id; +import org.jclouds.openstack.keystone.v3.domain.Auth.Scope; import org.jclouds.rest.MapBinder; import org.jclouds.rest.binders.BindToJsonPayload; import org.jclouds.rest.internal.GeneratedHttpRequest; @@ -40,7 +42,7 @@ public abstract class BindAuthToJsonPayload<T> extends BindToJsonPayload impleme super(jsonBinder); } - protected abstract Auth buildAuth(TenantAndCredentials<T> credentials); + protected abstract Auth buildAuth(TenantAndCredentials<T> credentials, Scope scope); @Override public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) { @@ -53,7 +55,9 @@ public abstract class BindAuthToJsonPayload<T> extends BindToJsonPayload impleme checkArgument(authentication.isPresent(), "no credentials found in the api call arguments"); @SuppressWarnings("unchecked") - Auth auth = buildAuth((TenantAndCredentials<T>) authentication.get()); + TenantAndCredentials<T> credentials = (TenantAndCredentials<T>) authentication.get(); + Scope scope = credentials.projectId() == null ? null : Scope.create(Id.create(credentials.projectId())); + Auth auth = buildAuth(credentials, scope); R authRequest = super.bindToRequest(request, ImmutableMap.of("auth", auth)); authRequest.getPayload().setSensitive(true); http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindPasswordAuthToJsonPayload.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindPasswordAuthToJsonPayload.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindPasswordAuthToJsonPayload.java index 41f64bc..5f779c3 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindPasswordAuthToJsonPayload.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindPasswordAuthToJsonPayload.java @@ -29,6 +29,7 @@ import org.jclouds.openstack.keystone.v3.domain.Auth.Identity; import org.jclouds.openstack.keystone.v3.domain.Auth.Identity.PasswordAuth; import org.jclouds.openstack.keystone.v3.domain.Auth.Identity.PasswordAuth.UserAuth; import org.jclouds.openstack.keystone.v3.domain.Auth.Identity.PasswordAuth.UserAuth.DomainAuth; +import org.jclouds.openstack.keystone.v3.domain.Auth.Scope; @Singleton public class BindPasswordAuthToJsonPayload extends BindAuthToJsonPayload<PasswordCredentials> { @@ -39,12 +40,12 @@ public class BindPasswordAuthToJsonPayload extends BindAuthToJsonPayload<Passwor } @Override - protected Auth buildAuth(TenantAndCredentials<PasswordCredentials> credentials) { - return Auth.create(Identity.create( - singletonList("password"), - null, - PasswordAuth.create(UserAuth.create(credentials.credentials().username(), - DomainAuth.create(credentials.tenantName()), credentials.credentials().password())))); + protected Auth buildAuth(TenantAndCredentials<PasswordCredentials> credentials, Scope scope) { + PasswordCredentials creds = credentials.credentials(); + DomainAuth domain = DomainAuth.create(credentials.tenantName()); + UserAuth user = UserAuth.create(creds.username(), domain, creds.password()); + + return Auth.create(Identity.create(singletonList("password"), null, PasswordAuth.create(user)), scope); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindTokenAuthToJsonPayload.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindTokenAuthToJsonPayload.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindTokenAuthToJsonPayload.java index 9d60fad..15dfb3d 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindTokenAuthToJsonPayload.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/binders/BindTokenAuthToJsonPayload.java @@ -25,8 +25,9 @@ import org.jclouds.json.Json; import org.jclouds.openstack.keystone.auth.domain.TenantAndCredentials; import org.jclouds.openstack.keystone.auth.domain.TokenCredentials; import org.jclouds.openstack.keystone.v3.domain.Auth; +import org.jclouds.openstack.keystone.v3.domain.Auth.Id; import org.jclouds.openstack.keystone.v3.domain.Auth.Identity; -import org.jclouds.openstack.keystone.v3.domain.Auth.Identity.TokenAuth; +import org.jclouds.openstack.keystone.v3.domain.Auth.Scope; @Singleton public class BindTokenAuthToJsonPayload extends BindAuthToJsonPayload<TokenCredentials> { @@ -37,9 +38,9 @@ public class BindTokenAuthToJsonPayload extends BindAuthToJsonPayload<TokenCrede } @Override - protected Auth buildAuth(TenantAndCredentials<TokenCredentials> credentials) { - return Auth - .create(Identity.create(singletonList("token"), TokenAuth.create(credentials.credentials().id()), null)); + protected Auth buildAuth(TenantAndCredentials<TokenCredentials> credentials, Scope scope) { + Id token = Id.create(credentials.credentials().id()); + return Auth.create(Identity.create(singletonList("token"), token, null), scope); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneHttpApiModule.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneHttpApiModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneHttpApiModule.java index 6458726..1212680 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneHttpApiModule.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneHttpApiModule.java @@ -16,34 +16,22 @@ */ package org.jclouds.openstack.keystone.v3.config; -import java.net.URI; - -import org.jclouds.openstack.keystone.v2_0.config.NamespaceAliases; +import org.jclouds.json.config.GsonModule; +import org.jclouds.json.config.GsonModule.DateAdapter; import org.jclouds.openstack.keystone.v3.KeystoneApi; import org.jclouds.rest.ConfiguresHttpApi; import org.jclouds.rest.config.HttpApiModule; -import com.google.inject.Binder; -import com.google.inject.multibindings.MapBinder; - /** * Configures the Keystone API. */ @ConfiguresHttpApi public class KeystoneHttpApiModule extends HttpApiModule<KeystoneApi> { - public KeystoneHttpApiModule() { - } - - // Allow providers to cleanly contribute their own aliases - public static MapBinder<URI, URI> namespaceAliasBinder(Binder binder) { - return MapBinder.newMapBinder(binder, URI.class, URI.class, NamespaceAliases.class).permitDuplicates(); - } - @Override protected void configure() { super.configure(); - namespaceAliasBinder(binder()); + bind(DateAdapter.class).to(GsonModule.Iso8601DateAdapter.class); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneParserModule.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneParserModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneParserModule.java deleted file mode 100644 index f76e28b..0000000 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/config/KeystoneParserModule.java +++ /dev/null @@ -1,31 +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.openstack.keystone.v3.config; - -import org.jclouds.json.config.GsonModule; -import org.jclouds.json.config.GsonModule.DateAdapter; - -import com.google.inject.AbstractModule; - -public class KeystoneParserModule extends AbstractModule { - - @Override - protected void configure() { - bind(DateAdapter.class).to(GsonModule.Iso8601DateAdapter.class); - } - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java index e716d35..aece0aa 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java @@ -25,40 +25,37 @@ import com.google.auto.value.AutoValue; @AutoValue public abstract class Auth { - public abstract Identity identity(); + @Nullable public abstract Scope scope(); + + @SerializedNames({ "identity", "scope" }) + public static Auth create(Identity identity, Scope scope) { + return new AutoValue_Auth(identity, scope); + } + + @AutoValue + public abstract static class Id { + public abstract String id(); - @SerializedNames({ "identity" }) - public static Auth create(Identity identity) { - return new AutoValue_Auth(identity); + @SerializedNames({ "id" }) + public static Id create(String id) { + return new AutoValue_Auth_Id(id); + } } @AutoValue public abstract static class Identity { - public abstract List<String> methods(); - @Nullable public abstract TokenAuth token(); + @Nullable public abstract Id token(); @Nullable public abstract PasswordAuth password(); @SerializedNames({ "methods", "token", "password" }) - public static Identity create(List<String> methods, TokenAuth token, PasswordAuth password) { + public static Identity create(List<String> methods, Id token, PasswordAuth password) { return new AutoValue_Auth_Identity(methods, token, password); } @AutoValue - public abstract static class TokenAuth { - - public abstract String id(); - - @SerializedNames({ "id" }) - public static TokenAuth create(String id) { - return new AutoValue_Auth_Identity_TokenAuth(id); - } - } - - @AutoValue - public abstract static class PasswordAuth { - + public abstract static class PasswordAuth { public abstract UserAuth user(); @SerializedNames({ "user" }) @@ -67,8 +64,7 @@ public abstract class Auth { } @AutoValue - public abstract static class UserAuth { - + public abstract static class UserAuth { public abstract String name(); public abstract DomainAuth domain(); public abstract String password(); @@ -79,8 +75,7 @@ public abstract class Auth { } @AutoValue - public abstract static class DomainAuth { - + public abstract static class DomainAuth { @Nullable public abstract String name(); @SerializedNames({ "name" }) @@ -91,4 +86,14 @@ public abstract class Auth { } } } + + @AutoValue + public abstract static class Scope { + public abstract Id project(); + + @SerializedNames({ "project" }) + public static Scope create(Id id) { + return new AutoValue_Auth_Scope(id); + } + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Project.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Project.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Project.java new file mode 100644 index 0000000..c0b05c5 --- /dev/null +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Project.java @@ -0,0 +1,50 @@ +/* + * 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.openstack.keystone.v3.domain; + +import java.util.List; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; + +@AutoValue +public abstract class Project { + + public abstract boolean isDomain(); + @Nullable public abstract String description(); + public abstract String domainId(); + @Nullable public abstract String domainName(); + public abstract boolean enabled(); + public abstract String id(); + public abstract String name(); + @Nullable public abstract String parentId(); + @Nullable public abstract List<String> tags(); + + @SerializedNames({ "is_domain", "description", "domain_id", "domain_name", "enabled", "id", "name", "parent_id", + "tags" }) + public static Project create(boolean isDomain, String description, String domainId, String domainName, + boolean enabled, String id, String name, String parentId, List<String> tags) { + return new AutoValue_Project(isDomain, description, domainId, domainName, enabled, id, name, parentId, + tags == null ? null : ImmutableList.copyOf(tags)); + } + + Project() { + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/User.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/User.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/User.java index 33702a9..171b7d1 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/User.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/User.java @@ -41,15 +41,15 @@ public abstract class User { public abstract String id(); public abstract String name(); @Nullable public abstract Date passwordExpiresAt(); - public abstract Domain domain(); - - @SerializedNames({"id", "name", "password_expires_at", "domain"}) - public static User create(String id, - String name, - Date passwordExpiresAt, - Domain domain - ) { - return new AutoValue_User(id, name, passwordExpiresAt, domain); + @Nullable public abstract Domain domain(); + @Nullable public abstract String domainId(); + @Nullable public abstract String defaultProjectId(); + @Nullable public abstract Boolean enabled(); + + @SerializedNames({ "id", "name", "password_expires_at", "domain", "domain_id", "default_project_id", "enabled" }) + public static User create(String id, String name, Date passwordExpiresAt, Domain domain, String domainId, + String defaultProjectId, Boolean enabled) { + return new AutoValue_User(id, name, passwordExpiresAt, domain, domainId, defaultProjectId, enabled); } User() { http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java new file mode 100644 index 0000000..c9896f7 --- /dev/null +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java @@ -0,0 +1,83 @@ +/* + * 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.openstack.keystone.v3.features; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.HEAD; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.FalseOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; +import org.jclouds.openstack.keystone.v3.domain.Token; +import org.jclouds.openstack.keystone.v3.domain.User; +import org.jclouds.openstack.v2_0.services.Identity; +import org.jclouds.rest.annotations.Endpoint; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.Headers; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.SelectJson; + +/** + * Provides access to the Keystone Authentication API. + */ +@Consumes(MediaType.APPLICATION_JSON) +@RequestFilters(AuthenticateRequest.class) +@Endpoint(Identity.class) +@Path("/auth") +public interface AuthApi { + + /** + * Validate a token and, if it is valid, return access information regarding the tenant (though not the service catalog). + */ + @Named("token:get") + @GET + @SelectJson("token") + @Path("/tokens") + @Fallback(NullOnNotFoundOr404.class) + @Nullable + @Headers(keys = "X-Subject-Token", values = "{token}") + Token get(@PathParam("token") String token); + + /** + * Validate a token and, if it is valid, return access information regarding the tenant (though not the service catalog). + */ + @Named("token:getuser") + @GET + @SelectJson("user") + @Path("/tokens/{token}") + @Fallback(NullOnNotFoundOr404.class) + @Nullable + User getUserOfToken(@PathParam("token") String token); + + /** + * Validate a token. This is a high-performance variant of the #getToken() call that does not return any further + * information. + */ + @Named("token:check") + @HEAD + @Path("/tokens") + @Headers( keys = "X-Subject-Token", values = "{token}") + @Fallback(FalseOnNotFoundOr404.class) + boolean isValid(@PathParam("token") String token); + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/CatalogApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/CatalogApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/CatalogApi.java new file mode 100644 index 0000000..c29f299 --- /dev/null +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/CatalogApi.java @@ -0,0 +1,54 @@ +/* + * 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.openstack.keystone.v3.features; + +import java.util.List; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; +import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; +import org.jclouds.openstack.keystone.v3.domain.Endpoint; +import org.jclouds.openstack.v2_0.services.Identity; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.SelectJson; + +/** + * Provides access to the Keystone Admin API. + */ +@Consumes(MediaType.APPLICATION_JSON) +@RequestFilters(AuthenticateRequest.class) [email protected](Identity.class) +public interface CatalogApi { + + /** + * List all endpoints for a token. + * <p> + * NOTE: currently not working in openstack ( https://bugs.launchpad.net/keystone/+bug/988672 ) + */ + @Named("endpoints:list") + @GET + @SelectJson("endpoints") + @Path("/endpoints") + @Fallback(EmptyListOnNotFoundOr404.class) + List<Endpoint> endpoints(); +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java new file mode 100644 index 0000000..2089949 --- /dev/null +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java @@ -0,0 +1,50 @@ +/* + * 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.openstack.keystone.v3.features; + +import java.util.List; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; +import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; +import org.jclouds.openstack.keystone.v3.domain.Project; +import org.jclouds.openstack.v2_0.services.Identity; +import org.jclouds.rest.annotations.Endpoint; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.SelectJson; + +/** + * Provides access to the Keystone Projects API. + */ +@Consumes(MediaType.APPLICATION_JSON) +@RequestFilters(AuthenticateRequest.class) +@Endpoint(Identity.class) +@Path("/projects") +public interface ProjectApi { + + @Named("projects:list") + @GET + @SelectJson("projects") + @Fallback(EmptyListOnNotFoundOr404.class) + List<Project> list(); +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java new file mode 100644 index 0000000..cc87040 --- /dev/null +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java @@ -0,0 +1,50 @@ +/* + * 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.openstack.keystone.v3.features; + +import java.util.List; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; +import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; +import org.jclouds.openstack.keystone.v3.domain.Region; +import org.jclouds.openstack.v2_0.services.Identity; +import org.jclouds.rest.annotations.Endpoint; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.SelectJson; + +/** + * Provides access to the Keystone Region API. + */ +@Consumes(MediaType.APPLICATION_JSON) +@RequestFilters(AuthenticateRequest.class) +@Endpoint(Identity.class) +@Path("/regions") +public interface RegionApi { + + @Named("regions:list") + @GET + @SelectJson("regions") + @Fallback(EmptyListOnNotFoundOr404.class) + List<Region> list(); +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java deleted file mode 100644 index 34d9b42..0000000 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java +++ /dev/null @@ -1,135 +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.openstack.keystone.v3.features; - -import java.util.List; -import java.util.Set; - -import javax.inject.Named; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.core.MediaType; - -import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; -import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404; -import org.jclouds.Fallbacks.FalseOnNotFoundOr404; -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.javax.annotation.Nullable; -import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; -import org.jclouds.openstack.keystone.v2_0.domain.Endpoint; -import org.jclouds.openstack.keystone.v2_0.domain.User; -import org.jclouds.openstack.keystone.v3.domain.Region; -import org.jclouds.openstack.keystone.v3.domain.Token; -import org.jclouds.openstack.v2_0.services.Identity; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.Headers; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.rest.annotations.SelectJson; - -/** - * Provides access to the Keystone Admin API. - */ -@Consumes(MediaType.APPLICATION_JSON) -@RequestFilters(AuthenticateRequest.class) [email protected](Identity.class) -public interface TokenApi { - - /** - * Validate a token and, if it is valid, return access information regarding the tenant (though not the service catalog)/ - * - * @return the requested information - */ - @Named("token:get") - @GET - @SelectJson("token") - @Path("/auth/tokens") - @Fallback(NullOnNotFoundOr404.class) - @Nullable - @Headers( keys = "X-Subject-Token", values = "{token}") - Token get(@PathParam("token") String token); - - /** - * Validate a token and, if it is valid, return access information regarding the tenant (though not the service catalog)/ - * - * @return the requested information - */ - @Named("token:getuser") - @GET - @SelectJson("user") - @Path("/auth/tokens/{token}") - @Fallback(NullOnNotFoundOr404.class) - @Nullable - User getUserOfToken(@PathParam("token") String token); - - /** - * Validate a token. This is a high-performance variant of the #getToken() call that does not return any further - * information. - * - * @return true if the token is valid - */ - @Named("token:check") - @HEAD - @Path("/auth/tokens") - @Headers( keys = "X-Subject-Token", values = "{token}") - @Fallback(FalseOnNotFoundOr404.class) - boolean isValid(@PathParam("token") String token); - - /** - * List all endpoints for a token - * <p/> - * NOTE: currently not working in openstack ( https://bugs.launchpad.net/keystone/+bug/988672 ) - * - * @return the set of endpoints - */ - @Named("token:listEndpoints") - @GET - @SelectJson("endpoints") - @Path("/{token}/endpoints") - @Fallback(EmptySetOnNotFoundOr404.class) - Set<Endpoint> listEndpointsForToken(@PathParam("token") String token); - - - /** - * List all endpoints for a token - * <p/> - * NOTE: currently not working in openstack ( https://bugs.launchpad.net/keystone/+bug/988672 ) - * - * @return the list of endpoints - */ - @Named("token:endpoints") - @GET - @SelectJson("endpoints") - @Path("/endpoints") - @Fallback(EmptyListOnNotFoundOr404.class) - List<Endpoint> endpoints(); - - /** - * List all regions for a token - * <p/> - * - * @return the list of regions - */ - @Named("token:regions") - @GET - @SelectJson("regions") - @Path("/regions") - @Fallback(EmptyListOnNotFoundOr404.class) - List<Region> regions(); -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/parsers/ParseTokenFromHttpResponse.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/parsers/ParseTokenFromHttpResponse.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/parsers/ParseTokenFromHttpResponse.java index 9a5b799..1838900 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/parsers/ParseTokenFromHttpResponse.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/parsers/ParseTokenFromHttpResponse.java @@ -35,7 +35,7 @@ public class ParseTokenFromHttpResponse implements Function<HttpResponse, Token> private final ParseFirstJsonValueNamed<Token> parser; @Inject - public ParseTokenFromHttpResponse(GsonWrapper gsonView) { + ParseTokenFromHttpResponse(GsonWrapper gsonView) { this.parser = new ParseFirstJsonValueNamed<Token>(gsonView, TypeLiteral.get(Token.class), "token"); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java index 55b4216..d8a137e 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java @@ -46,6 +46,7 @@ public class V3AuthenticationApiLiveTest extends BaseV3KeystoneApiLiveTest { user = Iterables.get(Splitter.on(":").split(identity), 1); context = newBuilder().modules(setupModules()).overrides(setupProperties()) .build(new TypeToken<ApiContext<KeystoneApi>>() { + private static final long serialVersionUID = 1L; }); grabToken(context.utils().injector().getInstance(AuthenticateRequest.class)); http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java index 79e9647..523f638 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java @@ -16,17 +16,18 @@ */ package org.jclouds.openstack.keystone.v3.features; -import com.google.inject.Injector; -import com.google.inject.Module; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import java.util.Properties; + import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; import org.jclouds.openstack.keystone.v3.KeystoneApi; import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiLiveTest; import org.testng.annotations.Test; -import java.util.Properties; - -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; +import com.google.inject.Injector; +import com.google.inject.Module; @Test(groups = "live", testName = "TokenApiLiveTest") public class TokenApiLiveTest extends BaseV3KeystoneApiLiveTest { @@ -46,7 +47,7 @@ public class TokenApiLiveTest extends BaseV3KeystoneApiLiveTest { assertNotNull(api().get(token)); } - private TokenApi api() { - return api.getTokenApi(); + private AuthApi api() { + return api.getAuthApi(); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/f3f96b58/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java index 118b2fd..57520fa 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java @@ -16,7 +16,8 @@ */ package org.jclouds.openstack.keystone.v3.features; -import java.util.Map; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; import org.jclouds.openstack.keystone.v3.domain.Token; import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiMockTest; @@ -24,16 +25,13 @@ import org.testng.annotations.Test; import com.google.common.reflect.TypeToken; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNull; - @Test(groups = "unit", testName = "TokenApiMockTest", singleThreaded = true) public class TokenApiMockTest extends BaseV3KeystoneApiMockTest { public void testGetToken() throws InterruptedException { server.enqueue(jsonResponse("/v3/token.json").addHeader("X-Subject-Token", "bf583aefb74e45108346b4c1c8527a10")); - Token token = api.getTokenApi().get("bf583aefb74e45108346b4c1c8527a10"); + Token token = api.getAuthApi().get("bf583aefb74e45108346b4c1c8527a10"); assertEquals(token, tokenFromResource("/v3/token.json")); @@ -44,7 +42,7 @@ public class TokenApiMockTest extends BaseV3KeystoneApiMockTest { public void testGetTokenReturns404() throws InterruptedException { server.enqueue(response404()); - Token token = api.getTokenApi().get("bf583aefb74e45108346b4c1c8527a10"); + Token token = api.getAuthApi().get("bf583aefb74e45108346b4c1c8527a10"); assertNull(token);
