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