Author: ssievers
Date: Mon May 14 12:01:36 2012
New Revision: 1338171
URL: http://svn.apache.org/viewvc?rev=1338171&view=rev
Log:
SHINDIG-1765 | Replace the unparseable cruft message "throw 1; < don't be evil'
>" constant in client and server with a container config | Patch from Marshall
Shi. Thanks!
Modified:
shindig/trunk/config/container.js
shindig/trunk/features/src/main/javascript/features/core.io/io.js
shindig/trunk/features/src/test/javascript/features/core.io/iotest.js
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
Modified: shindig/trunk/config/container.js
URL:
http://svn.apache.org/viewvc/shindig/trunk/config/container.js?rev=1338171&r1=1338170&r2=1338171&view=diff
==============================================================================
--- shindig/trunk/config/container.js (original)
+++ shindig/trunk/config/container.js Mon May 14 12:01:36 2012
@@ -157,7 +157,9 @@
// Note: ${Cur['gadgets.uri.proxy.path']} is an open proxy. Be careful how
you expose this!
// Note: These urls should be protocol relative (start with //)
"proxyUrl" :
"//${Cur['default.domain.unlocked.client']}${Cur['gadgets.uri.proxy.path']}?container=%container%&refresh=%refresh%&url=%url%%rewriteMime%",
- "jsonProxyUrl" :
"//${Cur['default.domain.locked.client']}${CONTEXT_ROOT}/gadgets/makeRequest"
+ "jsonProxyUrl" :
"//${Cur['default.domain.locked.client']}${CONTEXT_ROOT}/gadgets/makeRequest",
+ // Note: this setting MUST be supplied in every container config object,
as there is no default if it is not supplied.
+ "unparseableCruft" : "throw 1; < don't be evil' >"
},
"views" : {
"profile" : {
Modified: shindig/trunk/features/src/main/javascript/features/core.io/io.js
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/core.io/io.js?rev=1338171&r1=1338170&r2=1338171&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/core.io/io.js (original)
+++ shindig/trunk/features/src/main/javascript/features/core.io/io.js Mon May
14 12:01:36 2012
@@ -118,8 +118,6 @@ gadgets.io = function() {
callback(transformResponseData(params, data));
}
- var UNPARSEABLE_CRUFT = "throw 1; < don't be evil' >";
-
/**
* Handles XHR callback processing.
*
@@ -134,6 +132,7 @@ gadgets.io = function() {
}
var txt = xobj['responseText'];
+ var UNPARSEABLE_CRUFT = config['unparseableCruft'];
// remove unparseable cruft used to prevent cross-site script inclusion
var offset = txt.indexOf(UNPARSEABLE_CRUFT) + UNPARSEABLE_CRUFT.length;
Modified: shindig/trunk/features/src/test/javascript/features/core.io/iotest.js
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/test/javascript/features/core.io/iotest.js?rev=1338171&r1=1338170&r2=1338171&view=diff
==============================================================================
--- shindig/trunk/features/src/test/javascript/features/core.io/iotest.js
(original)
+++ shindig/trunk/features/src/test/javascript/features/core.io/iotest.js Mon
May 14 12:01:36 2012
@@ -40,14 +40,16 @@ IoTest.prototype.setUp = function() {
document.scripts = [];
gadgets.config.init({ "core.io" : {
"proxyUrl" :
"http://example.com/proxy?url=%url%&refresh=%refresh%&g=%gadget%&c=%container%",
- "jsonProxyUrl" : "http://example.com/json" }});
+ "jsonProxyUrl" : "http://example.com/json",
+ "unparseableCruft" : "throw 1; < don't be evil' >"}});
gadgets.io.preloaded_ = [];
};
IoTest.prototype.setSchemaless = function() {
gadgets.config.init({ "core.io" : {
"proxyUrl" :
"//example.com/proxy?url=%url%&refresh=%refresh%&g=%gadget%&c=%container%",
- "jsonProxyUrl" : "http://example.com/json" }});
+ "jsonProxyUrl" : "http://example.com/json",
+ "unparseableCruft" : "throw 1; < don't be evil' >"}});
gadgets.io.preloaded_ = [];
};
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=1338171&r1=1338170&r2=1338171&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
Mon May 14 12:01:36 2012
@@ -71,7 +71,6 @@ import com.google.inject.Singleton;
@Singleton
public class MakeRequestHandler implements ContainerConfig.ConfigObserver {
// Relaxed visibility for ease of integration. Try to avoid relying on these.
- public static final String UNPARSEABLE_CRUFT = "throw 1; < don't be evil' >";
public static final String POST_DATA_PARAM = "postData";
public static final String METHOD_PARAM = "httpMethod";
public static final String HEADERS_PARAM = "headers";
@@ -84,8 +83,12 @@ public class MakeRequestHandler implemen
public static final String MAX_POST_SIZE_KEY =
"gadgets.jsonProxyUrl.maxPostSize";
public static final String MULTI_PART_FORM_POST = "MPFP";
public static final String MULTI_PART_FORM_POST_IFRAME = "iframe";
+ public static final String GADGETS_FEATURES = "gadgets.features";
+ public static final String CORE_IO = "core.io";
+ public static final String UNPARSEABLE_CRUFT = "unparseableCruft";
public static final int MAX_POST_SIZE_DEFAULT = 5 * 1024 * 1024; // 5 MiB
+ private final Map<String, String> unparseableCruftMsgs;
private final RequestPipeline requestPipeline;
private final ResponseRewriterRegistry contentRewriterRegistry;
private final Provider<FeedProcessor> feedProcessorProvider;
@@ -109,6 +112,7 @@ public class MakeRequestHandler implemen
this.processor = processor;
this.lockedDomainService = lockedDomainService;
this.maxPostSizes = Maps.newConcurrentMap();
+ this.unparseableCruftMsgs = Maps.newConcurrentMap();
config.addConfigObserver(this, true);
}
@@ -182,12 +186,12 @@ public class MakeRequestHandler implemen
if ("1".equals(getParameter(request, MULTI_PART_FORM_POST_IFRAME, null))) {
response.setContentType("text/html");
out.write("<html><head></head><body><textarea>");
- out.write(UNPARSEABLE_CRUFT);
+ out.write(this.unparseableCruftMsgs.get(container));
out.write(output);
out.write("</textarea></body></html>");
} else {
response.setContentType("application/json");
- out.write(UNPARSEABLE_CRUFT + output);
+ out.write(this.unparseableCruftMsgs.get(container) + output);
}
}
@@ -472,9 +476,17 @@ public class MakeRequestHandler implemen
maxPostSize = MAX_POST_SIZE_DEFAULT;
}
maxPostSizes.put(container, maxPostSize);
+ Map<String, Map<String, String>> features = config.getMap(container,
GADGETS_FEATURES);
+ if (features != null) {
+ Map<String, String> coreIO = (Map<String, String>)
features.get(CORE_IO);
+ if (coreIO != null) {
+ unparseableCruftMsgs.put(container, coreIO.get(UNPARSEABLE_CRUFT));
+ }
+ }
}
for (String container : removed) {
maxPostSizes.remove(container);
+ unparseableCruftMsgs.remove(container);
}
}
}
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java?rev=1338171&r1=1338170&r2=1338171&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
Mon May 14 12:01:36 2012
@@ -150,8 +150,9 @@ public class MakeRequestHandlerTest exte
private JSONObject extractJsonFromResponse() throws JSONException {
String body = recorder.getResponseAsString();
- assertStartsWith(MakeRequestHandler.UNPARSEABLE_CRUFT, body);
- body = body.substring(MakeRequestHandler.UNPARSEABLE_CRUFT.length());
+ String defaultCruftMsg = "throw 1; < don't be evil' >";
+ assertStartsWith(defaultCruftMsg, body);
+ body = body.substring(defaultCruftMsg.length());
return new JSONObject(body).getJSONObject(REQUEST_URL.toString());
}
@@ -164,9 +165,10 @@ public class MakeRequestHandlerTest exte
JSONObject config = new JSONObject('{' + ContainerConfig.DEFAULT_CONTAINER
+ ':' +
"{'gadgets.container': ['default']," +
- "'gadgets.features':{views:" +
- "{aliased: {aliases: ['some-alias', 'alias']}}" +
- "}}}");
+ "'gadgets.features':{views:" +
+ "{aliased: {aliases: ['some-alias', 'alias']}}" +
+ ",'core.io':" +
+ "{unparseableCruft :\"throw 1; < don't be evil' >\"}}}}");
containerConfig = new JsonContainerConfig(config,
Expressions.forTesting());
ldService = new HashLockedDomainService(containerConfig, false, new
HashShaLockedDomainPrefixGenerator());
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java?rev=1338171&r1=1338170&r2=1338171&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
Mon May 14 12:01:36 2012
@@ -77,9 +77,10 @@ public class MakeRequestServletTest exte
public void setUp() throws Exception {
JSONObject config = new JSONObject('{' + ContainerConfig.DEFAULT_CONTAINER
+ ':' +
"{'gadgets.container': ['default']," +
- "'gadgets.features':{views:" +
- "{aliased: {aliases: ['some-alias', 'alias']}}" +
- "}}}");
+ "'gadgets.features':{views:" +
+ "{aliased: {aliases: ['some-alias', 'alias']}}" +
+ ",'core.io':" +
+ "{unparseableCruft :\"throw 1; < don't be evil' >\"}}}}");
containerConfig = new JsonContainerConfig(config,
Expressions.forTesting());
Gadget gadget = mock(Gadget.class);
@@ -111,8 +112,9 @@ public class MakeRequestServletTest exte
private void assertResponseOk(int expectedStatus, String expectedBody)
throws JSONException {
if (recorder.getHttpStatusCode() == HttpServletResponse.SC_OK) {
String body = recorder.getResponseAsString();
- assertStartsWith(MakeRequestHandler.UNPARSEABLE_CRUFT, body);
- body = body.substring(MakeRequestHandler.UNPARSEABLE_CRUFT.length());
+ String defaultCruftMsg = "throw 1; < don't be evil' >";
+ assertStartsWith(defaultCruftMsg, body);
+ body = body.substring(defaultCruftMsg.length());
JSONObject object = new JSONObject(body);
object = object.getJSONObject(REQUEST_URL.toString());
assertEquals(expectedStatus, object.getInt("rc"));