You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by ga...@apache.org on 2010/10/15 07:10:18 UTC
svn commit: r1022821 - in /shindig/trunk/java/gadgets/src:
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/shindig/gadgets/uri/
Author: gagan
Date: Fri Oct 15 05:10:18 2010
New Revision: 1022821
URL: http://svn.apache.org/viewvc?rev=1022821&view=rev
Log:
patch by gagan.goku | Issue 2435041: Passing accel container correctly when making normalized accel url | http://codereview.appspot.com/2435041/
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManager.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriUtils.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java?rev=1022821&r1=1022820&r2=1022821&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java Fri Oct 15 05:10:18 2010
@@ -165,13 +165,13 @@ public class AccelHandler {
/**
* Build an HttpRequest object encapsulating the request details as requested
* by the user.
- * @param request The http request.
+ * @param httpRequest The http request.
* @param uriToProxyOrRewrite The parsed uri to proxy or rewrite through
* accel servlet.
* @return Remote content request based on the parameters sent from the client.
* @throws GadgetException In case the data could not be fetched.
*/
- protected HttpRequest buildHttpRequest(HttpRequest request,
+ protected HttpRequest buildHttpRequest(HttpRequest httpRequest,
ProxyUriManager.ProxyUri uriToProxyOrRewrite)
throws GadgetException {
Uri tgt = uriToProxyOrRewrite.getResource();
@@ -182,14 +182,21 @@ public class AccelHandler {
}
// Copy the post body if it exists.
- UriUtils.copyRequestData(request, req);
+ UriUtils.copyRequestData(httpRequest, req);
// Set and copy headers.
- ServletUtil.setXForwardedForHeader(request, req);
+ ServletUtil.setXForwardedForHeader(httpRequest, req);
UriUtils.copyRequestHeaders(
- request, req,
- UriUtils.DisallowedHeaders.POST_INCOMPATIBLE_DIRECTIVES);
+ httpRequest, req,
+ UriUtils.DisallowedHeaders.POST_INCOMPATIBLE_DIRECTIVES,
+ UriUtils.DisallowedHeaders.HOST_HEADER);
+
+ // Since the Host header of httpRequest could be pointing to the shindig
+ // host (in case of a normalized request), we do not copy the Host header
+ // as is. Instead we explicitly set it to the authority of the resource
+ // being fetched as shown below.
+ req.setHeader("Host", tgt.getAuthority());
req.setFollowRedirects(false);
return req;
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManager.java?rev=1022821&r1=1022820&r2=1022821&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManager.java Fri Oct 15 05:10:18 2010
@@ -20,10 +20,12 @@ package org.apache.shindig.gadgets.uri;
import com.google.common.collect.ImmutableList;
import com.google.inject.Inject;
+
import org.apache.commons.lang.StringUtils;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.rewrite.DomWalker;
@@ -44,12 +46,21 @@ public class DefaultAccelUriManager impl
public DefaultAccelUriManager(ContainerConfig config,
ProxyUriManager proxyUriManager) {
this.proxyUriManager = proxyUriManager;
- accelHost = config.getString(CONTAINER, PROXY_HOST_PARAM);
- accelPath = config.getString(CONTAINER, PROXY_PATH_PARAM);
+ accelHost = config.getString(AccelUriManager.CONTAINER, PROXY_HOST_PARAM);
+ accelPath = config.getString(AccelUriManager.CONTAINER, PROXY_PATH_PARAM);
}
public Uri parseAndNormalize(HttpRequest httpRequest) throws GadgetException {
+ // Make a gadget object with the accel container.
Gadget gadget = DomWalker.makeGadget(httpRequest);
+ gadget.setContext(new GadgetContext(gadget.getContext()) {
+ @Override
+ public String getContainer() {
+ return AccelUriManager.CONTAINER;
+ }
+ });
+
+ // Normalize the request url to proxy uri form.
ProxyUriManager.ProxyUri proxied = looksLikeAccelUri(httpRequest.getUri()) ?
proxyUriManager.process(httpRequest.getUri()) : new ProxyUriManager.ProxyUri(
gadget, httpRequest.getUri());
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriUtils.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriUtils.java?rev=1022821&r1=1022820&r2=1022821&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriUtils.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriUtils.java Fri Oct 15 05:10:18 2010
@@ -62,7 +62,9 @@ public final class UriUtils {
// Headers that the fetcher itself would like to fill. For example,
// httpclient library crashes if Content-Length header is set in the
// request being fetched.
- POST_INCOMPATIBLE_DIRECTIVES(ImmutableSet.of("content-length"));
+ POST_INCOMPATIBLE_DIRECTIVES(ImmutableSet.of("content-length")),
+
+ HOST_HEADER(ImmutableSet.of("host"));
// Miscellaneous headers we should take care of, but are left for now.
// "set-cookie", "content-length", "content-encoding", "etag",
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java?rev=1022821&r1=1022820&r2=1022821&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java Fri Oct 15 05:10:18 2010
@@ -145,11 +145,12 @@ public class HtmlAccelServletTest extend
@Test
public void testHtmlAccelNoData() throws Exception {
- String url = "http://example.org/data.html";
+ Uri url = Uri.parse("http://example.org/data.html");
- HttpRequest req = new HttpRequest(Uri.parse(url));
+ HttpRequest req = new HttpRequest(url);
+ req.addHeader("Host", url.getAuthority());
expect(pipeline.execute(req)).andReturn(null).once();
- expectRequest("", url);
+ expectRequest("", url.toString());
replay();
servlet.doGet(request, recorder);
@@ -166,6 +167,7 @@ public class HtmlAccelServletTest extend
((FakeCaptureRewriter) rewriter).setContentToRewrite(REWRITE_CONTENT);
HttpRequest req = new HttpRequest(Uri.parse(url));
+ req.addHeader("Host", Uri.parse(url).getAuthority());
HttpResponse resp = new HttpResponseBuilder()
.setResponse(data.getBytes())
.setHeader("Content-Type", "text/html")
@@ -190,6 +192,7 @@ public class HtmlAccelServletTest extend
((FakeCaptureRewriter) rewriter).setContentToRewrite(data);
HttpRequest req = new HttpRequest(Uri.parse(url));
+ req.addHeader("Host", Uri.parse(url).getAuthority());
HttpResponse resp = new HttpResponseBuilder()
.setResponse(data.getBytes())
.setHeader("Content-Type", "text/html")
@@ -215,6 +218,7 @@ public class HtmlAccelServletTest extend
((FakeCaptureRewriter) rewriter).setContentToRewrite(REWRITE_CONTENT);
HttpRequest req = new HttpRequest(Uri.parse(url));
+ req.addHeader("Host", Uri.parse(url).getAuthority());
HttpResponse resp = new HttpResponseBuilder()
.setResponse(data.getBytes())
.setHeader("Content-Type", "text/html")
@@ -238,6 +242,7 @@ public class HtmlAccelServletTest extend
((FakeCaptureRewriter) rewriter).setContentToRewrite(data);
HttpRequest req = new HttpRequest(Uri.parse(url));
+ req.addHeader("Host", Uri.parse(url).getAuthority());
HttpResponse resp = new HttpResponseBuilder()
.setResponse(data.getBytes())
.setHeader("Content-Type", "text/html")
@@ -285,6 +290,7 @@ public class HtmlAccelServletTest extend
((FakeCaptureRewriter) rewriter).setContentToRewrite(data);
HttpRequest req = new HttpRequest(Uri.parse(url));
+ req.addHeader("Host", Uri.parse(url).getAuthority());
HttpResponse resp = new HttpResponseBuilder()
.setResponse(data.getBytes())
.setHeader("Content-Type", "text/html")
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java?rev=1022821&r1=1022820&r2=1022821&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java Fri Oct 15 05:10:18 2010
@@ -69,7 +69,7 @@ public class DefaultAccelUriManagerTest
public void testParseAndNormalizeNonAccelUri() throws Exception {
Uri uri = Uri.parse("http://www.example.org/index.html");
HttpRequest req = new HttpRequest(uri);
- assertEquals(Uri.parse("//apache.org/gadgets/proxy?container=default"
+ assertEquals(Uri.parse("//apache.org/gadgets/accel?container=accel"
+ "&gadget=http%3A%2F%2Fwww.example.org%2Findex.html"
+ "&debug=0&nocache=0&refresh=0"
+ "&url=http%3A%2F%2Fwww.example.org%2Findex.html"),