You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by mr...@apache.org on 2016/01/09 05:21:03 UTC
[2/5] usergrid git commit: USERGRID-933: token now contains org in
workflows for confirmation/activation of admin users
USERGRID-933: token now contains org in workflows for confirmation/activation of admin users
allows org-specific email templates and admin approval email addresses to be used
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/e3d454fe
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/e3d454fe
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/e3d454fe
Branch: refs/heads/master
Commit: e3d454fed8ffc04978e167aacf29b42e450de2d1
Parents: 16bcae6
Author: Mike Dunker <md...@apigee.com>
Authored: Fri Jan 8 09:53:15 2016 -0800
Committer: Mike Dunker <md...@apigee.com>
Committed: Fri Jan 8 09:53:15 2016 -0800
----------------------------------------------------------------------
.../rest/management/users/UserResource.java | 4 +-
.../usergrid/management/ManagementService.java | 12 +-
.../cassandra/ManagementServiceImpl.java | 171 +++++++++++--------
.../usergrid/security/tokens/TokenInfo.java | 19 +++
.../usergrid/security/tokens/TokenService.java | 9 +-
.../tokens/cassandra/TokenServiceImpl.java | 44 ++++-
.../apache/usergrid/management/EmailFlowIT.java | 9 +-
7 files changed, 181 insertions(+), 87 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/e3d454fe/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UserResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UserResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UserResource.java
index 320c18e..e9b5ad9 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UserResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UserResource.java
@@ -337,7 +337,7 @@ public class UserResource extends AbstractContextResource {
}
try {
- management.handleActivationTokenForAdminUser( null, user.getUuid(), token );
+ management.handleActivationTokenForAdminUser( user.getUuid(), token );
return handleViewable( "activate", this );
}
catch ( TokenException e ) {
@@ -366,7 +366,7 @@ public class UserResource extends AbstractContextResource {
}
try {
- ActivationState state = management.handleConfirmationTokenForAdminUser( null, user.getUuid(), token );
+ ActivationState state = management.handleConfirmationTokenForAdminUser( user.getUuid(), token );
if ( state == ActivationState.CONFIRMED_AWAITING_ACTIVATION ) {
return handleViewable( "confirm", this );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/e3d454fe/stack/services/src/main/java/org/apache/usergrid/management/ManagementService.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/ManagementService.java b/stack/services/src/main/java/org/apache/usergrid/management/ManagementService.java
index 950f7e0..4eb147a 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/ManagementService.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/ManagementService.java
@@ -50,9 +50,9 @@ public interface ManagementService {
public AccessInfo authorizeClient( String clientId, String clientSecret, long ttl ) throws Exception;
- public ActivationState handleConfirmationTokenForAdminUser( UUID organizationId, UUID userId, String token ) throws Exception;
+ public ActivationState handleConfirmationTokenForAdminUser( UUID userId, String token ) throws Exception;
- public ActivationState handleActivationTokenForAdminUser( UUID organizationId, UUID userId, String token ) throws Exception;
+ public ActivationState handleActivationTokenForAdminUser( UUID userId, String token ) throws Exception;
public ActivationState handleActivationTokenForOrganization( UUID organizationId, String token ) throws Exception;
@@ -120,9 +120,9 @@ public interface ManagementService {
public void revokeAccessTokenForAdminUser( UUID userId, String token ) throws Exception;
- public String getActivationTokenForAdminUser( UUID userId, long ttl ) throws Exception;
+ public String getActivationTokenForAdminUser( UUID userId, long ttl, UUID organizationId ) throws Exception;
- public String getConfirmationTokenForAdminUser( UUID userId, long ttl ) throws Exception;
+ public String getConfirmationTokenForAdminUser( UUID userId, long ttl, UUID organizationId ) throws Exception;
public String getActivationTokenForOrganization( UUID organizationId, long ttl ) throws Exception;
@@ -190,6 +190,8 @@ public interface ManagementService {
public Map<String, Object> getOrganizationData( OrganizationInfo organization ) throws Exception;
+ public UUID getOrganizationIdForApplication( UUID applicationId ) throws Exception;
+
public OrganizationInfo getOrganizationForApplication( UUID applicationId ) throws Exception;
public OrganizationInfo getOrganizationInfoFromAccessToken( String token ) throws Exception;
@@ -198,7 +200,7 @@ public interface ManagementService {
public BiMap<UUID, String> getOrganizationsForAdminUser( UUID userId ) throws Exception;
- public String getPasswordResetTokenForAdminUser( UUID userId, long ttl ) throws Exception;
+ public String getPasswordResetTokenForAdminUser( UUID userId, long ttl, UUID organizationId ) throws Exception;
public UserInfo getAdminUserByUuid( UUID id ) throws Exception;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/e3d454fe/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
index 61beeb7..99ea05f 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
@@ -64,6 +64,7 @@ import org.apache.usergrid.security.shiro.utils.SubjectUtils;
import org.apache.usergrid.security.tokens.TokenCategory;
import org.apache.usergrid.security.tokens.TokenInfo;
import org.apache.usergrid.security.tokens.TokenService;
+import org.apache.usergrid.security.tokens.cassandra.TokenServiceImpl;
import org.apache.usergrid.security.tokens.exceptions.TokenException;
import org.apache.usergrid.services.*;
import org.apache.usergrid.utils.*;
@@ -1347,18 +1348,24 @@ public class ManagementServiceImpl implements ManagementService {
}
- // TokenType tokenType, String type, AuthPrincipalInfo principal,
- // Map<String, Object> state
public String getTokenForPrincipal( TokenCategory token_category, String token_type, UUID applicationId,
AuthPrincipalType principal_type, UUID id, long duration ) throws Exception {
+ return getTokenForPrincipal(token_category, token_type, applicationId, principal_type, id, duration, null);
+ }
+
+ // include workflowOrgId
+ public String getTokenForPrincipal( TokenCategory token_category, String token_type, UUID applicationId,
+ AuthPrincipalType principal_type, UUID id, long duration,
+ UUID workflowOrgId) throws Exception {
+
if ( anyNull(token_category, applicationId, principal_type, id) ) {
return null;
}
return tokens
.createToken( token_category, token_type, new AuthPrincipalInfo( principal_type, id, applicationId ),
- null, duration );
+ null, duration, workflowOrgId );
}
@@ -1375,29 +1382,40 @@ public class ManagementServiceImpl implements ManagementService {
}
- public AuthPrincipalInfo getPrincipalFromAccessToken( String token, String expected_token_type,
- AuthPrincipalType expected_principal_type ) throws Exception {
+ public boolean validateTokenAndPrincipalTypes(TokenInfo tokenInfo, String expected_token_type,
+ AuthPrincipalType expected_principal_type) throws Exception {
+ boolean success = true;
+ if (tokenInfo == null || (expected_token_type != null && !expected_token_type.equals(tokenInfo.getType()))) {
+ success = false;
+ } else {
+ AuthPrincipalInfo principal = tokenInfo.getPrincipal();
+ if (principal == null ||
+ (expected_principal_type != null && !expected_principal_type.equals(principal.getType()))) {
+ success = false;
+ }
+ }
+
+ return success;
+ }
+
+
+ public TokenInfo getTokenInfoFromAccessToken(String token, String expected_token_type,
+ AuthPrincipalType expected_principal_type) throws Exception {
TokenInfo tokenInfo = tokens.getTokenInfo( token );
- if ( tokenInfo == null ) {
- return null;
- }
+ return validateTokenAndPrincipalTypes(tokenInfo, expected_token_type, expected_principal_type) ?
+ tokenInfo : null;
+ }
- if ( ( expected_token_type != null ) && !expected_token_type.equals( tokenInfo.getType() ) ) {
- return null;
- }
- AuthPrincipalInfo principal = tokenInfo.getPrincipal();
- if ( principal == null ) {
- return null;
- }
+ public AuthPrincipalInfo getPrincipalFromAccessToken(String token, String expected_token_type,
+ AuthPrincipalType expected_principal_type) throws Exception {
- if ( ( expected_principal_type != null ) && !expected_principal_type.equals( principal.getType() ) ) {
- return null;
- }
+ // validates expected types
+ TokenInfo tokenInfo = getTokenInfoFromAccessToken(token, expected_token_type, expected_principal_type);
- return principal;
+ return tokenInfo != null ? tokenInfo.getPrincipal() : null;
}
@@ -1420,10 +1438,7 @@ public class ManagementServiceImpl implements ManagementService {
principal.getApplicationId() != null
? principal.getApplicationId() : smf.getManagementAppId() );
- Entity entity = em.get(new SimpleEntityRef(
- principal.getType().getEntityType(), principal.getUuid()));
-
- return entity;
+ return em.get(new SimpleEntityRef( principal.getType().getEntityType(), principal.getUuid()));
}
@@ -1472,8 +1487,7 @@ public class ManagementServiceImpl implements ManagementService {
@Override
public Entity getAdminUserEntityFromAccessToken( String token ) throws Exception {
- Entity user = getEntityFromAccessToken(token, null, ADMIN_USER);
- return user;
+ return getEntityFromAccessToken(token, null, ADMIN_USER);
}
@@ -1794,10 +1808,7 @@ public class ManagementServiceImpl implements ManagementService {
}
-
- @Override
- public OrganizationInfo getOrganizationForApplication( UUID applicationInfoId ) throws Exception {
-
+ protected Entity getOrganizationEntityForApplication( UUID applicationInfoId ) throws Exception {
if ( applicationInfoId == null ) {
return null;
}
@@ -1805,15 +1816,28 @@ public class ManagementServiceImpl implements ManagementService {
final EntityManager em = emf.getEntityManager(smf.getManagementAppId());
Results r = em.getSourceEntities(
- new SimpleEntityRef(CpNamingUtils.APPLICATION_INFO, applicationInfoId),
- ORG_APP_RELATIONSHIP, Group.ENTITY_TYPE, Level.ALL_PROPERTIES);
+ new SimpleEntityRef(CpNamingUtils.APPLICATION_INFO, applicationInfoId),
+ ORG_APP_RELATIONSHIP, Group.ENTITY_TYPE, Level.ALL_PROPERTIES);
- Entity entity = r.getEntity();
- if ( entity != null ) {
- return new OrganizationInfo( entity.getUuid(), ( String ) entity.getProperty( "path" ) );
- }
+ return r.getEntity();
+ }
- return null;
+ @Override
+ public UUID getOrganizationIdForApplication( UUID applicationInfoId ) throws Exception {
+
+ Entity entity = getOrganizationEntityForApplication(applicationInfoId);
+
+ return entity != null ? entity.getUuid() : null;
+ }
+
+ @Override
+ public OrganizationInfo getOrganizationForApplication( UUID applicationInfoId ) throws Exception {
+
+ Entity entity = getOrganizationEntityForApplication(applicationInfoId);
+
+ return entity != null ?
+ new OrganizationInfo( entity.getUuid(), ( String ) entity.getProperty( "path" ) ) :
+ null;
}
@@ -2133,9 +2157,9 @@ public class ManagementServiceImpl implements ManagementService {
@Override
- public String getPasswordResetTokenForAdminUser( UUID userId, long ttl ) throws Exception {
+ public String getPasswordResetTokenForAdminUser( UUID userId, long ttl, UUID organizationId ) throws Exception {
return getTokenForPrincipal( EMAIL, TOKEN_TYPE_PASSWORD_RESET, smf.getManagementAppId(), ADMIN_USER, userId,
- ttl );
+ ttl, organizationId );
}
@@ -2153,14 +2177,16 @@ public class ManagementServiceImpl implements ManagementService {
@Override
- public String getActivationTokenForAdminUser( UUID userId, long ttl ) throws Exception {
- return getTokenForPrincipal( EMAIL, TOKEN_TYPE_ACTIVATION, smf.getManagementAppId(), ADMIN_USER, userId, ttl );
+ public String getActivationTokenForAdminUser( UUID userId, long ttl, UUID organizationId ) throws Exception {
+ return getTokenForPrincipal( EMAIL, TOKEN_TYPE_ACTIVATION, smf.getManagementAppId(), ADMIN_USER, userId,
+ ttl, organizationId );
}
@Override
- public String getConfirmationTokenForAdminUser( UUID userId, long ttl ) throws Exception {
- return getTokenForPrincipal( EMAIL, TOKEN_TYPE_CONFIRM, smf.getManagementAppId(), ADMIN_USER, userId, ttl );
+ public String getConfirmationTokenForAdminUser( UUID userId, long ttl, UUID organizationId ) throws Exception {
+ return getTokenForPrincipal( EMAIL, TOKEN_TYPE_CONFIRM, smf.getManagementAppId(), ADMIN_USER, userId,
+ ttl, organizationId );
}
@@ -2257,7 +2283,7 @@ public class ManagementServiceImpl implements ManagementService {
@Override
public void startAdminUserPasswordResetFlow( UUID organizationId, UserInfo user ) throws Exception {
- String token = getPasswordResetTokenForAdminUser( user.getUuid(), 0 );
+ String token = getPasswordResetTokenForAdminUser( user.getUuid(), 0, organizationId );
String resetPropertyUrl = organizationId != null ?
getOrganizationConfigPropertyByUuid(organizationId, PROPERTIES_ADMIN_RESETPW_URL) :
@@ -2410,21 +2436,25 @@ public class ManagementServiceImpl implements ManagementService {
@Override
- public ActivationState handleConfirmationTokenForAdminUser( UUID organizationId, UUID userId, String token ) throws Exception {
- AuthPrincipalInfo principal = getPrincipalFromAccessToken( token, TOKEN_TYPE_CONFIRM, ADMIN_USER );
- if ( ( principal != null ) && userId.equals( principal.getUuid() ) ) {
- UserInfo user = getAdminUserByUuid( principal.getUuid() );
- confirmAdminUser( user.getUuid() );
- if ( newAdminUsersNeedSysAdminApproval() ) {
- sendAdminUserConfirmedAwaitingActivationEmail( user );
- sendSysAdminRequestAdminActivationEmail(organizationId, user);
- return ActivationState.CONFIRMED_AWAITING_ACTIVATION;
- }
- else {
- activateAdminUser( principal.getUuid() );
- sendAdminUserActivatedEmail( user );
- sendSysAdminNewAdminActivatedNotificationEmail( organizationId, user );
- return ActivationState.ACTIVATED;
+ // token may contain the workflow organization id
+ public ActivationState handleConfirmationTokenForAdminUser( UUID userId, String token ) throws Exception {
+ TokenInfo tokenInfo = getTokenInfoFromAccessToken(token, TOKEN_TYPE_CONFIRM, ADMIN_USER);
+ if (tokenInfo != null) {
+ AuthPrincipalInfo principal = tokenInfo.getPrincipal();
+ if ((principal != null) && userId.equals(principal.getUuid())) {
+ UUID workflowOrgId = tokenInfo.getWorkflowOrgId();
+ UserInfo user = getAdminUserByUuid(principal.getUuid());
+ confirmAdminUser(user.getUuid());
+ if (newAdminUsersNeedSysAdminApproval()) {
+ sendAdminUserConfirmedAwaitingActivationEmail(user);
+ sendSysAdminRequestAdminActivationEmail(workflowOrgId, user);
+ return ActivationState.CONFIRMED_AWAITING_ACTIVATION;
+ } else {
+ activateAdminUser(principal.getUuid());
+ sendAdminUserActivatedEmail(user);
+ sendSysAdminNewAdminActivatedNotificationEmail(workflowOrgId, user);
+ return ActivationState.ACTIVATED;
+ }
}
}
return ActivationState.UNKNOWN;
@@ -2432,21 +2462,26 @@ public class ManagementServiceImpl implements ManagementService {
@Override
- public ActivationState handleActivationTokenForAdminUser( UUID organizationId, UUID userId, String token ) throws Exception {
- AuthPrincipalInfo principal = getPrincipalFromAccessToken( token, TOKEN_TYPE_ACTIVATION, ADMIN_USER );
- if ( ( principal != null ) && userId.equals( principal.getUuid() ) ) {
- activateAdminUser( principal.getUuid() );
- UserInfo user = getAdminUserByUuid( principal.getUuid() );
- sendAdminUserActivatedEmail( user );
- sendSysAdminNewAdminActivatedNotificationEmail(organizationId, user);
- return ActivationState.ACTIVATED;
+ // token may contain the workflow organization id
+ public ActivationState handleActivationTokenForAdminUser( UUID userId, String token ) throws Exception {
+ TokenInfo tokenInfo = getTokenInfoFromAccessToken(token, TOKEN_TYPE_ACTIVATION, ADMIN_USER);
+ if (tokenInfo == null) {
+ AuthPrincipalInfo principal = tokenInfo.getPrincipal();
+ if ((principal != null) && userId.equals(principal.getUuid())) {
+ UUID workflowOrgId = tokenInfo.getWorkflowOrgId();
+ activateAdminUser(principal.getUuid());
+ UserInfo user = getAdminUserByUuid(principal.getUuid());
+ sendAdminUserActivatedEmail(user);
+ sendSysAdminNewAdminActivatedNotificationEmail(workflowOrgId, user);
+ return ActivationState.ACTIVATED;
+ }
}
return ActivationState.UNKNOWN;
}
public void sendAdminUserConfirmationEmail( UUID organizationId, UserInfo user ) throws Exception {
- String token = getConfirmationTokenForAdminUser(user.getUuid(), 0);
+ String token = getConfirmationTokenForAdminUser(user.getUuid(), 0, organizationId);
String adminActivationUrlTemplate = organizationId != null ?
getOrganizationConfigPropertyByUuid(organizationId, PROPERTIES_ADMIN_CONFIRMATION_URL) :
getOrganizationConfigPropertyForUserInfo(user, PROPERTIES_ADMIN_CONFIRMATION_URL);
@@ -2460,7 +2495,7 @@ public class ManagementServiceImpl implements ManagementService {
public void sendSysAdminRequestAdminActivationEmail( UUID organizationId, UserInfo user ) throws Exception {
- String token = getActivationTokenForAdminUser(user.getUuid(), 0);
+ String token = getActivationTokenForAdminUser(user.getUuid(), 0, organizationId);
//TODO: admin specific email
String activationUrlTemplate = organizationId != null ?
getOrganizationConfigPropertyByUuid(organizationId, PROPERTIES_ADMIN_ACTIVATION_URL) :
http://git-wip-us.apache.org/repos/asf/usergrid/blob/e3d454fe/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenInfo.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenInfo.java b/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenInfo.java
index e3b3ff1..d4f42aa 100644
--- a/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenInfo.java
+++ b/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenInfo.java
@@ -17,6 +17,7 @@
package org.apache.usergrid.security.tokens;
+import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -34,10 +35,17 @@ public class TokenInfo {
long duration;
AuthPrincipalInfo principal;
Map<String, Object> state;
+ UUID workflowOrgId;
public TokenInfo( UUID uuid, String type, long created, long accessed, long inactive, long duration,
AuthPrincipalInfo principal, Map<String, Object> state ) {
+ this(uuid, type, created, accessed, inactive, duration, principal, state, null);
+ }
+
+
+ public TokenInfo( UUID uuid, String type, long created, long accessed, long inactive, long duration,
+ AuthPrincipalInfo principal, Map<String, Object> state, UUID workflowOrgId ) {
this.uuid = uuid;
this.type = type;
this.created = created;
@@ -46,6 +54,7 @@ public class TokenInfo {
this.principal = principal;
this.duration = duration;
this.state = state;
+ this.workflowOrgId = workflowOrgId;
}
@@ -138,4 +147,14 @@ public class TokenInfo {
public void setState( Map<String, Object> state ) {
this.state = state;
}
+
+
+ public UUID getWorkflowOrgId() {
+ return workflowOrgId;
+ }
+
+
+ public void setWorkflowOrgId( UUID workflowOrgId ) {
+ this.workflowOrgId = workflowOrgId;
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/e3d454fe/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenService.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenService.java b/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenService.java
index 36decce..d8526af 100644
--- a/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenService.java
+++ b/stack/services/src/main/java/org/apache/usergrid/security/tokens/TokenService.java
@@ -18,6 +18,7 @@ package org.apache.usergrid.security.tokens;
import java.util.Map;
+import java.util.UUID;
import org.apache.usergrid.security.AuthPrincipalInfo;
@@ -31,8 +32,14 @@ public interface TokenService {
public String createToken( TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
Map<String, Object> state, long duration ) throws Exception;
+ public String createToken( TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
+ Map<String, Object> state, long duration, UUID workflowOrgId ) throws Exception;
+
public void importToken( String token, TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
- Map<String, Object> state, long duration ) throws Exception;
+ Map<String, Object> state, long duration ) throws Exception;
+
+ public void importToken( String token, TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
+ Map<String, Object> state, long duration, UUID workflowOrgId ) throws Exception;
/** Get the token info for the string version of this token */
public TokenInfo getTokenInfo( String token ) throws Exception;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/e3d454fe/stack/services/src/main/java/org/apache/usergrid/security/tokens/cassandra/TokenServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/tokens/cassandra/TokenServiceImpl.java b/stack/services/src/main/java/org/apache/usergrid/security/tokens/cassandra/TokenServiceImpl.java
index ab0307a..6eb226f 100644
--- a/stack/services/src/main/java/org/apache/usergrid/security/tokens/cassandra/TokenServiceImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/security/tokens/cassandra/TokenServiceImpl.java
@@ -20,6 +20,7 @@ package org.apache.usergrid.security.tokens.cassandra;
import java.nio.ByteBuffer;
import java.util.*;
+import org.apache.usergrid.utils.ConversionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -88,6 +89,8 @@ public class TokenServiceImpl implements TokenService {
private static final String TOKEN_ENTITY = "entity";
private static final String TOKEN_APPLICATION = "application";
private static final String TOKEN_STATE = "state";
+ private static final String TOKEN_WORKFLOW_ORG_ID = "workflowOrgId";
+
private static final String TOKEN_TYPE_ACCESS = "access";
@@ -107,6 +110,7 @@ public class TokenServiceImpl implements TokenService {
set.add( TOKEN_APPLICATION );
set.add( TOKEN_STATE );
set.add( TOKEN_DURATION );
+ set.add( TOKEN_WORKFLOW_ORG_ID );
TOKEN_PROPERTIES = Collections.unmodifiableSet(set);
}
@@ -204,13 +208,21 @@ public class TokenServiceImpl implements TokenService {
@Override
public String createToken( TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
Map<String, Object> state, long duration ) throws Exception {
- return createToken( tokenCategory, type, principal, state, duration, System.currentTimeMillis() );
+ return createToken( tokenCategory, type, principal, state, duration, null, System.currentTimeMillis() );
+ }
+
+
+ @Override
+ public String createToken( TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
+ Map<String, Object> state, long duration, UUID workflowOrgId ) throws Exception {
+ return createToken( tokenCategory, type, principal, state, duration, workflowOrgId, System.currentTimeMillis() );
}
/** Exposed for testing purposes. The interface does not allow creation timestamp checking */
public String createToken( TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
- Map<String, Object> state, long duration, long creationTimestamp ) throws Exception {
+ Map<String, Object> state, long duration, UUID workflowOrgId,
+ long creationTimestamp ) throws Exception {
long maxTokenTtl = getMaxTtl( tokenCategory, principal );
@@ -237,7 +249,8 @@ public class TokenServiceImpl implements TokenService {
if ( type == null ) {
type = TOKEN_TYPE_ACCESS;
}
- TokenInfo tokenInfo = new TokenInfo( uuid, type, timestamp, timestamp, 0, duration, principal, state );
+ TokenInfo tokenInfo = new TokenInfo( uuid, type, timestamp, timestamp, 0, duration, principal,
+ state, workflowOrgId );
putTokenInfo( tokenInfo );
// generate token from the UUID that we created
@@ -249,6 +262,14 @@ public class TokenServiceImpl implements TokenService {
public void importToken(String token, TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
Map<String, Object> state, long duration) throws Exception {
+ importToken(token, tokenCategory, type, principal, state, duration, null);
+ }
+
+
+ @Override
+ public void importToken(String token, TokenCategory tokenCategory, String type, AuthPrincipalInfo principal,
+ Map<String, Object> state, long duration, UUID workflowOrgId) throws Exception {
+
// same logic as create token
long maxTokenTtl = getMaxTtl( tokenCategory, principal );
@@ -267,6 +288,7 @@ public class TokenServiceImpl implements TokenService {
Assert.notNull( principal.getType() );
Assert.notNull( principal.getApplicationId() );
Assert.notNull( principal.getUuid() );
+ // workflowOrgId would be taken from state
}
// except that we generate the UUID based on the token
@@ -278,7 +300,8 @@ public class TokenServiceImpl implements TokenService {
type = TOKEN_TYPE_ACCESS;
}
- TokenInfo tokenInfo = new TokenInfo( uuid, type, timestamp, timestamp, 0, duration, principal, state );
+ TokenInfo tokenInfo = new TokenInfo( uuid, type, timestamp, timestamp, 0, duration, principal,
+ state, workflowOrgId );
putTokenInfo( tokenInfo );
}
@@ -449,7 +472,13 @@ public class TokenServiceImpl implements TokenService {
}
@SuppressWarnings("unchecked") Map<String, Object> state =
( Map<String, Object> ) JsonUtils.fromByteBuffer( columns.get( TOKEN_STATE ) );
- return new TokenInfo( uuid, type, created, accessed, inactive, duration, principal, state );
+
+ UUID workflowOrgId = null;
+ if (columns.containsKey(TOKEN_WORKFLOW_ORG_ID)) {
+ workflowOrgId = ConversionUtils.uuid(columns.get(TOKEN_WORKFLOW_ORG_ID));
+ }
+
+ return new TokenInfo( uuid, type, created, accessed, inactive, duration, principal, state, workflowOrgId );
}
@@ -505,6 +534,11 @@ public class TokenServiceImpl implements TokenService {
be ) );
}
+ if ( tokenInfo.getWorkflowOrgId() != null ) {
+ m.addInsertion( tokenUUID, TOKENS_CF,
+ createColumn( TOKEN_WORKFLOW_ORG_ID, bytebuffer( tokenInfo.getWorkflowOrgId() ), ttl, se, be ) );
+ }
+
m.execute();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/e3d454fe/stack/services/src/test/java/org/apache/usergrid/management/EmailFlowIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/management/EmailFlowIT.java b/stack/services/src/test/java/org/apache/usergrid/management/EmailFlowIT.java
index 2ba7b19..3d14c2f 100644
--- a/stack/services/src/test/java/org/apache/usergrid/management/EmailFlowIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/EmailFlowIT.java
@@ -104,8 +104,7 @@ public class EmailFlowIT {
LOG.info( token );
assertEquals( ActivationState.ACTIVATED,
- setup.getMgmtSvc().handleConfirmationTokenForAdminUser( org_owner.getOrganization().getUuid(),
- org_owner.owner.getUuid(), token ) );
+ setup.getMgmtSvc().handleConfirmationTokenForAdminUser( org_owner.owner.getUuid(), token ) );
Message activation = inbox.get( 1 );
assertEquals( "User Account Activated", activation.getSubject() );
@@ -145,8 +144,7 @@ public class EmailFlowIT {
LOG.info( token );
ActivationState state =
- setup.getMgmtSvc().handleConfirmationTokenForAdminUser( org_owner.getOrganization().getUuid(),
- org_owner.owner.getUuid(), token );
+ setup.getMgmtSvc().handleConfirmationTokenForAdminUser( org_owner.owner.getUuid(), token );
assertEquals( ActivationState.CONFIRMED_AWAITING_ACTIVATION, state );
confirmation = user_inbox.get( 1 );
@@ -166,8 +164,7 @@ public class EmailFlowIT {
token = getTokenFromMessage( activation );
LOG.info( token );
- state = setup.getMgmtSvc().handleActivationTokenForAdminUser( org_owner.getOrganization().getUuid(),
- org_owner.owner.getUuid(), token );
+ state = setup.getMgmtSvc().handleActivationTokenForAdminUser( org_owner.owner.getUuid(), token );
assertEquals( ActivationState.ACTIVATED, state );
Message activated = user_inbox.get( 2 );