Author: mfranklin
Date: Tue Dec 11 02:45:01 2012
New Revision: 1419978

URL: http://svn.apache.org/viewvc?rev=1419978&view=rev
Log:
Committing patch from Robert O'Neill RAVE-851

Added:
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/controller/
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/controller/SecurityTokenController.java
Modified:
    
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/dispatcher-servlet.xml
    
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/dispatcher-servlet.xml
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/dispatcher-servlet.xml?rev=1419978&r1=1419977&r2=1419978&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/dispatcher-servlet.xml 
(original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/dispatcher-servlet.xml 
Tue Dec 11 02:45:01 2012
@@ -35,6 +35,7 @@
     -->
     <context:component-scan 
base-package="org.apache.rave.portal.web.controller"/>
     <context:component-scan base-package="org.apache.rave.portal.web.api"/>
+    <context:component-scan 
base-package="org.apache.rave.provider.opensocial.controller;"/>
 
     <!-- Configures the @Controller programming model -->
     <mvc:annotation-driven>

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js?rev=1419978&r1=1419977&r2=1419978&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js
 (original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js
 Tue Dec 11 02:45:01 2012
@@ -94,9 +94,29 @@ rave.opensocial = rave.opensocial || (fu
 
 
         container.views.createElementForEmbeddedExperience = function (rel, 
opt_gadgetInfo, opt_viewTarget, opt_coordinates, parentSite, opt_callback) {
-                if (opt_viewTarget) {
-                    return rave.createPopup(opt_viewTarget);
-                }
+               var widgetUrl = opt_gadgetInfo.url;
+               
+               getSecurityToken({
+                       "url": widgetUrl,
+                       "pageid": rave.layout.getCurrentPageId(),
+                       "successCallback": function(data) {
+                               if (!data.error) {
+                                       var gadget = {
+                                         "widgetUrl": widgetUrl,
+                                         "securityToken": data.securityToken,
+                                         "metadata": opt_gadgetInfo
+                                       }
+                       
+                                       preloadMetadata(gadget);
+                        
+                                       if (opt_viewTarget) {
+                                               
opt_callback(rave.createPopup(opt_viewTarget));
+                                       }
+                               } else {
+                                       console.log(data.error.message);
+                               }
+                       }
+               })
             };
 
         container.views.createElementForUrl = function (rel, opt_viewTarget, 
opt_coordinates, parentSite, opt_callback) {
@@ -112,6 +132,19 @@ rave.opensocial = rave.opensocial || (fu
             };
 
     }
+    
+    function getSecurityToken(args) {
+        $.ajax({
+            type: 'GET',
+            url: rave.getContext() + "api/rest/" + "st?url=" + args.url + 
"&pageid=" + args.pageid,
+            dataType: "json",
+            success: function (data) {
+                if (typeof args.successCallback == 'function') {
+                    args.successCallback(data);
+                }
+               }
+        });
+    }
 
     /**
      * Validates a gadget's metadata and renders it on the page
@@ -121,30 +154,34 @@ rave.opensocial = rave.opensocial || (fu
     function validateAndRenderGadget(gadget) {
         var validationResult = validateMetadata(gadget.metadata);
         if (validationResult.valid) {
-            //Put our gadget metadata into the form that the common container 
is expecting
-            var commonContainerMetadataWrapper = {};
-            commonContainerMetadataWrapper[gadget.widgetUrl] = gadget.metadata;
-
-            //Put our gadget security token data into the form that the common 
container is expecting
-            var commonContainerTokenData = {};
-            commonContainerTokenData[osapi.container.TokenResponse.TOKEN] = 
gadget.securityToken;
-            
commonContainerTokenData[osapi.container.MetadataResponse.RESPONSE_TIME_MS] = 
new Date().getTime();
-            var commonContainerTokenWrapper = {};
-            commonContainerTokenWrapper[gadget.widgetUrl] = 
commonContainerTokenData;
-
-            //Setup the preloadConfig data with all our preload data
-            var preloadConfig = {};
-            preloadConfig[osapi.container.ContainerConfig.PRELOAD_METADATAS] = 
commonContainerMetadataWrapper;
-            preloadConfig[osapi.container.ContainerConfig.PRELOAD_TOKENS] = 
commonContainerTokenWrapper;
-            preloadConfig[osapi.container.ContainerConfig.PRELOAD_REF_TIME] = 
null;
-
-            //Preload our data into the common container
-            container.preloadCaches(preloadConfig);
+            preloadMetadata(gadget);
             renderNewGadget(gadget);
         } else {
             rave.errorWidget(gadget.regionWidgetId, 
rave.getClientMessage("opensocial.render_error") + "<br /><br />" + 
validationResult.error);
         }
     }
+    
+    function preloadMetadata(gadget) {
+        //Put our gadget metadata into the form that the common container is 
expecting
+        var commonContainerMetadataWrapper = {};
+               commonContainerMetadataWrapper[gadget.widgetUrl] = 
gadget.metadata;
+
+        //Put our gadget security token data into the form that the common 
container is expecting
+        var commonContainerTokenData = {};
+        commonContainerTokenData[osapi.container.TokenResponse.TOKEN] = 
gadget.securityToken;
+        
commonContainerTokenData[osapi.container.MetadataResponse.RESPONSE_TIME_MS] = 
new Date().getTime();
+        var commonContainerTokenWrapper = {};
+        commonContainerTokenWrapper[gadget.widgetUrl] = 
commonContainerTokenData;
+
+        //Setup the preloadConfig data with all our preload data
+        var preloadConfig = {};
+        preloadConfig[osapi.container.ContainerConfig.PRELOAD_METADATAS] = 
commonContainerMetadataWrapper;
+        preloadConfig[osapi.container.ContainerConfig.PRELOAD_TOKENS] = 
commonContainerTokenWrapper;
+        preloadConfig[osapi.container.ContainerConfig.PRELOAD_REF_TIME] = null;
+
+        //Preload our data into the common container
+        container.preloadCaches(preloadConfig);
+    }
 
     /**
      * Renders a new gadget

Added: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/controller/SecurityTokenController.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/controller/SecurityTokenController.java?rev=1419978&view=auto
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/controller/SecurityTokenController.java
 (added)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/controller/SecurityTokenController.java
 Tue Dec 11 02:45:01 2012
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.rave.provider.opensocial.controller;
+
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.RegionWidget;
+import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.WidgetStatus;
+import org.apache.rave.portal.model.impl.RegionImpl;
+import org.apache.rave.portal.model.impl.RegionWidgetImpl;
+import org.apache.rave.portal.service.PageService;
+import org.apache.rave.portal.service.WidgetService;
+import org.apache.rave.provider.opensocial.exception.SecurityTokenException;
+import 
org.apache.rave.provider.opensocial.service.impl.EncryptedBlobSecurityTokenService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Admin controller to manipulate Widget data
+ */
+@Controller
+public class SecurityTokenController{
+
+    @Autowired
+    private WidgetService widgetService;
+    
+    @Autowired
+    private PageService pageService;
+    
+    @Autowired
+    private EncryptedBlobSecurityTokenService securityTokenService;
+
+    @RequestMapping(value = "/api/rest/st", method = RequestMethod.GET, 
produces="application/json")
+    @ResponseBody
+    public Map<String, Object> getSecurityToken(@RequestParam("url") final 
String url, @RequestParam("pageid") final String pageId) {
+       Widget widget = widgetService.getWidgetByUrl(url);
+       Page page = pageService.getPage(pageId);
+       
+       // Use a dummy RegionWidget to generate the security token
+       RegionWidget regionWidget = new 
RegionWidgetImpl(String.valueOf(System.currentTimeMillis()),"-1",
+                       new RegionImpl("-1", page, -1));
+       
+       Map<String, Object> jsonResponse = new HashMap<String, Object>();
+       Map<String, String> errorMessage = new HashMap<String, String>();
+       
+       String securityToken = "";
+       if (widget != null && widget.getWidgetStatus() == 
WidgetStatus.PUBLISHED) {
+               try {
+                       securityToken = 
securityTokenService.getEncryptedSecurityToken(regionWidget, widget);
+               } catch (SecurityTokenException e) {
+                       errorMessage.put("message", "There was a problem 
creating the security token.");
+               }
+       } else if (widget != null && widget.getWidgetStatus() == 
WidgetStatus.PREVIEW) {
+               errorMessage.put("message", "The requested gadget exists in the 
gadget store but is not published.");
+       } else {
+               errorMessage.put("message", "The requested gadget does not 
exist in the gadget store.");
+       }
+       
+       jsonResponse.put("securityToken", securityToken);
+       if (!errorMessage.isEmpty()) {
+               jsonResponse.put("error", errorMessage);
+       }
+       
+       return jsonResponse;
+    }
+}


Reply via email to