Author: awiner
Date: Fri Jun 5 20:34:30 2009
New Revision: 782126
URL: http://svn.apache.org/viewvc?rev=782126&view=rev
Log:
SHINDIG-1082: Logged (but dropped) exception when data pipelining can't find a
social token
- Handle missing tokens explicitly in social data pipelining loads
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java?rev=782126&r1=782125&r2=782126&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
Fri Jun 5 20:34:30 2009
@@ -30,6 +30,7 @@
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.spec.PipelinedData;
import org.apache.shindig.gadgets.spec.RequestAuthenticationInfo;
@@ -43,6 +44,8 @@
import java.util.Set;
import java.util.concurrent.Callable;
+import javax.servlet.http.HttpServletResponse;
+
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -116,20 +119,30 @@
}
public PreloadedData call() throws Exception {
- Uri uri = getSocialUri(context);
+ HttpResponse response;
+
+ String token = context.getParameter("st");
+ if (token == null) {
+ response = new HttpResponseBuilder()
+ .setHttpStatusCode(HttpServletResponse.SC_FORBIDDEN)
+ .setResponseString("Security token missing")
+ .create();
+ } else {
+ Uri uri = getSocialUri(context, token);
- String socialRequestsJson = JsonSerializer.serialize(socialRequests);
- HttpRequest request = new HttpRequest(uri)
- .setIgnoreCache(context.getIgnoreCache())
- .setSecurityToken(context.getToken())
- .setMethod("POST")
- .setAuthType(AuthType.NONE)
- .setPostBody(CharsetUtil.getUtf8Bytes(socialRequestsJson))
- .addHeader("Content-Type", "application/json; charset=UTF-8")
- .setContainer(context.getContainer())
- .setGadget(context.getUrl());
+ String socialRequestsJson = JsonSerializer.serialize(socialRequests);
+ HttpRequest request = new HttpRequest(uri)
+ .setIgnoreCache(context.getIgnoreCache())
+ .setSecurityToken(context.getToken())
+ .setMethod("POST")
+ .setAuthType(AuthType.NONE)
+ .setPostBody(CharsetUtil.getUtf8Bytes(socialRequestsJson))
+ .addHeader("Content-Type", "application/json; charset=UTF-8")
+ .setContainer(context.getContainer())
+ .setGadget(context.getUrl());
- HttpResponse response = executeSocialRequest(request);
+ response = executeSocialRequest(request);
+ }
// Unpack the response into a list of PreloadedData responses
String responseText;
@@ -340,13 +353,14 @@
return error;
}
- private Uri getSocialUri(GadgetContext context) {
+ private Uri getSocialUri(GadgetContext context, String token) {
String jsonUri = config.getString(context.getContainer(),
"gadgets.osDataUri");
Preconditions.checkNotNull(jsonUri, "No JSON URI available for social
preloads");
+ Preconditions.checkNotNull(token, "No token available for social
preloads");
UriBuilder builder = UriBuilder.parse(
jsonUri.replace("%host%", context.getHost()))
- .addQueryParameter("st", context.getParameter("st"));
+ .addQueryParameter("st", token);
return builder.toUri();
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java?rev=782126&r1=782125&r2=782126&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
Fri Jun 5 20:34:30 2009
@@ -218,6 +218,33 @@
JsonAssert.assertJsonEquals(resultWithKeyP.toString(),
resultsById.get("p"));
}
+ @Test
+ /**
+ * Verify that social preloads where the request doesn't contain a token
+ * serve up 403s for the preloaded data, instead of failing the whole
request.
+ */
+ public void testSocialPreloadWithoutToken() throws Exception {
+ GadgetSpec spec = new GadgetSpec(GADGET_URL, XML);
+
+ RecordingRequestPipeline pipeline = new RecordingRequestPipeline("");
+ PipelinedDataPreloader preloader = new PipelinedDataPreloader(pipeline,
containerConfig);
+ view = "profile";
+ // But don't set the security token
+
+ Gadget gadget = new Gadget()
+ .setContext(context)
+ .setSpec(spec)
+ .setCurrentView(spec.getView("profile"));
+ PipelinedData.Batch batch = getBatch(gadget);
+ Collection<Callable<PreloadedData>> tasks = preloader.createPreloadTasks(
+ context, batch);
+ PreloadedData data = tasks.iterator().next().call();
+ JsonAssert.assertObjectEquals(
+ "[{error:{code:403,data:{content:\"Security token
missing\"}},id:\"a\"}," +
+ "{error:{code:403,data:{content:\"Security token
missing\"}},id:\"p\"}]",
+ data.toJson());
+ }
+
private Map<String, String> getResultsById(Collection<Object> result) {
Map<String, String> resultsById = Maps.newHashMap();
for (Object o : result) {