Author: rbaxter85
Date: Mon Jan 14 15:38:11 2013
New Revision: 1432956

URL: http://svn.apache.org/viewvc?rev=1432956&view=rev
Log:
SHINDIG-1863
Committed For Marshall Shi
Unable to force a token refresh on all gadget sites

Modified:
    shindig/trunk/features/src/main/javascript/features/container/container.js
    shindig/trunk/features/src/main/javascript/features/container/feature.xml
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java

Modified: 
shindig/trunk/features/src/main/javascript/features/container/container.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/container.js?rev=1432956&r1=1432955&r2=1432956&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/container.js 
(original)
+++ shindig/trunk/features/src/main/javascript/features/container/container.js 
Mon Jan 14 15:38:11 2013
@@ -870,6 +870,31 @@ osapi.container.Container.prototype.refr
 
 
 /**
+ * invalidate all tokens, so next time the refreshToken_ is called, all the 
token will be refreshed.
+ * @private
+ */
+osapi.container.Container.prototype.invalidateAllTokens_ = function() {
+  var self = this;
+  for ( var siteId in self.sites_) {
+    var site = sites[siteId];
+    if (site instanceof osapi.container.GadgetSite) {
+      var holder = site.getActiveSiteHolder();
+      var gadgetInfo = 
commonContainer.service_.getCachedGadgetMetadata(holder.getUrl());
+      gadgetInfo[osapi.container.MetadataResponse.NEEDS_TOKEN_REFRESH] = true;
+    }
+  }
+};
+
+/**
+ * Refresh all security tokens on all gadget sites immediately no matter it's 
needed or not. This
+ * will fetch gadget metadata, along with its token and have the token cache 
updated
+ */
+osapi.container.Container.prototype.forceRefreshAllTokens = function() {
+  this.invalidateAllTokens_();
+  this.refreshTokens_();
+};
+
+/**
  * invokes methods on the gadget lifecycle callback registered with the
  * container.  The callback will be passed the remainder of the arguments 
after methodName.
  * @param {string} methodName of the callback method to be called.

Modified: 
shindig/trunk/features/src/main/javascript/features/container/feature.xml
URL: 
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/feature.xml?rev=1432956&r1=1432955&r2=1432956&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/feature.xml 
(original)
+++ shindig/trunk/features/src/main/javascript/features/container/feature.xml 
Mon Jan 14 15:38:11 2013
@@ -21,7 +21,7 @@ under the License.
   <name>container</name>
   <dependency>globals</dependency>
   <dependency>core.log</dependency>
-  <dependency>shindig.auth</dependency>
+  <dependency>security-token</dependency>
   <dependency>shindig.uri.ext</dependency>
   <dependency>osapi</dependency>
   <dependency>rpc</dependency>
@@ -47,6 +47,7 @@ under the License.
       <exports 
type="js">osapi.container.Container.prototype.onConstructed</exports>
       <exports 
type="js">osapi.container.Container.prototype.getGadgetSiteById</exports>
       <exports 
type="js">osapi.container.Container.prototype.updateContainerSecurityToken</exports>
+      <exports 
type="js">osapi.container.Container.prototype.forceRefreshAllTokens</exports>
       <exports type="rpc">resize_iframe</exports>
       <exports type="rpc">resize_iframe_width</exports>
       <exports type="rpc">set_pref</exports>

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java?rev=1432956&r1=1432955&r2=1432956&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
 Mon Jan 14 15:38:11 2013
@@ -37,6 +37,7 @@ import org.apache.shindig.common.Nullabl
 import org.apache.shindig.common.servlet.HttpUtil;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.util.TimeSource;
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
@@ -67,6 +68,7 @@ import org.apache.shindig.gadgets.spec.O
 import org.apache.shindig.gadgets.spec.UserPref;
 import org.apache.shindig.gadgets.spec.UserPref.EnumValuePair;
 import org.apache.shindig.gadgets.spec.View;
+import org.apache.shindig.gadgets.uri.DefaultIframeUriManager;
 import org.apache.shindig.gadgets.uri.IframeUriManager;
 import org.apache.shindig.gadgets.uri.JsUriManager;
 import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
@@ -158,6 +160,7 @@ public class GadgetsHandlerService {
   protected final GadgetAdminStore gadgetAdminStore;
   protected final FeatureRegistryProvider featureRegistryProvider;
   protected final ModuleIdManager moduleIdManager;
+  private ContainerConfig config;
 
   @Inject
   public GadgetsHandlerService(TimeSource timeSource, Processor processor,
@@ -168,7 +171,8 @@ public class GadgetsHandlerService {
       BeanFilter beanFilter, CajaContentRewriter cajaContentRewriter,
       GadgetAdminStore gadgetAdminStore,
       FeatureRegistryProvider featureRegistryProvider,
-      ModuleIdManager moduleIdManager) {
+      ModuleIdManager moduleIdManager,
+      ContainerConfig config) {
     this.timeSource = timeSource;
     this.processor = processor;
     this.iframeUriManager = iframeUriManager;
@@ -186,6 +190,7 @@ public class GadgetsHandlerService {
     this.moduleIdManager = moduleIdManager;
 
     this.beanDelegator = new BeanDelegator(API_CLASSES, ENUM_CONVERSION_MAP);
+    this.config = config;
   }
 
   /**
@@ -214,7 +219,11 @@ public class GadgetsHandlerService {
     Boolean needsTokenRefresh =
         isFieldIncluded(fields, "needstokenrefresh") ?
             gadget.getAllFeatures().contains("auth-refresh") : null;
-
+    boolean alwaysAppendSecurityToken = 
config.getBool(gadget.getContext().getContainer(),
+            DefaultIframeUriManager.SECURITY_TOKEN_ALWAYS_KEY);
+    if (alwaysAppendSecurityToken) {
+      needsTokenRefresh = Boolean.TRUE;
+    }
     Set<String> rpcServiceIds = getRpcServiceIds(gadget);
 
     Integer tokenTTL = isFieldIncluded(fields, "tokenTTL") ?

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java?rev=1432956&r1=1432955&r2=1432956&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
 Mon Jan 14 15:38:11 2013
@@ -23,6 +23,7 @@ import static org.easymock.EasyMock.crea
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.replay;
 
 import java.nio.charset.Charset;
 import java.util.ArrayList;
@@ -38,6 +39,7 @@ import org.apache.shindig.common.EasyMoc
 import org.apache.shindig.common.servlet.HttpUtil;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.util.FakeTimeSource;
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
@@ -57,6 +59,7 @@ import org.apache.shindig.gadgets.js.JsR
 import org.apache.shindig.gadgets.js.JsServingPipeline;
 import org.apache.shindig.gadgets.process.ProcessingException;
 import org.apache.shindig.gadgets.servlet.GadgetsHandlerApi.Feature;
+import org.apache.shindig.gadgets.uri.DefaultIframeUriManager;
 import org.apache.shindig.gadgets.uri.JsUriManager;
 import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
@@ -105,6 +108,7 @@ public class GadgetsHandlerServiceTest e
   private final JsRequestBuilder jsRequestBuilder = new 
JsRequestBuilder(jsUriManager, null);
   private final GadgetAdminStore gadgetAdminStore = 
mock(GadgetAdminStore.class);
 
+  private ContainerConfig config;
   private FakeSecurityTokenCodec tokenCodec;
   private GadgetsHandlerService gadgetHandler;
   private GadgetsHandlerService gadgetHandlerWithAdmin;
@@ -118,14 +122,15 @@ public class GadgetsHandlerServiceTest e
         return mockRegistry;
       }
     };
+    config = createMock(ContainerConfig.class);
     gadgetHandler = new GadgetsHandlerService(timeSource, processor, 
urlGenerator, tokenCodec,
             proxyUriManager, jsUriManager, proxyHandler, jsPipeline, 
jsRequestBuilder,
             SPEC_REFRESH_INTERVAL_MS, new BeanFilter(), cajaContentRewriter, 
gadgetAdminStore,
-            featureRegistryProvider, new ModuleIdManagerImpl());
+            featureRegistryProvider, new ModuleIdManagerImpl(),config);
     gadgetHandlerWithAdmin = new GadgetsHandlerService(timeSource, processor, 
urlGenerator,
             tokenCodec, proxyUriManager, jsUriManager, proxyHandler, 
jsPipeline, jsRequestBuilder,
             SPEC_REFRESH_INTERVAL_MS, new BeanFilter(), cajaContentRewriter, 
gadgetAdminStore,
-            featureRegistryProvider, new ModuleIdManagerImpl());
+            featureRegistryProvider, new ModuleIdManagerImpl(),config);
   }
 
   // Next test verify that the API data classes are configured correctly.
@@ -197,6 +202,20 @@ public class GadgetsHandlerServiceTest e
   }
 
   @Test
+  public void testGetMetadataWithalwaysAppendST() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = 
createMetadataRequest(FakeProcessor.SPEC_URL,
+            CONTAINER, "default", createAuthContext(null, null), 
ImmutableList.of("*"));
+    setupMockGadgetAdminStore(true);
+    setupMockRegistry(ImmutableList.<String> of(""));
+    expect(config.getBool(CONTAINER, 
DefaultIframeUriManager.SECURITY_TOKEN_ALWAYS_KEY)).andReturn(
+            true).once();
+    replay(config);
+    GadgetsHandlerApi.MetadataResponse response = 
gadgetHandler.getMetadata(request);
+    assertTrue(response.getNeedsTokenRefresh());
+    verify();
+  }
+
+  @Test
   public void testFeatureAdminAllowedGadget() throws Exception {
     GadgetsHandlerApi.MetadataRequest request = 
createMetadataRequest(FakeProcessor.SPEC_URL4,
             CONTAINER, "default", createAuthContext(null, null), 
ImmutableList.of("*"));

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java?rev=1432956&r1=1432955&r2=1432956&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java
 Mon Jan 14 15:38:11 2013
@@ -40,6 +40,7 @@ import org.apache.shindig.common.testing
 import org.apache.shindig.common.testing.ImmediateExecutorService;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.util.FakeTimeSource;
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
@@ -113,6 +114,7 @@ public class GadgetsHandlerTest extends 
   private final JsServingPipeline jsPipeline = mock(JsServingPipeline.class);
   private final JsRequestBuilder jsRequestBuilder = new 
JsRequestBuilder(jsUriManager, null);
   private final GadgetAdminStore gadgetAdminStore = 
mock(GadgetAdminStore.class);
+  private final ContainerConfig config = mock(ContainerConfig.class);
 
   private Injector injector;
   private BeanJsonConverter converter;
@@ -139,7 +141,7 @@ public class GadgetsHandlerTest extends 
     GadgetsHandlerService service = new GadgetsHandlerService(timeSource, 
processor, urlGenerator,
             codec, proxyUriManager, jsUriManager, proxyHandler, jsPipeline, 
jsRequestBuilder,
             SPEC_REFRESH_INTERVAL, beanFilter, cajaContentRewriter, 
gadgetAdminStore,
-            featureRegistryProvider, new ModuleIdManagerImpl());
+            featureRegistryProvider, new ModuleIdManagerImpl(),config);
     GadgetsHandler handler = new GadgetsHandler(new 
ImmediateExecutorService(), service, beanFilter);
     registry = new DefaultHandlerRegistry(injector, converter,
             new HandlerExecutionListener.NoOpHandler());


Reply via email to