You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by zh...@apache.org on 2011/03/12 01:02:38 UTC
svn commit: r1080807 - in /shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/
main/java/org/apache/shindig/gadgets/servlet/
main/java/org/apache/shindig/gadgets/uri/
test/java/org/apache/shindig/gadgets/servlet/ test/java/org/apache/...
Author: zhoresh
Date: Sat Mar 12 00:02:37 2011
New Revision: 1080807
URL: http://svn.apache.org/viewvc?rev=1080807&view=rev
Log:
Support caja santization for GadgetHandler metadata | http://codereview.appspot.com/4252069/
And fix NPE for metadata request for view that does not exists
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.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/uri/DefaultIframeUriManagerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java Sat Mar 12 00:02:37 2011
@@ -132,18 +132,25 @@ public class GadgetContext {
public SecurityToken getToken() {
return delegate == null ? null : delegate.getToken();
}
-
+
/**
* @return The user agent string, or null if not present.
*/
public String getUserAgent() {
return delegate == null ? null : delegate.getUserAgent();
}
-
+
/**
* @return Whether the gadget output should be sanitized.
*/
public boolean getSanitize() {
return delegate == null ? false : delegate.getSanitize();
}
+
+ /**
+ * @return Whether the gadget output should be cajoled.
+ */
+ public boolean getCajoled() {
+ return delegate == null ? false : delegate.getCajoled();
+ }
}
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=1080807&r1=1080806&r2=1080807&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 Sat Mar 12 00:02:37 2011
@@ -163,9 +163,12 @@ public class GadgetsHandlerService {
GadgetContext context = new MetadataGadgetContext(request);
Gadget gadget = processor.process(context);
- String iframeUrl =
- isFieldIncluded(fields, "iframeurl") ?
- iframeUriManager.makeRenderingUri(gadget).toString() : null;
+ boolean needIfrUrl = isFieldIncluded(fields, "iframeurl");
+ if (needIfrUrl && gadget.getCurrentView() == null) {
+ throw new ProcessingException("View " + request.getView() + " does not exist",
+ HttpResponse.SC_BAD_REQUEST);
+ }
+ String iframeUrl = needIfrUrl ? iframeUriManager.makeRenderingUri(gadget).toString() : null;
Boolean needsTokenRefresh =
isFieldIncluded(fields, "needstokenrefresh") ?
gadget.getAllFeatures().contains("auth-refresh") : null;
@@ -402,6 +405,11 @@ public class GadgetsHandlerService {
public boolean getSanitize() {
return (request.getRenderingType() == GadgetsHandlerApi.RenderingType.SANITIZED);
}
+
+ @Override
+ public boolean getCajoled() {
+ return (request.getRenderingType() == GadgetsHandlerApi.RenderingType.IFRAME_CAJOLED);
+ }
}
private SecurityToken convertAuthContext(GadgetsHandlerApi.AuthContext authContext,
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java Sat Mar 12 00:02:37 2011
@@ -140,7 +140,7 @@ public class DefaultIframeUriManager imp
} else {
uri.setAuthority(gadgetUri.getAuthority());
uri.setScheme(gadgetUri.getScheme());
- }
+ }
// 4. Add the URL.
uri.addQueryParameter(Param.URL.getKey(), context.getUrl().toString());
@@ -157,6 +157,9 @@ public class DefaultIframeUriManager imp
addParam(uri, Param.DEBUG.getKey(), context.getDebug() ? "1" : "0", useTpl, false);
addParam(uri, Param.NO_CACHE.getKey(), context.getIgnoreCache() ? "1" : "0", useTpl, false);
addParam(uri, Param.SANITIZE.getKey(), context.getSanitize() ? "1" : "0", useTpl, false);
+ if (context.getCajoled()) {
+ addParam(uri, Param.CAJOLE.getKey(), "1", useTpl, false);
+ }
// Add all UserPrefs
UserPrefs prefs = context.getUserPrefs();
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java Sat Mar 12 00:02:37 2011
@@ -36,6 +36,7 @@ public class FakeProcessor extends Proce
protected final Map<Uri, String> gadgets = Maps.newHashMap();
public static final Uri SPEC_URL = Uri.parse("http://example.org/g.xml");
public static final Uri SPEC_URL2 = Uri.parse("http://example.org/g2.xml");
+ public static final Uri SPEC_URL3 = Uri.parse("http://example.org/g3.xml");
public static final String SPEC_TITLE = "JSON-TEST";
public static final String SPEC_TITLE2 = "JSON-TEST2";
public static final int PREFERRED_HEIGHT = 100;
@@ -65,6 +66,12 @@ public class FakeProcessor extends Proce
"<Content type=\"html\">Hello, world</Content>" +
"</Module>";
+ public static final String SPEC_XML3 =
+ "<Module>" +
+ "<ModulePrefs title=\"" + SPEC_TITLE2 + "\"/>" +
+ "<Content name=\"canvas\">Hello, world</Content>" +
+ "</Module>";
+
private final FeatureRegistry featureRegistry;
public FakeProcessor() {
@@ -75,6 +82,7 @@ public class FakeProcessor extends Proce
super(null, null, null, null, null);
this.gadgets.put(FakeProcessor.SPEC_URL, FakeProcessor.SPEC_XML);
this.gadgets.put(FakeProcessor.SPEC_URL2, FakeProcessor.SPEC_XML2);
+ this.gadgets.put(FakeProcessor.SPEC_URL3, FakeProcessor.SPEC_XML3);
this.featureRegistry = featureRegistry;
}
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=1080807&r1=1080806&r2=1080807&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 Sat Mar 12 00:02:37 2011
@@ -105,7 +105,7 @@ public class GadgetsHandlerServiceTest e
@Test
public void testGetMetadata() throws Exception {
GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
- FakeProcessor.SPEC_URL, CONTAINER, "view",
+ FakeProcessor.SPEC_URL, CONTAINER, "default",
createAuthContext(null, null), ImmutableList.of("*"));
EasyMock.expect(mockRegistry.getFeatures(EasyMock.isA(List.class)))
.andReturn(Lists.newArrayList("auth-refresh"));
@@ -145,6 +145,16 @@ public class GadgetsHandlerServiceTest e
}
@Test(expected = ProcessingException.class)
+ public void testGetMetadataNoView() throws Exception {
+ GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+ FakeProcessor.SPEC_URL3, CONTAINER, "invalid_view",
+ createAuthContext(null, null), ImmutableList.of("*"));
+ replay();
+ GadgetsHandlerApi.MetadataResponse response =
+ gadgetHandler.getMetadata(request);
+ }
+
+ @Test(expected = ProcessingException.class)
public void testGetMetadataNoContainer() throws Exception {
GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
FakeProcessor.SPEC_URL, null, null,
@@ -185,7 +195,7 @@ public class GadgetsHandlerServiceTest e
@Test
public void testGetMetadataNoToken() throws Exception {
GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
- FakeProcessor.SPEC_URL, CONTAINER, "view", null, ImmutableList.of("*"));
+ FakeProcessor.SPEC_URL, CONTAINER, "default", null, ImmutableList.of("*"));
EasyMock.expect(mockRegistry.getFeatures(EasyMock.isA(List.class)))
.andReturn(Lists.newArrayList("auth-refresh"));
replay();
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java Sat Mar 12 00:02:37 2011
@@ -88,6 +88,7 @@ public class DefaultIframeUriManagerTest
false, // isDebug
false, // ignoreCache
false, // sanitize
+ false, // cajoled
prefs, // spec-contained prefs
prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
false, // no pref substitution needed, ergo prefs in fragment
@@ -127,6 +128,51 @@ public class DefaultIframeUriManagerTest
}
@Test
+ public void typeHtmlCajoled() throws Exception {
+ String prefKey = "prefKey";
+ String prefVal = "prefVal";
+ Map<String, String> prefs = Maps.newHashMap();
+ prefs.put(prefKey, prefVal);
+ List<String> features = Lists.newArrayList();
+
+ // Make the gadget.
+ Gadget gadget = mockGadget(
+ SPEC_URI.toString(),
+ false, // not type=url
+ false, // isDebug
+ false, // ignoreCache
+ false, // sanitize
+ true, // cajoled
+ prefs, // spec-contained prefs
+ prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
+ false, // no pref substitution needed, ergo prefs in fragment
+ features);
+
+ // Generate a default-option manager
+ TestDefaultIframeUriManager manager = makeManager(
+ false, // security token beacon not required
+ false); // locked domain not required
+
+ // Generate URI, turn into UriBuilder for validation
+ Uri result = manager.makeRenderingUri(gadget);
+ assertNotNull(result);
+
+ UriBuilder uri = new UriBuilder(result);
+ assertEquals("0", uri.getQueryParameter(Param.SANITIZE.getKey()));
+ assertEquals("1", uri.getQueryParameter(Param.CAJOLE.getKey()));
+ assertEquals(prefVal, uri.getFragmentParameter("up_" + prefKey));
+
+ // Cajoled is and added param
+ assertEquals(TYPE_HTML_NUM_BASE_PARAMS + 1, uri.getQueryParameters().size());
+ assertEquals(1, uri.getFragmentParameters().size());
+
+ assertFalse(manager.tokenForRenderingCalled());
+ assertTrue(manager.schemeCalled());
+ assertTrue(manager.ldExclusionCalled());
+ assertTrue(manager.addExtrasCalled());
+ }
+
+ @Test
public void typeHtmlBasicOptionsTpl() throws Exception {
String prefKey = "prefKey";
String prefVal = "prefVal";
@@ -141,6 +187,7 @@ public class DefaultIframeUriManagerTest
false, // isDebug
false, // ignoreCache
false, // sanitize
+ false, // cajoled
prefs, // spec-contained prefs
prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
false, // no pref substitution needed, ergo prefs in fragment
@@ -198,6 +245,7 @@ public class DefaultIframeUriManagerTest
true, // isDebug
true, // ignoreCache
true, // sanitize
+ false, // cajoled
prefs, // spec-contained prefs
prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
false, // no pref substitution needed, ergo prefs in fragment
@@ -252,6 +300,7 @@ public class DefaultIframeUriManagerTest
true, // isDebug
true, // ignoreCache
true, // sanitize
+ false, // cajoled
prefs, // spec-contained prefs
prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
false, // no pref substitution needed, ergo prefs in fragment
@@ -596,7 +645,7 @@ public class DefaultIframeUriManagerTest
Uri testUri = Uri.parse("http://foobar" + LD_SUFFIX + "/?url=http://example.com");
assertEquals(UriStatus.INVALID_DOMAIN, manager.validateRenderingUri(testUri));
-
+
config.newTransaction().addContainer(ImmutableMap
.<String, Object>builder()
.put(ContainerConfig.CONTAINER_KEY, ContainerConfig.DEFAULT_CONTAINER)
@@ -604,7 +653,7 @@ public class DefaultIframeUriManagerTest
.build()).commit();
assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(testUri));
}
-
+
private Uri makeValidationTestUri(String domain, String version) {
UriBuilder uri = new UriBuilder();
uri.setAuthority(domain);
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java Sat Mar 12 00:02:37 2011
@@ -51,35 +51,35 @@ public class UriManagerTestBase {
// Used for "feature-focused" tests, eg. security token and locked domain
protected Gadget mockGadget(String... features) {
Map<String, String> prefs = Maps.newHashMap();
- return mockGadget(SPEC_URI.toString(), false, false, false, false, prefs, prefs,
+ return mockGadget(SPEC_URI.toString(), false, false, false, false, false, prefs, prefs,
false, Lists.newArrayList(features));
}
// Used for prefs-focused tests
protected Gadget mockGadget(boolean prefsForRendering, Map<String, String> specPrefs,
Map<String, String> inPrefs) {
- return mockGadget(SPEC_URI.toString(), false, false, false, false, specPrefs,
+ return mockGadget(SPEC_URI.toString(), false, false, false, false, false, specPrefs,
inPrefs, prefsForRendering, Lists.<String>newArrayList());
}
// Used for "base" tests.
protected Gadget mockGadget(String targetUrl, boolean isTypeUrl, boolean isDebug,
- boolean ignoreCache, boolean sanitize, Map<String, String> specPrefs,
+ boolean ignoreCache, boolean sanitize, boolean cajoled, Map<String, String> specPrefs,
Map<String, String> inPrefs, boolean needsPrefSubst, List<String> features) {
return mockGadget(targetUrl, isTypeUrl, VIEW, LANG, COUNTRY, isDebug, ignoreCache,
- sanitize, specPrefs, inPrefs, needsPrefSubst, features);
+ sanitize, cajoled, specPrefs, inPrefs, needsPrefSubst, features);
}
// Used for tests that don't care much about prefs or gadget type.
protected Gadget mockGadget(boolean isDebug, boolean ignoreCache) {
return mockGadget(SPEC_URI.toString(), false, isDebug, ignoreCache,
- false, Maps.<String, String>newHashMap(),
+ false, false, Maps.<String, String>newHashMap(),
Maps.<String, String>newHashMap(), false, Lists.<String>newArrayList());
}
// Actually generates the mock gadget. Used for error (null value) tests.
protected Gadget mockGadget(String targetUrl, boolean isTypeUrl, String viewStr, String lang,
- String country, boolean isDebug, boolean ignoreCache, boolean sanitize,
+ String country, boolean isDebug, boolean ignoreCache, boolean sanitize, boolean cajoled,
Map<String, String> specPrefs, Map<String, String> inPrefs, boolean needsPrefSubst, List<String> features) {
View view = createMock(View.class);
ModulePrefs modulePrefs = createMock(ModulePrefs.class);
@@ -107,6 +107,7 @@ public class UriManagerTestBase {
expect(context.getIgnoreCache()).andReturn(ignoreCache).anyTimes();
expect(context.getToken()).andReturn(null).anyTimes();
expect(context.getSanitize()).andReturn(sanitize).anyTimes();
+ expect(context.getCajoled()).andReturn(cajoled).anyTimes();
// All Features (doesn't distinguish between transitive and not)
expect(gadget.getAllFeatures()).andReturn(features).anyTimes();