Repository: jclouds Updated Branches: refs/heads/keystonev3 ec9a88234 -> e17a18621
Add support for project name in authorization scope Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/e17a1862 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/e17a1862 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/e17a1862 Branch: refs/heads/keystonev3 Commit: e17a1862124bf007c20aa9853dc373937411e150 Parents: ec9a882 Author: Ignasi Barrera <[email protected]> Authored: Thu Jan 11 17:26:09 2018 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Thu Jan 11 17:26:09 2018 +0100 ---------------------------------------------------------------------- .../v3/binders/BindAuthToJsonPayload.java | 28 +++++++++++++------- .../openstack/keystone/v3/domain/Auth.java | 27 +++++++++++++------ .../v3/auth/V3AuthenticationApiMockTest.java | 2 +- .../v3/internal/BaseV3KeystoneApiMockTest.java | 2 +- 4 files changed, 39 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/e17a1862/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 3b9ddc2..80d42a3 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 @@ -23,28 +23,35 @@ import static com.google.common.collect.Iterables.tryFind; import static org.jclouds.openstack.keystone.v3.domain.Auth.Scope.DOMAIN; import static org.jclouds.openstack.keystone.v3.domain.Auth.Scope.DOMAIN_ID; import static org.jclouds.openstack.keystone.v3.domain.Auth.Scope.PROJECT; +import static org.jclouds.openstack.keystone.v3.domain.Auth.Scope.PROJECT_ID; +import static org.jclouds.openstack.keystone.v3.domain.Auth.Scope.UNSCOPED; import java.util.Map; +import java.util.Set; import org.jclouds.http.HttpRequest; import org.jclouds.json.Json; import org.jclouds.openstack.keystone.auth.domain.TenantOrDomainAndCredentials; import org.jclouds.openstack.keystone.v3.domain.Auth; -import org.jclouds.openstack.keystone.v3.domain.Auth.Domain; import org.jclouds.openstack.keystone.v3.domain.Auth.DomainIdScope; import org.jclouds.openstack.keystone.v3.domain.Auth.DomainScope; import org.jclouds.openstack.keystone.v3.domain.Auth.Id; +import org.jclouds.openstack.keystone.v3.domain.Auth.Name; +import org.jclouds.openstack.keystone.v3.domain.Auth.ProjectIdScope; import org.jclouds.openstack.keystone.v3.domain.Auth.ProjectScope; -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; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; public abstract class BindAuthToJsonPayload<T> extends BindToJsonPayload implements MapBinder { + private static final Set<String> SCOPE_PREFIXES = ImmutableSet + .of(PROJECT, PROJECT_ID, DOMAIN, DOMAIN_ID); + protected BindAuthToJsonPayload(Json jsonBinder) { super(jsonBinder); } @@ -71,26 +78,27 @@ public abstract class BindAuthToJsonPayload<T> extends BindToJsonPayload impleme return authRequest; } - + private Object parseScope(TenantOrDomainAndCredentials<T> credentials) { String scope = credentials.scope(); // If there is no prefix, assume an unscoped authentication if (!scope.contains(":")) { - checkArgument(scope.equals(Scope.UNSCOPED), "Invalid scope: %s", scope); - return Scope.UNSCOPED; + checkArgument(scope.equals(UNSCOPED), "Invalid scope: %s", scope); + return UNSCOPED; } // Otherwise, parse if it is a project or domain scope String[] parts = scope.split(":"); checkArgument(parts.length == 2, "Invalid scope: %s", scope); - checkArgument(PROJECT.equals(parts[0]) || DOMAIN.equals(parts[0]) || DOMAIN_ID.equals(parts[0]), - "Scope prefix should be '%s', '%s' or '%s'", PROJECT, DOMAIN, DOMAIN_ID); + checkArgument(SCOPE_PREFIXES.contains(parts[0]), "Scope prefix should be: %s", SCOPE_PREFIXES); + if (PROJECT.equals(parts[0])) { - return ProjectScope.create(Id.create(parts[1])); + return ProjectScope.create(Name.create(parts[1])); + } else if (PROJECT_ID.equals(parts[0])) { + return ProjectIdScope.create(Id.create(parts[1])); } else if (DOMAIN.equals(parts[0])) { - return DomainScope.create(Domain.create(parts[1])); + return DomainScope.create(Name.create(parts[1])); } else { return DomainIdScope.create(Id.create(parts[1])); } } - } http://git-wip-us.apache.org/repos/asf/jclouds/blob/e17a1862/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 c8ebc3e..63fdb95 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 @@ -88,17 +88,18 @@ public abstract class Auth { } @AutoValue - public abstract static class Domain { + public abstract static class Name { @Nullable public abstract String name(); @SerializedNames({ "name" }) - public static Domain create(String name) { - return new AutoValue_Auth_Domain(name); + public static Name create(String name) { + return new AutoValue_Auth_Name(name); } } public static class Scope { public static final String PROJECT = "project"; + public static final String PROJECT_ID = "projectId"; public static final String DOMAIN = "domain"; public static final String DOMAIN_ID = "domainId"; public static final String UNSCOPED = "unscoped"; @@ -106,11 +107,21 @@ public abstract class Auth { @AutoValue public abstract static class ProjectScope { + public abstract Name project(); + + @SerializedNames({ Scope.PROJECT }) + public static ProjectScope create(Name name) { + return new AutoValue_Auth_ProjectScope(name); + } + } + + @AutoValue + public abstract static class ProjectIdScope { public abstract Id project(); @SerializedNames({ Scope.PROJECT }) - public static ProjectScope create(Id id) { - return new AutoValue_Auth_ProjectScope(id); + public static ProjectIdScope create(Id id) { + return new AutoValue_Auth_ProjectIdScope(id); } } @@ -126,11 +137,11 @@ public abstract class Auth { @AutoValue public abstract static class DomainScope { - public abstract Domain domain(); + public abstract Name domain(); @SerializedNames({ Scope.DOMAIN }) - public static DomainScope create(Domain domain) { - return new AutoValue_Auth_DomainScope(domain); + public static DomainScope create(Name name) { + return new AutoValue_Auth_DomainScope(name); } } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/e17a1862/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java index 7cd2d29..d601913 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java @@ -52,7 +52,7 @@ public class V3AuthenticationApiMockTest extends BaseV3KeystoneApiMockTest { TenantOrDomainAndCredentials<PasswordCredentials> credentials = TenantOrDomainAndCredentials.<PasswordCredentials> builder() .tenantOrDomainName("domain") - .scope("project:1234567890") + .scope("projectId:1234567890") .credentials(PasswordCredentials.builder().username("identity").password("credential").build()).build(); AuthInfo authInfo = authenticationApi.authenticatePassword(credentials); http://git-wip-us.apache.org/repos/asf/jclouds/blob/e17a1862/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java index bdb8aa9..ec3f7ba 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java @@ -89,7 +89,7 @@ public class BaseV3KeystoneApiMockTest { protected Properties overrides() { Properties overrides = new Properties(); - overrides.setProperty(KeystoneProperties.SCOPE, "project:1234567890"); + overrides.setProperty(KeystoneProperties.SCOPE, "projectId:1234567890"); overrides.setProperty(KeystoneProperties.SERVICE_TYPE, "identityv3"); return overrides; }
