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"),