Author: lindner
Date: Thu Oct 15 20:41:31 2009
New Revision: 825645

URL: http://svn.apache.org/viewvc?rev=825645&view=rev
Log:
SHINDIG-100 | Add common proxy headers to help reduce abuse

Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=825645&r1=825644&r2=825645&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
 Thu Oct 15 20:41:31 2009
@@ -172,6 +172,8 @@
       req.setSecurityToken(extractAndValidateToken(request));
       req.setOAuthArguments(new OAuthArguments(auth, request));
     }
+
+    this.setRequestHeaders(request, req);
     return req;
   }
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java?rev=825645&r1=825644&r2=825645&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
 Thu Oct 15 20:41:31 2009
@@ -20,12 +20,14 @@
 
 import com.google.common.collect.ImmutableSet;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.servlet.HttpUtil;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
 import org.apache.shindig.common.util.Utf8UrlCoder;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 
 import java.io.IOException;
@@ -140,6 +142,19 @@
     }
   }
 
+  protected void setRequestHeaders(HttpServletRequest servletRequest, 
HttpRequest req) {
+    String xff  = servletRequest.getHeader("X-Forwarded-For");
+    String remoteAddr = servletRequest.getRemoteAddr();
+    if (!StringUtils.isEmpty(remoteAddr)) {
+      if (StringUtils.isEmpty(xff)) {
+        xff = servletRequest.getRemoteAddr();
+      } else {
+        xff = servletRequest.getRemoteAddr() + ", " + xff;
+      }
+      req.setHeader("X-Forwarded-For", xff);
+    }
+  }
+
   /**
    * Processes the given request.
    */

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java?rev=825645&r1=825644&r2=825645&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
 Thu Oct 15 20:41:31 2009
@@ -104,7 +104,7 @@
         // Ignore
       }
     }
-
+    this.setRequestHeaders(request, req);
     return req;
   }
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java?rev=825645&r1=825644&r2=825645&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
 Thu Oct 15 20:41:31 2009
@@ -165,10 +165,32 @@
     verify();
   }
 
+  public void testXForwardedFor() throws Exception {
+    String url = "http://example.org/";;
+    String domain = "example.org";
+
+    
expect(lockedDomainService.isSafeForOpenProxy(domain)).andReturn(true).atLeastOnce();
+    expect(request.getRemoteAddr()).andReturn("127.0.0.1").atLeastOnce();
+    setupProxyRequestMock(domain, url);
+
+    HttpRequest req = new HttpRequest(Uri.parse(url));
+    req.setHeader("X-Forwarded-For","127.0.0.1");
+
+    HttpResponse resp = new HttpResponse("Hello");
+
+    expect(pipeline.execute(req)).andReturn(resp);
+
+    replay();
+
+    proxyHandler.fetch(request, recorder);
+
+    verify();
+  }
+
   private void expectMime(String expectedMime, String contentMime, String 
outputMime)
       throws Exception {
     String url = "http://example.org/file.img?"; + 
ProxyHandler.REWRITE_MIME_TYPE_PARAM +
-        "=" + expectedMime;
+        '=' + expectedMime;
     String domain = "example.org";
 
     
expect(lockedDomainService.isSafeForOpenProxy(domain)).andReturn(true).atLeastOnce();


Reply via email to