Author: [email protected]
Date: Wed Dec  7 11:46:14 2011
New Revision: 1823

Log:
Ported over the support for access rights to gadget categories from the .com 
codebase in the sandbox.

Modified:
   trunk/amdatu-opensocial/opensocial-gadgetmanagement/pom.xml
   
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/GadgetCategory.java
   
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/osgi/Activator.java
   
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/BaseRESTServiceImpl.java
   
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
   
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/WidgetRESTServiceImpl.java

Modified: trunk/amdatu-opensocial/opensocial-gadgetmanagement/pom.xml
==============================================================================
--- trunk/amdatu-opensocial/opensocial-gadgetmanagement/pom.xml (original)
+++ trunk/amdatu-opensocial/opensocial-gadgetmanagement/pom.xml Wed Dec  7 
11:46:14 2011
@@ -66,6 +66,19 @@
       <artifactId>org.amdatu.libraries.utilities</artifactId>
       <scope>compile</scope>
     </dependency>
+    
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+      <scope>compile</scope>
+    </dependency>
+      
+    <dependency>
+         <groupId>org.amdatu.auth</groupId>
+         <artifactId>org.amdatu.auth.tokenprovider</artifactId>
+         <version>0.2.2-SNAPSHOT</version>
+      <scope>compile</scope>
+    </dependency>
 
     <dependency>
       <groupId>org.json</groupId>

Modified: 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/GadgetCategory.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/GadgetCategory.java
        (original)
+++ 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/GadgetCategory.java
        Wed Dec  7 11:46:14 2011
@@ -29,7 +29,19 @@
     /**
      * Default category for Amdatu platform gadgets.
      */
-    public static final GadgetCategory AMDATU_PLATFORM = new 
GadgetCategory("amdatu_platform", "Amdatu Platform");
+    public static final GadgetCategory AMDATU_PLATFORM = new 
GadgetCategory("amdatu_platform", "Amdatu Platform");
+    
+    /** Role prefix for the authorization for using specific gadget 
categories. */
+    public static final String USE_GADGET_CATEGORY_GROUP_PREFIX = 
"UseGadgetCategory/";
+
+    /** Role for using the Amdatu platform gadgets. */
+    public static final String USE_GADGET_CATEGORY_GROUP_AMDATU_PLATFORM = 
USE_GADGET_CATEGORY_GROUP_PREFIX + AMDATU_PLATFORM.getId();
+    
+    /** Role for using third party gadgets. */
+    public static final String USE_GADGET_CATEGORY_GROUP_THIRD_PARTY = 
USE_GADGET_CATEGORY_GROUP_PREFIX + THIRDPARTY.getId();
+
+    /** Catch-all role that applies to all gadgets. */
+    public static final String USE_GADGET_CATEGORY_GROUP_ALL = 
USE_GADGET_CATEGORY_GROUP_PREFIX + "All";
 
     // Instance variables
     private String m_id;

Modified: 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/osgi/Activator.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/osgi/Activator.java
        (original)
+++ 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/osgi/Activator.java
        Wed Dec  7 11:46:14 2011
@@ -18,9 +18,11 @@
 import java.util.Dictionary;
 import java.util.Hashtable;
 
+import org.amdatu.auth.tokenprovider.TokenProvider;
 import org.amdatu.core.tenant.Tenant;
 import org.amdatu.libraries.utilities.osgi.ServiceDependentActivator;
 import org.amdatu.opensocial.gadgetmanagement.GadgetManagement;
+import org.amdatu.opensocial.gadgetmanagement.OpenSocialContainer;
 import 
org.amdatu.opensocial.gadgetmanagement.service.GadgetManagementRESTServiceImpl;
 import 
org.amdatu.opensocial.gadgetmanagement.service.GadgetManagementServiceImpl;
 import org.amdatu.opensocial.gadgetmanagement.service.InternalGadgetStore;
@@ -35,6 +37,7 @@
 import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.log.LogService;
+import org.osgi.service.useradmin.UserAdmin;
 
 /**
  * This is the activator for the gadget management bundle.
@@ -72,22 +75,25 @@
                 createAdapterService(Tenant.class, null)
                     .setInterface(new String[] 
{GadgetManagement.class.getName(), ResourceProvider.class.getName()}, 
properties)
                     .setImplementation(GadgetManagementServiceImpl.class)
-                    
.add(createServiceDependency().setService(LogService.class).setRequired(true))
-                    
.add(createServiceDependency().setService(HttpContextManagerService.class).setRequired(true)));
+                    
.add(createServiceDependency().setService(HttpContextManagerService.class).setRequired(true))
+                    
.add(createServiceDependency().setService(TokenProvider.class).setRequired(true))
+                    
.add(createServiceDependency().setService(UserAdmin.class).setRequired(true))
+                    
.add(createServiceDependency().setService(LogService.class).setRequired(false))
+                    );
         
         // Create and register the REST gadget management service
-        manager.add(
-                createAdapterService(Tenant.class, null)
-                    .setInterface(new String[] {RESTService.class.getName()}, 
null)
-                    .setImplementation(GadgetManagementRESTServiceImpl.class)
-                    
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
   
+        manager.add(createAdapterService(Tenant.class, null)
+               .setInterface(new String[] {RESTService.class.getName()}, null)
+               .setImplementation(GadgetManagementRESTServiceImpl.class)
+               
.add(createServiceDependency().setService(LogService.class).setRequired(true))
+        );
         
         // Create and register the REST widget service
-        manager.add(
-                createAdapterService(Tenant.class, null)
-                    .setInterface(new String[] {RESTService.class.getName()}, 
null)
-                    .setImplementation(WidgetRESTServiceImpl.class)
-                    
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
  
+        manager.add(createAdapterService(Tenant.class, null)
+            .setInterface(new String[] {RESTService.class.getName()}, null)
+            .setImplementation(WidgetRESTServiceImpl.class)
+            
.add(createServiceDependency().setService(LogService.class).setRequired(false))
+        );
         
         // Create and register the internal gadget store
         manager.add(

Modified: 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/BaseRESTServiceImpl.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/BaseRESTServiceImpl.java
   (original)
+++ 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/BaseRESTServiceImpl.java
   Wed Dec  7 11:46:14 2011
@@ -30,6 +30,7 @@
 import org.amdatu.auth.tokenprovider.TokenProviderException;
 import org.amdatu.core.tenant.Tenant;
 import org.amdatu.libraries.utilities.ConversionUtil;
+import org.amdatu.opensocial.gadgetmanagement.GadgetCategory;
 import org.amdatu.opensocial.gadgetmanagement.GadgetDefinition;
 import org.amdatu.opensocial.gadgetmanagement.GadgetManagement;
 import org.amdatu.opensocial.gadgetmanagement.OpenSocialContainer;
@@ -41,6 +42,7 @@
 import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.ServiceDependency;
 import org.osgi.service.log.LogService;
+import org.osgi.service.useradmin.Authorization;
 import org.osgi.service.useradmin.Role;
 import org.osgi.service.useradmin.User;
 import org.osgi.service.useradmin.UserAdmin;
@@ -276,4 +278,46 @@
             return defaultValue;
         }
     }
+
+       protected boolean canSeeGadgetCategory(User user, GadgetCategory 
category) {
+           if (user == null) {
+               return false;
+           }
+           Authorization authorization = m_userAdmin.getAuthorization(user);
+           
+           if 
(authorization.hasRole(GadgetCategory.USE_GADGET_CATEGORY_GROUP_ALL) && 
!category.equals(GadgetCategory.AMDATU_PLATFORM)) {
+               return true;
+           }
+           
+           return 
authorization.hasRole(GadgetCategory.USE_GADGET_CATEGORY_GROUP_PREFIX + 
category.getId());
+       }
+
+       protected User getUserFromRequest(HttpServletRequest request) {
+           String username = getUserNameFromRequest(request);
+           if (username == null) {
+               return null;
+           }
+           else {
+               return (User) m_userAdmin.getRole(username);
+           }
+       }
+
+       String getUserNameFromRequest(HttpServletRequest request) {
+           String token = m_tokenProvider.getTokenFromRequest(request);
+           if (token != null) {
+               try {
+                   Map<String, String> attributes = 
m_tokenProvider.verifyToken(token);
+                   if (attributes.containsKey(TokenProvider.USERNAME)) {
+                       return attributes.get(TokenProvider.USERNAME);
+                   }
+               }
+               catch (TokenProviderException e) {
+                   // Ignore invalid tokens
+               }
+               catch (InvalidTokenException e) {
+                   // Ignore invalid tokens
+               }
+           }
+           return null;
+       }
 }

Modified: 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
       (original)
+++ 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
       Wed Dec  7 11:46:14 2011
@@ -42,6 +42,7 @@
 
 @Path("gadgetstore")
 public class GadgetManagementRESTServiceImpl extends BaseRESTServiceImpl {
+       
     public void start() {
         getLogService().log(LogService.LOG_DEBUG, "Gadget Management REST 
service started.");
     }
@@ -70,13 +71,15 @@
         Categories catBeans = new Categories();
         try {
             for (GadgetCategory category : 
getGadgetManagement().getCategories()) {
-                Category catBean = new Category();
-                catBean.setAddAccessGranted(isAuthorized(request));
-                catBean.setId(category.getId());
-                catBean.setTitle(category.getName());
-                catBean.setAmount(category.getGadgetCount());
-                catBean.setUrl(request.getContextPath() + 
"/rest/gadgetstore/gadgets/all?category=" + category.getId());
-                catBeans.addCategory(catBean);
+               if (canSeeGadgetCategory(getUserFromRequest(request), 
category)) {
+                       Category catBean = new Category();
+                       catBean.setAddAccessGranted(isAuthorized(request));
+                       catBean.setId(category.getId());
+                       catBean.setTitle(category.getName());
+                       catBean.setAmount(category.getGadgetCount());
+                       catBean.setUrl(request.getContextPath() + 
"/rest/gadgetstore/gadgets/all?category=" + category.getId());
+                       catBeans.addCategory(catBean);
+               }
             }
         }
         catch (Exception e) {
@@ -86,7 +89,7 @@
         return Response.ok(catBeans, 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
             .build();
     }
-
+    
     /**
      * Returns gadgets available in the gadget store. URL to this resource:
      * /rest/gadgetstore/gadgets/all

Modified: 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/WidgetRESTServiceImpl.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/WidgetRESTServiceImpl.java
 (original)
+++ 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/WidgetRESTServiceImpl.java
 Wed Dec  7 11:46:14 2011
@@ -36,8 +36,6 @@
 
 @Path("widgets")
 public class WidgetRESTServiceImpl extends BaseRESTServiceImpl {
-
-
     /**
      * Returns widgets for the current user. URL to this resource:
      * /rest/widgets/mine
@@ -56,12 +54,12 @@
                 widgets = getGadgetManagement().getWidgets(user);
                 if (widgets == null) {
                     // Assign the default widgets
-                    getGadgetManagement().setWidgets(user, 
getDefaultWidgets(request));
+                    getGadgetManagement().setWidgets(user, 
getDefaultWidgets(user, request));
                 }
             }
 
             if (widgets == null) {
-                widgets = getDefaultWidgets(request);
+                widgets = getDefaultWidgets(user, request);
             }
 
             // For now return all widgets in the first column
@@ -118,7 +116,7 @@
         return Response.ok(widgetsBean, 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL).build();
     }
 
-    private Map<String, Map<String, String>> getDefaultWidgets(final 
HttpServletRequest request) {
+    private Map<String, Map<String, String>> getDefaultWidgets(User user, 
final HttpServletRequest request) {
         // No widgets are associated with this user, by default we assign the 
default gadgets (duh)
         GadgetDefinition[] defaultGadgets = 
getGadgetManagement().getDefaultGadgets();
 
@@ -126,10 +124,12 @@
         // to absolute URLs
         Map<String, Map<String, String>> widgets = new HashMap<String, 
Map<String, String>>();
         for (int i = 0; i < defaultGadgets.length; i++) {
-            Map<String, String> gadget = new HashMap<String, String>();
-            gadget.put("id", Integer.toString(i+1));
-            gadget.put("url", defaultGadgets[i].getUrl());
-            widgets.put(Integer.toString(i), gadget);
+               if (canSeeGadgetCategory(user, 
defaultGadgets[i].getCategory())) {
+                   Map<String, String> gadget = new HashMap<String, String>();
+                   gadget.put("id", Integer.toString(i+1));
+                   gadget.put("url", defaultGadgets[i].getUrl());
+                   widgets.put(Integer.toString(i), gadget);
+               }
         }
         return widgets;
     }
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to