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;