Author: etnu
Date: Fri Aug 22 12:25:53 2008
New Revision: 688178

URL: http://svn.apache.org/viewvc?rev=688178&view=rev
Log:
Began migrating SecurityToken passing to HttpRequest, as well as including 
request context information (Gadget + container) in all requests. The objective 
here is to unify the parameters passed through HttpFetchers so that uniform 
logging, monitoring, and policy enforcement can be achieved.

The "gadget" and "container" fields are duplicated in secure contexts (that is, 
contexts where a SecurityToken is present), but since we can't guarantee their 
integrity anyway we should treat them as different.

Still missing:

- Rewriters only pass gadget url, not container. This makes it impossible to 
support per-container defualt rewriting rules at present.
- No context is passed for manifest (gadget spec / message bundle) retrieval. 
This is probably not important as these files are generally shared between 
containers anyway. For privilaged gadget access, a custom GadgetSpecFactory can 
still be implemented.
- It's not possible to test that the token, gadget url, and container are 
passed in these requests at present. Significant test refactoring will be 
necessary to achieve that.

Next step:

- Remove security token passing for signed fetch / oauth. We may just punt on 
this one as Brian Eaton's work to unify signed fetch and oauth fetch is 
forthcoming.


Modified:
    incubator/shindig/trunk/features/core.io/io.js
    incubator/shindig/trunk/features/core.io/iotest.js
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
    
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/ProxyBaseTest.java

Modified: incubator/shindig/trunk/features/core.io/io.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/io.js?rev=688178&r1=688177&r2=688178&view=diff
==============================================================================
--- incubator/shindig/trunk/features/core.io/io.js (original)
+++ incubator/shindig/trunk/features/core.io/io.js Fri Aug 22 12:25:53 2008
@@ -304,6 +304,8 @@
         headers["Content-Type"] = "application/x-www-form-urlencoded";
       }
 
+      var urlParams = gadgets.util.getUrlParameters();
+
       var paramData = {
         url: url,
         httpMethod : httpMethod,
@@ -316,8 +318,8 @@
         getSummaries : !!params.GET_SUMMARIES,
         signOwner : signOwner || "true",
         signViewer : signViewer || "true",
-        gadget : gadgets.util.getUrlParameters().url,
-
+        gadget : urlParams.url,
+        container : urlParams.container || urlParams.synd || "default",
         // should we bypass gadget spec cache (e.g. to read OAuth provider 
URLs)
         bypassSpecCache : gadgets.util.getUrlParameters().nocache || ""
       };

Modified: incubator/shindig/trunk/features/core.io/iotest.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/iotest.js?rev=688178&r1=688177&r2=688178&view=diff
==============================================================================
--- incubator/shindig/trunk/features/core.io/iotest.js (original)
+++ incubator/shindig/trunk/features/core.io/iotest.js Fri Aug 22 12:25:53 2008
@@ -26,7 +26,7 @@
 IoTest.prototype.setUp = function() {
   this.oldGetUrlParameters = gadgets.util.getUrlParameters;
   gadgets.util.getUrlParameters = function() {
-    return { "st" : "authtoken", "url" : "http://www.gadget.com/gadget.xml"; };
+    return { "st" : "authtoken", "url" : "http://www.gadget.com/gadget.xml";, 
"container" : "foo" };
   };
   if (!shindig.auth) {
     shindig.auth = new shindig.Auth();
@@ -96,6 +96,7 @@
   this.setArg(req, inBody, "signOwner", "true");
   this.setArg(req, inBody, "getSummaries", "false");
   this.setArg(req, inBody, "gadget", "http://www.gadget.com/gadget.xml";);
+  this.setArg(req, inBody, "container", "foo");
   this.setArg(req, inBody, "headers", "");
   this.setArg(req, inBody, "numEntries", "3");
   this.setArg(req, inBody, "postData", "");

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java?rev=688178&r1=688177&r2=688178&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
 Fri Aug 22 12:25:53 2008
@@ -177,10 +177,13 @@
   private final GadgetContext context;
 
   public HttpResponse call() {
-    HttpRequest request = new HttpRequest(Uri.fromJavaUri(preload.getHref()))
-        .setSignOwner(preload.isSignOwner())
-        .setSignViewer(preload.isSignViewer());
     try {
+      HttpRequest request = new HttpRequest(Uri.fromJavaUri(preload.getHref()))
+          .setSignOwner(preload.isSignOwner())
+          .setSignViewer(preload.isSignViewer())
+          .setContainer(context.getContainer())
+          .setSecurityToken(context.getToken())
+          .setGadget(Uri.fromJavaUri(context.getUrl()));
       switch (preload.getAuth()) {
         case NONE:
           return preloadFetcherFactory.get().fetch(request);

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=688178&r1=688177&r2=688178&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
 Fri Aug 22 12:25:53 2008
@@ -97,6 +97,8 @@
       authToken = extractAndValidateToken(request);
     }
 
+    rcr.setSecurityToken(authToken);
+
     // Build the chain of fetchers that will handle the request
     HttpFetcher fetcher = getHttpFetcher(auth, authToken, request);
 
@@ -132,7 +134,8 @@
 
     HttpRequest req = new HttpRequest(url)
         .setMethod(getParameter(request, METHOD_PARAM, "GET"))
-        .setPostBody(getParameter(request, POST_DATA_PARAM, "").getBytes());
+        .setPostBody(getParameter(request, POST_DATA_PARAM, "").getBytes())
+        .setContainer(getContainer(request));
 
     String headerData = getParameter(request, HEADERS_PARAM, "");
     if (headerData.length() > 0) {
@@ -197,8 +200,10 @@
       case NONE:
         return contentFetcherFactory.get();
       case SIGNED:
+        // TODO: Remove token from signature and use what's on the request 
object instead.
         return contentFetcherFactory.getSigningFetcher(token);
       case OAUTH:
+        // TODO: Remove token from signature, return what's on the request 
object.
         return contentFetcherFactory.getOAuthFetcher(token, new 
OAuthArguments(request));
       default:
         return contentFetcherFactory.get();

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=688178&r1=688177&r2=688178&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
 Fri Aug 22 12:25:53 2008
@@ -18,6 +18,7 @@
  */
 package org.apache.shindig.gadgets.servlet;
 
+import org.apache.shindig.common.ContainerConfig;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
 import org.apache.shindig.gadgets.GadgetException;
@@ -34,6 +35,9 @@
   public static final String URL_PARAM = "url";
   public static final String REFRESH_PARAM = "refresh";
   public static final String GADGET_PARAM = "gadget";
+  public static final String CONTAINER_PARAM = "container";
+  // Old form container name, retained for legacy compatibility.
+  public static final String SYND_PARAM = "synd";
 
   // Public because of rewriter. Rewriter should be cleaned up.
   public static final String REWRITE_MIME_TYPE_PARAM = "rewriteMime";
@@ -80,6 +84,17 @@
   }
 
   /**
+   * Extracts the container name from the request.
+   */
+  protected String getContainer(HttpServletRequest request) {
+    String container = getParameter(request, CONTAINER_PARAM, null);
+    if (container == null) {
+      container = getParameter(request, SYND_PARAM, 
ContainerConfig.DEFAULT_CONTAINER);
+    }
+    return container;
+  }
+
+  /**
    * Sets cache control headers for the response.
    */
   protected void setResponseHeaders(HttpServletRequest 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=688178&r1=688177&r2=688178&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
 Fri Aug 22 12:25:53 2008
@@ -74,6 +74,7 @@
 
     HttpRequest req = new HttpRequest(url);
 
+    req.setContainer(getContainer(request));
     if (request.getParameter(GADGET_PARAM) != null) {
       req.setGadget(Uri.parse(request.getParameter(GADGET_PARAM)));
     }

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyBaseTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyBaseTest.java?rev=688178&r1=688177&r2=688178&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyBaseTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyBaseTest.java
 Fri Aug 22 12:25:53 2008
@@ -19,6 +19,7 @@
 package org.apache.shindig.gadgets.servlet;
 
 import com.google.common.collect.Maps;
+import org.apache.shindig.common.ContainerConfig;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.HttpResponse;
@@ -185,4 +186,27 @@
 
     assertEquals("not foo", proxy.getParameter(request, "foo", "not foo"));
   }
+
+  public void testGetContainerWithContainer() {
+    expect(request.getParameter(ProxyBase.CONTAINER_PARAM)).andReturn("bar");
+    replay();
+
+    assertEquals("bar", proxy.getContainer(request));
+  }
+
+  public void testGetContainerWithSynd() {
+    expect(request.getParameter(ProxyBase.CONTAINER_PARAM)).andReturn(null);
+    expect(request.getParameter(ProxyBase.SYND_PARAM)).andReturn("syndtainer");
+    replay();
+
+    assertEquals("syndtainer", proxy.getContainer(request));
+  }
+
+  public void testGetContainerNoParam() {
+    expect(request.getParameter(ProxyBase.CONTAINER_PARAM)).andReturn(null);
+    expect(request.getParameter(ProxyBase.SYND_PARAM)).andReturn(null);
+    replay();
+
+    assertEquals(ContainerConfig.DEFAULT_CONTAINER, 
proxy.getContainer(request));
+  }
 }


Reply via email to