Author: ssievers
Date: Tue Feb 19 02:09:22 2013
New Revision: 1447571

URL: http://svn.apache.org/r1447571
Log:
SHINDIG-1894 | ProxyHandler does not forward User-Agent  | Patch from Marshal 
Shi.  Thanks!

Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyServlet.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java?rev=1447571&r1=1447570&r2=1447571&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
 Tue Feb 19 02:09:22 2013
@@ -208,6 +208,7 @@ public abstract class AbstractHttpCache 
    * - the resize width parameter
    * - the resize quality parameter
    * - the no_expand parameter
+   * - the User-Agent request header
    *
    * Except for the first two, all of these may be unset or <code>null</code>,
    * depending on authentication rules. See individual methods for details.  
New cache key items
@@ -234,8 +235,8 @@ public abstract class AbstractHttpCache 
         .setParam("rw", request.getParam(RESIZE_WIDTH))
         .setParam("rq", request.getParam(RESIZE_QUALITY))
         .setParam("ne", request.getParam(NO_EXPAND))
-        .setParam("rm", request.getRewriteMimeType());
-
+        .setParam("rm", request.getRewriteMimeType())
+        .setParam("ua", request.getHeader("User-Agent"));
     return keyBuilder.build();
   }
 

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java?rev=1447571&r1=1447570&r2=1447571&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
 Tue Feb 19 02:09:22 2013
@@ -86,6 +86,12 @@ public class ProxyHandler {
       // convert String into InputStream
       req.setPostBody(new ByteArrayInputStream(postBody.getBytes()));
     }
+    if (req.getHeader("User-Agent") == null) {
+      final String userAgent = uriCtx.getUserAgent();
+      if (userAgent != null) {
+        req.setHeader("User-Agent", userAgent);
+      }
+    }
     return req;
   }
 

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyServlet.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyServlet.java?rev=1447571&r1=1447570&r2=1447571&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyServlet.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyServlet.java
 Tue Feb 19 02:09:22 2013
@@ -104,6 +104,7 @@ public class ProxyServlet extends Inject
       ProxyUriManager.ProxyUri proxyUri = proxyUriManager.process(reqUri);
       SecurityToken st = AuthInfoUtil.getSecurityTokenFromRequest(request);
       proxyUri.setSecurityToken(st);
+      proxyUri.setUserAgent(request.getHeader("User-Agent"));
       // get gadget from security token
       if(proxyUri.getGadget() == null) {
         if(st != null && !st.isAnonymous()) {

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java?rev=1447571&r1=1447570&r2=1447571&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java
 Tue Feb 19 02:09:22 2013
@@ -70,6 +70,9 @@ public interface ProxyUriManager {
     // The html tag that requested this ProxyUri.
     private String htmlTagContext;
 
+    // The User-Agent from the request
+    private String userAgent;
+
     public ProxyUri(Gadget gadget, Uri resource) {
       super(gadget);
       this.resource = resource;
@@ -103,6 +106,12 @@ public interface ProxyUriManager {
       this.returnOriginalContentOnError = returnOriginalContentOnError ? "1" : 
null;
     }
 
+    public void setUserAgent(String ua) {
+      this.userAgent = ua;
+    }
+    public String getUserAgent() {
+      return userAgent;
+    }
     public void setHtmlTagContext(String htmlTagContext) {
       this.htmlTagContext = htmlTagContext;
     }

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java?rev=1447571&r1=1447570&r2=1447571&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
 Tue Feb 19 02:09:22 2013
@@ -71,7 +71,7 @@ public class AbstractHttpCacheTest {
   }
 
   private HttpRequest getMockImageRequest(String height, String width, String 
quality,
-      boolean noExpand, String mimeType) {
+      boolean noExpand, String mimeType, String ua) {
     HttpRequest request = EasyMock.createMock(HttpRequest.class);
     expect(request.getUri()).andReturn(IMAGE_URI).anyTimes();
     expect(request.getAuthType()).andReturn(AuthType.NONE).anyTimes();
@@ -81,6 +81,7 @@ public class AbstractHttpCacheTest {
     
expect(request.getParam(Param.RESIZE_QUALITY.getKey())).andReturn(quality).anyTimes();
     expect(request.getParam(Param.NO_EXPAND.getKey())).andReturn(noExpand ? 
"1" : null).anyTimes();
     expect(request.getRewriteMimeType()).andReturn(mimeType).anyTimes();
+    expect(request.getHeader("User-Agent")).andReturn(ua).anyTimes();
     replay(request);
     return request;
   }
@@ -88,13 +89,14 @@ public class AbstractHttpCacheTest {
   @Test
   public void createKeySimpleImageRequest() throws Exception {
     // Mock the Request with Image Resize (Quality) params, without rewrite 
mimeType.
-    HttpRequest request = getMockImageRequest("100", "80", "70", false, null);
+    HttpRequest request = getMockImageRequest("100", "80", "70", false, null, 
"Mozilla");
     CacheKeyBuilder key = new CacheKeyBuilder()
         .setLegacyParam(0, IMAGE_URI)
         .setLegacyParam(1, AuthType.NONE)
         .setParam("rh", "100")
         .setParam("rw", "80")
-        .setParam("rq", "70");
+        .setParam("rq", "70")
+        .setParam("ua", "Mozilla");
 
     assertEquals(key.build(), cache.createKey(request));
   }
@@ -102,7 +104,7 @@ public class AbstractHttpCacheTest {
   @Test
   public void createKeyImageRequestRewrite() throws Exception {
     // Mock the Request with Image Resize (Quality) params and specified 
rewrite mimeType.
-    HttpRequest request = getMockImageRequest("100", "80", "70", true, 
"image/jpg");
+    HttpRequest request = getMockImageRequest("100", "80", "70", true, 
"image/jpg", "Mozilla");
     CacheKeyBuilder key = new CacheKeyBuilder()
         .setLegacyParam(0, IMAGE_URI)
         .setLegacyParam(1, AuthType.NONE)
@@ -110,7 +112,8 @@ public class AbstractHttpCacheTest {
         .setParam("rw", "80")
         .setParam("rq", "70")
         .setParam("ne", "1")
-        .setParam("rm", "image/jpg");
+        .setParam("rm", "image/jpg")
+        .setParam("ua", "Mozilla");
 
     assertEquals(key.build(), cache.createKey(request));
   }

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java?rev=1447571&r1=1447570&r2=1447571&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java
 Tue Feb 19 02:09:22 2013
@@ -61,6 +61,7 @@ public class ProxyRendererTest {
   private static final Uri EXPECTED_PROXIED_HTML_HREF
       = Uri.parse("http://example.org/proxied.php?lang=all&country=ALL";);
   private static final String USER_AGENT = "TestUserAgent/1.0";
+  private static final String USER_AGENT_SET = "TestUserAgent/1.0 Shindig";
   private static final GadgetContext CONTEXT = new GadgetContext() {
     @Override
     public SecurityToken getToken() {
@@ -100,6 +101,7 @@ public class ProxyRendererTest {
   @Test
   public void renderProxied() throws Exception {
     HttpRequest request = new HttpRequest(EXPECTED_PROXIED_HTML_HREF);
+    request.setHeader("User-Agent", USER_AGENT_SET);
     HttpResponse response = new HttpResponse(PROXIED_HTML_CONTENT);
     pipeline.plainResponses.put(EXPECTED_PROXIED_HTML_HREF, response);
 
@@ -118,6 +120,7 @@ public class ProxyRendererTest {
       .toUri();
 
     HttpRequest request = new HttpRequest(resolved);
+    request.setHeader("User-Agent", USER_AGENT_SET);
     HttpResponse response = new HttpResponse(PROXIED_HTML_CONTENT);
 
     pipeline.plainResponses.put(resolved, response);
@@ -138,6 +141,7 @@ public class ProxyRendererTest {
   @Test
   public void renderProxiedRelativeBadPath() throws Exception {
     HttpRequest request = new HttpRequest(EXPECTED_PROXIED_HTML_HREF);
+    request.setHeader("User-Agent", USER_AGENT_SET);
     HttpResponse response = new HttpResponse(PROXIED_HTML_CONTENT);
     pipeline.plainResponses.put(EXPECTED_PROXIED_HTML_HREF, response);
 
@@ -158,6 +162,7 @@ public class ProxyRendererTest {
   @Test
   public void renderProxiedFromCache() throws Exception {
     HttpRequest request = new HttpRequest(EXPECTED_PROXIED_HTML_HREF);
+    request.setHeader("User-Agent", USER_AGENT_SET);
     HttpResponse response = new HttpResponse(PROXIED_HTML_CONTENT);
     cache.addResponse(request, response);
     String content = proxyRenderer.render(makeHrefGadget("none"));


Reply via email to