You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by li...@inuus.com on 2010/06/03 21:27:05 UTC

inject anonymous token via gadgets.config + shindig.auth in container mode (issue1523041)

Reviewers: mhermanto, fargo, shindig.remailer_gmail.com,

Message:
curious if this approach is the correct way to go...


Description:
this is a first pass at adding an anonymous container token to the
container javascript output.

Doing this I realized a few things:

* gadgets.config code for shindig.auth is broken.  (requests
shindig.auth when feature is named core.auth)

* We should probably make a GadgetConfigContributor class that can
dynamically change this via code.  Could be implemented as a map
Multibinding of feature->contributorclass



Please review this at http://codereview.appspot.com/1523041/show

Affected files:
   features/src/main/javascript/features/container/feature.xml
   M  
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java


Index: features/src/main/javascript/features/container/feature.xml
diff --git a/features/src/main/javascript/features/container/feature.xml  
b/features/src/main/javascript/features/container/feature.xml
index  
ec5209bcaa7c331db218e08a41ceb7ab4910962f..d96fa8007e8d0fc0d5af7e3236539072dc8327fa  
100644
--- a/features/src/main/javascript/features/container/feature.xml
+++ b/features/src/main/javascript/features/container/feature.xml
@@ -21,6 +21,7 @@ under the License.
    <name>container</name>
    <dependency>globals</dependency>
    <dependency>core.log</dependency>
+  <dependency>core.auth</dependency>
    <dependency>core.util</dependency>
    <dependency>osapi</dependency>
    <dependency>rpc</dependency>
Index:  
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
diff --git  
a/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java  
b/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
index  
fed4f9e1baf16f7c741812427220dc928bad3f2f..ca857cfed2d8877e70cdfc6b6330cd2fdcb369c4  
100644
---  
a/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
+++  
b/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
@@ -23,6 +23,10 @@ import com.google.common.collect.Maps;

  import org.apache.commons.lang.StringEscapeUtils;
  import org.apache.commons.lang.StringUtils;
+import org.apache.shindig.auth.AnonymousSecurityToken;
+import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.auth.SecurityTokenDecoder;
+import org.apache.shindig.auth.SecurityTokenException;
  import org.apache.shindig.common.JsonSerializer;
  import org.apache.shindig.common.servlet.HttpUtil;
  import org.apache.shindig.common.servlet.InjectedServlet;
@@ -35,6 +39,7 @@ import  
org.apache.shindig.gadgets.features.FeatureRegistry;
  import org.apache.shindig.gadgets.features.FeatureResource;

  import com.google.inject.Inject;
+import org.json.simple.JSONObject;

  import java.io.IOException;
  import java.util.Collection;
@@ -76,6 +81,12 @@ public class JsServlet extends InjectedServlet {
      this.containerConfig = containerConfig;
    }

+  private SecurityTokenDecoder securityTokenCodec;
+  @Inject
+  public void setSecurityTokenCodec(SecurityTokenDecoder  
securityTokenCodec) {
+    this.securityTokenCodec = securityTokenCodec;
+  }
+
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
@@ -143,7 +154,7 @@ public class JsServlet extends InjectedServlet {
      if (context == RenderingContext.CONTAINER) {
        // Append some container specific things

-      Map<String, Object> features =  
containerConfig.getMap(ctx.getContainer(), "gadgets.features");
+      Map<String, Object> features =  
containerConfig.getMap(container, "gadgets.features");
        Map<String, Object> config =  
Maps.newHashMapWithExpectedSize(features == null ? 2 : features.size() + 2);

        if (features != null) {
@@ -153,6 +164,20 @@ public class JsServlet extends InjectedServlet {
            if (conf != null) {
              config.put(name, conf);
            }
+          // Generate a default auth token
+          if ("core.auth".equals(name)) {
+            // Inject an anonymous security token TODO set TTL based on  
cachability of this JS?
+            SecurityToken containerToken = new  
AnonymousSecurityToken(ctx.getContainer(),0,"*", 1000L * 60 * 60 * 24);
+            JSONObject authconfig = new JSONObject();
+            config.put("core.auth", authconfig);
+
+            try {
+              authconfig.put("authToken",  
securityTokenCodec.encodeToken(containerToken));
+
+            } catch (SecurityTokenException e) {
+              // ignore
+            }
+          }
          }
           
jsData.append("gadgets.config.init(").append(JsonSerializer.serialize(config)).append(");\n");
        }