Merge branch 'two-dot-o-dev' into usergrid-103-upgrade-jersey

Conflicts:
        
stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationResource.java
        
stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
        
stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/BasicAuthSecurityFilter.java
        
stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java


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

Branch: refs/heads/usergrid-1007-shiro-cache
Commit: d4e8be8b09f914842407a35428617cd2f06db092
Parents: 2888a7c 2faa805
Author: Dave Johnson <[email protected]>
Authored: Mon Sep 14 13:54:18 2015 -0400
Committer: Dave Johnson <[email protected]>
Committed: Mon Sep 14 13:54:18 2015 -0400

----------------------------------------------------------------------
 .../creating-and-managing-notifications.md      |  2 +
 portal/bower.json                               |  2 +-
 portal/js/libs/usergrid.sdk.js                  |  8 ++-
 portal/package.json                             |  2 +-
 .../asyncevents/AmazonAsyncEventService.java    |  6 +-
 .../persistence/entities/Notification.java      | 13 ++--
 .../corepersistence/CpEntityMapUtilsTest.java   | 52 +++++++++++++--
 stack/corepersistence/model/pom.xml             |  6 +-
 .../model/entity/MapToEntityConverter.java      | 68 ++++++++++++--------
 .../queue/impl/QueueManagerFactoryImpl.java     | 16 ++++-
 .../rest/applications/ApplicationResource.java  | 11 +++-
 .../exceptions/AbstractExceptionMapper.java     | 13 ++--
 .../organizations/OrganizationResource.java     |  8 ++-
 .../security/SecuredResourceFilterFactory.java  | 46 ++++++-------
 .../shiro/filters/BasicAuthSecurityFilter.java  |  6 +-
 .../applications/ApplicationResourceIT.java     | 14 +++-
 stack/scripts/migrate_entity_data.py            | 17 +++++
 .../apache/usergrid/security/shiro/Realm.java   | 24 +++++++
 .../notifications/apns/APNsNotification.java    |  8 +--
 .../services/notifications/gcm/GCMAdapter.java  |  9 +--
 .../services/notifications/wns/WNSAdapter.java  | 13 +++-
 .../apns/NotificationsServiceIT.java            |  1 +
 .../gcm/NotificationsServiceIT.java             |  1 +
 23 files changed, 254 insertions(+), 92 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/d4e8be8b/stack/corepersistence/model/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/usergrid/blob/d4e8be8b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
index afcbbaf,c521d4f..e830876
--- 
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
@@@ -34,9 -35,9 +34,10 @@@ import org.apache.usergrid.persistence.
  import org.apache.usergrid.persistence.SimpleEntityRef;
  import org.apache.usergrid.persistence.entities.Application;
  import org.apache.usergrid.persistence.entities.User;
+ import org.apache.usergrid.persistence.exceptions.EntityNotFoundException;
  import org.apache.usergrid.persistence.index.query.Identifier;
  import org.apache.usergrid.rest.AbstractContextResource;
 +import org.apache.usergrid.rest.ApiResponse;
  import org.apache.usergrid.rest.applications.assets.AssetsResource;
  import org.apache.usergrid.rest.applications.events.EventsResource;
  import org.apache.usergrid.rest.applications.queues.QueueResource;
@@@ -591,9 -591,14 +593,14 @@@ public class ApplicationResource extend
                  APIGEE_MOBILE_APM_CONFIG_JSON_KEY );
          //If there is no apm configuration then try to create apm config on 
the fly
          if ( value == null ) {
-             value = management.registerAppWithAPM( 
management.getOrganizationForApplication( applicationId ),
-                     management.getApplicationInfo( applicationId ) );
+             value = management.registerAppWithAPM(
+                 management.getOrganizationForApplication( applicationId ),
+                 management.getApplicationInfo( applicationId )
+             );
+         }
+         if(value==null){
+             throw new EntityNotFoundException("apigeeMobileConfig not found, 
it is possibly not enabled for your config.");
          }
 -        return new JSONWithPadding( value, callback );
 +        return value;
      }
  }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/d4e8be8b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationResource.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationResource.java
index 8055849,5a55c9e..e1fde46
--- 
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
@@@ -362,11 -363,10 +363,11 @@@ public class OrganizationResource exten
      }
  
  
-     @RequireOrganizationAccess
 +    @JSONP
+     @RequireSystemAccess
      @GET
      @Path("config")
 -    public JSONWithPadding getConfig( @Context UriInfo ui,
 +    public ApiResponse getConfig( @Context UriInfo ui,
                                        @QueryParam("callback") 
@DefaultValue("callback") String callback )
              throws Exception {
  
@@@ -389,12 -389,11 +390,12 @@@
      }
  
  
-     @RequireOrganizationAccess
+     @RequireSystemAccess
      @Consumes(MediaType.APPLICATION_JSON)
 +    @JSONP
      @PUT
      @Path("config")
 -    public JSONWithPadding putConfig( @Context UriInfo ui, Map<String, 
Object> json,
 +    public ApiResponse putConfig( @Context UriInfo ui, Map<String, Object> 
json,
                                         @QueryParam("callback") 
@DefaultValue("callback") String callback )
              throws Exception {
  
@@@ -411,9 -410,12 +412,12 @@@
                  management.getOrganizationConfigByUuid( 
organization.getUuid() );
          orgConfig.addProperties(json);
          management.updateOrganizationConfig(orgConfig);
+ 
+         // refresh orgConfig -- to pick up removed entries and defaults
+         orgConfig = management.getOrganizationConfigByUuid( 
organization.getUuid() );
          response.setProperty( "configuration", 
management.getOrganizationConfigData( orgConfig ) );
  
 -        return new JSONWithPadding( response, callback );
 +        return response;
      }
  
  }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/d4e8be8b/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
index f6edfcc,6f7d698..3a290d9
--- 
a/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
+++ 
b/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
@@@ -52,11 -54,15 +52,12 @@@ import java.util.Properties
  
  import static org.apache.commons.lang.StringUtils.isNotEmpty;
  import static 
org.apache.usergrid.rest.exceptions.SecurityException.mappableSecurityException;
 -import static 
org.apache.usergrid.security.shiro.utils.SubjectUtils.isPermittedAccessToApplication;
 -import static 
org.apache.usergrid.security.shiro.utils.SubjectUtils.isPermittedAccessToOrganization;
 -import static org.apache.usergrid.security.shiro.utils.SubjectUtils.isUser;
 -import static 
org.apache.usergrid.security.shiro.utils.SubjectUtils.loginApplicationGuest;
+ import static org.apache.usergrid.security.shiro.Realm.ROLE_SERVICE_ADMIN;
 +import static org.apache.usergrid.security.shiro.utils.SubjectUtils.*;
  
  
 -@Component
 -public class SecuredResourceFilterFactory implements ResourceFilterFactory {
 +@Resource
 +public class SecuredResourceFilterFactory implements DynamicFeature {
  
      private static final Logger logger = LoggerFactory.getLogger( 
SecuredResourceFilterFactory.class );
  
@@@ -112,39 -119,43 +113,39 @@@
  
  
      @Override
 -    public List<ResourceFilter> create( AbstractMethod am ) {
 +    public void configure(ResourceInfo resourceInfo, FeatureContext 
featureContext) {
 +        Method am = resourceInfo.getResourceMethod();
 +
 +        logger.debug( "configure {} method {}",
 +            resourceInfo.getResourceClass().getSimpleName(), 
resourceInfo.getResourceMethod().getName() );
 +
          if ( am.isAnnotationPresent( RequireApplicationAccess.class ) ) {
 -            return Collections.<ResourceFilter>singletonList( new 
ApplicationFilter() );
 +            featureContext.register( ApplicationFilter.class );
          }
          else if ( am.isAnnotationPresent( RequireOrganizationAccess.class ) ) 
{
 -            return Collections.<ResourceFilter>singletonList( new 
OrganizationFilter() );
 +            featureContext.register( OrganizationFilter.class );
          }
          else if ( am.isAnnotationPresent( RequireSystemAccess.class ) ) {
 -            return Collections.<ResourceFilter>singletonList( new 
SystemFilter() );
 +            featureContext.register( SystemFilter.class );
          }
          else if ( am.isAnnotationPresent( RequireAdminUserAccess.class ) ) {
-             featureContext.register( AdminUserFilter.class );
 -            return Collections.<ResourceFilter>singletonList( new 
AdminUserFilter() );
++            featureContext.register( SystemFilter.AdminUserFilter.class );
          }
 -        return null;
 -    }
  
 +    }
  
 -    public abstract class AbstractFilter implements ResourceFilter, 
ContainerRequestFilter {
 -        public AbstractFilter() {
 -        }
 +    public static abstract class AbstractFilter implements 
ContainerRequestFilter {
  
 +        private UriInfo uriInfo;
  
 -        @Override
 -        public ContainerRequestFilter getRequestFilter() {
 -            return this;
 +        public AbstractFilter( UriInfo uriInfo ) {
 +            this.uriInfo = uriInfo;
          }
  
 -
          @Override
 -        public ContainerResponseFilter getResponseFilter() {
 -            return null;
 -        }
 -
 +        public void filter(ContainerRequestContext request) throws 
IOException {
  
 -        @Override
 -        public ContainerRequest filter( ContainerRequest request ) {
 -            logger.debug( "Filtering {}", request.getRequestUri().toString() 
);
 +            logger.debug( "Filtering {}", 
request.getUriInfo().getRequestUri().toString() );
  
              if ( request.getMethod().equalsIgnoreCase( "OPTIONS" ) ) {
                  logger.debug( "Skipping option request" );
@@@ -299,51 -291,44 +300,50 @@@
      }
  
  
 -    public class SystemFilter extends AbstractFilter {
 -        public SystemFilter() {
 +    @Resource
 +    public static class SystemFilter extends AbstractFilter {
 +
 +        @Inject
-         public SystemFilter( UriInfo uriInfo ) {
-             super(uriInfo);
++        public SystemFilter(UriInfo uriInfo) {
++            super( uriInfo );
          }
  
  
          @Override
-         public void authorize( ContainerRequestContext request ) {
 -        public void authorize( ContainerRequest request ) {
++        public void authorize(ContainerRequestContext request) {
              logger.debug( "SystemFilter.authorize" );
              try {
-                 if ( !request.getSecurityContext().isUserInRole( "sysadmin" ) 
) {
 -                if ( !request.isUserInRole( ROLE_SERVICE_ADMIN ) ) {
++                if (!request.getSecurityContext().isUserInRole( 
ROLE_SERVICE_ADMIN )) {
                      logger.debug( "You are not the system admin." );
                      throw mappableSecurityException( "unauthorized", "No 
system access authorized",
 -                            SecurityException.REALM );
 +                        SecurityException.REALM );
                  }
--            }
--            catch ( IllegalStateException e ) {
--                logger.debug( "This is an invalid state",e );
-                 if ( ( request.getSecurityContext().getUserPrincipal() == 
null ) || !"sysadmin"
-                     .equals( 
request.getSecurityContext().getUserPrincipal().getName() ) ) {
 -                if ( ( request.getUserPrincipal() == null ) ||
 -                        !ROLE_SERVICE_ADMIN.equals( 
request.getUserPrincipal().getName() ) ) {
++            } catch (IllegalStateException e) {
++                logger.debug( "This is an invalid state", e );
++                if ((request.getSecurityContext().getUserPrincipal() == null) 
||
++                    !ROLE_SERVICE_ADMIN.equals( 
request.getSecurityContext().getUserPrincipal().getName() )) {
                      throw mappableSecurityException( "unauthorized", "No 
system access authorized",
 -                            SecurityException.REALM );
 +                        SecurityException.REALM );
                  }
              }
          }
--    }
  
++        @Resource
++        public static class AdminUserFilter extends AbstractFilter {
  
-     @Resource
-     public static class AdminUserFilter extends AbstractFilter {
- 
-         @Inject
-         public AdminUserFilter( UriInfo uriInfo ) {
-             super(uriInfo);
 -    public class AdminUserFilter extends AbstractFilter {
 -        public AdminUserFilter() {
--        }
 -
++            @Inject
++            public AdminUserFilter(UriInfo uriInfo) {
++                super( uriInfo );
++            }
  
--        @Override
-         public void authorize( ContainerRequestContext request ) {
 -        public void authorize( ContainerRequest request ) {
--            logger.debug( "AdminUserFilter.authorize" );
--            if ( !isUser( getUserIdentifier() ) ) {
--                throw mappableSecurityException( "unauthorized", "No admin 
user access authorized" );
++            @Override
++            public void authorize(ContainerRequestContext request) {
++                logger.debug( "AdminUserFilter.authorize" );
++                if (!isUser( getUserIdentifier() )) {
++                    throw mappableSecurityException( "unauthorized", "No 
admin user access authorized" );
++                }
              }
          }
++
      }
  }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/d4e8be8b/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/BasicAuthSecurityFilter.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/BasicAuthSecurityFilter.java
index cb0745a,d0fb3bf..1643501
--- 
a/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/BasicAuthSecurityFilter.java
+++ 
b/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/BasicAuthSecurityFilter.java
@@@ -17,20 -17,22 +17,22 @@@
  package org.apache.usergrid.rest.security.shiro.filters;
  
  
 -import java.security.Principal;
 -import java.util.Map;
 -
 -import javax.ws.rs.core.SecurityContext;
 -
 +import org.apache.shiro.codec.Base64;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
 -import org.springframework.stereotype.Component;
  
 -import org.apache.shiro.codec.Base64;
 -import static org.apache.usergrid.security.shiro.Realm.ROLE_SERVICE_ADMIN;
 +import javax.ws.rs.container.ContainerRequestContext;
 +import javax.ws.rs.container.PreMatching;
 +import javax.ws.rs.core.SecurityContext;
 +import javax.ws.rs.ext.Provider;
 +import java.security.Principal;
 +import java.util.Map;
  
 -import com.sun.jersey.spi.container.ContainerRequest;
++import static org.apache.usergrid.security.shiro.Realm.ROLE_SERVICE_ADMIN;
+ 
  
 -@Component
 +@Provider
 +@PreMatching
  public class BasicAuthSecurityFilter extends SecurityFilter {
  
      private static final Logger logger = LoggerFactory.getLogger( 
BasicAuthSecurityFilter.class );

http://git-wip-us.apache.org/repos/asf/usergrid/blob/d4e8be8b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
index bc24f5b,f7e8dc3..8a94760
--- 
a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
+++ 
b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
@@@ -17,6 -17,11 +17,8 @@@
  package org.apache.usergrid.rest.applications;
  
  import com.fasterxml.jackson.databind.JsonNode;
 -import com.sun.jersey.api.client.ClientResponse.Status;
+ import com.sun.jersey.api.client.UniformInterfaceException;
 -import com.sun.jersey.api.client.WebResource;
 -import com.sun.jersey.api.representation.Form;
+ import junit.framework.Assert;
  import org.apache.commons.lang.RandomStringUtils;
  import org.apache.shiro.codec.Base64;
  import org.apache.usergrid.cassandra.SpringResource;
@@@ -32,12 -37,7 +34,12 @@@ import org.junit.Test
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
++import javax.ws.rs.ClientErrorException;
 +import javax.ws.rs.InternalServerErrorException;
 +import javax.ws.rs.client.Invocation;
- import javax.ws.rs.ClientErrorException;
 +import javax.ws.rs.core.Form;
  import javax.ws.rs.core.MediaType;
 +import javax.ws.rs.core.Response;
  import java.io.IOException;
  import java.util.HashMap;
  import java.util.Map;

Reply via email to