Author: [email protected]
Date: Tue Nov 22 16:27:22 2011
New Revision: 1748

Log:


Removed:
   
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/TenantAccountService.java
   
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/service/TenantAccountServiceImpl.java
Modified:
   sandbox/ivol/amdatu-gadget-container/gadget-container-release/pom.xml
   
sandbox/ivol/amdatu-gadget-container/gadget-container-release/src/main/resources/config/org.amdatu.gadgetcontainer.mail.service.cfg
   
sandbox/ivol/amdatu-gadget-container/mail-service/src/main/java/org/amdatu/gadgetcontainer/email/service/EMailServiceImpl.java
   sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/pom.xml
   
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/osgi/Activator.java
   
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/service/TenantRESTServiceImpl.java
   
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/jsp/TenantGadget.jsp
   
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/css/tenant.css
   
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/js/tenant.js
   
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/js/util.js

Modified: sandbox/ivol/amdatu-gadget-container/gadget-container-release/pom.xml
==============================================================================
--- sandbox/ivol/amdatu-gadget-container/gadget-container-release/pom.xml       
(original)
+++ sandbox/ivol/amdatu-gadget-container/gadget-container-release/pom.xml       
Tue Nov 22 16:27:22 2011
@@ -347,6 +347,11 @@
       <artifactId>org.amdatu.gadgetcontainer.tenant.service</artifactId>
       <scope>compile</scope>
     </dependency>
+    <dependency>
+      <groupId>org.amdatu.gadgetcontainer</groupId>
+      <artifactId>org.amdatu.gadgetcontainer.mail.service</artifactId>
+      <scope>compile</scope>
+    </dependency>
   </dependencies>
 
   <build>

Modified: 
sandbox/ivol/amdatu-gadget-container/gadget-container-release/src/main/resources/config/org.amdatu.gadgetcontainer.mail.service.cfg
==============================================================================
--- 
sandbox/ivol/amdatu-gadget-container/gadget-container-release/src/main/resources/config/org.amdatu.gadgetcontainer.mail.service.cfg
 (original)
+++ 
sandbox/ivol/amdatu-gadget-container/gadget-container-release/src/main/resources/config/org.amdatu.gadgetcontainer.mail.service.cfg
 Tue Nov 22 16:27:22 2011
@@ -1,17 +1,17 @@
 # The SMTP server
-smtp.server=smtp.gx.nl
+mail.smtp.host=smtp.gx.nl
 
-# The SMTP server port
-smtp.port=21
+# The SMTP server port (optional)
+mail.smtp.port=
 
-# Authorization mechanism of the SMTP server
-smtp.auth=
+# Authorization mechanism of the SMTP server (optional)
+mail.smtp.auth=
 
-# Username required to send emails
-smtp.username=
+# Username required to send emails (optional)
+mail.smtp.username=
 
-# Password of that user
-smtp.password=
+# Password of that user (optional)
+mail.smtp.password=
 
 # The email address on who's behalf the mail is send
 [email protected]
\ No newline at end of file

Modified: 
sandbox/ivol/amdatu-gadget-container/mail-service/src/main/java/org/amdatu/gadgetcontainer/email/service/EMailServiceImpl.java
==============================================================================
--- 
sandbox/ivol/amdatu-gadget-container/mail-service/src/main/java/org/amdatu/gadgetcontainer/email/service/EMailServiceImpl.java
      (original)
+++ 
sandbox/ivol/amdatu-gadget-container/mail-service/src/main/java/org/amdatu/gadgetcontainer/email/service/EMailServiceImpl.java
      Tue Nov 22 16:27:22 2011
@@ -42,6 +42,7 @@
     private final static String AUTH = "mail.smtp.auth";
     private final static String USERNAME = "mail.smtp.username";
     private final static String PASSWORD = "mail.smtp.password";
+    private final static String FROM = "from.address";
     
     // Injected service dependencies
     private volatile LogService m_logService;
@@ -68,7 +69,7 @@
             m_username = properties.get(USERNAME).toString();
             m_password = properties.get(PASSWORD).toString();
             
-            m_fromAddress = properties.get("from.address").toString();
+            m_fromAddress = properties.get(FROM).toString();
         }
     }
 

Modified: sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/pom.xml
==============================================================================
--- sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/pom.xml       
(original)
+++ sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/pom.xml       
Tue Nov 22 16:27:22 2011
@@ -86,6 +86,10 @@
       <type>bundle</type>
     </dependency>
     <dependency>
+      <groupId>org.amdatu.auth</groupId>
+      <artifactId>org.amdatu.auth.tokenprovider</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.json</groupId>
       <artifactId>json</artifactId>
       <version>20090211</version>
@@ -121,19 +125,11 @@
             <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
             
<Embed-Dependency>*;scope=compile;artifactId=json|mail|org.amdatu.libraries.utilities|commons-codec</Embed-Dependency>
             <Embed-Transitive>false</Embed-Transitive>
-            <Import-Package>*;resolution:=optional</Import-Package>
-
-              <!--
+            <Import-Package>
               !sun.security.util,
-              !javax.microedition.io,
-              !org.apache.coyote.*,
-              !org.apache.tomcat.*,
-              !org.apache.tools.ant.*,
-              !org.apache.xalan.*,
-              !org.apache.xml.utils,
-              !org.apache.xpath.*,
+              org.amdatu.opensocial.tenant.gadget,
               *
-              -->
+            </Import-Package>
           </instructions>
         </configuration>
       </plugin>

Modified: 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/osgi/Activator.java
==============================================================================
--- 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/osgi/Activator.java
 (original)
+++ 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/osgi/Activator.java
 Tue Nov 22 16:27:22 2011
@@ -22,9 +22,7 @@
 import org.amdatu.gadgetcontainer.email.EMailService;
 import org.amdatu.libraries.utilities.osgi.ServiceDependentActivator;
 import org.amdatu.opensocial.gadgetmanagement.GadgetDefinitionProvider;
-import org.amdatu.opensocial.tenant.gadget.TenantAccountService;
 import org.amdatu.opensocial.tenant.gadget.TenantListener;
-import org.amdatu.opensocial.tenant.gadget.service.TenantAccountServiceImpl;
 import org.amdatu.opensocial.tenant.gadget.service.TenantConfigDAO;
 import org.amdatu.opensocial.tenant.gadget.service.TenantConfigDAOImpl;
 import org.amdatu.opensocial.tenant.gadget.service.TenantGadgetDefinition;
@@ -98,13 +96,6 @@
                 .setImplementation(TenantConfigDAOImpl.class)
                 
.add(createServiceDependency().setService(ConfigurationAdmin.class).setRequired(true)));
 
-        // Create and register the tenant account service
-        manager.add(
-            createComponent()
-                .setInterface(new String[] { 
TenantAccountService.class.getName() }, null)
-                .setImplementation(TenantAccountServiceImpl.class)
-                
.add(createServiceDependency().setService(EMailService.class).setRequired(true)));
-
         // Create and register the tenant listener service
         manager.add(
             createComponent()

Modified: 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/service/TenantRESTServiceImpl.java
==============================================================================
--- 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/service/TenantRESTServiceImpl.java
  (original)
+++ 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/java/org/amdatu/opensocial/tenant/gadget/service/TenantRESTServiceImpl.java
  Tue Nov 22 16:27:22 2011
@@ -16,6 +16,9 @@
 package org.amdatu.opensocial.tenant.gadget.service;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -35,20 +38,32 @@
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
+import org.amdatu.auth.tokenprovider.InvalidTokenException;
+import org.amdatu.auth.tokenprovider.TokenProvider;
+import org.amdatu.auth.tokenprovider.TokenProviderException;
 import org.amdatu.core.tenant.Tenant;
+import org.amdatu.core.tenant.TenantException;
 import org.amdatu.gadgetcontainer.email.EMailService;
 import org.amdatu.libraries.utilities.rest.AtomSyndicationLink;
 import org.amdatu.opensocial.tenant.gadget.TenantListener;
 import org.amdatu.web.rest.jaxrs.RESTService;
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.ServiceDependency;
+import org.osgi.framework.Constants;
 import org.osgi.service.log.LogService;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
 
 @Path("tenants")
 public class TenantRESTServiceImpl implements RESTService {
     // The base URL for this REST service
     static String REST_URL = "/rest/tenants";
-    
-    private static String VALID_HOSTNAME_REGEX = 
"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\\-]*[A-Za-z0-9])$";
 
+    private static final String DEFAULT_ADMIN_GROUP = "Administrators";
+
+    private static String VALID_HOSTNAME_REGEX =
+        
"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\\-]*[A-Za-z0-9])$";
 
     // HTTP caching for this REST interface
     protected static CacheControl NO_CACHE_CONTROL;
@@ -62,12 +77,53 @@
     private volatile TenantConfigDAO m_tenantDAO;
     private volatile EMailService m_mailService;
     private volatile TenantListener m_tenantListener;
-    
+    private volatile UserAdmin m_userAdmin;
+    private volatile TokenProvider m_tokenProvider;
+    private volatile DependencyManager m_dependencyManager;
+
+    /**
+     * The init() method is invoked by the Felix dependency manager.
+     * 
+     * @throws TenantException
+     */
+    public void init(final Component component) throws TenantException {
+        List<ServiceDependency> dependencies = new 
ArrayList<ServiceDependency>();
+
+        // Create dynamic service dependencies on UserAdmin and token provider 
for 'our' tenant
+        dependencies.add(m_dependencyManager.createServiceDependency()
+            .setService(TokenProvider.class, 
getTenantFilter(TokenProvider.class)).setRequired(true)
+            .setInstanceBound(true));
+        dependencies.add(m_dependencyManager.createServiceDependency()
+            .setService(UserAdmin.class, 
getTenantFilter(UserAdmin.class)).setRequired(true).setInstanceBound(true));
+
+        component.add(dependencies);
+
+        m_logService.log(LogService.LOG_INFO,
+            getClass().getName() + " service initialized for tenant '" + 
m_tenant.getId() + "'");
+    }
+
+    private String getTenantFilter(Class<?> clazz) {
+        return "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY + "=" + 
m_tenant.getId() + ")(" + Constants.OBJECTCLASS
+            + "=" + clazz.getName() + "))";
+    }
+
     public void start() {
         m_logService.log(LogService.LOG_INFO, "Tenant management REST service 
started");
     }
 
     /**
+     * This method can be used to check the availability of the Login Service.
+     * 
+     * @return The text "Login service online"
+     */
+    @GET
+    @Produces({ MediaType.TEXT_PLAIN })
+    @Path("status")
+    public String status() {
+        return "Tenant service online";
+    }
+
+    /**
      * Returns available tenants.
      * Example: GET /rest/tenants
      * 
@@ -77,24 +133,31 @@
     @GET
     @Produces({ MediaType.APPLICATION_JSON })
     public Response getTenants(@Context final HttpServletRequest request) {
-        TenantsBean tenantsBean = new TenantsBean();
-        try {
-            for (TenantBean tenant : m_tenantDAO.getTenants()) {
-                String href = request.getContextPath() + REST_URL + "/" + 
tenant.getId();
-                tenant.addLink(new 
AtomSyndicationLink().setHref(href).setRel("edit").setType("application/json"));
-                if (!tenant.getId().equals(m_tenant.getId())) {
-                    // Only provide delete link if the tenant is not the same 
as the current tenant
-                    tenant
-                        .addLink(new 
AtomSyndicationLink().setHref(href).setRel("delete").setType("application/json"));
+        if (isAuthorized(request)) {
+            TenantsBean tenantsBean = new TenantsBean();
+            try {
+                for (TenantBean tenant : m_tenantDAO.getTenants()) {
+                    String href = request.getContextPath() + REST_URL + "/" + 
tenant.getId();
+                    tenant.addLink(new 
AtomSyndicationLink().setHref(href).setRel("edit").setType("application/json"));
+                    if (!tenant.getId().equals(m_tenant.getId())) {
+                        // Only provide delete link if the tenant is not the 
same as the current tenant
+                        tenant
+                            .addLink(new 
AtomSyndicationLink().setHref(href).setRel("delete")
+                                .setType("application/json"));
+                    }
+                    tenantsBean.addTenant(tenant);
                 }
-                tenantsBean.addTenant(tenant);
             }
+            catch (Exception e) {
+                m_logService.log(LogService.LOG_ERROR, "An error occured while 
retrieving tenants", e);
+                throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
+            }
+
+            return Response.ok(tenantsBean, 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL).build();
         }
-        catch (Exception e) {
-            throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
+        else {
+            return 
Response.status(org.apache.http.HttpStatus.SC_UNAUTHORIZED).cacheControl(NO_CACHE_CONTROL).build();
         }
-
-        return Response.ok(tenantsBean, 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL).build();
     }
 
     /**
@@ -108,18 +171,23 @@
     @Path("/{id}")
     @Produces({ MediaType.APPLICATION_JSON })
     public Response getTenant(@PathParam("id") final String id, @Context final 
HttpServletRequest request) {
-        try {
-            TenantBean tenant = m_tenantDAO.getTenant(id);
-            if (tenant != null) {
-                return Response.ok(tenant, 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
-                    .build();
+        if (isAuthorized(request)) {
+            try {
+                TenantBean tenant = m_tenantDAO.getTenant(id);
+                if (tenant != null) {
+                    return Response.ok(tenant, 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
+                        .build();
+                }
+                else {
+                    return 
Response.noContent().cacheControl(NO_CACHE_CONTROL).build();
+                }
             }
-            else {
-                return 
Response.noContent().cacheControl(NO_CACHE_CONTROL).build();
+            catch (Exception e) {
+                throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
             }
         }
-        catch (Exception e) {
-            throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
+        else {
+            return 
Response.status(org.apache.http.HttpStatus.SC_UNAUTHORIZED).cacheControl(NO_CACHE_CONTROL).build();
         }
     }
 
@@ -133,32 +201,65 @@
     @Consumes("application/x-www-form-urlencoded")
     @Path("/{id}")
     public Response setTenant(@PathParam("id") final String id, 
@FormParam("name") final String name,
-        @FormParam("hostname") final String hostname, @FormParam("email") 
final String email) {
+        @FormParam("hostname") final String hostname, @FormParam("email") 
final String email, 
+        @Context final HttpServletRequest request) {
+        if (isAuthorized(request)) {
+            try {
+                if (!validate(id, hostname, email)) {
+                    return 
Response.status(Status.BAD_REQUEST).cacheControl(NO_CACHE_CONTROL).build();
+                }
+                if (m_tenantDAO.setTenant(id, name, hostname)) {
+                    // Add the created tenant to the listener service, such 
that an account
+                    // is created and send to the email address as soon as the 
tenant is created
+                    m_tenantListener.addToQueue(id, name, hostname, email);
+                }
+            }
+            catch (Exception e) {
+                m_logService.log(LogService.LOG_ERROR, "An error occured.", e);
+                throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
+            }
+
+            return Response.ok().cacheControl(NO_CACHE_CONTROL).build();
+        }
+        else {
+            return 
Response.status(org.apache.http.HttpStatus.SC_UNAUTHORIZED).cacheControl(NO_CACHE_CONTROL).build();
+        }
+    }
+    
+    /**
+     * Deletes an existing tenant.
+     * Example: DELETE /rest/tenants/default_tenant
+     */
+    @DELETE
+    @Path("/{id}")
+    public Response deleteTenant(@PathParam("id") final String id, @Context 
final HttpServletRequest request) {
+        if (isAuthorized(request)) {
+        TenantBean tenant = null;
         try {
-            if (!validate(id, hostname, email)) {
-                return 
Response.status(Status.BAD_REQUEST).cacheControl(NO_CACHE_CONTROL).build();
+            if (m_tenantDAO.deleteTenant(id)) {
+                return Response.ok(tenant, 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
+                    .build();
             }
-            if (m_tenantDAO.setTenant(id, name, hostname)) {
-                // Add the created tenant to the listener service, such that 
an account 
-                // is created and send to the email address as soon as the 
tenant is created
-                m_tenantListener.addToQueue(id, name, hostname, email);
+            else {
+                return 
Response.noContent().cacheControl(NO_CACHE_CONTROL).build();
             }
         }
         catch (Exception e) {
-            m_logService.log(LogService.LOG_ERROR, "An error occured.", e);
             throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
         }
-
-        return Response.ok().cacheControl(NO_CACHE_CONTROL).build();
+        }
+        else {
+            return 
Response.status(org.apache.http.HttpStatus.SC_UNAUTHORIZED).cacheControl(NO_CACHE_CONTROL).build();
+        }
     }
-    
+
     private boolean validate(String id, String hostname, String email) throws 
IOException {
-        boolean valid = true;//validateHostname(hostname);
+        boolean valid = true;// validateHostname(hostname);
         valid &= validateHostnameInUse(id, hostname);
         valid &= m_mailService.validateEmailAddress(email);
         return valid;
     }
-    
+
     private boolean validateHostname(String hostname) {
         // Validate if another tenant exists that did already claim this 
hostname
         Pattern p = Pattern.compile(VALID_HOSTNAME_REGEX);
@@ -168,7 +269,7 @@
         }
         return true;
     }
-        
+
     private boolean validateHostnameInUse(String id, String hostname) throws 
IOException {
         // Validate if another tenant exists that did already claim this 
hostname
         for (TenantBean tenant : m_tenantDAO.getTenants()) {
@@ -180,26 +281,29 @@
         }
         return true;
     }
-    
-    /**
-     * Deletes an existing tenant.
-     * Example: DELETE /rest/tenants/default_tenant
-     */
-    @DELETE
-    @Path("/{id}")
-    public Response deleteTenant(@PathParam("id") final String id) {
-        TenantBean tenant = null;
-        try {
-            if (m_tenantDAO.deleteTenant(id)) {
-                return Response.ok(tenant, 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
-                    .build();
+
+    private boolean isAuthorized(final 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)) {
+                    String userName = attributes.get(TokenProvider.USERNAME);
+                    if (userName != null && !userName.isEmpty()) {
+                        User user = (User) m_userAdmin.getRole(userName);
+                        if (user != null) {
+                            return 
m_userAdmin.getAuthorization(user).hasRole(DEFAULT_ADMIN_GROUP);
+                        }
+                    }
+                }
             }
-            else {
-                return 
Response.noContent().cacheControl(NO_CACHE_CONTROL).build();
+            catch (TokenProviderException e) {
+                // Ignore invalid tokens
+            }
+            catch (InvalidTokenException e) {
+                // Ignore invalid tokens
             }
         }
-        catch (Exception e) {
-            throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
-        }
+        return false;
     }
 }

Modified: 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/jsp/TenantGadget.jsp
==============================================================================
--- 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/jsp/TenantGadget.jsp
       (original)
+++ 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/jsp/TenantGadget.jsp
       Tue Nov 22 16:27:22 2011
@@ -45,30 +45,35 @@
     <script type="text/javascript" 
src="${gadgetBaseUrl}/static/js/tenant.js"></script>
     <script type="text/javascript" 
src="${gadgetBaseUrl}/static/js/util.js"></script>
 
-    <p>
-      <fieldset id="tenants">
-        <legend id="tenants_legend">__MSG_tenants__</legend>
-        <div id="tenants"></div>
-      </fieldset>
-    </p>
-
-    <p>
-      <input type="button" id="new_tenant_button" value="__MSG_new_tenant__" 
onclick="javascript:showAddTenant();"/>
-    </p>
+    <div id="all">
+      <p>
+        <fieldset id="tenants">
+          <legend id="tenants_legend">__MSG_tenants__</legend>
+          <div id="tenants"></div>
+        </fieldset>
+      </p>
+
+      <p>
+        <input type="button" id="new_tenant_button" value="__MSG_new_tenant__" 
onclick="javascript:showAddTenant();"/>
+      </p>
+
+      <p>
+        <fieldset id="tenant_details" style="display:none;visibility:hidden">
+          <legend id="tenant_details_legend">__MSG_details__</legend>
+            <table width="95%">
+              <tr><td>__MSG_id__</td><td><input type="edit" id="tenant_id" 
disabled="disabled"/></td></tr>
+              <tr><td>__MSG_name__</td><td><input type="edit" id="tenant_name" 
value=""/></td></tr>
+              <tr><td>__MSG_hostname__</td><td><input type="edit" 
id="tenant_hostname" value=""/></td></tr>
+              <tr id="tenant_email_row"><td>__MSG_email__*</td><td><input 
type="edit" id="tenant_email" value=""/></td></tr>
+            </table>
+            <div id="comment" class="comment" 
style="display:none;visibility:hidden">* __MSG_email_comment__</div>
+            <input type="submit" id="tenant_save" value="__MSG_save__" 
onclick="javascript:saveTenant();"/>
+            <input type="button" id="cancel" value="__MSG_cancel__" 
onclick="javascript:cancelEdit();"/>
+        </fieldset>
+      </p>
+    </div>
 
     <p>
-      <fieldset id="tenant_details" style="display:none;visibility:hidden">
-        <legend id="tenant_details_legend">__MSG_details__</legend>
-          <table width="95%">
-            <tr><td>__MSG_id__</td><td><input type="edit" id="tenant_id" 
disabled="disabled"/></td></tr>
-            <tr><td>__MSG_name__</td><td><input type="edit" id="tenant_name" 
value=""/></td></tr>
-            <tr><td>__MSG_hostname__</td><td><input type="edit" 
id="tenant_hostname" value=""/></td></tr>
-            <tr id="tenant_email_row"><td>__MSG_email__*</td><td><input 
type="edit" id="tenant_email" value=""/></td></tr>
-          </table>
-          <div id="comment" class="comment" 
style="display:none;visibility:hidden">* __MSG_email_comment__</div>
-          <input type="submit" id="tenant_save" value="__MSG_save__" 
onclick="javascript:saveTenant();"/>
-          <input type="button" id="cancel" value="__MSG_cancel__" 
onclick="javascript:cancelEdit();"/>
-      </fieldset>
       <div id="infobox"></div>
     </p>
 

Modified: 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/css/tenant.css
==============================================================================
--- 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/css/tenant.css
      (original)
+++ 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/css/tenant.css
      Tue Nov 22 16:27:22 2011
@@ -19,9 +19,34 @@
   background: #fff;
 }
 
+div#statusbar-wrapper {
+font-size: 6px;
+background: #FF0000;
+}
+
+div.statusbar-wrapper {
+font-size: 6px;
+background: #FF0000;
+}
+
+div#statusbar-header {
+font-size: 6px;
+background: #FF0000;
+}
+
+div.statusbar-header {
+font-size: 6px;
+background: #FF0000;
+}
+
+div.statusbar-header-text {
+font-size: 6px;
+background: #FF0000;
+}
+
 p {
   font-family: arial, sans-serif;
-  font-size: 13px;
+  font-size: 3px;
 }
 
 table th {

Modified: 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/js/tenant.js
==============================================================================
--- 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/js/tenant.js
        (original)
+++ 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/js/tenant.js
        Tue Nov 22 16:27:22 2011
@@ -2,26 +2,19 @@
 
 function loadTenants() {
   var url = "/rest/tenants";
-  var params = {};
-  params[gadgets.io.RequestParameters.CONTENT_TYPE] = 
gadgets.io.ContentType.JSON;
-  params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
-
+  var params = getDefaultParams(gadgets.io.ContentType.JSON, 
gadgets.io.MethodType.GET);
   url = getBaseUrl() + addNoCache(url);
   gadgets.io.makeRequest(url, onTenantsLoaded, params);
 }
 
 function loadTenant(url, callback) {
-  var params = {};
-  params[gadgets.io.RequestParameters.CONTENT_TYPE] = 
gadgets.io.ContentType.JSON;
-  params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
+  var params = getDefaultParams(gadgets.io.ContentType.JSON, 
gadgets.io.MethodType.GET);
   url = getBaseUrl() + addNoCache(unescape(url));
   gadgets.io.makeRequest(url, callback, params);
 }
 
 function doSaveTenant(url, callback) {
-  var params = {};
-  params[gadgets.io.RequestParameters.CONTENT_TYPE] = 
gadgets.io.ContentType.JSON;
-  params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
+  var params = getDefaultParams(gadgets.io.ContentType.JSON, 
gadgets.io.MethodType.POST);
   var name = document.getElementById('tenant_name').value;
   var hostname = document.getElementById('tenant_hostname').value;
   var email = document.getElementById('tenant_email').value;
@@ -32,9 +25,7 @@
 }
 
 function doDeleteTenant(url, callback) {
-  var params = {};
-  params[gadgets.io.RequestParameters.CONTENT_TYPE] = 
gadgets.io.ContentType.JSON;
-  params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.DELETE;
+  var params = getDefaultParams(gadgets.io.ContentType.JSON, 
gadgets.io.MethodType.DELETE);
   url = getBaseUrl() + addNoCache(unescape(url));
   gadgets.io.makeRequest(url, callback, params);
 }
@@ -76,6 +67,9 @@
     $(".stripeMe tr").mouseover(function() {$(this).addClass("over");});
     $(".stripeMe tr").mouseout(function() {$(this).removeClass("over");});
     $(".stripeMe tr:even").addClass("alt");
+  } else if (response.rc == 401) {
+    hide('all');
+    showError("You are not authorized to manage tenants. You must be an 
Administrator to be able to manage tenants.");
   }
   gadgets.window.adjustHeight();
 }

Modified: 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/js/util.js
==============================================================================
--- 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/js/util.js
  (original)
+++ 
sandbox/ivol/amdatu-gadget-container/tenant-management-gadget/src/main/resources/static/js/util.js
  Tue Nov 22 16:27:22 2011
@@ -60,4 +60,25 @@
 
 function getBaseUrl() {
   return window.location.protocol +"//" + window.location.hostname + ":" + 
window.location.port;
+}
+
+function getDefaultParams(contentType, method) {
+  var params = {};
+  params[gadgets.io.RequestParameters.CONTENT_TYPE] = contentType;
+  params[gadgets.io.RequestParameters.METHOD] = method;
+  addAmdatuToken(params);
+  return params;
+}
+
+// Each invocation of gadgets.io.makeRequest is procies via the OpenSocial 
container
+// to the REST service. For security reasons, it does not pass cookies to this 
REST
+// service and so, since our REST service verifies authorization against 
UserAdmin,
+// the REST service will deny all calls. The site authentication token needs 
thus
+// to be passed from the OpenSocial container to the REST service, which is 
what
+// happens here.
+function addAmdatuToken(params) {
+  var token = getCookie("amdatu_token");
+  if (token != null) {
+    params[gadgets.io.RequestParameters.HEADERS] = {"Authorization" : "Amdatu 
" + token};
+  }
 }
\ No newline at end of file
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to