Issue 926: cleaned up usage of authentication client

This commit is contained in:
Adrian Cole 2012-05-22 11:26:52 -06:00
parent 8c2cc935b8
commit f1c02d092f
4 changed files with 43 additions and 18 deletions

View File

@ -46,18 +46,29 @@ import com.google.common.util.concurrent.ListenableFuture;
public interface AuthenticationAsyncClient { public interface AuthenticationAsyncClient {
/** /**
* @see AuthenticationClient#authenticateTenantWithCredentials(String,PasswordCredentials) * @see AuthenticationClient#authenticateWithTenantNameAndCredentials(String,PasswordCredentials)
*/ */
@POST @POST
@SelectJson("access") @SelectJson("access")
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Path("/tokens") @Path("/tokens")
@MapBinder(BindAuthToJsonPayload.class) @MapBinder(BindAuthToJsonPayload.class)
ListenableFuture<Access> authenticateTenantWithCredentials(@PayloadParam("tenantName") String tenantId, ListenableFuture<Access> authenticateWithTenantNameAndCredentials(@PayloadParam("tenantName") String tenantName,
PasswordCredentials passwordCredentials);
/**
* @see AuthenticationClient#authenticateWithTenantIdAndCredentials(String,PasswordCredentials)
*/
@POST
@SelectJson("access")
@Consumes(MediaType.APPLICATION_JSON)
@Path("/tokens")
@MapBinder(BindAuthToJsonPayload.class)
ListenableFuture<Access> authenticateWithTenantIdAndCredentials(@PayloadParam("tenantId") String tenantId,
PasswordCredentials passwordCredentials); PasswordCredentials passwordCredentials);
/** /**
* @see AuthenticationClient#authenticateTenantWithCredentials(String,ApiAccessKeyCredentials) * @see AuthenticationClient#authenticateWithTenantNameAndCredentials(String,ApiAccessKeyCredentials)
*/ */
@POST @POST
@SelectJson("access") @SelectJson("access")
@ -66,17 +77,17 @@ public interface AuthenticationAsyncClient {
@MapBinder(BindAuthToJsonPayload.class) @MapBinder(BindAuthToJsonPayload.class)
// TODO: is tenantName permanent? or should we switch to tenantId at some point. seems most tools // TODO: is tenantName permanent? or should we switch to tenantId at some point. seems most tools
// still use tenantName // still use tenantName
ListenableFuture<Access> authenticateTenantWithCredentials(@PayloadParam("tenantName") String tenantId, ListenableFuture<Access> authenticateWithTenantNameAndCredentials(@PayloadParam("tenantName") String tenantName,
ApiAccessKeyCredentials apiAccessKeyCredentials); ApiAccessKeyCredentials apiAccessKeyCredentials);
/** /**
* @see AuthenticationClient#authenticateTenantWithCredentials(String,ApiAccessKeyCredentials) * @see AuthenticationClient#authenticateWithTenantIdAndCredentials(String,ApiAccessKeyCredentials)
*/ */
@POST @POST
@SelectJson("access") @SelectJson("access")
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Path("/tokens") @Path("/tokens")
@MapBinder(BindAuthToJsonPayload.class) @MapBinder(BindAuthToJsonPayload.class)
ListenableFuture<Access> authenticateTenantWithTenantIdAndCredentials(@PayloadParam("tenantId") String tenantId, ListenableFuture<Access> authenticateWithTenantIdAndCredentials(@PayloadParam("tenantId") String tenantId,
ApiAccessKeyCredentials apiAccessKeyCredentials); ApiAccessKeyCredentials apiAccessKeyCredentials);
} }

View File

@ -42,19 +42,26 @@ public interface AuthenticationClient {
* *
* @return access with token * @return access with token
*/ */
Access authenticateTenantWithCredentials(String tenantId, PasswordCredentials passwordCredentials); Access authenticateWithTenantNameAndCredentials(String tenantId, PasswordCredentials passwordCredentials);
/** /**
* Authenticate to generate a token. * Authenticate to generate a token.
* *
* @return access with token * @return access with token
*/ */
Access authenticateTenantWithCredentials(String tenantId, ApiAccessKeyCredentials passwordCredentials); Access authenticateWithTenantIdAndCredentials(String tenantId, PasswordCredentials passwordCredentials);
/**
* Authenticate to generate a token.
*
* @return access with token
*/
Access authenticateWithTenantNameAndCredentials(String tenantId, ApiAccessKeyCredentials passwordCredentials);
/** /**
* Authenticate to generate a token. * Authenticate to generate a token.
* *
* @return access with token * @return access with token
*/ */
Access authenticateTenantWithTenantIdAndCredentials(String tenantId, ApiAccessKeyCredentials passwordCredentials); Access authenticateWithTenantIdAndCredentials(String tenantId, ApiAccessKeyCredentials passwordCredentials);
} }

View File

@ -42,7 +42,7 @@ public class AuthenticateApiAccessKeyCredentials implements Function<Credentials
public Access apply(Credentials input) { public Access apply(Credentials input) {
if (input.identity.indexOf(':') == -1) { if (input.identity.indexOf(':') == -1) {
throw new AuthorizationException(String.format("Identity %s does not match format tenantName:accessKey", throw new AuthorizationException(String.format("Identity %s does not match format tenantName:accessKey",
input.identity), null); input.identity), null);
} }
String tenantId = input.identity.substring(0, input.identity.indexOf(':')); String tenantId = input.identity.substring(0, input.identity.indexOf(':'));
@ -50,12 +50,12 @@ public class AuthenticateApiAccessKeyCredentials implements Function<Credentials
String passwordOrSecretKey = input.credential; String passwordOrSecretKey = input.credential;
ApiAccessKeyCredentials apiAccessKeyCredentials = ApiAccessKeyCredentials.createWithAccessKeyAndSecretKey( ApiAccessKeyCredentials apiAccessKeyCredentials = ApiAccessKeyCredentials.createWithAccessKeyAndSecretKey(
usernameOrAccessKey, passwordOrSecretKey); usernameOrAccessKey, passwordOrSecretKey);
Access access; Access access;
if(tenantId.matches("[0-9]*")) { if (tenantId.matches("^[0-9]+$")) {
access = client.authenticateTenantWithTenantIdAndCredentials(tenantId, apiAccessKeyCredentials); access = client.authenticateWithTenantIdAndCredentials(tenantId, apiAccessKeyCredentials);
} else { } else {
access = client.authenticateTenantWithCredentials(tenantId, apiAccessKeyCredentials); access = client.authenticateWithTenantNameAndCredentials(tenantId, apiAccessKeyCredentials);
} }
return access; return access;
} }

View File

@ -17,6 +17,7 @@
* under the License. * under the License.
*/ */
package org.jclouds.openstack.keystone.v2_0.functions; package org.jclouds.openstack.keystone.v2_0.functions;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.domain.Credentials; import org.jclouds.domain.Credentials;
@ -39,16 +40,22 @@ public class AuthenticatePasswordCredentials implements Function<Credentials, Ac
public Access apply(Credentials input) { public Access apply(Credentials input) {
if (input.identity.indexOf(':') == -1) { if (input.identity.indexOf(':') == -1) {
throw new AuthorizationException(String.format("Identity %s does not match format tenantId:username", throw new AuthorizationException(String.format("Identity %s does not match format tenantId:username",
input.identity), null); input.identity), null);
} }
String tenantId = input.identity.substring(0, input.identity.indexOf(':')); String tenantId = input.identity.substring(0, input.identity.indexOf(':'));
String usernameOrAccessKey = input.identity.substring(input.identity.indexOf(':') + 1); String usernameOrAccessKey = input.identity.substring(input.identity.indexOf(':') + 1);
String passwordOrSecretKey = input.credential; String passwordOrSecretKey = input.credential;
PasswordCredentials passwordCredentials = PasswordCredentials.createWithUsernameAndPassword(usernameOrAccessKey, PasswordCredentials passwordCredentials = PasswordCredentials.createWithUsernameAndPassword(usernameOrAccessKey,
passwordOrSecretKey); passwordOrSecretKey);
return client.authenticateTenantWithCredentials(tenantId, passwordCredentials); Access access;
if (tenantId.matches("^[0-9]+$")) {
access = client.authenticateWithTenantIdAndCredentials(tenantId, passwordCredentials);
} else {
access = client.authenticateWithTenantNameAndCredentials(tenantId, passwordCredentials);
}
return access;
} }
@Override @Override