Author: johnh
Date: Tue Mar 16 23:52:26 2010
New Revision: 924062

URL: http://svn.apache.org/viewvc?rev=924062&view=rev
Log:
Remove need for beacons in chained proxy syntax.

Patch provided by Ziv Horesh.


Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java?rev=924062&r1=924061&r2=924062&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
 Tue Mar 16 23:52:26 2010
@@ -25,9 +25,9 @@ import com.google.inject.internal.Nullab
 import com.google.inject.name.Named;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
@@ -49,7 +49,7 @@ import java.util.Map;
  * Chained: Returned URI contains query params in its path, with the proxied
  * resource's URI appended verbatim to the end. This enables proxied SWFs
  * to perform proxied, relative-URI resource loads. Example:
- * 
http://www.example.com/gadgets/proxy/&s&refresh=1&...&e/http://www.foo.com/img.gif
+ * 
http://www.example.com/gadgets/proxy/refresh=1&.../http://www.foo.com/img.gif
  * 
  * Query param: All params are provided on the query string. Example:
  * 
http://www.example.com/gadgets/proxy?refresh=1&url=http://www.foo.com/img.gif&;...
@@ -61,8 +61,6 @@ import java.util.Map;
 public class DefaultProxyUriManager implements ProxyUriManager {
   public static final String PROXY_HOST_PARAM = "gadgets.uri.proxy.host";
   public static final String PROXY_PATH_PARAM = "gadgets.uri.proxy.path";
-  static final String CHAINED_PARAMS_START_BEACON = "&s&";
-  static final String CHAINED_PARAMS_END_BEACON = "&e";
   static final String CHAINED_PARAMS_TOKEN = "%chained_params%";
 
   private final ContainerConfig config;
@@ -137,8 +135,7 @@ public class DefaultProxyUriManager impl
     String path = getReqConfig(container, PROXY_PATH_PARAM);
     if (path.contains(CHAINED_PARAMS_TOKEN)) {
       // Chained proxy syntax. Stuff query params into the path and append URI 
verbatim at the end
-      path = path.replace(CHAINED_PARAMS_TOKEN,
-          CHAINED_PARAMS_START_BEACON + queryBuilder.getQuery() + 
CHAINED_PARAMS_END_BEACON);
+      path = path.replace(CHAINED_PARAMS_TOKEN, queryBuilder.getQuery());
       uri.setPath(path);
       String uriStr = uri.toString();
       String curUri = uriStr + (!uriStr.endsWith("/") ? "/" : "") + 
puc.getResource().toString();
@@ -169,14 +166,19 @@ public class DefaultProxyUriManager impl
       queryUri = uriIn;
     } else {
       // Check for chained query string in the path.
-      int start = uriIn.getPath().indexOf(CHAINED_PARAMS_START_BEACON);
-      int end = uriIn.getPath().indexOf(CHAINED_PARAMS_END_BEACON, start);
-      if (start >= 0 && end > start) {
-        // Looks like chained proxy syntax. Pull out params.
-        String queryStr =
-            uriIn.getPath().substring(start + 
CHAINED_PARAMS_START_BEACON.length(), end);
-        queryUri = new UriBuilder().setQuery(queryStr).toUri();
-        container = queryUri.getQueryParameter(Param.CONTAINER.getKey());
+      String containerStr = Param.CONTAINER.getKey() + "=";
+      String path = uriIn.getPath();
+      int start = path.indexOf(containerStr);
+      if (start > 0) {
+        start += containerStr.length();
+        int end = path.indexOf("&", start);
+        if (end < start) {
+          end = path.indexOf("/", start);
+        }
+        if (end > start) {
+          // Looks like chained proxy syntax. Pull out params.
+          container = path.substring(start,end);
+        }
         if (container != null) {
           String proxyPath = config.getString(container, PROXY_PATH_PARAM);
           if (proxyPath != null) {
@@ -186,20 +188,23 @@ public class DefaultProxyUriManager impl
             // substring of the "full" URI, after the chained proxy prefix. We
             // first search for the pre- and post-fixes of the original 
/pre/%chained_params%/post
             // ContainerConfig value, and take the URI as everything beyond 
that point.
-            String startToken = chainedChunks[0], endToken = "/";
+            String startToken = chainedChunks[0];
+            String endToken = "/";
             if (chainedChunks.length == 2) {
               endToken = chainedChunks[1];
             }
             
             // Pull URI out of original inUri's full representation.
             String fullProxyUri = uriIn.toString();
-            int startIx = fullProxyUri.indexOf(startToken);
-            int endIx = fullProxyUri.indexOf(endToken, startIx + 
startToken.length());
+            int startIx = fullProxyUri.indexOf(startToken) + 
startToken.length();
+            int endIx = fullProxyUri.indexOf(endToken, startIx);
             if (startIx > 0 && endIx > 0) {
+              queryUri = new 
UriBuilder().setQuery(fullProxyUri.substring(startIx,endIx)).toUri();
               uriStr = fullProxyUri.substring(endIx + endToken.length());
               while (uriStr.startsWith("/")) {
                 uriStr = uriStr.substring(1);
               }
+              
             }
           }
         }

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java?rev=924062&r1=924061&r2=924062&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java
 Tue Mar 16 23:52:26 2010
@@ -18,10 +18,10 @@
  */
 package org.apache.shindig.gadgets.uri;
 
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
 import static org.easymock.classextension.EasyMock.createMock;
-import static org.easymock.classextension.EasyMock.expect;
-import static org.easymock.classextension.EasyMock.eq;
-import static org.easymock.classextension.EasyMock.isA;
 import static org.easymock.classextension.EasyMock.replay;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -29,14 +29,13 @@ import static org.junit.Assert.assertTru
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
-import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.uri.ProxyUriManager.ProxyUri;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
-
 import org.junit.Test;
 
 import java.util.List;
@@ -211,8 +210,7 @@ public class DefaultProxyUriManagerTest 
     String path = "/proxy/" + DefaultProxyUriManager.CHAINED_PARAMS_TOKEN + 
"/path";
     DefaultProxyUriManager manager = makeManager(host, path, null);
     Uri testUri = new UriBuilder().setAuthority(host).setPath(
-        "/proxy/" + DefaultProxyUriManager.CHAINED_PARAMS_START_BEACON + 
"&refresh=123" +
-        DefaultProxyUriManager.CHAINED_PARAMS_END_BEACON + 
"/path/http://foo.com";).toUri();
+        "/proxy/refresh=123/path/http://foo.com";).toUri();
     manager.process(testUri);
   }
   
@@ -232,8 +230,8 @@ public class DefaultProxyUriManagerTest 
     String path = "/proxy/" + DefaultProxyUriManager.CHAINED_PARAMS_TOKEN + 
"/path";
     DefaultProxyUriManager manager = makeManager(host, path, null);
     Uri testUri = new UriBuilder().setAuthority(host).setPath(
-        "/proxy/" + DefaultProxyUriManager.CHAINED_PARAMS_START_BEACON + 
"&container=" +
-        CONTAINER + DefaultProxyUriManager.CHAINED_PARAMS_END_BEACON + 
"/path/").toUri();
+        "/proxy/container=" +
+        CONTAINER + "/path/").toUri();
     manager.process(testUri);
   }
   
@@ -296,10 +294,8 @@ public class DefaultProxyUriManagerTest 
     
     int proxyEnd = uriStr.indexOf("/proxy/") + "/proxy/".length();
     String paramsUri = uriStr.substring(
-        proxyEnd +
-        DefaultProxyUriManager.CHAINED_PARAMS_START_BEACON.length(),
-        (endOfPath ? uriStr.indexOf("/", proxyEnd) : uriStr.indexOf("/path"))
-        - DefaultProxyUriManager.CHAINED_PARAMS_END_BEACON.length());
+        proxyEnd,
+        (endOfPath ? uriStr.indexOf("/", proxyEnd) : uriStr.indexOf("/path")));
     uri = new UriBuilder().setQuery(paramsUri).toUri();
     
     // "Raw" query param verification.


Reply via email to