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/02/01 17:46:35 UTC

[1/8] usergrid git commit: USERGRID-1241: org-specific redirection handling

Repository: usergrid
Updated Branches:
  refs/heads/master 019d49e75 -> 548334bf8


USERGRID-1241: org-specific redirection handling


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/fbac7e84
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/fbac7e84
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/fbac7e84

Branch: refs/heads/master
Commit: fbac7e84802459be44d588465ceb97817e40f560
Parents: 586dad0
Author: Mike Dunker <md...@apigee.com>
Authored: Wed Jan 27 16:24:54 2016 -0800
Committer: Mike Dunker <md...@apigee.com>
Committed: Wed Jan 27 16:24:54 2016 -0800

----------------------------------------------------------------------
 .../main/resources/usergrid-default.properties  |  5 ++
 .../usergrid/rest/AbstractContextResource.java  | 52 +++++++++++++++-
 .../rest/applications/ApplicationResource.java  | 10 ++--
 .../rest/applications/ServiceResource.java      | 12 ++--
 .../rest/applications/users/UserResource.java   | 41 ++++++-------
 .../rest/applications/users/UsersResource.java  | 14 ++---
 .../rest/management/ManagementResource.java     |  5 +-
 .../organizations/OrganizationResource.java     | 14 ++---
 .../rest/management/users/UserResource.java     | 62 ++++++++++++--------
 .../usergrid/management/ManagementService.java  | 13 ++++
 .../usergrid/management/OrganizationConfig.java | 27 +++++----
 .../management/OrganizationConfigProps.java     |  4 ++
 .../cassandra/ManagementServiceImpl.java        | 44 ++++++++++++--
 .../cassandra/OrganizationConfigPropsImpl.java  | 45 +++++++++++---
 14 files changed, 252 insertions(+), 96 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
diff --git a/stack/config/src/main/resources/usergrid-default.properties b/stack/config/src/main/resources/usergrid-default.properties
index 915d798..94d02ff 100644
--- a/stack/config/src/main/resources/usergrid-default.properties
+++ b/stack/config/src/main/resources/usergrid-default.properties
@@ -658,6 +658,11 @@ usergrid.admin.sysadmin.email=
 usergrid.api.url.base=http://localhost:8080/ROOT
 
 
+# org config property name regex
+# don't use backslashes in the regex, as they don't play well in properties files
+# instead, use character class ([.] instead of backslash-period)
+usergrid.org.config.property.regex=usergrid[.]view[.].*
+
 
 
 ###########################  Usergrid Email Templates  ########################

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/rest/src/main/java/org/apache/usergrid/rest/AbstractContextResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/AbstractContextResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/AbstractContextResource.java
index 68c894b..1d86631 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/AbstractContextResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/AbstractContextResource.java
@@ -25,6 +25,7 @@ import net.tanesha.recaptcha.ReCaptcha;
 import net.tanesha.recaptcha.ReCaptchaFactory;
 import org.apache.commons.lang.StringUtils;
 import org.apache.usergrid.management.ManagementService;
+import org.apache.usergrid.management.OrganizationConfig;
 import org.apache.usergrid.mq.QueueManagerFactory;
 import org.apache.usergrid.persistence.EntityManagerFactory;
 import org.apache.usergrid.rest.exceptions.RedirectionException;
@@ -43,6 +44,7 @@ import javax.xml.ws.spi.http.HttpContext;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 
 public abstract class AbstractContextResource {
@@ -163,6 +165,51 @@ public abstract class AbstractContextResource {
 
 
     public Viewable handleViewable(String template, Object model) {
+        return handleViewable(template, model, management.getOrganizationConfigDefaultsOnly());
+    }
+
+
+    public Viewable handleViewable(String template, Object model, String organizationName) {
+        OrganizationConfig orgConfig;
+        try {
+            if (!StringUtils.isBlank(organizationName)) {
+                orgConfig = management.getOrganizationConfigByName(organizationName);
+            } else {
+                orgConfig = management.getOrganizationConfigDefaultsOnly();
+            }
+        }
+        catch (Exception e) {
+            // fall back to non-org
+            if (logger.isInfoEnabled()) {
+                logger.info("handleViewable: unable to retrieve org config by org name: " + organizationName);
+            }
+            orgConfig = management.getOrganizationConfigDefaultsOnly();
+        }
+        return handleViewable(template, model, orgConfig);
+    }
+
+
+    public Viewable handleViewable(String template, Object model, UUID organizationId) {
+        OrganizationConfig orgConfig;
+        try {
+            if (organizationId != null) {
+                orgConfig = management.getOrganizationConfigByUuid(organizationId);
+            } else {
+                orgConfig = management.getOrganizationConfigDefaultsOnly();
+            }
+        }
+        catch (Exception e) {
+            // fall back to non-org
+            if (logger.isInfoEnabled() && organizationId != null) {
+                logger.info("handleViewable: unable to retrieve org config by org UUID: " + organizationId.toString());
+            }
+            orgConfig = management.getOrganizationConfigDefaultsOnly();
+        }
+        return handleViewable(template, model, orgConfig);
+    }
+
+
+    public Viewable handleViewable(String template, Object model, OrganizationConfig orgConfig) {
 
         String className = this.getClass().getName().toLowerCase();
         String packageName = AbstractContextResource.class.getPackage().getName();
@@ -171,7 +218,7 @@ public abstract class AbstractContextResource {
             StringUtils.removeEnd(className.toLowerCase(), "resource")
                 .substring(packageName.length()) + "." + template.toLowerCase();
 
-        String redirect_url = properties.getProperty(template_property);
+        String redirect_url = orgConfig.getProperty(template_property);
 
         if (StringUtils.isNotBlank(redirect_url)) {
             if (logger.isDebugEnabled()) {
@@ -184,8 +231,7 @@ public abstract class AbstractContextResource {
             logger.debug("Dispatching to viewable with template: {}", template, template_property);
         }
 
-        Viewable viewable = new Viewable(template, model);
-        return viewable;
+        return new Viewable(template, model);
     }
 
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
index 5d76b3b..cc111eb 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
@@ -44,12 +44,10 @@ import org.apache.usergrid.rest.applications.events.EventsResource;
 import org.apache.usergrid.rest.applications.queues.QueueResource;
 import org.apache.usergrid.rest.applications.users.UsersResource;
 import org.apache.usergrid.rest.exceptions.AuthErrorInfo;
-import org.apache.usergrid.rest.exceptions.NotFoundExceptionMapper;
 import org.apache.usergrid.rest.exceptions.RedirectionException;
 import org.apache.usergrid.rest.exceptions.UnsupportedRestOperationException;
 import org.apache.usergrid.rest.security.annotations.RequireApplicationAccess;
 import org.apache.usergrid.rest.security.annotations.RequireOrganizationAccess;
-import org.apache.usergrid.rest.security.annotations.RequireSystemAccess;
 import org.apache.usergrid.security.oauth.AccessInfo;
 import org.apache.usergrid.security.oauth.ClientCredentialsInfo;
 import org.glassfish.jersey.server.mvc.Viewable;
@@ -429,13 +427,13 @@ public class ApplicationResource extends ServiceResource {
             ApplicationInfo app = management.getApplicationInfo( applicationId );
             applicationName = app.getName();
 
-            return handleViewable( "authorize_form", this );
+            return handleViewable( "authorize_form", this, getOrganizationName() );
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, getOrganizationName() );
         }
     }
 
@@ -491,14 +489,14 @@ public class ApplicationResource extends ServiceResource {
             ApplicationInfo app = management.getApplicationInfo( applicationId );
             applicationName = app.getName();
 
-            return Response.ok( handleViewable( "authorize_form", this ) ).build() ;
+            return Response.ok( handleViewable( "authorize_form", this, getOrganizationName() ) ).build() ;
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
             logger.error("handleAuthorizeForm failed", e);
-            return Response.ok( handleViewable( "error", this ) ).build() ;
+            return Response.ok( handleViewable( "error", this, getOrganizationName() ) ).build() ;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
index 70adf35..af6ec44 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
@@ -17,7 +17,6 @@
 package org.apache.usergrid.rest.applications;
 
 
-import com.amazonaws.AmazonClientException;
 import com.amazonaws.AmazonServiceException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
@@ -130,6 +129,11 @@ public class ServiceResource extends AbstractContextResource {
     }
 
 
+    public String getOrganizationName() {
+        return services.getApplication().getOrganizationName();
+    }
+
+
     public List<ServiceParameter> getServiceParameters() {
         if ( serviceParameters != null ) {
             return serviceParameters;
@@ -137,7 +141,7 @@ public class ServiceResource extends AbstractContextResource {
         if ( getServiceResourceParent() != null ) {
             return getServiceResourceParent().getServiceParameters();
         }
-        serviceParameters = new ArrayList<ServiceParameter>();
+        serviceParameters = new ArrayList<>();
         return serviceParameters;
     }
 
@@ -648,7 +652,7 @@ public class ServiceResource extends AbstractContextResource {
 
         // collect form data values
         List<BodyPart> bodyParts = multiPart.getBodyParts();
-        HashMap<String, Object> data = new HashMap<String, Object>();
+        HashMap<String, Object> data = new HashMap<>();
         for ( BodyPart bp : bodyParts ) {
             FormDataBodyPart bodyPart = ( FormDataBodyPart ) bp;
             if ( bodyPart.getMediaType().equals( MediaType.TEXT_PLAIN_TYPE ) ) {
@@ -791,7 +795,7 @@ public class ServiceResource extends AbstractContextResource {
 
         boolean range = StringUtils.isNotBlank( rangeHeader );
         long start = 0, end = 0, contentLength = 0;
-        InputStream inputStream = null;
+        InputStream inputStream;
 
         if ( range ) { // honor range request, calculate start & end
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UserResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UserResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UserResource.java
index 77ba756..6de65f1 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UserResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UserResource.java
@@ -71,9 +71,7 @@ import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
 import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN;
 import static javax.servlet.http.HttpServletResponse.SC_OK;
 
-import static org.apache.usergrid.security.shiro.utils.SubjectUtils.getSubjectUserId;
-import static org.apache.usergrid.security.shiro.utils.SubjectUtils.isApplicationAdmin;
-import static org.apache.usergrid.security.shiro.utils.SubjectUtils.isApplicationUser;
+import static org.apache.usergrid.security.shiro.utils.SubjectUtils.*;
 import static org.apache.usergrid.utils.ConversionUtils.string;
 
 
@@ -222,6 +220,8 @@ public class UserResource extends ServiceResource {
 
         ApiResponse response = createApiResponse();
         response.setAction( "set user credentials" );
+
+        @SuppressWarnings("unchecked")
         Map<String, Object> credentialsJson = ( Map<String, Object> ) json.get( "credentials" );
 
 
@@ -398,17 +398,17 @@ public class UserResource extends ServiceResource {
         this.token = token;
         try {
             if ( management.checkPasswordResetTokenForAppUser( getApplicationId(), getUserUuid(), token ) ) {
-                return handleViewable( "resetpw_set_form", this );
+                return handleViewable( "resetpw_set_form", this, getOrganizationName() );
             }
             else {
-                return handleViewable( "resetpw_email_form", this );
+                return handleViewable( "resetpw_email_form", this, getOrganizationName() );
             }
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, getOrganizationName() );
         }
     }
 
@@ -433,22 +433,22 @@ public class UserResource extends ServiceResource {
                     if ( ( password1 != null ) && password1.equals( password2 ) ) {
                         management.setAppUserPassword( getApplicationId(), getUser().getUuid(), password1 );
                         management.revokeAccessTokenForAppUser( token );
-                        return handleViewable( "resetpw_set_success", this );
+                        return handleViewable( "resetpw_set_success", this, getOrganizationName() );
                     }
                     else {
                         errorMsg = "Passwords didn't match, let's try again...";
-                        return handleViewable( "resetpw_set_form", this );
+                        return handleViewable( "resetpw_set_form", this, getOrganizationName() );
                     }
                 }
                 else {
                     errorMsg = "Sorry, you have an invalid token. Let's try again...";
-                    return handleViewable( "resetpw_email_form", this );
+                    return handleViewable( "resetpw_email_form", this, getOrganizationName() );
                 }
             }
 
             if ( !useReCaptcha() ) {
                 management.startAppUserPasswordResetFlow( getApplicationId(), getUser() );
-                return handleViewable( "resetpw_email_success", this );
+                return handleViewable( "resetpw_email_success", this, getOrganizationName() );
             }
 
             ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
@@ -459,18 +459,18 @@ public class UserResource extends ServiceResource {
 
             if ( reCaptchaResponse.isValid() ) {
                 management.startAppUserPasswordResetFlow( getApplicationId(), getUser() );
-                return handleViewable( "resetpw_email_success", this );
+                return handleViewable( "resetpw_email_success", this, getOrganizationName() );
             }
             else {
                 errorMsg = "Incorrect Captcha";
-                return handleViewable( "resetpw_email_form", this );
+                return handleViewable( "resetpw_email_form", this, getOrganizationName() );
             }
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, getOrganizationName() );
         }
     }
 
@@ -515,16 +515,16 @@ public class UserResource extends ServiceResource {
 
         try {
             management.handleActivationTokenForAppUser( getApplicationId(), getUserUuid(), token );
-            return handleViewable( "activate", this );
+            return handleViewable( "activate", this, getOrganizationName() );
         }
         catch ( TokenException e ) {
-            return handleViewable( "bad_activation_token", this );
+            return handleViewable( "bad_activation_token", this, getOrganizationName() );
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, getOrganizationName() );
         }
     }
 
@@ -538,18 +538,18 @@ public class UserResource extends ServiceResource {
             ActivationState state =
                     management.handleConfirmationTokenForAppUser( getApplicationId(), getUserUuid(), token );
             if ( state == ActivationState.CONFIRMED_AWAITING_ACTIVATION ) {
-                return handleViewable( "confirm", this );
+                return handleViewable( "confirm", this, getOrganizationName() );
             }
-            return handleViewable( "activate", this );
+            return handleViewable( "activate", this, getOrganizationName() );
         }
         catch ( TokenException e ) {
-            return handleViewable( "bad_confirmation_token", this );
+            return handleViewable( "bad_confirmation_token", this, getOrganizationName() );
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, getOrganizationName() );
         }
     }
 
@@ -684,6 +684,7 @@ public class UserResource extends ServiceResource {
             extensionResource = getSubResource( extensionCls );
         }
         catch ( Exception e ) {
+            // intentionally empty
         }
         if ( extensionResource != null ) {
             return extensionResource;

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UsersResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UsersResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UsersResource.java
index 81cf59a..e224cfc 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UsersResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/users/UsersResource.java
@@ -120,7 +120,7 @@ public class UsersResource extends ServiceResource {
     @Path("resetpw")
     @Produces(MediaType.TEXT_HTML)
     public Viewable showPasswordResetForm( @Context UriInfo ui ) {
-        return handleViewable( "resetpw_email_form", this );
+        return handleViewable( "resetpw_email_form", this, getOrganizationName() );
     }
 
 
@@ -141,30 +141,30 @@ public class UsersResource extends ServiceResource {
 
             if ( isBlank( email ) ) {
                 errorMsg = "No email provided, try again...";
-                return handleViewable( "resetpw_email_form", this );
+                return handleViewable( "resetpw_email_form", this, getOrganizationName() );
             }
 
             if ( !useReCaptcha() || reCaptchaResponse.isValid() ) {
                 user = management.getAppUserByIdentifier( getApplicationId(), Identifier.fromEmail( email ) );
                 if ( user != null ) {
                     management.startAppUserPasswordResetFlow( getApplicationId(), user );
-                    return handleViewable( "resetpw_email_success", this );
+                    return handleViewable( "resetpw_email_success", this, getOrganizationName() );
                 }
                 else {
                     errorMsg = "We don't recognize that email, try again...";
-                    return handleViewable( "resetpw_email_form", this );
+                    return handleViewable( "resetpw_email_form", this, getOrganizationName() );
                 }
             }
             else {
                 errorMsg = "Incorrect Captcha, try again...";
-                return handleViewable( "resetpw_email_form", this );
+                return handleViewable( "resetpw_email_form", this, getOrganizationName() );
             }
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "resetpw_email_form", e );
+            return handleViewable( "resetpw_email_form", e, getOrganizationName() );
         }
     }
 
@@ -249,7 +249,7 @@ public class UsersResource extends ServiceResource {
             }
         }
 
-        ApiResponse response = ( ApiResponse ) super.executePostWithObject( ui, json, callback );
+        ApiResponse response = super.executePostWithObject( ui, json, callback );
 
         if ( ( response.getEntities() != null ) && ( response.getEntities().size() == 1 ) ) {
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
index 11fd897..721235e 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
@@ -268,7 +268,7 @@ public class ManagementResource extends AbstractContextResource {
                     }
                     catch ( UnconfirmedAdminUserException uaue ) {
                         errorDescription = "User must be confirmed to authenticate";
-                        logger.warn( "Responding with HTTP 403 forbidden response for unconfirmed user {}" , user);
+                        logger.warn("Responding with HTTP 403 forbidden response for unconfirmed user");
 
                         OAuthResponse response = OAuthResponse.errorResponse( SC_FORBIDDEN )
                                                               .setError( OAuthError.TokenResponse.INVALID_GRANT )
@@ -469,6 +469,7 @@ public class ManagementResource extends AbstractContextResource {
                 user = management.verifyAdminUserPasswordCredentials( username, password );
             }
             catch ( Exception e1 ) {
+                // intentionally empty
             }
             if ( ( user != null ) && isNotBlank( redirect_uri ) ) {
                 if ( !redirect_uri.contains( "?" ) ) {
@@ -584,7 +585,7 @@ public class ManagementResource extends AbstractContextResource {
         if ( ttl == -1 ) {
             throw new IllegalArgumentException("ttl must be specified");
         }
-        AccessInfo accessInfo = null;
+        AccessInfo accessInfo;
 
         Timer processingTimer = getMetricsFactory().getTimer(
             ManagementResource.class, SSO_PROCESSING_TIME );

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationResource.java
index f777637..77239f3 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationResource.java
@@ -130,16 +130,16 @@ public class OrganizationResource extends AbstractContextResource {
 
         try {
             management.handleActivationTokenForOrganization( organization.getUuid(), token );
-            return handleViewable( "activate", this );
+            return handleViewable( "activate", this, organization.getName() );
         }
         catch ( TokenException e ) {
-            return handleViewable( "bad_activation_token", this );
+            return handleViewable( "bad_activation_token", this, organization.getName() );
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, organization.getName() );
         }
     }
 
@@ -152,18 +152,18 @@ public class OrganizationResource extends AbstractContextResource {
         try {
             ActivationState state = management.handleActivationTokenForOrganization( organization.getUuid(), token );
             if ( state == ActivationState.CONFIRMED_AWAITING_ACTIVATION ) {
-                return handleViewable( "confirm", this );
+                return handleViewable( "confirm", this, organization.getName() );
             }
-            return handleViewable( "activate", this );
+            return handleViewable( "activate", this, organization.getName() );
         }
         catch ( TokenException e ) {
-            return handleViewable( "bad_activation_token", this );
+            return handleViewable( "bad_activation_token", this, organization.getName() );
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, organization.getName() );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/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 188567b..a968508 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
@@ -29,7 +29,7 @@ import org.apache.usergrid.rest.exceptions.RedirectionException;
 import org.apache.usergrid.rest.management.ManagementResource;
 import org.apache.usergrid.rest.management.users.organizations.OrganizationsResource;
 import org.apache.usergrid.rest.security.annotations.RequireAdminUserAccess;
-import org.apache.usergrid.security.shiro.utils.SubjectUtils;
+import org.apache.usergrid.security.tokens.TokenInfo;
 import org.apache.usergrid.security.tokens.exceptions.TokenException;
 import org.apache.usergrid.services.ServiceResults;
 import org.glassfish.jersey.server.mvc.Viewable;
@@ -191,7 +191,7 @@ public class UserResource extends AbstractContextResource {
         ApiResponse response = createApiResponse();
         response.setAction( "get admin user" );
 
-        String token = management.getAccessTokenForAdminUser( SubjectUtils.getUser().getUuid(), ttl );
+        String token = management.getAccessTokenForAdminUser( user.getUuid(), ttl );
         Map<String, Object> userOrganizationData = management.getAdminUserOrganizationData( user, !shallow );
         userOrganizationData.put( "token", token );
         response.setData( userOrganizationData );
@@ -214,21 +214,25 @@ public class UserResource extends AbstractContextResource {
                     properties.getProperty( ManagementResource.USERGRID_CENTRAL_URL ) );
         }
 
+        UUID organizationId = null;
+
         try {
             this.token = token;
+            TokenInfo tokenInfo = management.getPasswordResetTokenInfoForAdminUser(token);
+            organizationId = tokenInfo.getWorkflowOrgId();
 
-            if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), token ) ) {
-                return handleViewable( "resetpw_set_form", this );
+            if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), tokenInfo ) ) {
+                return handleViewable( "resetpw_set_form", this, organizationId );
             }
             else {
-                return handleViewable( "resetpw_email_form", this );
+                return handleViewable( "resetpw_email_form", this, organizationId );
             }
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, organizationId );
         }
     }
 
@@ -255,8 +259,12 @@ public class UserResource extends AbstractContextResource {
                     properties.getProperty( ManagementResource.USERGRID_CENTRAL_URL ) );
         }
 
+        UUID organizationId = null;
+
         try {
             this.token = token;
+            TokenInfo tokenInfo = management.getPasswordResetTokenInfoForAdminUser(token);
+            organizationId = tokenInfo.getWorkflowOrgId();
 
             //      if(user == null) {
             //        errorMsg = "Incorrect username entered";
@@ -264,26 +272,26 @@ public class UserResource extends AbstractContextResource {
             //      }
 
             if ( ( password1 != null ) || ( password2 != null ) ) {
-                if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), token ) ) {
+                if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), tokenInfo ) ) {
                     if ( ( password1 != null ) && password1.equals( password2 ) ) {
                         management.setAdminUserPassword( user.getUuid(), password1 );
                         management.revokeAccessTokenForAdminUser( user.getUuid(), token );
-                        return handleViewable( "resetpw_set_success", this );
+                        return handleViewable( "resetpw_set_success", this, organizationId );
                     }
                     else {
                         errorMsg = "Passwords didn't match, let's try again...";
-                        return handleViewable( "resetpw_set_form", this );
+                        return handleViewable( "resetpw_set_form", this, organizationId );
                     }
                 }
                 else {
                     errorMsg = "Sorry, you have an invalid token. Let's try again...";
-                    return handleViewable( "resetpw_email_form", this );
+                    return handleViewable( "resetpw_email_form", this, organizationId );
                 }
             }
 
             if ( !useReCaptcha() ) {
                 management.startAdminUserPasswordResetFlow( null, user );
-                return handleViewable( "resetpw_email_success", this );
+                return handleViewable( "resetpw_email_success", this, organizationId );
             }
 
             ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
@@ -294,18 +302,18 @@ public class UserResource extends AbstractContextResource {
 
             if ( reCaptchaResponse.isValid() ) {
                 management.startAdminUserPasswordResetFlow( null, user );
-                return handleViewable( "resetpw_email_success", this );
+                return handleViewable( "resetpw_email_success", this, organizationId );
             }
             else {
                 errorMsg = "Incorrect Captcha";
-                return handleViewable( "resetpw_email_form", this );
+                return handleViewable( "resetpw_email_form", this, organizationId );
             }
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, organizationId );
         }
     }
 
@@ -338,18 +346,22 @@ public class UserResource extends AbstractContextResource {
                     properties.getProperty( ManagementResource.USERGRID_CENTRAL_URL ) );
         }
 
+        UUID organizationId = null;
+
         try {
-            management.handleActivationTokenForAdminUser( user.getUuid(), token );
-            return handleViewable( "activate", this );
+            TokenInfo tokenInfo = management.getActivationTokenInfoForAdminUser(token) ;
+            organizationId = tokenInfo.getWorkflowOrgId();
+            management.handleActivationTokenForAdminUser( user.getUuid(), tokenInfo );
+            return handleViewable( "activate", this, organizationId );
         }
         catch ( TokenException e ) {
-            return handleViewable( "bad_activation_token", this );
+            return handleViewable( "bad_activation_token", this, organizationId );
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return handleViewable( "error", e );
+            return handleViewable( "error", e, organizationId );
         }
     }
 
@@ -367,21 +379,25 @@ public class UserResource extends AbstractContextResource {
                     properties.getProperty( ManagementResource.USERGRID_CENTRAL_URL ) );
         }
 
+        UUID organizationId = null;
+
         try {
-            ActivationState state = management.handleConfirmationTokenForAdminUser( user.getUuid(), token );
+            TokenInfo tokenInfo = management.getConfirmationTokenInfoForAdminUser(token) ;
+            organizationId = tokenInfo.getWorkflowOrgId();
+            ActivationState state = management.handleConfirmationTokenForAdminUser( user.getUuid(), tokenInfo );
             if ( state == ActivationState.CONFIRMED_AWAITING_ACTIVATION ) {
-                return handleViewable( "confirm", this );
+                return handleViewable( "confirm", this, organizationId );
             }
-            return handleViewable( "activate", this );
+            return handleViewable( "activate", this, organizationId );
         }
         catch ( TokenException e ) {
-            return handleViewable( "bad_confirmation_token", this );
+            return handleViewable( "bad_confirmation_token", this, organizationId );
         }
         catch ( RedirectionException e ) {
             throw e;
         }
         catch ( Exception e ) {
-            return new Viewable( "error", e );
+            return handleViewable( "error", e, organizationId );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/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 1352dad..2f2d10f 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
@@ -33,6 +33,7 @@ import org.apache.usergrid.persistence.entities.User;
 import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.security.oauth.AccessInfo;
 import org.apache.usergrid.security.shiro.PrincipalCredentialsToken;
+import org.apache.usergrid.security.tokens.TokenInfo;
 import org.apache.usergrid.services.ServiceResults;
 
 import com.google.common.collect.BiMap;
@@ -50,12 +51,24 @@ public interface ManagementService {
 
 	AccessInfo authorizeClient( String clientId, String clientSecret, long ttl ) throws Exception;
 
+	TokenInfo getConfirmationTokenInfoForAdminUser( String token ) throws Exception;
+
 	ActivationState handleConfirmationTokenForAdminUser( UUID userId, String token ) throws Exception;
 
+	ActivationState handleConfirmationTokenForAdminUser( UUID userId, TokenInfo tokenInfo ) throws Exception;
+
+	TokenInfo getActivationTokenInfoForAdminUser( String token ) throws Exception;
+
 	ActivationState handleActivationTokenForAdminUser( UUID userId, String token ) throws Exception;
 
+	ActivationState handleActivationTokenForAdminUser( UUID userId, TokenInfo tokenInfo ) throws Exception;
+
 	ActivationState handleActivationTokenForOrganization( UUID organizationId, String token ) throws Exception;
 
+	TokenInfo getPasswordResetTokenInfoForAdminUser( String token ) throws Exception;
+
+	boolean checkPasswordResetTokenForAdminUser( UUID userId, TokenInfo tokenInfo ) throws Exception;
+
 	boolean checkPasswordResetTokenForAdminUser( UUID userId, String token ) throws Exception;
 
 	UserInfo createAdminUser( UUID organizationId, String username, String name, String email, String password,

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java b/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
index 2730eac..b327682 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
@@ -28,10 +28,8 @@ import java.util.*;
 public class OrganizationConfig {
 
     private OrganizationConfigProps configProps;
-    //private Map<String, String> defaultProperties;
     private UUID id;
     private String name;
-    //private Map<String, String> orgProperties;
 
 
     // shouldn't use the default constructor
@@ -52,10 +50,8 @@ public class OrganizationConfig {
 
     public OrganizationConfig(OrganizationConfigProps configFileProperties, UUID id, String name) {
         this.configProps = new OrganizationConfigPropsImpl(configFileProperties);
-        //defaultProperties = configFileProperties.getOrgPropertyMap();
         this.id = id;
         this.name = name;
-        //this.orgProperties = new HashMap<>();
     }
 
     public OrganizationConfig(OrganizationConfigProps configFileProperties) {
@@ -78,24 +74,33 @@ public class OrganizationConfig {
     }
 
     private void orgPropertyValidate(Map<String, Object> entityProperties) throws IllegalArgumentException {
-        Set<String> entityPropertyKeys = new HashSet<>(entityProperties.keySet());
-        entityPropertyKeys.removeAll(configProps.getOrgPropertyNames());
-        // if anything remains in the key set, it is not a valid property
-        if (entityPropertyKeys.size() > 0) {
-            throw new IllegalArgumentException("Invalid organization config keys: " + String.join(", ", entityPropertyKeys));
+        Set<String> invalidKeys = new HashSet<>();
+        entityProperties.keySet().forEach((k) -> {
+           if (!configProps.orgPropertyNameValid(k)) {
+               invalidKeys.add(k);
+           }
+        });
+
+        if (invalidKeys.size() > 0) {
+            throw new IllegalArgumentException("Invalid organization config keys: " + String.join(", ", invalidKeys));
         }
 
+        invalidKeys.clear();
         entityProperties.forEach((k,v) -> {
             if (!v.getClass().equals(String.class)) {
-                throw new IllegalArgumentException("Organization config values must be strings.");
+                invalidKeys.add(k);
             }
         });
+
+        if (invalidKeys.size() > 0) {
+            throw new IllegalArgumentException("Organization config value(s) not strings: " + String.join(", ", invalidKeys));
+        }
     }
 
     private void addOrgProperties(Map<String, Object> newOrgProperties) {
         newOrgProperties.forEach((k,v) -> {
             // only take valid properties, validation (if required) happened earlier
-            if (configProps.getOrgPropertyNames().contains(k)) {
+            if (configProps.orgPropertyNameValid(k)) {
                 // ignore non-strings, validation happened earlier
                 if (v.getClass().equals(String.class)) {
                     this.configProps.setProperty(k, v.toString());

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfigProps.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfigProps.java b/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfigProps.java
index f50705f..226e3a3 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfigProps.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfigProps.java
@@ -50,6 +50,8 @@ public interface OrganizationConfigProps {
 
     Map<String, String> getOrgPropertiesMap();
 
+    String getOrgPropertyNameRegex();
+
     String getProperty(String name);
 
     String getProperty(String name, String defaultValue);
@@ -66,4 +68,6 @@ public interface OrganizationConfigProps {
 
     String getFullUrl(WorkflowUrl urlType, Object ... arguments);
 
+    boolean orgPropertyNameValid(String name);
+
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/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 558b718..cc5fc9c 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
@@ -2197,10 +2197,22 @@ public class ManagementServiceImpl implements ManagementService {
 
 
     @Override
+    public TokenInfo getPasswordResetTokenInfoForAdminUser( String token ) throws Exception {
+        return getTokenInfoFromAccessToken(token, TOKEN_TYPE_PASSWORD_RESET, ADMIN_USER);
+    }
+
+
+    @Override
     public boolean checkPasswordResetTokenForAdminUser( UUID userId, String token ) throws Exception {
+        return checkPasswordResetTokenForAdminUser(userId, getPasswordResetTokenInfoForAdminUser(token));
+    }
+
+
+    @Override
+    public boolean checkPasswordResetTokenForAdminUser( UUID userId, TokenInfo tokenInfo ) throws Exception {
         AuthPrincipalInfo principal = null;
         try {
-            principal = getPrincipalFromAccessToken( token, TOKEN_TYPE_PASSWORD_RESET, ADMIN_USER );
+            principal = tokenInfo.getPrincipal();
         }
         catch ( Exception e ) {
             logger.error( "Unable to verify token", e );
@@ -2470,9 +2482,20 @@ public class ManagementServiceImpl implements ManagementService {
 
 
     @Override
-    // token may contain the workflow organization id
+    public TokenInfo getConfirmationTokenInfoForAdminUser( String token ) throws Exception {
+        return getTokenInfoFromAccessToken(token, TOKEN_TYPE_CONFIRM, ADMIN_USER);
+    }
+
+
+    @Override
     public ActivationState handleConfirmationTokenForAdminUser( UUID userId, String token ) throws Exception {
-        TokenInfo tokenInfo = getTokenInfoFromAccessToken(token, TOKEN_TYPE_CONFIRM, ADMIN_USER);
+        return handleConfirmationTokenForAdminUser(userId, getConfirmationTokenInfoForAdminUser(token));
+    }
+
+
+    @Override
+    // token may contain the workflow organization id
+    public ActivationState handleConfirmationTokenForAdminUser( UUID userId, TokenInfo tokenInfo ) throws Exception {
         if (tokenInfo != null) {
             AuthPrincipalInfo principal = tokenInfo.getPrincipal();
             if ((principal != null) && userId.equals(principal.getUuid())) {
@@ -2496,9 +2519,20 @@ public class ManagementServiceImpl implements ManagementService {
 
 
     @Override
-    // token may contain the workflow organization id
+    public TokenInfo getActivationTokenInfoForAdminUser( String token ) throws Exception {
+        return getTokenInfoFromAccessToken(token, TOKEN_TYPE_ACTIVATION, ADMIN_USER);
+    }
+
+
+    @Override
     public ActivationState handleActivationTokenForAdminUser( UUID userId, String token ) throws Exception {
-        TokenInfo tokenInfo = getTokenInfoFromAccessToken(token, TOKEN_TYPE_ACTIVATION, ADMIN_USER);
+        return handleActivationTokenForAdminUser(userId, getActivationTokenInfoForAdminUser(token));
+    }
+
+
+    @Override
+    // token may contain the workflow organization id
+    public ActivationState handleActivationTokenForAdminUser( UUID userId, TokenInfo tokenInfo ) throws Exception {
         if (tokenInfo != null) {
             AuthPrincipalInfo principal = tokenInfo.getPrincipal();
             if ((principal != null) && userId.equals(principal.getUuid())) {

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fbac7e84/stack/services/src/main/java/org/apache/usergrid/management/cassandra/OrganizationConfigPropsImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/OrganizationConfigPropsImpl.java b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/OrganizationConfigPropsImpl.java
index 56c1e12..5d2c256 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/OrganizationConfigPropsImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/OrganizationConfigPropsImpl.java
@@ -18,13 +18,21 @@ package org.apache.usergrid.management.cassandra;
 
 
 import org.apache.usergrid.management.OrganizationConfigProps;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.*;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
 import static org.apache.commons.lang.StringUtils.isBlank;
 
 
 public class OrganizationConfigPropsImpl implements OrganizationConfigProps {
+    private static final Logger logger = LoggerFactory.getLogger( OrganizationConfigPropsImpl.class );
+
+    private static final String REGEX_PROPERTY_NAME = "usergrid.org.config.property.regex";
+    private static final String DEFAULT_REGEX = "usergrid[.]view[.].*";
 
     private static final String DEFAULTVALUE_API_URL_BASE = "http://localhost:8080";
     private static final String DEFAULTVALUE_DEFAULT_CONNECTION_PARAM = "all";
@@ -61,6 +69,9 @@ public class OrganizationConfigPropsImpl implements OrganizationConfigProps {
     protected final Map<String, String> defaultProperties;
     protected final Map<String, String> orgProperties;
 
+    protected final String propertyNameRegex;
+    protected Pattern propertyNameRegexPattern;
+
 
     public OrganizationConfigPropsImpl(Properties properties) {
         this(properties, null);
@@ -70,29 +81,42 @@ public class OrganizationConfigPropsImpl implements OrganizationConfigProps {
         this.properties = new Properties(properties);
         this.properties.putAll(properties);
 
+        String regex = properties.getProperty(REGEX_PROPERTY_NAME);
+        this.propertyNameRegex = !regex.isEmpty() ? regex : DEFAULT_REGEX;
+        try {
+            this.propertyNameRegexPattern = Pattern.compile(this.propertyNameRegex);
+        }
+        catch(PatternSyntaxException e) {
+            if (logger.isInfoEnabled()) {
+                logger.info("Invalid regex in " + REGEX_PROPERTY_NAME + " property: " + propertyNameRegex);
+            }
+            this.propertyNameRegexPattern = null;
+        }
+
         this.defaultProperties = new HashMap<>(noConfigDefaults);
-        // add any corresponding properties to default props map
-        noConfigDefaults.keySet().forEach((k) -> {
-            String value = properties.getProperty(k);
 
-            // ok if value is empty string
-            if (value != null) {
-                this.defaultProperties.put(k, value);
+        // add any corresponding properties to default props map
+        this.properties.forEach((k,v) -> {
+            if (orgPropertyNameValid(k.toString()) && v != null) {
+                this.defaultProperties.put(k.toString(), v.toString());
             }
         });
 
         this.orgProperties = map != null ? new HashMap<>(map) : new HashMap<>();
-        //noConfigDefaults.forEach((k,v) -> map.put(k, properties.getProperty(k, v)));
     }
 
     public OrganizationConfigPropsImpl(OrganizationConfigProps orgConfigProps) {
         this.properties = orgConfigProps.getPropertiesMap();
         this.defaultProperties = orgConfigProps.getDefaultPropertiesMap();
         this.orgProperties = orgConfigProps.getOrgPropertiesMap();
+        this.propertyNameRegex = orgConfigProps.getOrgPropertyNameRegex();
+        this.propertyNameRegexPattern = Pattern.compile(this.propertyNameRegex);
     }
 
+    @Override
     public boolean orgPropertyNameValid(String name) {
-        return noConfigDefaults.containsKey(name);
+        return noConfigDefaults.containsKey(name) ||
+                (propertyNameRegexPattern != null && propertyNameRegexPattern.matcher(name).matches());
     }
 
     @Override
@@ -117,6 +141,11 @@ public class OrganizationConfigPropsImpl implements OrganizationConfigProps {
         return new HashMap<>(orgProperties);
     }
 
+    @Override
+    public String getOrgPropertyNameRegex() {
+        return propertyNameRegex;
+    }
+
     //
     // 1. return from orgProperties (if it exists)
     // 2. return from properties (if it exists)


[2/8] usergrid git commit: Merge remote-tracking branch 'origin/master' into USERGRID-1241

Posted by mr...@apache.org.
Merge remote-tracking branch 'origin/master' into USERGRID-1241


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/bebfafc2
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/bebfafc2
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/bebfafc2

Branch: refs/heads/master
Commit: bebfafc2ff32464c53b3eca7ae73853d27b4ac33
Parents: fbac7e8 84916d5
Author: Mike Dunker <md...@apigee.com>
Authored: Wed Jan 27 16:26:53 2016 -0800
Committer: Mike Dunker <md...@apigee.com>
Committed: Wed Jan 27 16:26:53 2016 -0800

----------------------------------------------------------------------
 deployment/aws/README.md                        |  172 ++
 deployment/aws/assembly.xml                     |   74 +
 deployment/aws/aws-sample.properties            |   19 +
 deployment/aws/gatling-cluster-cf.json          |  386 ++++
 deployment/aws/pom.xml                          |  238 ++
 deployment/aws/src/main/cql/update_locks.cql    |   23 +
 deployment/aws/src/main/cql/update_usergrid.cql |   27 +
 .../main/cql/update_usergrid_applications.cql   |   46 +
 .../src/main/dist/init_instance/create_raid0.sh |   54 +
 .../main/dist/init_instance/init_db_server.sh   |   76 +
 .../main/dist/init_instance/init_es_server.sh   |   71 +
 .../dist/init_instance/init_graphite_server.sh  |   69 +
 .../dist/init_instance/init_opscenter_server.sh |  287 +++
 .../main/dist/init_instance/init_rest_server.sh |  257 +++
 .../dist/init_instance/install_cassandra.sh     |   51 +
 .../main/dist/init_instance/install_collectd.sh |  350 +++
 .../dist/init_instance/install_elasticsearch.sh |  123 ++
 .../init_instance/install_opscenter_agent.sh    |   42 +
 .../dist/init_instance/install_oraclejdk.sh     |   55 +
 .../main/dist/init_instance/install_yourkit.sh  |   39 +
 .../main/dist/init_instance/update_keyspaces.sh |   75 +
 .../aws/src/main/dist/lib/log4j.properties      |   53 +
 deployment/aws/src/main/dist/update.sh          |   35 +
 .../aws/src/main/groovy/NodeRegistry.groovy     |  227 ++
 .../src/main/groovy/configure_cassandra.groovy  |  125 ++
 .../main/groovy/configure_elasticsearch.groovy  |  169 ++
 .../groovy/configure_opscenter_agent.groovy     |   50 +
 .../groovy/configure_opscenter_cassandra.groovy |  120 +
 .../groovy/configure_opscenter_usergrid.groovy  |   58 +
 .../src/main/groovy/configure_portal_new.groovy |   28 +
 .../src/main/groovy/configure_usergrid.groovy   |  193 ++
 .../aws/src/main/groovy/create_dashboard.groovy |   79 +
 .../src/main/groovy/get_first_instance.groovy   |   46 +
 .../src/main/groovy/registry_register.groovy    |   38 +
 .../aws/src/main/groovy/tag_instance.groovy     |   55 +
 .../src/main/groovy/wait_for_instances.groovy   |   47 +
 deployment/aws/ugcluster-cf.json                | 2062 ++++++++++++++++++
 .../apache/usergrid/android/sdk/UGClient.java   |   12 +-
 stack/awscluster/README.md                      |  163 --
 stack/awscluster/assembly.xml                   |   74 -
 stack/awscluster/aws-sample.properties          |   19 -
 stack/awscluster/gatling-cluster-cf.json        |  386 ----
 stack/awscluster/pom.xml                        |  237 --
 stack/awscluster/src/main/cql/update_locks.cql  |   23 -
 .../awscluster/src/main/cql/update_usergrid.cql |   27 -
 .../main/cql/update_usergrid_applications.cql   |   46 -
 .../src/main/dist/init_instance/create_raid0.sh |   54 -
 .../main/dist/init_instance/init_db_server.sh   |   76 -
 .../main/dist/init_instance/init_es_server.sh   |   71 -
 .../dist/init_instance/init_graphite_server.sh  |   69 -
 .../dist/init_instance/init_opscenter_server.sh |  287 ---
 .../main/dist/init_instance/init_rest_server.sh |  257 ---
 .../dist/init_instance/install_cassandra.sh     |   51 -
 .../main/dist/init_instance/install_collectd.sh |  350 ---
 .../dist/init_instance/install_elasticsearch.sh |  123 --
 .../init_instance/install_opscenter_agent.sh    |   42 -
 .../dist/init_instance/install_oraclejdk.sh     |   55 -
 .../main/dist/init_instance/install_yourkit.sh  |   39 -
 .../main/dist/init_instance/update_keyspaces.sh |   75 -
 .../src/main/dist/lib/log4j.properties          |   53 -
 stack/awscluster/src/main/dist/update.sh        |   35 -
 .../awscluster/src/main/dist/webapps/dummy.txt  |    0
 .../src/main/groovy/NodeRegistry.groovy         |  227 --
 .../src/main/groovy/configure_cassandra.groovy  |  129 --
 .../main/groovy/configure_elasticsearch.groovy  |  169 --
 .../groovy/configure_opscenter_agent.groovy     |   50 -
 .../groovy/configure_opscenter_cassandra.groovy |  120 -
 .../groovy/configure_opscenter_usergrid.groovy  |   58 -
 .../src/main/groovy/configure_portal_new.groovy |   28 -
 .../src/main/groovy/configure_usergrid.groovy   |  193 --
 .../src/main/groovy/create_dashboard.groovy     |   79 -
 .../src/main/groovy/get_first_instance.groovy   |   46 -
 .../src/main/groovy/registry_register.groovy    |   38 -
 .../src/main/groovy/tag_instance.groovy         |   55 -
 .../src/main/groovy/wait_for_instances.groovy   |   47 -
 stack/awscluster/ugcluster-cf.json              | 2062 ------------------
 76 files changed, 5926 insertions(+), 5918 deletions(-)
----------------------------------------------------------------------



[3/8] usergrid git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/usergrid into USERGRID-1241

Posted by mr...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/usergrid into USERGRID-1241


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/5cc39fb0
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/5cc39fb0
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/5cc39fb0

Branch: refs/heads/master
Commit: 5cc39fb0fd1a3d5d8f206ae6d90e8abd2bcf24ca
Parents: bebfafc 07edc8b
Author: Mike Dunker <md...@apigee.com>
Authored: Thu Jan 28 10:00:30 2016 -0800
Committer: Mike Dunker <md...@apigee.com>
Committed: Thu Jan 28 10:00:30 2016 -0800

----------------------------------------------------------------------
 stack/pom.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------



[4/8] usergrid git commit: USERGRID-1241: fix broken tests

Posted by mr...@apache.org.
USERGRID-1241: fix broken tests


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/27b60feb
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/27b60feb
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/27b60feb

Branch: refs/heads/master
Commit: 27b60febd926b60e88f314ef9056ac7ebba6367d
Parents: 5cc39fb
Author: Mike Dunker <md...@apigee.com>
Authored: Thu Jan 28 18:20:02 2016 -0800
Committer: Mike Dunker <md...@apigee.com>
Committed: Thu Jan 28 18:20:02 2016 -0800

----------------------------------------------------------------------
 .../usergrid/rest/management/users/UserResource.java    | 12 ++++++++----
 .../management/cassandra/ManagementServiceImpl.java     | 12 +++++++++++-
 2 files changed, 19 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/27b60feb/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 a968508..185559e 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
@@ -219,9 +219,11 @@ public class UserResource extends AbstractContextResource {
         try {
             this.token = token;
             TokenInfo tokenInfo = management.getPasswordResetTokenInfoForAdminUser(token);
-            organizationId = tokenInfo.getWorkflowOrgId();
+            if (tokenInfo != null) {
+                organizationId = tokenInfo.getWorkflowOrgId();
+            }
 
-            if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), tokenInfo ) ) {
+            if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), token ) ) {
                 return handleViewable( "resetpw_set_form", this, organizationId );
             }
             else {
@@ -264,7 +266,9 @@ public class UserResource extends AbstractContextResource {
         try {
             this.token = token;
             TokenInfo tokenInfo = management.getPasswordResetTokenInfoForAdminUser(token);
-            organizationId = tokenInfo.getWorkflowOrgId();
+            if (tokenInfo != null) {
+                organizationId = tokenInfo.getWorkflowOrgId();
+            }
 
             //      if(user == null) {
             //        errorMsg = "Incorrect username entered";
@@ -272,7 +276,7 @@ public class UserResource extends AbstractContextResource {
             //      }
 
             if ( ( password1 != null ) || ( password2 != null ) ) {
-                if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), tokenInfo ) ) {
+                if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), token ) ) {
                     if ( ( password1 != null ) && password1.equals( password2 ) ) {
                         management.setAdminUserPassword( user.getUuid(), password1 );
                         management.revokeAccessTokenForAdminUser( user.getUuid(), token );

http://git-wip-us.apache.org/repos/asf/usergrid/blob/27b60feb/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 cc5fc9c..c65c608 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
@@ -2198,7 +2198,14 @@ public class ManagementServiceImpl implements ManagementService {
 
     @Override
     public TokenInfo getPasswordResetTokenInfoForAdminUser( String token ) throws Exception {
-        return getTokenInfoFromAccessToken(token, TOKEN_TYPE_PASSWORD_RESET, ADMIN_USER);
+        TokenInfo tokenInfo = null;
+        try {
+            tokenInfo = getTokenInfoFromAccessToken(token, TOKEN_TYPE_PASSWORD_RESET, ADMIN_USER);
+        }
+        catch (Exception e) {
+            // intentionally empty
+        }
+        return tokenInfo;
     }
 
 
@@ -2210,6 +2217,9 @@ public class ManagementServiceImpl implements ManagementService {
 
     @Override
     public boolean checkPasswordResetTokenForAdminUser( UUID userId, TokenInfo tokenInfo ) throws Exception {
+        if (tokenInfo == null) {
+            return false;
+        }
         AuthPrincipalInfo principal = null;
         try {
             principal = tokenInfo.getPrincipal();


[8/8] usergrid git commit: Merge commit 'refs/pull/477/head' of github.com:apache/usergrid

Posted by mr...@apache.org.
Merge commit 'refs/pull/477/head' of github.com:apache/usergrid


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/548334bf
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/548334bf
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/548334bf

Branch: refs/heads/master
Commit: 548334bf8a5b662232be6f2dfd72b138d1112b02
Parents: 10733b2 0d4c35f
Author: Michael Russo <mi...@gmail.com>
Authored: Mon Feb 1 08:46:24 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Mon Feb 1 08:46:24 2016 -0800

----------------------------------------------------------------------
 .../apache/usergrid/rest/management/users/UsersResource.java | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[5/8] usergrid git commit: USERGRID-1241: retrieve token info only once

Posted by mr...@apache.org.
USERGRID-1241: retrieve token info only once


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/a434b523
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/a434b523
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/a434b523

Branch: refs/heads/master
Commit: a434b523eca4d234a8f3b078cefcf930c127bb15
Parents: 27b60fe
Author: Mike Dunker <md...@apigee.com>
Authored: Fri Jan 29 10:27:10 2016 -0800
Committer: Mike Dunker <md...@apigee.com>
Committed: Fri Jan 29 10:27:10 2016 -0800

----------------------------------------------------------------------
 .../org/apache/usergrid/rest/management/users/UserResource.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/a434b523/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 185559e..11dd9d4 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
@@ -223,7 +223,7 @@ public class UserResource extends AbstractContextResource {
                 organizationId = tokenInfo.getWorkflowOrgId();
             }
 
-            if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), token ) ) {
+            if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), tokenInfo ) ) {
                 return handleViewable( "resetpw_set_form", this, organizationId );
             }
             else {
@@ -276,7 +276,7 @@ public class UserResource extends AbstractContextResource {
             //      }
 
             if ( ( password1 != null ) || ( password2 != null ) ) {
-                if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), token ) ) {
+                if ( management.checkPasswordResetTokenForAdminUser( user.getUuid(), tokenInfo ) ) {
                     if ( ( password1 != null ) && password1.equals( password2 ) ) {
                         management.setAdminUserPassword( user.getUuid(), password1 );
                         management.revokeAccessTokenForAdminUser( user.getUuid(), token );


[7/8] usergrid git commit: Merge commit 'refs/pull/475/head' of github.com:apache/usergrid

Posted by mr...@apache.org.
Merge commit 'refs/pull/475/head' of github.com:apache/usergrid


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/10733b26
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/10733b26
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/10733b26

Branch: refs/heads/master
Commit: 10733b261db1403ad0b744706839dc778dac88fd
Parents: 019d49e a434b52
Author: Michael Russo <mi...@gmail.com>
Authored: Mon Feb 1 08:46:17 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Mon Feb 1 08:46:17 2016 -0800

----------------------------------------------------------------------
 .../main/resources/usergrid-default.properties  |  5 ++
 .../usergrid/rest/AbstractContextResource.java  | 52 ++++++++++++++-
 .../rest/applications/ApplicationResource.java  | 10 ++-
 .../rest/applications/ServiceResource.java      | 12 ++--
 .../rest/applications/users/UserResource.java   | 41 ++++++------
 .../rest/applications/users/UsersResource.java  | 14 ++---
 .../rest/management/ManagementResource.java     |  5 +-
 .../organizations/OrganizationResource.java     | 14 ++---
 .../rest/management/users/UserResource.java     | 66 +++++++++++++-------
 .../usergrid/management/ManagementService.java  | 13 ++++
 .../usergrid/management/OrganizationConfig.java | 27 ++++----
 .../management/OrganizationConfigProps.java     |  4 ++
 .../cassandra/ManagementServiceImpl.java        | 54 ++++++++++++++--
 .../cassandra/OrganizationConfigPropsImpl.java  | 45 ++++++++++---
 14 files changed, 266 insertions(+), 96 deletions(-)
----------------------------------------------------------------------



[6/8] usergrid git commit: USERGRID-1188: return error rather than 204 when email not provided for user creation

Posted by mr...@apache.org.
USERGRID-1188: return error rather than 204 when email not provided for user creation


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/0d4c35fa
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/0d4c35fa
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/0d4c35fa

Branch: refs/heads/master
Commit: 0d4c35fa7bded5eecd99501ea6d4f660274fc265
Parents: f5d0153
Author: Mike Dunker <md...@apigee.com>
Authored: Fri Jan 29 11:24:30 2016 -0800
Committer: Mike Dunker <md...@apigee.com>
Committed: Fri Jan 29 11:24:30 2016 -0800

----------------------------------------------------------------------
 .../apache/usergrid/rest/management/users/UsersResource.java | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/0d4c35fa/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UsersResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UsersResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UsersResource.java
index 6658227..640a6c2 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UsersResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/users/UsersResource.java
@@ -122,7 +122,13 @@ public class UsersResource extends AbstractContextResource {
                     properties.getProperty( ManagementResource.USERGRID_CENTRAL_URL ) );
         }
 
-        logger.info( "Create user: " + username );
+        // email is only required parameter
+        if (StringUtils.isBlank(email)) {
+            throw new IllegalArgumentException( "email form parameter is required" );
+        }
+
+        // if username not provided, email will be used
+        logger.info( "Create user: {}", (StringUtils.isNotBlank(username) ? username : email) );
 
         ApiResponse response = createApiResponse();
         response.setAction( "create user" );