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());