You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/09/14 23:45:16 UTC

[01/16] usergrid git commit: USERGRID-645: fix superuser access via token

Repository: usergrid
Updated Branches:
  refs/heads/usergrid-103-upgrade-jersey 2888a7cfe -> d4e8be8b0


USERGRID-645: fix superuser access via token

1. Superuser access via token now works. Some code was checking for hardcoded string "sysadmin" -- superuser role is now "service-admin".
2. Superuser token should now be granted access to all orgs and apps.
3. Locked down org config GET/PUT to superusers only.

Basic auth superuser still does not have access to orgs/apps. Org config GET/PUT requires both org access to specified org and superuser access, so token must be used for org config.


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: ac1db7e33326076df13ca77610416e4d1dcc06aa
Parents: b67f0b1
Author: Mike Dunker <md...@apache.org>
Authored: Thu Sep 10 14:35:30 2015 -0700
Committer: Mike Dunker <md...@apache.org>
Committed: Thu Sep 10 14:35:30 2015 -0700

----------------------------------------------------------------------
 .../organizations/OrganizationResource.java     |  7 ++++--
 .../security/SecuredResourceFilterFactory.java  |  7 +++---
 .../shiro/filters/BasicAuthSecurityFilter.java  |  5 ++--
 .../apache/usergrid/security/shiro/Realm.java   | 24 ++++++++++++++++++++
 4 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/ac1db7e3/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 f45e1b2..5a55c9e 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
@@ -363,7 +363,7 @@ public class OrganizationResource extends AbstractContextResource {
     }
 
 
-    @RequireOrganizationAccess
+    @RequireSystemAccess
     @GET
     @Path("config")
     public JSONWithPadding getConfig( @Context UriInfo ui,
@@ -389,7 +389,7 @@ public class OrganizationResource extends AbstractContextResource {
     }
 
 
-    @RequireOrganizationAccess
+    @RequireSystemAccess
     @Consumes(MediaType.APPLICATION_JSON)
     @PUT
     @Path("config")
@@ -410,6 +410,9 @@ public class OrganizationResource extends AbstractContextResource {
                 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 );

http://git-wip-us.apache.org/repos/asf/usergrid/blob/ac1db7e3/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
----------------------------------------------------------------------
diff --git 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
index 551c687..6f7d698 100644
--- 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
@@ -58,6 +58,7 @@ import static org.apache.usergrid.security.shiro.utils.SubjectUtils.isPermittedA
 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;
 
 
 @Component
@@ -299,7 +300,7 @@ public class SecuredResourceFilterFactory implements ResourceFilterFactory {
         public void authorize( ContainerRequest request ) {
             logger.debug( "SystemFilter.authorize" );
             try {
-                if ( !request.isUserInRole( "sysadmin" ) ) {
+                if ( !request.isUserInRole( ROLE_SERVICE_ADMIN ) ) {
                     logger.debug( "You are not the system admin." );
                     throw mappableSecurityException( "unauthorized", "No system access authorized",
                             SecurityException.REALM );
@@ -307,8 +308,8 @@ public class SecuredResourceFilterFactory implements ResourceFilterFactory {
             }
             catch ( IllegalStateException e ) {
                 logger.debug( "This is an invalid state",e );
-                if ( ( request.getUserPrincipal() == null ) || !"sysadmin"
-                        .equals( request.getUserPrincipal().getName() ) ) {
+                if ( ( request.getUserPrincipal() == null ) ||
+                        !ROLE_SERVICE_ADMIN.equals( request.getUserPrincipal().getName() ) ) {
                     throw mappableSecurityException( "unauthorized", "No system access authorized",
                             SecurityException.REALM );
                 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/ac1db7e3/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/BasicAuthSecurityFilter.java
----------------------------------------------------------------------
diff --git 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
index 5f03809..d0fb3bf 100644
--- 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
@@ -27,6 +27,7 @@ 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 com.sun.jersey.spi.container.ContainerRequest;
 
@@ -80,7 +81,7 @@ public class BasicAuthSecurityFilter extends SecurityFilter {
             principal = new Principal() {
                 @Override
                 public String getName() {
-                    return "sysadmin";
+                    return ROLE_SERVICE_ADMIN;
                 }
             };
         }
@@ -94,7 +95,7 @@ public class BasicAuthSecurityFilter extends SecurityFilter {
 
         @Override
         public boolean isUserInRole( String role ) {
-            return role.equals( "sysadmin" );
+            return role.equals( ROLE_SERVICE_ADMIN );
         }
 
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/ac1db7e3/stack/services/src/main/java/org/apache/usergrid/security/shiro/Realm.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/shiro/Realm.java b/stack/services/src/main/java/org/apache/usergrid/security/shiro/Realm.java
index 91d97e9..a793fdb 100644
--- a/stack/services/src/main/java/org/apache/usergrid/security/shiro/Realm.java
+++ b/stack/services/src/main/java/org/apache/usergrid/security/shiro/Realm.java
@@ -306,6 +306,30 @@ public class Realm extends AuthorizingRealm {
 
                     grant( info, principal,
                             getPermissionFromPath( emf.getManagementAppId(), "get,put,post,delete", "/**" ) );
+
+                    // get all organizations
+                    try {
+
+                        Map<UUID, String> allOrganizations = management.getOrganizations();
+
+                        if ( allOrganizations != null ) {
+                            for ( UUID id : allOrganizations.keySet() ) {
+                                grant( info, principal, "organizations:admin,access,get,put,post,delete:" + id );
+                            }
+                            organizationSet.putAll(allOrganizations);
+
+                            Map<UUID, String> allApplications =
+                                management.getApplicationsForOrganizations( allOrganizations.keySet() );
+                            if ( ( allApplications != null ) && !allApplications.isEmpty() ) {
+                                grant( info, principal, "applications:admin,access,get,put,post,delete:" + StringUtils
+                                    .join( allApplications.keySet(), ',' ) );
+                                applicationSet.putAll( allApplications );
+                            }
+                        }
+                    }
+                    catch ( Exception e ) {
+                        logger.error( "Unable to construct superuser permissions", e );
+                    }
                 }
                 else {
 


[06/16] usergrid git commit: add apm mobile config

Posted by sn...@apache.org.
add apm mobile config


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: cf6cf83348819ead3ad58b1308832c06e1c9b412
Parents: a7ae791
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Sep 11 10:44:38 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Fri Sep 11 10:44:38 2015 -0600

----------------------------------------------------------------------
 .../usergrid/rest/applications/ApplicationResource.java | 11 +++++++++--
 .../rest/applications/ApplicationResourceIT.java        | 12 ++++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/cf6cf833/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 52a0f99..c521d4f 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
@@ -35,6 +35,7 @@ import org.apache.usergrid.persistence.EntityManager;
 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.applications.assets.AssetsResource;
@@ -42,6 +43,7 @@ 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.security.annotations.RequireApplicationAccess;
 import org.apache.usergrid.rest.security.annotations.RequireOrganizationAccess;
@@ -589,8 +591,13 @@ public class ApplicationResource extends ServiceResource {
                 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 );
     }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/cf6cf833/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
----------------------------------------------------------------------
diff --git 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
index ec858f7..f7e8dc3 100644
--- 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
@@ -21,10 +21,12 @@ 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;
 import org.apache.usergrid.management.ManagementService;
+import org.apache.usergrid.persistence.exceptions.EntityNotFoundException;
 import org.apache.usergrid.rest.test.resource.AbstractRestIT;
 import org.apache.usergrid.rest.test.resource.endpoints.mgmt.OrganizationResource;
 import org.apache.usergrid.rest.test.resource.model.*;
@@ -845,6 +847,16 @@ public class ApplicationResourceIT extends AbstractRestIT {
         assertNull(response.getError());
     }
 
+    @Test
+    public void getApmConfig(){
+        try {
+            Collection collection = this.app().collection("apm/apigeeMobileConfig").get();
+            fail();
+        }catch (UniformInterfaceException e){
+            Assert.assertEquals(404, e.getResponse().getStatus());
+        }
+    }
+
     /**
      * Get the client credentials for the current app
      * @return Credentials


[03/16] usergrid git commit: Fix push notification delivery expiration.

Posted by sn...@apache.org.
Fix push notification delivery expiration.


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 1efd176325a147c82077c694bccda5af917fa23b
Parents: 3bd059c
Author: Michael Russo <mi...@gmail.com>
Authored: Thu Sep 10 15:44:08 2015 -0700
Committer: Michael Russo <mi...@gmail.com>
Committed: Thu Sep 10 15:44:08 2015 -0700

----------------------------------------------------------------------
 .../usergrid/persistence/entities/Notification.java    | 12 ++++++++----
 .../services/notifications/apns/APNsNotification.java  |  8 ++++----
 .../services/notifications/gcm/GCMAdapter.java         |  9 +++++----
 .../services/notifications/wns/WNSAdapter.java         | 13 ++++++++++---
 .../notifications/apns/NotificationsServiceIT.java     |  1 +
 .../notifications/gcm/NotificationsServiceIT.java      |  1 +
 6 files changed, 29 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/1efd1763/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java
index 88b2f33..d1101a5 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java
@@ -230,12 +230,16 @@ public class Notification extends TypedEntity {
         return State.CREATED;
     }
 
+    @JsonIgnore
+    public long getExpireTimeMillis() {
+        long expireAtMillis = getExpire() != null ? getExpire() * 1000 : 0;
+        return expireAtMillis;
+    }
 
     @JsonIgnore
-    public int getExpireTimeInSeconds() {
-        long expirySeconds = getExpire() != null ? getExpire() * 1000 : 0;
-        return (expirySeconds > Integer.MAX_VALUE) ? Integer.MAX_VALUE
-                : (int) expirySeconds;
+    public long getExpireTTLSeconds() {
+        Long ttlSeconds = (getExpireTimeMillis() - new Date().getTime()) / 1000;
+        return ttlSeconds > 0 ? ttlSeconds : 0;
     }
 
     @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)

http://git-wip-us.apache.org/repos/asf/usergrid/blob/1efd1763/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsNotification.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsNotification.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsNotification.java
index b580410..ff00e4c 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsNotification.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsNotification.java
@@ -24,7 +24,6 @@ import com.relayrides.pushy.apns.util.TokenUtil;
 import org.apache.usergrid.persistence.entities.Notification;
 import org.apache.usergrid.services.notifications.TaskTracker;
 
-import java.util.Calendar;
 import java.util.Date;
 /**
  * Standard apigee notificatton
@@ -44,12 +43,13 @@ public class APNsNotification extends SimpleApnsPushNotification {
      */
     public static APNsNotification create(String providerId, String payload, Notification notification, TaskTracker tracker) throws RuntimeException {
 
-        Calendar date  = Calendar.getInstance();
-        date.add(Calendar.SECOND, notification.getExpireTimeInSeconds());
+        // create Date object using milliseconds value
+        Date expiryDate = new Date(notification.getExpireTimeMillis());
+
       try {
           final byte[] token = TokenUtil.tokenStringToByteArray(providerId);
 
-          return new APNsNotification(tracker, date.getTime(), token, payload, notification);
+          return new APNsNotification(tracker, expiryDate, token, payload, notification);
       }catch(MalformedTokenStringException mtse){
           throw new RuntimeException("Exception converting token",mtse);
       }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/1efd1763/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
index 5580ea8..df1b580 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
@@ -36,7 +36,6 @@ import org.apache.usergrid.services.notifications.TaskTracker;
 import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedQueue;
 
 public class GCMAdapter implements ProviderAdapter {
 
@@ -71,9 +70,11 @@ public class GCMAdapter implements ProviderAdapter {
         Map<String,Object> map = (Map<String, Object>) payload;
         final String expiresKey = "time_to_live";
         if(!map.containsKey(expiresKey) && notification.getExpire() != null){
-            int expireSeconds = notification.getExpireTimeInSeconds();
-            expireSeconds = expireSeconds <= 2419200 ? expireSeconds : 2419200; //send the max gcm value documented here http://developer.android.com/google/gcm/adv.html#ttl
-            map.put(expiresKey, expireSeconds);
+            // ttl provided to GCM is in seconds.  calculate the difference from now
+            Long ttlSeconds = notification.getExpireTTLSeconds();
+            // max ttl for gcm is 4 weeks - https://developers.google.com/cloud-messaging/http-server-ref
+            ttlSeconds = ttlSeconds <= 2419200 ? ttlSeconds : 2419200;
+            map.put(expiresKey, ttlSeconds);
         }
         Batch batch = getBatch( map);
         batch.add(providerId, tracker);

http://git-wip-us.apache.org/repos/asf/usergrid/blob/1efd1763/stack/services/src/main/java/org/apache/usergrid/services/notifications/wns/WNSAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/wns/WNSAdapter.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/wns/WNSAdapter.java
index 1fe8f72..3ad3d35 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/wns/WNSAdapter.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/wns/WNSAdapter.java
@@ -74,10 +74,15 @@ public class WNSAdapter implements ProviderAdapter {
         try {
             List<TranslatedNotification> translatedNotifications = ( List<TranslatedNotification>) payload;
             for(TranslatedNotification translatedNotification : translatedNotifications) {
+
+                // set the optional TTL value used when pushing notifications
+                WnsNotificationRequestOptional opt = new WnsNotificationRequestOptional();
+                opt.ttl = String.valueOf(notification.getExpireTTLSeconds());
+
                 switch (translatedNotification.getType()) {
                     case "toast":
                         WnsToast toast = new WnsToastBuilder().bindingTemplateToastText01(translatedNotification.getMessage().toString()).build();
-                        service.pushToast(providerId, toast);
+                        service.pushToast(providerId, opt, toast);
                         break;
                     case "badge":
                         WnsBadge badge;
@@ -86,15 +91,17 @@ public class WNSAdapter implements ProviderAdapter {
                         } else {
                             badge = new WnsBadgeBuilder().value(translatedNotification.getMessage().toString()).build();
                         }
-                        service.pushBadge(providerId, badge);
+                        service.pushBadge(providerId, opt, badge);
                         break;
                     case "raw":
                         Object message = translatedNotification.getMessage();
                         if(message instanceof String) {
                             WnsRaw raw = new WnsRawBuilder().stream(((String) message).getBytes()).build();
-                            WnsNotificationRequestOptional opt = new WnsNotificationRequestOptional();
+
+                            // set additional optional parameter for raw notifications
                             opt.cachePolicy = "cache";
                             opt.requestForStatus = "true";
+
                             WnsNotificationResponse response = service.pushRaw(providerId, opt, raw);
                             if (!response.notificationStatus.equals("received")) { // https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx#pncodes_x_wns_notification
                                 throw new Exception(String.format("Notification failed status:%s, devicesStatus:%s, description:%s, debug flag:%s", response.notificationStatus, response.deviceConnectionStatus, response.errorDescription, response.debugTrace));

http://git-wip-us.apache.org/repos/asf/usergrid/blob/1efd1763/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
index fc80fdf..bd248a5 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
@@ -153,6 +153,7 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
         app.put("payloads", payloads);
         app.put("queued", System.currentTimeMillis());
         app.put("debug",true);
+        app.put("expire", (System.currentTimeMillis() / 1000) + 300); // add 5 minutes to current time
 
         // post notification to service manager
         Entity e = app.testRequest(ServiceAction.POST, 1,"devices",device1.getUuid(), "notifications").getEntity();

http://git-wip-us.apache.org/repos/asf/usergrid/blob/1efd1763/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
index 63869ca..38a6f2e 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
@@ -153,6 +153,7 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
         app.put("payloads", payloads);
         app.put("queued", System.currentTimeMillis());
         app.put("debug",true);
+        app.put("expire", (System.currentTimeMillis() / 1000) + 300); // add 5 minutes to current time
 
         Entity e = app.testRequest(ServiceAction.POST, 1, "devices",device1.getUuid(),"notifications").getEntity();
         app.testRequest(ServiceAction.GET, 1, "notifications", e.getUuid());


[10/16] usergrid git commit: Merge branch 'two-dot-o-dev' of https://git-wip-us.apache.org/repos/asf/usergrid into two-dot-o-dev

Posted by sn...@apache.org.
Merge branch 'two-dot-o-dev' of https://git-wip-us.apache.org/repos/asf/usergrid into two-dot-o-dev


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: c3c71c91472045789f06e525d1028061240e0613
Parents: 98e76ae f24e7e4
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Sep 11 17:11:07 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Fri Sep 11 17:11:07 2015 -0600

----------------------------------------------------------------------
 .../asyncevents/AmazonAsyncEventService.java       |  6 +++---
 stack/scripts/migrate_entity_data.py               | 17 +++++++++++++++++
 2 files changed, 20 insertions(+), 3 deletions(-)
----------------------------------------------------------------------



[07/16] usergrid git commit: Add database setup to migration script.

Posted by sn...@apache.org.
Add database setup to migration script.


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 66ba6b47702dfd13e472fdc62eb0e97af07afe00
Parents: cf6cf83
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Sep 11 12:48:57 2015 -0700
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Sep 11 12:48:57 2015 -0700

----------------------------------------------------------------------
 stack/scripts/migrate_entity_data.py | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/66ba6b47/stack/scripts/migrate_entity_data.py
----------------------------------------------------------------------
diff --git a/stack/scripts/migrate_entity_data.py b/stack/scripts/migrate_entity_data.py
index 66a9dd0..4258a71 100644
--- a/stack/scripts/migrate_entity_data.py
+++ b/stack/scripts/migrate_entity_data.py
@@ -130,6 +130,8 @@ class Migrate:
 
         try:
 
+            self.run_database_setup()
+
             # We need to check and roll the migration system to 1 if not already
             migration_system_updated = self.is_migration_system_updated()
 
@@ -220,6 +222,10 @@ class Migrate:
             self.log_metrics()
             self.logger.error('Keyboard interrupted migration. Please run again to ensure the migration finished.')
 
+    def get_database_setup_url(self):
+        url = self.endpoint + '/system/database/setup'
+        return url
+
     def get_migration_url(self):
         url = self.endpoint + '/system/migrate/run'
         return url
@@ -255,6 +261,17 @@ class Migrate:
             self.logger.error('Failed to start migration, %s', e)
             exit_on_error(str(e))
 
+    def run_database_setup(self):
+        try:
+            setupUrl = self.get_database_setup_url()
+            r = requests.put(url=setupUrl, auth=(self.admin_user, self.admin_pass))
+            if r.status_code != 200:
+                exit_on_error('Database Setup Failed')
+
+        except requests.exceptions.RequestException as e:
+            self.logger.error('Failed to run database setup, %s', e)
+            exit_on_error(str(e))
+
     def start_index_mapping_migration(self):
         try:
             migrateUrl = self.get_migration_url() + '/' + PLUGIN_INDEX_MAPPING


[04/16] usergrid git commit: fix default queue

Posted by sn...@apache.org.
fix default queue


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 1c7ab04338e89fd1a7d1ebd15918be8875f933d7
Parents: 929528a
Author: Shawn Feldman <sf...@apache.org>
Authored: Thu Sep 10 17:06:39 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Thu Sep 10 17:06:39 2015 -0600

----------------------------------------------------------------------
 .../queue/impl/QueueManagerFactoryImpl.java         | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/1c7ab043/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/QueueManagerFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/QueueManagerFactoryImpl.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/QueueManagerFactoryImpl.java
index 2f9e7b1..d0ed1ef 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/QueueManagerFactoryImpl.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/QueueManagerFactoryImpl.java
@@ -25,6 +25,9 @@ import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import org.apache.usergrid.persistence.queue.*;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * manages whether we take in an external in memory override for queues.
  */
@@ -34,14 +37,25 @@ public class QueueManagerFactoryImpl implements QueueManagerFactory {
 
     private final QueueFig queueFig;
     private final QueueManagerInternalFactory queuemanagerInternalFactory;
+    private final Map<String,QueueManager> defaultManager;
 
     @Inject
     public QueueManagerFactoryImpl(final QueueFig queueFig, final QueueManagerInternalFactory queuemanagerInternalFactory){
         this.queueFig = queueFig;
         this.queuemanagerInternalFactory = queuemanagerInternalFactory;
+        this.defaultManager = new HashMap<>(10);
     }
     @Override
     public QueueManager getQueueManager(QueueScope scope) {
-        return queueFig.overrideQueueForDefault() ? new DefaultQueueManager() : queuemanagerInternalFactory.getQueueManager(scope);
+        if(queueFig.overrideQueueForDefault()){
+            QueueManager manager = defaultManager.get(scope.getName());
+            if(manager==null){
+                manager = new DefaultQueueManager();
+                defaultManager.put(scope.getName(),manager);
+            }
+            return manager;
+        }else{
+            return queuemanagerInternalFactory.getQueueManager(scope);
+        }
     }
 }


[14/16] usergrid git commit: Fix issue with portal login button not handling failed logins properly when logging is disabled. Bump version.

Posted by sn...@apache.org.
Fix issue with portal login button not handling failed logins properly when logging is disabled.  Bump version.


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 7eb997b1c550bbd1661e223570b18f4cf2ba84d7
Parents: ca32186
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Sep 11 16:59:40 2015 -0700
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Sep 11 16:59:40 2015 -0700

----------------------------------------------------------------------
 portal/bower.json              | 2 +-
 portal/js/libs/usergrid.sdk.js | 8 +++++---
 portal/package.json            | 2 +-
 3 files changed, 7 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/7eb997b1/portal/bower.json
----------------------------------------------------------------------
diff --git a/portal/bower.json b/portal/bower.json
index 3c4784c..7ffb4ff 100644
--- a/portal/bower.json
+++ b/portal/bower.json
@@ -1,6 +1,6 @@
 {
   "name": "usergrid-portal",
-  "version": "2.0.17",
+  "version": "2.0.18",
   "ignore": [
     ".jshintrc",
     "**/*.txt",

http://git-wip-us.apache.org/repos/asf/usergrid/blob/7eb997b1/portal/js/libs/usergrid.sdk.js
----------------------------------------------------------------------
diff --git a/portal/js/libs/usergrid.sdk.js b/portal/js/libs/usergrid.sdk.js
index 795e3e2..d527ea0 100755
--- a/portal/js/libs/usergrid.sdk.js
+++ b/portal/js/libs/usergrid.sdk.js
@@ -774,8 +774,10 @@
       var user = {};
       var organizations = {};
       var applications = {};
-      if (err && self.logging) {
-        console.log('error trying to log user in');
+      if (err ) {
+        if(self.logging) {
+          console.log('error trying to log user in');
+        }
       } else {
         var options = {
           client: self,
@@ -2563,4 +2565,4 @@
     return tail.join("&");
   }
 
-})(window, sessionStorage);
\ No newline at end of file
+})(window, sessionStorage);

http://git-wip-us.apache.org/repos/asf/usergrid/blob/7eb997b1/portal/package.json
----------------------------------------------------------------------
diff --git a/portal/package.json b/portal/package.json
index d91ec7a..e36a910 100644
--- a/portal/package.json
+++ b/portal/package.json
@@ -1,6 +1,6 @@
 {
   "name": "usergrid", 
-  "version": "2.0.17",
+  "version": "2.0.18",
   "packageName": "appsvc-ui",
   "description": "full usergrid portal",
   "main": "./scripts/web-server.js",


[12/16] usergrid git commit: remove location if its not a map

Posted by sn...@apache.org.
remove location if its not a map


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 56801735c9af438b090df700c17b8ca8c22f6be9
Parents: 58f7402
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Sep 11 17:44:57 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Fri Sep 11 17:44:57 2015 -0600

----------------------------------------------------------------------
 .../corepersistence/CpEntityMapUtilsTest.java   |  5 ++-
 stack/corepersistence/model/pom.xml             |  6 ++-
 .../model/entity/MapToEntityConverter.java      | 39 +++++++++++++++-----
 3 files changed, 37 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/56801735/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java
index 6e4e9a4..325e51f 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java
@@ -38,6 +38,7 @@ import java.io.IOException;
 import java.util.*;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 
@@ -132,14 +133,14 @@ public class CpEntityMapUtilsTest {
 
         cpEntity = CpEntityMapUtils.fromMap(properties, "loc", true);
 
-        assertTrue(cpEntity.getFieldMap().get("location") instanceof EntityObjectField);
+        assertNull(cpEntity.getFieldMap().get("location"));
 
         properties = new LinkedHashMap<String, Object>();
         properties.put("location", "denver");
 
         cpEntity = CpEntityMapUtils.fromMap(properties, "loc", true);
 
-        assertTrue(cpEntity.getFieldMap().get("location") instanceof StringField);
+        assertNull(cpEntity.getFieldMap().get("location") );
     }
 
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/56801735/stack/corepersistence/model/pom.xml
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/pom.xml b/stack/corepersistence/model/pom.xml
index 142bca1..591935f 100644
--- a/stack/corepersistence/model/pom.xml
+++ b/stack/corepersistence/model/pom.xml
@@ -40,7 +40,11 @@
             <artifactId>commons-lang3</artifactId>
             <version>${commons.lang.version}</version>
         </dependency>
-
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
       <!-- the core, which includes Streaming API, shared low-level abstractions (but NOT data-binding) -->
       <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>

http://git-wip-us.apache.org/repos/asf/usergrid/blob/56801735/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
index e6744c4..dbd1b2a 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
@@ -25,15 +25,22 @@ import com.fasterxml.jackson.datatype.guava.GuavaModule;
 import org.apache.usergrid.persistence.model.collection.SchemaManager;
 import org.apache.usergrid.persistence.model.field.*;
 import org.apache.usergrid.persistence.model.field.value.Location;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.nio.ByteBuffer;
 import java.util.*;
 
 public class MapToEntityConverter{
+    public static final Logger logger = LoggerFactory.getLogger(MapToEntityConverter.class);
 
     private final JsonFactory jsonFactory = new JsonFactory();
     private final ObjectMapper objectMapper = new ObjectMapper(jsonFactory).registerModule(new GuavaModule());
 
+    static final String locationKey = "location";
+    static final String lat = "latitude";
+    static final String lon = "longitude";
+
     public  Entity fromMap( Map<String, Object> map,  boolean topLevel ) {
 
         Entity  entity = new Entity();
@@ -48,9 +55,15 @@ public class MapToEntityConverter{
             }
             Object value = map.get( fieldName );
             boolean unique = schemaManager == null ? topLevel :  topLevel && schemaManager.isPropertyUnique(entityType, fieldName);
+            //cannot store fields that aren't locations
+            if(fieldName.toLowerCase().equals(locationKey) && !(value instanceof Map)) {
+                logger.warn("can't map entity with location field");
+                continue;
+            }
 
             if ( value instanceof String ) {
-                entity.setField( new StringField( fieldName, (String)value, unique  ));
+                String stringValue =(String)value;
+                entity.setField(new StringField(fieldName, stringValue, unique));
 
             } else if ( value instanceof Boolean ) {
                 entity.setField( new BooleanField( fieldName, (Boolean)value, unique  ));
@@ -190,26 +203,28 @@ public class MapToEntityConverter{
 
         // Expect at least two fields in a Location object and must have lat lon
         if (m.size() >= 2 && (
-            (m.containsKey("latitude")  && m.containsKey("longitude") )
+            (m.containsKey(lat)  && m.containsKey(lon) )
                 || (m.containsKey("lat") && m.containsKey("lon") )
         )) {
 
-            Double lat, lon;
+            Double latVal, lonVal;
 
             // check the properties to make sure they are set and are doubles
-            if (m.containsKey("latitude")  && m.containsKey("longitude")) {
+            if (m.containsKey(lat)  && m.containsKey(lon)) {
                 try {
-                    lat = Double.parseDouble(m.get("latitude").toString());
-                    lon = Double.parseDouble(m.get("longitude").toString());
+                    latVal = Double.parseDouble(m.get(lat).toString());
+                    lonVal = Double.parseDouble(m.get(lon).toString());
 
                 } catch (NumberFormatException ignored) {
                     throw new IllegalArgumentException(
                         "Latitude and longitude must be doubles (e.g. 32.1234).");
                 }
             } else if (m.containsKey("lat") && m.containsKey("lon")) {
+                logger.warn("Entity contains latitude and longitude in old format location{lat,long}"
+                );
                 try {
-                    lat = Double.parseDouble(m.get("lat").toString());
-                    lon = Double.parseDouble(m.get("lon").toString());
+                    latVal = Double.parseDouble(m.get("lat").toString());
+                    lonVal = Double.parseDouble(m.get("lon").toString());
                 } catch (NumberFormatException ignored) {
                     throw new IllegalArgumentException(""
                         + "Latitude and longitude must be doubles (e.g. 32.1234).");
@@ -219,9 +234,13 @@ public class MapToEntityConverter{
                     + "latitude and longitude, or lat and lon");
             }
 
-            entity.setField(new LocationField(fieldName, new Location(lat, lon)));
+            entity.setField(new LocationField(fieldName, new Location(latVal, lonVal)));
         } else {
-            entity.setField(new EntityObjectField(fieldName,fromMap( value, false))); // recursion
+            //can't process non enties
+            logger.warn(
+                "entity cannot process location values that don't have valid location{latitude,longitude} values"
+            );
+           // entity.setField(new EntityObjectField(fieldName,fromMap( value, false))); // recursion
         }
     }
 }


[11/16] usergrid git commit: removing noop exceptions, removing failures due to bad location fields

Posted by sn...@apache.org.
removing noop exceptions, removing failures due to bad location fields


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 58f7402db5686ada9174b301ebeebb09a55ceb29
Parents: c3c71c9
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Sep 11 17:17:02 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Fri Sep 11 17:17:02 2015 -0600

----------------------------------------------------------------------
 .../corepersistence/CpEntityMapUtilsTest.java   | 51 ++++++++++++++++++--
 1 file changed, 47 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/58f7402d/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java
index 5dd8f3a..6e4e9a4 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/CpEntityMapUtilsTest.java
@@ -21,20 +21,21 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import junit.framework.Assert;
 import org.apache.usergrid.corepersistence.util.CpEntityMapUtils;
 import org.apache.usergrid.persistence.model.entity.Entity;
 import org.apache.usergrid.persistence.model.entity.SimpleId;
+import org.apache.usergrid.persistence.model.field.EntityObjectField;
 import org.apache.usergrid.persistence.model.field.ListField;
+import org.apache.usergrid.persistence.model.field.LocationField;
+import org.apache.usergrid.persistence.model.field.StringField;
 import org.apache.usergrid.persistence.model.field.value.EntityObject;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -100,6 +101,48 @@ public class CpEntityMapUtilsTest {
     }
 
 
+    @Test
+    public void testLocation() {
+
+        /*** This tests example property input of
+
+         {
+         "nestedarray" : [ [ "fred" ] ]
+         }
+
+         ****/
+        Map<String, Object> locMap = new HashMap<>();
+        locMap.put("latitude", 123.1);
+        locMap.put("longitude", 123.1);
+
+        Map<String, Object> properties = new LinkedHashMap<String, Object>();
+        properties.put("location", locMap);
+
+        Entity cpEntity = CpEntityMapUtils.fromMap(properties, "loc", true);
+
+        assertTrue(cpEntity.getFieldMap().get("location") instanceof LocationField);
+
+
+        locMap = new HashMap<>();
+        locMap.put("latitude", 123.1);
+        locMap.put("lgnosoos", 123.1);
+
+        properties = new LinkedHashMap<String, Object>();
+        properties.put("location", locMap);
+
+        cpEntity = CpEntityMapUtils.fromMap(properties, "loc", true);
+
+        assertTrue(cpEntity.getFieldMap().get("location") instanceof EntityObjectField);
+
+        properties = new LinkedHashMap<String, Object>();
+        properties.put("location", "denver");
+
+        cpEntity = CpEntityMapUtils.fromMap(properties, "loc", true);
+
+        assertTrue(cpEntity.getFieldMap().get("location") instanceof StringField);
+    }
+
+
 
     @Test
     public void testSerialization() throws JsonProcessingException, IOException {


[09/16] usergrid git commit: removing noop exceptions, removing failures due to bad location fields

Posted by sn...@apache.org.
removing noop exceptions, removing failures due to bad location fields


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 98e76ae897484fe8eae2cd0e215b365d23c4916a
Parents: cf6cf83
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Sep 11 17:10:59 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Fri Sep 11 17:10:59 2015 -0600

----------------------------------------------------------------------
 .../model/entity/MapToEntityConverter.java      | 39 ++++++++------------
 .../exceptions/AbstractExceptionMapper.java     | 13 +++++--
 2 files changed, 25 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/98e76ae8/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
index 09cf1f2..e6744c4 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
@@ -163,14 +163,11 @@ public class MapToEntityConverter{
     }
 
 
-    private  void processMapValue(
-            Object value, String fieldName, Entity entity) {
+    private  void processMapValue( Object value, String fieldName, Entity entity) {
 
         // is the map really a location element?
         if ("location" .equals(fieldName.toString().toLowerCase()) ) {
             processLocationField((Map<String, Object>) value, fieldName, entity);
-
-
         } else {
             // not a location element, process it as map
             entity.setField(new EntityObjectField(fieldName,
@@ -187,48 +184,44 @@ public class MapToEntityConverter{
         Map<String, Object> m = new HashMap<String, Object>();
 
         // Tests expect us to treat "Longitude" the same as "longitude"
-        for ( String key : origMap.keySet() ) {
-            m.put( key.toLowerCase(), origMap.get(key) );
+        for (String key : origMap.keySet()) {
+            m.put(key.toLowerCase(), origMap.get(key));
         }
 
-        // Expect at least two fields in a Location object
-        if (m.size() >= 2) {
+        // Expect at least two fields in a Location object and must have lat lon
+        if (m.size() >= 2 && (
+            (m.containsKey("latitude")  && m.containsKey("longitude") )
+                || (m.containsKey("lat") && m.containsKey("lon") )
+        )) {
 
-            Double lat = null;
-            Double lon = null;
+            Double lat, lon;
 
             // check the properties to make sure they are set and are doubles
-            if (m.get("latitude") != null && m.get("longitude") != null) {
+            if (m.containsKey("latitude")  && m.containsKey("longitude")) {
                 try {
                     lat = Double.parseDouble(m.get("latitude").toString());
                     lon = Double.parseDouble(m.get("longitude").toString());
 
                 } catch (NumberFormatException ignored) {
                     throw new IllegalArgumentException(
-                            "Latitude and longitude must be doubles (e.g. 32.1234).");
+                        "Latitude and longitude must be doubles (e.g. 32.1234).");
                 }
-            } else if (m.get("lat") != null && m.get("lon") != null) {
+            } else if (m.containsKey("lat") && m.containsKey("lon")) {
                 try {
                     lat = Double.parseDouble(m.get("lat").toString());
                     lon = Double.parseDouble(m.get("lon").toString());
                 } catch (NumberFormatException ignored) {
                     throw new IllegalArgumentException(""
-                            + "Latitude and longitude must be doubles (e.g. 32.1234).");
+                        + "Latitude and longitude must be doubles (e.g. 32.1234).");
                 }
             } else {
                 throw new IllegalArgumentException("Location properties require two fields - "
-                        + "latitude and longitude, or lat and lon");
+                    + "latitude and longitude, or lat and lon");
             }
 
-            if (lat != null && lon != null) {
-                entity.setField( new LocationField(fieldName, new Location(lat, lon)));
-            } else {
-                throw new IllegalArgumentException( "Unable to parse location field properties "
-                        + "- make sure they conform - lat and lon, and should be doubles.");
-            }
+            entity.setField(new LocationField(fieldName, new Location(lat, lon)));
         } else {
-            throw new IllegalArgumentException("Location properties requires two fields - "
-                    + "latitude and longitude, or lat and lon.");
+            entity.setField(new EntityObjectField(fieldName,fromMap( value, false))); // recursion
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/98e76ae8/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java
index 77760e0..1dbffbd 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java
@@ -49,7 +49,7 @@ public abstract class AbstractExceptionMapper<E extends java.lang.Throwable> imp
 
 
     public boolean isJSONP() {
-        return isJavascript( hh.getAcceptableMediaTypes() );
+        return isJavascript(hh.getAcceptableMediaTypes());
     }
 
 
@@ -71,13 +71,18 @@ public abstract class AbstractExceptionMapper<E extends java.lang.Throwable> imp
             // only log real errors as errors
             logger.error( e.getClass().getCanonicalName() + " Server Error (" + status + ")", e );
 
-        } else if ( logger.isDebugEnabled() ) {
-            logger.debug( e.getClass().getCanonicalName() + " Server Error (" + status + ")", e );
+        } else {
+            if (logger.isDebugEnabled()) {
+                logger.debug(e.getClass().getCanonicalName() + " Server Error (" + status + ")", e);
+            }
+            switch (status){
+                case 200 : logger.info("Uncaught Exception", e); break;
+                default: logger.error("Uncaught Exception", e);
+            }
         }
 
         ApiResponse response = new ApiResponse();
 
-        logger.error("Uncaught Exception", e);
 
         AuthErrorInfo authError = AuthErrorInfo.getForException( e );
 


[08/16] usergrid git commit: Updating EdgeDeleteEvent

Posted by sn...@apache.org.
Updating EdgeDeleteEvent


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: f24e7e40cbd4f55154f4585d795a793d870c528f
Parents: 66ba6b4
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Sep 11 13:35:51 2015 -0700
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Sep 11 13:35:51 2015 -0700

----------------------------------------------------------------------
 .../corepersistence/asyncevents/AmazonAsyncEventService.java   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/f24e7e40/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AmazonAsyncEventService.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AmazonAsyncEventService.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AmazonAsyncEventService.java
index 71834c3..fcb93c9 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AmazonAsyncEventService.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AmazonAsyncEventService.java
@@ -354,10 +354,10 @@ public class AmazonAsyncEventService implements AsyncEventService {
         Preconditions.checkArgument(event instanceof EdgeDeleteEvent, String.format("Event Type for handleEdgeDelete must be EDGE_DELETE, got %s", event.getClass()));
 
 
-        final EdgeIndexEvent edgeIndexEvent = ( EdgeIndexEvent ) event;
+        final EdgeDeleteEvent edgeDeleteEvent = ( EdgeDeleteEvent ) event;
 
-        final ApplicationScope applicationScope = edgeIndexEvent.getApplicationScope();
-        final Edge edge = edgeIndexEvent.getEdge();
+        final ApplicationScope applicationScope = edgeDeleteEvent.getApplicationScope();
+        final Edge edge = edgeDeleteEvent.getEdge();
 
         if (logger.isDebugEnabled()) logger.debug("Deleting in app scope {} with edge {}", applicationScope, edge);
 


[15/16] usergrid git commit: Add note that notification expiration timestamp is specified in seconds.

Posted by sn...@apache.org.
Add note that notification expiration timestamp is specified in seconds.


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 2faa805672721bc2d56eaa3b9e2d28fb7f1a6bec
Parents: 7eb997b
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Sep 14 09:31:11 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Sep 14 09:31:11 2015 -0400

----------------------------------------------------------------------
 docs/push-notifications/creating-and-managing-notifications.md | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/2faa8056/docs/push-notifications/creating-and-managing-notifications.md
----------------------------------------------------------------------
diff --git a/docs/push-notifications/creating-and-managing-notifications.md b/docs/push-notifications/creating-and-managing-notifications.md
index 72a2021..501dbee 100644
--- a/docs/push-notifications/creating-and-managing-notifications.md
+++ b/docs/push-notifications/creating-and-managing-notifications.md
@@ -189,6 +189,8 @@ Please note that if the expire property is not set and Apple APNS or Google GCM
 Request body syntax
 
     '{"expire":<unix_timestamp>,"payloads":{"<notifier_name>":"<message>"}}'
+    
+NOTE: The timestamp is a UNIX timestamp and is specified in seconds.
 
 
 ## Getting notifications


[16/16] usergrid git commit: Merge branch 'two-dot-o-dev' into usergrid-103-upgrade-jersey

Posted by sn...@apache.org.
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-103-upgrade-jersey
Commit: d4e8be8b09f914842407a35428617cd2f06db092
Parents: 2888a7c 2faa805
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Sep 14 13:54:18 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
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;


[13/16] usergrid git commit: Change 'expire' property for notifications to support milliseconds, matching the 'deliver' property.

Posted by sn...@apache.org.
Change 'expire' property for notifications to support milliseconds, matching the 'deliver' property.


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: ca32186e9117fd51c56c4320cd816c1be381b79b
Parents: 5680173
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Sep 11 16:50:16 2015 -0700
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Sep 11 16:50:16 2015 -0700

----------------------------------------------------------------------
 .../apache/usergrid/persistence/entities/Notification.java    | 7 +++----
 .../usergrid/services/notifications/gcm/GCMAdapter.java       | 2 +-
 .../services/notifications/apns/NotificationsServiceIT.java   | 2 +-
 .../services/notifications/gcm/NotificationsServiceIT.java    | 2 +-
 4 files changed, 6 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/ca32186e/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java
index d1101a5..362201a 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notification.java
@@ -147,7 +147,7 @@ public class Notification extends TypedEntity {
 
     @JsonIgnore
     public boolean isExpired() {
-        return expire != null && expire > System.currentTimeMillis();
+        return expire != null && expire < System.currentTimeMillis();
     }
 
     @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@@ -232,13 +232,12 @@ public class Notification extends TypedEntity {
 
     @JsonIgnore
     public long getExpireTimeMillis() {
-        long expireAtMillis = getExpire() != null ? getExpire() * 1000 : 0;
-        return expireAtMillis;
+        return getExpire() != null ? getExpire() : 0;
     }
 
     @JsonIgnore
     public long getExpireTTLSeconds() {
-        Long ttlSeconds = (getExpireTimeMillis() - new Date().getTime()) / 1000;
+        long ttlSeconds = (getExpireTimeMillis() - System.currentTimeMillis()) / 1000;
         return ttlSeconds > 0 ? ttlSeconds : 0;
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/ca32186e/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
index df1b580..bdd7737 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
@@ -71,7 +71,7 @@ public class GCMAdapter implements ProviderAdapter {
         final String expiresKey = "time_to_live";
         if(!map.containsKey(expiresKey) && notification.getExpire() != null){
             // ttl provided to GCM is in seconds.  calculate the difference from now
-            Long ttlSeconds = notification.getExpireTTLSeconds();
+            long ttlSeconds = notification.getExpireTTLSeconds();
             // max ttl for gcm is 4 weeks - https://developers.google.com/cloud-messaging/http-server-ref
             ttlSeconds = ttlSeconds <= 2419200 ? ttlSeconds : 2419200;
             map.put(expiresKey, ttlSeconds);

http://git-wip-us.apache.org/repos/asf/usergrid/blob/ca32186e/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
index bd248a5..9c1bcbe 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
@@ -153,7 +153,7 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
         app.put("payloads", payloads);
         app.put("queued", System.currentTimeMillis());
         app.put("debug",true);
-        app.put("expire", (System.currentTimeMillis() / 1000) + 300); // add 5 minutes to current time
+        app.put("expire", System.currentTimeMillis() + 300000); // add 5 minutes to current time
 
         // post notification to service manager
         Entity e = app.testRequest(ServiceAction.POST, 1,"devices",device1.getUuid(), "notifications").getEntity();

http://git-wip-us.apache.org/repos/asf/usergrid/blob/ca32186e/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
index 38a6f2e..96653a5 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
@@ -153,7 +153,7 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
         app.put("payloads", payloads);
         app.put("queued", System.currentTimeMillis());
         app.put("debug",true);
-        app.put("expire", (System.currentTimeMillis() / 1000) + 300); // add 5 minutes to current time
+        app.put("expire", System.currentTimeMillis() + 300000); // add 5 minutes to current time
 
         Entity e = app.testRequest(ServiceAction.POST, 1, "devices",device1.getUuid(),"notifications").getEntity();
         app.testRequest(ServiceAction.GET, 1, "notifications", e.getUuid());


[02/16] usergrid git commit: Merge commit 'refs/pull/380/head' of github.com:apache/usergrid into two-dot-o-dev. This closes #380.

Posted by sn...@apache.org.
Merge commit 'refs/pull/380/head' of github.com:apache/usergrid into two-dot-o-dev. This closes #380.


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: 3bd059c66679ee85cd1aab127eb441ef14120977
Parents: 929528a ac1db7e
Author: Michael Russo <mi...@gmail.com>
Authored: Thu Sep 10 14:50:23 2015 -0700
Committer: Michael Russo <mi...@gmail.com>
Committed: Thu Sep 10 15:13:42 2015 -0700

----------------------------------------------------------------------
 .../organizations/OrganizationResource.java     |  7 ++++--
 .../security/SecuredResourceFilterFactory.java  |  7 +++---
 .../shiro/filters/BasicAuthSecurityFilter.java  |  5 ++--
 .../apache/usergrid/security/shiro/Realm.java   | 24 ++++++++++++++++++++
 4 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------



[05/16] usergrid git commit: Merge branch 'two-dot-o-dev' of https://git-wip-us.apache.org/repos/asf/usergrid into two-dot-o-dev

Posted by sn...@apache.org.
Merge branch 'two-dot-o-dev' of https://git-wip-us.apache.org/repos/asf/usergrid into two-dot-o-dev


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

Branch: refs/heads/usergrid-103-upgrade-jersey
Commit: a7ae791501ca67ea511d0cb1a0a3f29639c97502
Parents: 1c7ab04 1efd176
Author: Shawn Feldman <sf...@apache.org>
Authored: Thu Sep 10 17:07:05 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Thu Sep 10 17:07:05 2015 -0600

----------------------------------------------------------------------
 .../persistence/entities/Notification.java      | 12 ++++++----
 .../organizations/OrganizationResource.java     |  7 ++++--
 .../security/SecuredResourceFilterFactory.java  |  7 +++---
 .../shiro/filters/BasicAuthSecurityFilter.java  |  5 ++--
 .../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 +
 10 files changed, 65 insertions(+), 22 deletions(-)
----------------------------------------------------------------------