You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by aw...@apache.org on 2009/04/15 23:35:49 UTC
svn commit: r765373 [1/2] - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/http/
main/java/org/apache/shindig/gadgets/render/
main/java/org/apache/shindig/gadgets/rewrite/
main/java/org/apache/shindig/gadgets/servlet...
Author: awiner
Date: Wed Apr 15 21:35:47 2009
New Revision: 765373
URL: http://svn.apache.org/viewvc?rev=765373&view=rev
Log:
Split ContentRewriter into GadgetRewriter and RequestRewriter halves.
Allow rewriters to throw a checked RewritingException.
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java (with props)
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java (with props)
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java (with props)
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java (contents, props changed)
- copied, changed from r765024, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java (contents, props changed)
- copied, changed from r765024, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriterTest.java (contents, props changed)
- copied, changed from r765024, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriterTest.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java (contents, props changed)
- copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriterTest.java
Removed:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/NoOpContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterResults.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/AppendingRewriter.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriterTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.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/ProxyHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java Wed Apr 15 21:35:47 2009
@@ -17,11 +17,11 @@
*/
package org.apache.shindig.gadgets.http;
-import com.google.common.collect.Maps;
-
import java.util.Map;
import java.util.SortedMap;
+import com.google.common.collect.Maps;
+
/**
* Builds the cache key object.
*
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java Wed Apr 15 21:35:47 2009
@@ -20,12 +20,16 @@
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.preload.PreloadedData;
import org.apache.shindig.gadgets.preload.PreloaderService;
-import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
+import org.apache.shindig.gadgets.rewrite.MutableContent;
+import org.apache.shindig.gadgets.rewrite.RewritingException;
import org.apache.shindig.gadgets.spec.View;
import java.util.Collection;
+import java.util.List;
import com.google.inject.Inject;
@@ -35,8 +39,9 @@
public class HtmlRenderer {
public static final String PATH_PARAM = "path";
private final PreloaderService preloader;
- private final ContentRewriterRegistry rewriter;
private final ProxyRenderer proxyRenderer;
+ private final List<GadgetRewriter> gadgetRewriters;
+ private final GadgetHtmlParser htmlParser;
/**
* @param requestPipeline Used for performing the proxy request. Always ignores caching because
@@ -47,10 +52,12 @@
@Inject
public HtmlRenderer(PreloaderService preloader,
ProxyRenderer proxyRenderer,
- ContentRewriterRegistry rewriter) {
+ List<GadgetRewriter> gadgetRewriters,
+ GadgetHtmlParser htmlParser) {
this.preloader = preloader;
this.proxyRenderer = proxyRenderer;
- this.rewriter = rewriter;
+ this.gadgetRewriters = gadgetRewriters;
+ this.htmlParser = htmlParser;
}
/**
@@ -82,9 +89,16 @@
content = proxyRenderer.render(gadget);
}
- return rewriter.rewriteGadget(gadget, content);
+ MutableContent mc = new MutableContent(htmlParser, content);
+ for (GadgetRewriter rewriter : gadgetRewriters) {
+ rewriter.rewrite(gadget, mc);
+ }
+
+ return mc.getContent();
} catch (GadgetException e) {
throw new RenderingException(e.getMessage(), e);
+ } catch (RewritingException e) {
+ throw new RenderingException(e.getMessage(), e);
}
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java Wed Apr 15 21:35:47 2009
@@ -35,7 +35,7 @@
// NOTE: Sanitization only works when using the "full" Neko HTML parser. It is not recommended
// that you attempt to use sanitization without it.
bind(setLiteral)
- .annotatedWith(SanitizedRenderingContentRewriter.AllowedTags.class)
+ .annotatedWith(SanitizingGadgetRewriter.AllowedTags.class)
.toInstance(ImmutableSet.of("a", "abbr", "acronym", "area", "b", "bdo", "big", "blockquote",
"body", "br", "caption", "center", "cite", "code", "col", "colgroup", "dd", "del",
"dfn", "div", "dl", "dt", "em", "font", "h1", "h2", "h3", "h4", "h5", "h6", "head",
@@ -44,7 +44,7 @@
"tbody", "td", "tfoot", "th", "thead", "tr", "tt", "u", "ul"));
bind(setLiteral)
- .annotatedWith(SanitizedRenderingContentRewriter.AllowedAttributes.class)
+ .annotatedWith(SanitizingGadgetRewriter.AllowedAttributes.class)
.toInstance(ImmutableSet.of("abbr", "align", "alt", "axis", "bgcolor", "border",
"cellpadding", "cellspacing", "char", "charoff", "cite", "class", "clear", "color",
"cols", "colspan", "compact", "coords", "datetime", "dir", "face", "headers", "height",
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java Wed Apr 15 21:35:47 2009
@@ -33,26 +33,16 @@
import org.apache.shindig.gadgets.RenderingContext;
import org.apache.shindig.gadgets.UnsupportedFeatureException;
import org.apache.shindig.gadgets.UrlGenerator;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.preload.PreloadException;
import org.apache.shindig.gadgets.preload.PreloadedData;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
+import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
import org.apache.shindig.gadgets.rewrite.MutableContent;
-import org.apache.shindig.gadgets.rewrite.RewriterResults;
import org.apache.shindig.gadgets.spec.Feature;
import org.apache.shindig.gadgets.spec.LocaleSpec;
import org.apache.shindig.gadgets.spec.MessageBundle;
import org.apache.shindig.gadgets.spec.ModulePrefs;
import org.apache.shindig.gadgets.spec.UserPref;
import org.apache.shindig.gadgets.spec.View;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.google.inject.Inject;
-
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -68,6 +58,12 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+
/**
* Produces a valid HTML document for the gadget output, automatically inserting appropriate HTML
* document wrapper data as needed.
@@ -75,8 +71,7 @@
* Currently, this is only invoked directly since the rewriting infrastructure doesn't properly
* deal with uncacheable rewrite operations.
*
- * TODO: Break this up into multiple rewriters if and when rewriting infrastructure supports
- * parse tree manipulation without worrying about caching.
+ * TODO: Break this up into multiple rewriters.
*
* Should be:
*
@@ -84,8 +79,8 @@
* - Javascript injection (including configuration)
* - html document normalization
*/
-public class RenderingContentRewriter implements ContentRewriter {
- private static final Logger LOG = Logger.getLogger(RenderingContentRewriter.class.getName());
+public class RenderingGadgetRewriter implements GadgetRewriter {
+ private static final Logger LOG = Logger.getLogger(RenderingGadgetRewriter.class.getName());
static final String DEFAULT_CSS =
"body,td,div,span,p{font-family:arial,sans-serif;}" +
@@ -104,7 +99,7 @@
* @param messageBundleFactory Used for injecting message bundles into gadget output.
*/
@Inject
- public RenderingContentRewriter(MessageBundleFactory messageBundleFactory,
+ public RenderingGadgetRewriter(MessageBundleFactory messageBundleFactory,
ContainerConfig containerConfig,
GadgetFeatureRegistry featureRegistry,
UrlGenerator urlGenerator) {
@@ -114,15 +109,10 @@
this.urlGenerator = urlGenerator;
}
- public RewriterResults rewrite(HttpRequest req, HttpResponse resp, MutableContent content) {
- // Rendering does not rewrite arbitrary HTTP responses currently
- return null;
- }
-
- public RewriterResults rewrite(Gadget gadget, MutableContent mutableContent) {
+ public void rewrite(Gadget gadget, MutableContent mutableContent) {
// Don't touch sanitized gadgets.
if (gadget.sanitizeOutput()) {
- return RewriterResults.notCacheable();
+ return;
}
try {
@@ -177,7 +167,6 @@
injectOnLoadHandlers(body);
mutableContent.documentChanged();
- return RewriterResults.notCacheable();
} catch (GadgetException e) {
// TODO: Rewriter interface needs to be modified to handle GadgetException or
// RewriterException or something along those lines.
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java Wed Apr 15 21:35:47 2009
@@ -18,23 +18,16 @@
*/
package org.apache.shindig.gadgets.render;
-import org.apache.sanselan.ImageFormat;
-import org.apache.sanselan.ImageReadException;
-import org.apache.sanselan.Sanselan;
-import org.apache.sanselan.common.byteSources.ByteSourceInputStream;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.parse.caja.CajaCssSanitizer;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeatureFactory;
import org.apache.shindig.gadgets.rewrite.ContentRewriterUris;
+import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
import org.apache.shindig.gadgets.rewrite.LinkRewriter;
import org.apache.shindig.gadgets.rewrite.MutableContent;
import org.apache.shindig.gadgets.rewrite.ProxyingLinkRewriter;
-import org.apache.shindig.gadgets.rewrite.RewriterResults;
import org.apache.shindig.gadgets.servlet.ProxyBase;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
@@ -43,7 +36,6 @@
import org.w3c.dom.NodeList;
import org.w3c.dom.UserDataHandler;
-import java.io.IOException;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -52,8 +44,6 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -70,10 +60,7 @@
* Generally used in conjunction with a gadget that gets its dynamic behavior externally (proxied
* rendering, OSML, etc.)
*/
-public class SanitizedRenderingContentRewriter implements ContentRewriter {
- private static final Logger logger =
- Logger.getLogger(SanitizedRenderingContentRewriter.class.getName());
-
+public class SanitizingGadgetRewriter implements GadgetRewriter {
private static final Set<String> URI_ATTRIBUTES = ImmutableSet.of("href", "src");
/** Key stored as element user-data to bypass sanitization */
@@ -124,7 +111,7 @@
private final ContentRewriterUris rewriterUris;
@Inject
- public SanitizedRenderingContentRewriter(@AllowedTags Set<String> allowedTags,
+ public SanitizingGadgetRewriter(@AllowedTags Set<String> allowedTags,
@AllowedAttributes Set<String> allowedAttributes,
ContentRewriterFeatureFactory rewriterFeatureFactory,
ContentRewriterUris rewriterUris,
@@ -136,29 +123,8 @@
this.rewriterFeatureFactory = rewriterFeatureFactory;
}
- public RewriterResults rewrite(HttpRequest request, HttpResponse resp, MutableContent content) {
- // Content fetched through the proxy can stipulate that it must be sanitized.
- if (request.isSanitizationRequested()) {
- ContentRewriterFeature rewriterFeature =
- rewriterFeatureFactory.createRewriteAllFeature(request.getCacheTtl());
- if (request.getRewriteMimeType().equalsIgnoreCase("text/css")) {
- return rewriteProxiedCss(request, resp, content, rewriterFeature);
- } else if (request.getRewriteMimeType().toLowerCase().startsWith("image/")) {
- return rewriteProxiedImage(request, resp, content);
- } else {
- logger.log(Level.WARNING, "Request to sanitize unknown content type "
- + request.getRewriteMimeType()
- + " for " + request.getUri().toString());
- content.setContent("");
- return RewriterResults.notCacheable();
- }
- } else {
- // No Op
- return null;
- }
- }
- public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+ public void rewrite(Gadget gadget, MutableContent content) {
if (gadget.sanitizeOutput()) {
boolean sanitized = false;
try {
@@ -172,69 +138,6 @@
}
}
}
- return RewriterResults.notCacheable();
- }
-
- /**
- * We don't actually rewrite the image we just ensure that it is in fact a valid
- * and known image type.
- */
- private RewriterResults rewriteProxiedImage(HttpRequest request, HttpResponse resp,
- MutableContent content) {
- boolean imageIsSafe = false;
- try {
- String contentType = resp.getHeader("Content-Type");
- if (contentType == null || contentType.toLowerCase().startsWith("image/")) {
- // Unspecified or unknown image mime type.
- try {
- ImageFormat imageFormat = Sanselan
- .guessFormat(new ByteSourceInputStream(resp.getResponse(),
- request.getUri().getPath()));
- if (imageFormat == ImageFormat.IMAGE_FORMAT_UNKNOWN) {
- logger.log(Level.INFO, "Unable to sanitize unknown image type "
- + request.getUri().toString());
- return RewriterResults.notCacheable();
- }
- imageIsSafe = true;
- // Return null to indicate that no rewriting occurred
- return null;
- } catch (IOException ioe) {
- throw new RuntimeException(ioe);
- } catch (ImageReadException ire) {
- throw new RuntimeException(ire);
- }
- } else {
- return RewriterResults.notCacheable();
- }
- } finally {
- if (!imageIsSafe) {
- content.setContent("");
- }
- }
- }
-
- /**
- * Sanitize a CSS file.
- */
- private RewriterResults rewriteProxiedCss(HttpRequest request, HttpResponse response,
- MutableContent content, ContentRewriterFeature rewriterFeature) {
- String sanitized = "";
- try {
- String contentType = response.getHeader("Content-Type");
- if (contentType == null || contentType.toLowerCase().startsWith("text/")) {
- String proxyBaseNoGadget = rewriterUris.getProxyBase(request.getContainer());
- SanitizingProxyingLinkRewriter cssLinkRewriter = new SanitizingProxyingLinkRewriter(
- request.getGadget(), rewriterFeature, proxyBaseNoGadget, "text/css");
- sanitized = cssSanitizer.sanitize(content.getContent(), request.getUri(), cssLinkRewriter);
- return RewriterResults.cacheable(response.getCacheTtl());
- } else {
- return RewriterResults.notCacheable();
- }
- } finally {
- // Set sanitized content in finally to ensure it is always cleared in
- // the case of errors
- content.setContent(sanitized);
- }
}
/**
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java Wed Apr 15 21:35:47 2009
@@ -22,125 +22,48 @@
import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.Sanselan;
import org.apache.sanselan.common.byteSources.ByteSourceInputStream;
-import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.parse.caja.CajaCssSanitizer;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
+import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter.SanitizingProxyingLinkRewriter;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeatureFactory;
import org.apache.shindig.gadgets.rewrite.ContentRewriterUris;
-import org.apache.shindig.gadgets.rewrite.LinkRewriter;
import org.apache.shindig.gadgets.rewrite.MutableContent;
-import org.apache.shindig.gadgets.rewrite.ProxyingLinkRewriter;
-import org.apache.shindig.gadgets.rewrite.RewriterResults;
-import org.apache.shindig.gadgets.servlet.ProxyBase;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.UserDataHandler;
+import org.apache.shindig.gadgets.rewrite.RequestRewriter;
import java.io.IOException;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.BindingAnnotation;
import com.google.inject.Inject;
/**
- * A content rewriter that will sanitize output for simple 'badge' like display.
- *
- * This is intentionally not as robust as Caja. It is a simple element whitelist. It can not be used
- * for sanitizing either javascript or CSS. CSS is desired in the long run, but it can't be proven
- * safe in the short term.
- *
- * Generally used in conjunction with a gadget that gets its dynamic behavior externally (proxied
- * rendering, OSML, etc.)
+ * Rewriter that sanitizes CSS and image content.
*/
-public class SanitizedRenderingContentRewriter implements ContentRewriter {
+public class SanitizingRequestRewriter implements RequestRewriter {
private static final Logger logger =
- Logger.getLogger(SanitizedRenderingContentRewriter.class.getName());
+ Logger.getLogger(SanitizingRequestRewriter.class.getName());
- private static final Set<String> URI_ATTRIBUTES = ImmutableSet.of("href", "src");
-
- /** Key stored as element user-data to bypass sanitization */
- private static final String BYPASS_SANITIZATION_KEY = "shindig.bypassSanitization";
-
- /** Attributes to forcibly rewrite and require an image mime type */
- private static final Map<String, ImmutableSet<String>> PROXY_IMAGE_ATTRIBUTES =
- ImmutableMap.of("img", ImmutableSet.of("src"));
-
- /**
- * Is the Gadget to be rendered sanitized?
- * @return true if sanitization will be enabled
- */
- public static boolean isSanitizedRenderingRequest(Gadget gadget) {
- return ("1".equals(gadget.getContext().getParameter("sanitize")));
- }
-
- /**
- * Marks that an element and all its attributes are trusted content.
- * This status is preserved across {@link Node#cloneNode} calls. Be
- * extremely careful when using this, especially with {@code includingChildren}
- * set to {@code true}, as untrusted content that gets inserted (e.g, via
- * os:RenderAll in templating) would become trusted.
- *
- * @param element the trusted element
- * @param includingChildren if true, children of this element will are also
- * trusted. Never set this to true on an element that will ever have
- * untrusted children inserted (e.g., if it contains or may contain os:Render).
- */
- public static void bypassSanitization(Element element, boolean includingChildren) {
- element.setUserData(BYPASS_SANITIZATION_KEY,
- includingChildren ? Bypass.ALL : Bypass.ONLY_SELF, copyOnClone);
- }
-
- private static enum Bypass { ALL, ONLY_SELF, NONE };
- private static UserDataHandler copyOnClone = new UserDataHandler() {
- public void handle(short operation, String key, Object data, Node src, Node dst) {
- if (operation == NODE_CLONED) {
- dst.setUserData(key, data, copyOnClone);
- }
- }
- };
-
- private final Set<String> allowedTags;
- private final Set<String> allowedAttributes;
private final CajaCssSanitizer cssSanitizer;
private final ContentRewriterFeatureFactory rewriterFeatureFactory;
private final ContentRewriterUris rewriterUris;
@Inject
- public SanitizedRenderingContentRewriter(@AllowedTags Set<String> allowedTags,
- @AllowedAttributes Set<String> allowedAttributes,
+ public SanitizingRequestRewriter(
ContentRewriterFeatureFactory rewriterFeatureFactory,
ContentRewriterUris rewriterUris,
CajaCssSanitizer cssSanitizer) {
- this.allowedTags = allowedTags;
- this.allowedAttributes = allowedAttributes;
this.rewriterUris = rewriterUris;
this.cssSanitizer = cssSanitizer;
this.rewriterFeatureFactory = rewriterFeatureFactory;
}
- public RewriterResults rewrite(HttpRequest request, HttpResponse resp, MutableContent content) {
+ public boolean rewrite(HttpRequest request, HttpResponse resp, MutableContent content) {
// Content fetched through the proxy can stipulate that it must be sanitized.
if (request.isSanitizationRequested()) {
ContentRewriterFeature rewriterFeature =
- rewriterFeatureFactory.createRewriteAllFeature(request.getCacheTtl());
+ rewriterFeatureFactory.createRewriteAllFeature(request.getCacheTtl());
if (request.getRewriteMimeType().equalsIgnoreCase("text/css")) {
return rewriteProxiedCss(request, resp, content, rewriterFeature);
} else if (request.getRewriteMimeType().toLowerCase().startsWith("image/")) {
@@ -150,36 +73,19 @@
+ request.getRewriteMimeType()
+ " for " + request.getUri().toString());
content.setContent("");
- return RewriterResults.notCacheable();
+ return true;
}
} else {
// No Op
- return null;
- }
- }
-
- public RewriterResults rewrite(Gadget gadget, MutableContent content) {
- if (gadget.sanitizeOutput()) {
- boolean sanitized = false;
- try {
- new NodeSanitizer(gadget).sanitize(content.getDocument().getDocumentElement());
- content.documentChanged();
- sanitized = true;
- } finally {
- // Defensively clean the content in case of failure
- if (!sanitized) {
- content.setContent("");
- }
- }
+ return false;
}
- return RewriterResults.notCacheable();
}
/**
* We don't actually rewrite the image we just ensure that it is in fact a valid
* and known image type.
*/
- private RewriterResults rewriteProxiedImage(HttpRequest request, HttpResponse resp,
+ private boolean rewriteProxiedImage(HttpRequest request, HttpResponse resp,
MutableContent content) {
boolean imageIsSafe = false;
try {
@@ -188,23 +94,23 @@
// Unspecified or unknown image mime type.
try {
ImageFormat imageFormat = Sanselan
- .guessFormat(new ByteSourceInputStream(resp.getResponse(),
- request.getUri().getPath()));
+ .guessFormat(new ByteSourceInputStream(resp.getResponse(),
+ request.getUri().getPath()));
if (imageFormat == ImageFormat.IMAGE_FORMAT_UNKNOWN) {
logger.log(Level.INFO, "Unable to sanitize unknown image type "
+ request.getUri().toString());
- return RewriterResults.notCacheable();
+ return true;
}
imageIsSafe = true;
- // Return null to indicate that no rewriting occurred
- return null;
+ // Return false to indicate that no rewriting occurred
+ return false;
} catch (IOException ioe) {
throw new RuntimeException(ioe);
} catch (ImageReadException ire) {
throw new RuntimeException(ire);
}
} else {
- return RewriterResults.notCacheable();
+ return true;
}
} finally {
if (!imageIsSafe) {
@@ -216,7 +122,7 @@
/**
* Sanitize a CSS file.
*/
- private RewriterResults rewriteProxiedCss(HttpRequest request, HttpResponse response,
+ private boolean rewriteProxiedCss(HttpRequest request, HttpResponse response,
MutableContent content, ContentRewriterFeature rewriterFeature) {
String sanitized = "";
try {
@@ -226,177 +132,13 @@
SanitizingProxyingLinkRewriter cssLinkRewriter = new SanitizingProxyingLinkRewriter(
request.getGadget(), rewriterFeature, proxyBaseNoGadget, "text/css");
sanitized = cssSanitizer.sanitize(content.getContent(), request.getUri(), cssLinkRewriter);
- return RewriterResults.cacheable(response.getCacheTtl());
- } else {
- return RewriterResults.notCacheable();
}
+
+ return true;
} finally {
// Set sanitized content in finally to ensure it is always cleared in
// the case of errors
content.setContent(sanitized);
}
}
-
- /**
- * Utiliity class to sanitize HTML nodes recursively.
- */
- class NodeSanitizer {
-
- private final LinkRewriter cssRewriter;
- private final LinkRewriter imageRewriter;
- private final Uri context;
-
- NodeSanitizer(Gadget gadget) {
- this.context = gadget.getSpec().getUrl();
- Integer expires = rewriterFeatureFactory.getDefault().getExpires();
- ContentRewriterFeature rewriterFeature =
- rewriterFeatureFactory.createRewriteAllFeature(expires == null ? -1 : expires);
-
- String proxyBaseNoGadget = rewriterUris.getProxyBase(gadget.getContext().getContainer());
- cssRewriter = new SanitizingProxyingLinkRewriter(gadget.getSpec().getUrl(),
- rewriterFeature, proxyBaseNoGadget, "text/css");
- imageRewriter = new SanitizingProxyingLinkRewriter(gadget.getSpec().getUrl(),
- rewriterFeature, proxyBaseNoGadget, "image/*");
- }
-
- private void sanitize(Node node) {
- switch (node.getNodeType()) {
- case Node.CDATA_SECTION_NODE:
- case Node.TEXT_NODE:
- case Node.ENTITY_REFERENCE_NODE:
- break;
- case Node.ELEMENT_NODE:
- case Node.DOCUMENT_NODE:
- Element element = (Element) node;
- Bypass bypass = canBypassSanitization(element);
- if (bypass == Bypass.ALL) {
- return;
- } else if (bypass == Bypass.ONLY_SELF) {
- for (Node child : toList(node.getChildNodes())) {
- sanitize(child);
- }
- } else if (allowedTags.contains(element.getTagName().toLowerCase())) {
- // TODO - Add special case for stylesheet LINK nodes.
- // Special case handling for style nodes
- if (element.getTagName().equalsIgnoreCase("style")) {
- cssSanitizer.sanitize(element, context, cssRewriter);
- }
- filterAttributes(element);
- for (Node child : toList(node.getChildNodes())) {
- sanitize(child);
- }
- } else {
- node.getParentNode().removeChild(node);
- }
- break;
- case Node.COMMENT_NODE:
- default:
- // Must remove all comments to avoid conditional comment evaluation.
- // There might be other, unknown types as well. Don't trust them.
- node.getParentNode().removeChild(node);
- break;
- }
- }
-
- private void filterAttributes(Element element) {
- Set<String> rewriteImageAttrs = PROXY_IMAGE_ATTRIBUTES.get(element.getNodeName().toLowerCase());
- for (Attr attribute : toList(element.getAttributes())) {
- String name = attribute.getNodeName().toLowerCase();
- if (allowedAttributes.contains(name)) {
- if (URI_ATTRIBUTES.contains(name)) {
- try {
- Uri uri = Uri.parse(attribute.getNodeValue());
- String scheme = uri.getScheme();
- if (!isAllowedScheme(scheme)) {
- element.removeAttributeNode(attribute);
- } else if (rewriteImageAttrs != null && rewriteImageAttrs.contains(name)) {
- // Force rewrite the src of the image through the proxy. This is necessary
- // because IE will run arbitrary script in files referenced from src
- attribute.setValue(imageRewriter.rewrite(attribute.getNodeValue(), context));
- }
- } catch (IllegalArgumentException e) {
- // Not a valid URI.
- element.removeAttributeNode(attribute);
- }
- }
- } else {
- element.removeAttributeNode(attribute);
- }
- }
- }
- }
-
-
- /** Convert a NamedNodeMap to a list for easy and safe operations */
- private static List<Attr> toList(NamedNodeMap nodes) {
- List<Attr> list = new ArrayList<Attr>(nodes.getLength());
-
- for (int i = 0, j = nodes.getLength(); i < j; ++i) {
- list.add((Attr) nodes.item(i));
- }
-
- return list;
- }
-
- private static Bypass canBypassSanitization(Element element) {
- Bypass bypass = (Bypass) element.getUserData(BYPASS_SANITIZATION_KEY);
- if (bypass == null) {
- bypass = Bypass.NONE;
- }
- return bypass;
- }
-
- /** Convert a NamedNodeMap to a list for easy and safe operations */
- private static List<Node> toList(NodeList nodes) {
- List<Node> list = new ArrayList<Node>(nodes.getLength());
-
- for (int i = 0, j = nodes.getLength(); i < j; ++i) {
- list.add(nodes.item(i));
- }
-
- return list;
- }
-
- private static boolean isAllowedScheme(String scheme) {
- return scheme == null || scheme.equals("http") || scheme.equals("https");
- }
-
- /**
- * Forcible rewrite the link through the proxy and force sanitization with
- * an expected mime type
- */
- static class SanitizingProxyingLinkRewriter extends ProxyingLinkRewriter {
-
- private final String expectedMime;
-
- SanitizingProxyingLinkRewriter(Uri gadgetUri, ContentRewriterFeature rewriterFeature,
- String prefix, String expectedMime) {
- super(gadgetUri, rewriterFeature, prefix);
- this.expectedMime = expectedMime;
- }
-
- @Override
- public String rewrite(String link, Uri context) {
- try {
- Uri.parse(link);
- } catch (RuntimeException re) {
- // Any failure in parse
- return "about:blank";
- }
- String rewritten = super.rewrite(link, context);
- rewritten += '&' + ProxyBase.SANITIZE_CONTENT_PARAM + "=1";
- rewritten += '&' + ProxyBase.REWRITE_MIME_TYPE_PARAM + '=' + expectedMime;
- return rewritten;
- }
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.PARAMETER)
- @BindingAnnotation
- public @interface AllowedTags { }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.PARAMETER)
- @BindingAnnotation
- public @interface AllowedAttributes { }
}
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
------------------------------------------------------------------------------
svn:mergeinfo =
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java Wed Apr 15 21:35:47 2009
@@ -25,42 +25,25 @@
/**
* Utility rewriter for testing.
*/
-public class CaptureRewriter implements ContentRewriter {
+public class CaptureRewriter implements RequestRewriter, GadgetRewriter {
private boolean rewroteView = false;
private boolean rewroteResponse = false;
- private long cacheTtl = -1;
- public RewriterResults rewrite(HttpRequest request, HttpResponse original,
+ public boolean rewrite(HttpRequest request, HttpResponse original,
MutableContent content) {
rewroteResponse = true;
- return results();
+ return true;
}
public boolean responseWasRewritten() {
return rewroteResponse;
}
- public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+ public void rewrite(Gadget gadget, MutableContent content) {
rewroteView = true;
- return results();
}
public boolean viewWasRewritten() {
return rewroteView;
}
-
- private RewriterResults results() {
- if (cacheTtl == -1) {
- return RewriterResults.cacheableIndefinitely();
- }
- return RewriterResults.cacheable(cacheTtl);
- }
-
- /**
- * Sets cache TTL. -1 means cacheable indefinitely.
- * @param cacheTtl
- */
- public void setCacheTtl(long cacheTtl) {
- this.cacheTtl = cacheTtl;
- }
}
\ No newline at end of file
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java Wed Apr 15 21:35:47 2009
@@ -20,7 +20,6 @@
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
@@ -44,16 +43,16 @@
/**
* Rewrite links to referenced content in a stylesheet
*/
-public class CSSContentRewriter implements ContentRewriter {
+public class CssRequestRewriter implements RequestRewriter {
- private static final Logger logger = Logger.getLogger(CSSContentRewriter.class.getName());
+ private static final Logger logger = Logger.getLogger(CssRequestRewriter.class.getName());
private final ContentRewriterFeatureFactory rewriterFeatureFactory;
private final CajaCssLexerParser cssParser;
private final ContentRewriterUris rewriterUris;
@Inject
- public CSSContentRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
+ public CssRequestRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
ContentRewriterUris rewriterUris,
CajaCssLexerParser cssParser) {
this.rewriterFeatureFactory = rewriterFeatureFactory;
@@ -61,15 +60,10 @@
this.cssParser = cssParser;
}
- public RewriterResults rewrite(Gadget gadget, MutableContent content) {
- // Not supported
- return null;
- }
-
- public RewriterResults rewrite(HttpRequest request, HttpResponse original,
+ public boolean rewrite(HttpRequest request, HttpResponse original,
MutableContent content) {
if (!RewriterUtils.isCss(request, original)) {
- return null;
+ return false;
}
ContentRewriterFeature feature = rewriterFeatureFactory.get(request);
String css = content.getContent();
@@ -78,7 +72,7 @@
createLinkRewriter(request.getGadget(), feature, request.getContainer()), sw, false);
content.setContent(sw.toString());
- return RewriterResults.cacheableIndefinitely();
+ return true;
}
/**
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java Wed Apr 15 21:35:47 2009
@@ -17,29 +17,26 @@
*/
package org.apache.shindig.gadgets.rewrite;
-import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
-import org.apache.shindig.gadgets.spec.View;
-
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
import java.util.Collections;
import java.util.List;
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+
/**
* Basic registry -- just iterates over rewriters and invokes them sequentially.
*/
-public class DefaultContentRewriterRegistry implements ContentRewriterRegistry {
- protected final List<ContentRewriter> rewriters;
+public class DefaultRequestRewriterRegistry implements RequestRewriterRegistry {
+ protected final List<RequestRewriter> rewriters;
protected final GadgetHtmlParser htmlParser;
@Inject
- public DefaultContentRewriterRegistry(List<ContentRewriter> rewriters,
+ public DefaultRequestRewriterRegistry(List<RequestRewriter> rewriters,
GadgetHtmlParser htmlParser) {
if (rewriters == null) {
rewriters = Collections.emptyList();
@@ -49,41 +46,13 @@
}
/** {@inheritDoc} */
- public String rewriteGadget(Gadget gadget, View currentView) throws GadgetException {
- if (currentView == null) {
- // Nothing to rewrite.
- return null;
- }
- MutableContent mc = new MutableContent(htmlParser, currentView.getContent());
-
- for (ContentRewriter rewriter : rewriters) {
- rewriter.rewrite(gadget, mc);
- }
- return mc.getContent();
- }
-
- /** {@inheritDoc} */
- public String rewriteGadget(Gadget gadget, String content) {
- if (content == null) {
- // Nothing to rewrite.
- return null;
- }
- MutableContent mc = new MutableContent(htmlParser, content);
-
- for (ContentRewriter rewriter : rewriters) {
- rewriter.rewrite(gadget, mc);
- }
-
- return mc.getContent();
- }
-
- /** {@inheritDoc} */
- public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp) {
+ public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp)
+ throws RewritingException {
MutableContent mc = new MutableContent(htmlParser, resp);
boolean wasRewritten = false;
- for (ContentRewriter rewriter : rewriters) {
- wasRewritten |= (rewriter.rewrite(req, resp, mc) != null);
+ for (RequestRewriter rewriter : rewriters) {
+ wasRewritten |= rewriter.rewrite(req, resp, mc);
}
if (wasRewritten) {
@@ -91,8 +60,4 @@
}
return resp;
}
-
- protected List<ContentRewriter> getRewriters() {
- return rewriters;
- }
}
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java
------------------------------------------------------------------------------
svn:mergeinfo =
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java?rev=765373&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java Wed Apr 15 21:35:47 2009
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.gadgets.rewrite;
+
+import org.apache.shindig.gadgets.Gadget;
+
+/**
+ * Interface for rewriters that modify gadget content.
+ */
+public interface GadgetRewriter {
+ /**
+ * Rewrite the gadget.
+ *
+ * @param gadget Gadget to rewrite.
+ * @param content the content of the gadget to be manipulated.
+ */
+ void rewrite(Gadget gadget, MutableContent content) throws RewritingException;
+}
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java Wed Apr 15 21:35:47 2009
@@ -51,7 +51,7 @@
* - Moving all style into head and converting @imports into links
* - Proxying referred content of images and embeds
*/
-public class HTMLContentRewriter implements ContentRewriter {
+public class HTMLContentRewriter implements GadgetRewriter, RequestRewriter {
private final static int MAX_URL_LENGTH = 1500;
private final static String JS_MIME_TYPE = "text/javascript";
@@ -64,48 +64,51 @@
);
private final ContentRewriterFeatureFactory rewriterFeatureFactory;
- private final CSSContentRewriter cssRewriter;
+ private final CssRequestRewriter cssRewriter;
private final ContentRewriterUris rewriterUris;
@Inject
public HTMLContentRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
ContentRewriterUris rewriterUris,
- CSSContentRewriter cssRewriter) {
+ CssRequestRewriter cssRewriter) {
this.rewriterFeatureFactory = rewriterFeatureFactory;
this.rewriterUris = rewriterUris;
this.cssRewriter = cssRewriter;
}
- public RewriterResults rewrite(HttpRequest request, HttpResponse original,
+ public boolean rewrite(HttpRequest request, HttpResponse original,
MutableContent content) {
if (RewriterUtils.isHtml(request, original)) {
ContentRewriterFeature feature = rewriterFeatureFactory.get(request);
return rewriteImpl(feature, request.getGadget(), request.getUri(), content,
request.getContainer());
}
- return null;
+
+ return false;
}
- public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+ public void rewrite(Gadget gadget, MutableContent content) {
// Don't rewrite urls if caja is enabled since caja will inline them anyway
if (gadget.getSpec().getModulePrefs().getFeatures().containsKey("caja") ||
"1".equals(gadget.getContext().getParameter("caja"))) {
- return null;
+ return;
}
+
ContentRewriterFeature feature = rewriterFeatureFactory.get(gadget.getSpec());
Uri contentBase = gadget.getSpec().getUrl();
View view = gadget.getCurrentView();
if (view != null && view.getHref() != null) {
contentBase = view.getHref();
}
- return rewriteImpl(feature, gadget.getSpec().getUrl(), contentBase, content,
+
+ rewriteImpl(feature, gadget.getSpec().getUrl(), contentBase, content,
gadget.getContext().getContainer());
}
- RewriterResults rewriteImpl(ContentRewriterFeature feature, Uri gadgetUri,
+ boolean rewriteImpl(ContentRewriterFeature feature, Uri gadgetUri,
Uri contentBase, MutableContent content, String container) {
if (!feature.isRewriteEnabled() || content.getDocument() == null) {
- return null;
+ return false;
}
// Get ALL interesting tags
@@ -131,7 +134,7 @@
MutableContent.notifyEdit(content.getDocument());
}
- return RewriterResults.cacheableIndefinitely();
+ return mutated;
}
protected boolean rewriteStyleTags(Element head, List<Element> elementList,
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java Wed Apr 15 21:35:47 2009
@@ -21,8 +21,6 @@
import org.apache.shindig.common.JsonSerializer;
import org.apache.shindig.common.xml.DomUtil;
import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.preload.PipelineExecutor;
import org.apache.shindig.gadgets.spec.PipelinedData;
import org.apache.shindig.gadgets.spec.SpecParserException;
@@ -45,26 +43,22 @@
*
* This rewriter cannot be used currently without the SocialMarkupHtmlParser.
*/
-public class PipelineDataContentRewriter implements ContentRewriter {
+public class PipelineDataGadgetRewriter implements GadgetRewriter {
private static final Logger logger = Logger.getLogger(
- PipelineDataContentRewriter.class.getName());
+ PipelineDataGadgetRewriter.class.getName());
private final PipelineExecutor executor;
@Inject
- public PipelineDataContentRewriter(PipelineExecutor executor) {
+ public PipelineDataGadgetRewriter(PipelineExecutor executor) {
this.executor = executor;
}
- public RewriterResults rewrite(HttpRequest request, HttpResponse original, MutableContent content) {
- return null;
- }
-
- public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+ public void rewrite(Gadget gadget, MutableContent content) {
// Only bother for gadgets using the opensocial-data feature
if (!gadget.getSpec().getModulePrefs().getFeatures().containsKey("opensocial-data")) {
- return null;
+ return;
}
Document doc = content.getDocument();
@@ -92,7 +86,7 @@
}
if (pipelineNodes.isEmpty()) {
- return null;
+ return;
}
PipelineExecutor.Results results =
@@ -136,8 +130,6 @@
gadget.addFeature("opensocial-data-context");
gadget.removeFeature("opensocial-data");
}
-
- return RewriterResults.notCacheable();
}
static class PipelineState {
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java
------------------------------------------------------------------------------
svn:mergeinfo =
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java?rev=765373&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java Wed Apr 15 21:35:47 2009
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.gadgets.rewrite;
+
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+
+/**
+ * Interface for rewriters that modify request content.
+ */
+public interface RequestRewriter {
+
+ /**
+ * Rewrite the original content located at source.
+ *
+ * @param request Originating request, as context.
+ * @param original Original HTTP response, for context.
+ * @param content Original content.
+ * @return true if any rewriting occurred
+ */
+ boolean rewrite(HttpRequest request, HttpResponse original, MutableContent content)
+ throws RewritingException;
+}
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java Wed Apr 15 21:35:47 2009
@@ -17,36 +17,16 @@
*/
package org.apache.shindig.gadgets.rewrite;
-import com.google.inject.ImplementedBy;
-import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
-import org.apache.shindig.gadgets.spec.View;
+
+import com.google.inject.ImplementedBy;
/**
- * Performs rewriting operations by invoking one or more ContentRewriters.
+ * Performs rewriting operations by invoking one or more {@link RequestRewriter}s.
*/
-@ImplementedBy(DefaultContentRewriterRegistry.class)
-public interface ContentRewriterRegistry {
-
- /**
- * Rewrites a {@code Gadget} object given the registered rewriters.
- * @param gadget Gadget object to use as a rewriting context.
- * @param currentView The gadget view to rewrite
- * @return The rewritten content.
- * @throws GadgetException Potentially passed through from rewriters
- */
- String rewriteGadget(Gadget gadget, View currentView) throws GadgetException;
-
- /**
- * Rewrites a {@code Gadget} object given the registered rewriters.
- * @param gadget Gadget object to use as a rewriting context.
- * @param content The content to be rewritten.
- * @return The rewritten content.
- * @throws GadgetException Potentially passed through from rewriters
- */
- String rewriteGadget(Gadget gadget, String content) throws GadgetException;
+@ImplementedBy(DefaultRequestRewriterRegistry.class)
+public interface RequestRewriterRegistry {
/**
* Rewrites an {@code HttpResponse} object with the given request as context,
@@ -55,5 +35,6 @@
* @param resp Original response object.
* @return Rewritten response object, or resp if not modified.
*/
- HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp);
+ HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp)
+ throws RewritingException;
}
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java
------------------------------------------------------------------------------
svn:mergeinfo =
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java Wed Apr 15 21:35:47 2009
@@ -18,8 +18,9 @@
*/
package org.apache.shindig.gadgets.rewrite;
-import org.apache.shindig.gadgets.render.RenderingContentRewriter;
-import org.apache.shindig.gadgets.render.SanitizedRenderingContentRewriter;
+import org.apache.shindig.gadgets.render.RenderingGadgetRewriter;
+import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
+import org.apache.shindig.gadgets.render.SanitizingRequestRewriter;
import org.apache.shindig.gadgets.servlet.CajaContentRewriter;
import java.util.List;
@@ -37,31 +38,49 @@
@Override
protected void configure() {
- bind(new TypeLiteral<List<ContentRewriter>>(){}).toProvider(ContentRewritersProvider.class);
+ bind(new TypeLiteral<List<GadgetRewriter>>(){}).toProvider(GadgetRewritersProvider.class);
+ bind(new TypeLiteral<List<RequestRewriter>>(){}).toProvider(RequestRewritersProvider.class);
}
- private static class ContentRewritersProvider implements Provider<List<ContentRewriter>> {
- private final List<ContentRewriter> rewriters;
+ private static class GadgetRewritersProvider implements Provider<List<GadgetRewriter>> {
+ private final List<GadgetRewriter> rewriters;
@Inject
- public ContentRewritersProvider(PipelineDataContentRewriter pipelineRewriter,
+ public GadgetRewritersProvider(PipelineDataGadgetRewriter pipelineRewriter,
TemplateRewriter templateRewriter,
HTMLContentRewriter optimizingRewriter,
- CSSContentRewriter cssRewriter,
+ CssRequestRewriter cssRewriter,
CajaContentRewriter cajaRewriter,
- SanitizedRenderingContentRewriter sanitizedRewriter,
- RenderingContentRewriter renderingRewriter) {
+ SanitizingGadgetRewriter sanitizedRewriter,
+ RenderingGadgetRewriter renderingRewriter) {
rewriters = Lists.newArrayList();
rewriters.add(pipelineRewriter);
rewriters.add(templateRewriter);
rewriters.add(optimizingRewriter);
- rewriters.add(cssRewriter);
rewriters.add(cajaRewriter);
rewriters.add(sanitizedRewriter);
rewriters.add(renderingRewriter);
}
- public List<ContentRewriter> get() {
+ public List<GadgetRewriter> get() {
+ return rewriters;
+ }
+ }
+
+ private static class RequestRewritersProvider implements Provider<List<RequestRewriter>> {
+ private final List<RequestRewriter> rewriters;
+
+ @Inject
+ public RequestRewritersProvider(HTMLContentRewriter optimizingRewriter,
+ CssRequestRewriter cssRewriter,
+ SanitizingRequestRewriter sanitizedRewriter) {
+ rewriters = Lists.newArrayList();
+ rewriters.add(optimizingRewriter);
+ rewriters.add(cssRewriter);
+ rewriters.add(sanitizedRewriter);
+ }
+
+ public List<RequestRewriter> get() {
return rewriters;
}
}
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java?rev=765373&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java Wed Apr 15 21:35:47 2009
@@ -0,0 +1,22 @@
+package org.apache.shindig.gadgets.rewrite;
+
+/**
+ * Exceptions thrown during content rewriting.
+ *
+ * These exceptions will usually translate directly into an end-user error message, so they should
+ * be easily localizable.
+ */
+public class RewritingException extends Exception {
+ public RewritingException(Throwable t) {
+ super(t);
+ }
+
+ public RewritingException(String message) {
+ super(message);
+ }
+
+ public RewritingException(String message, Throwable t) {
+ super(message, t);
+ }
+
+}
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java Wed Apr 15 21:35:47 2009
@@ -22,8 +22,6 @@
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.MessageBundleFactory;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.spec.Feature;
import org.apache.shindig.gadgets.spec.MessageBundle;
import org.apache.shindig.gadgets.templates.MessageELResolver;
@@ -55,7 +53,7 @@
* Only templates without the @name and @tag attributes are processed
* automatically.
*/
-public class TemplateRewriter implements ContentRewriter {
+public class TemplateRewriter implements GadgetRewriter {
public final static Set<String> TAGS = ImmutableSet.of("script");
@@ -81,24 +79,18 @@
this.baseTagRegistry = baseTagRegistry;
}
- public RewriterResults rewrite(HttpRequest request, HttpResponse original,
- MutableContent content) {
- return null;
- }
-
- public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+ public void rewrite(Gadget gadget, MutableContent content) {
Feature f = gadget.getSpec().getModulePrefs().getFeatures()
.get("opensocial-templates");
if (f != null && isServerTemplatingEnabled(f)) {
try {
- return rewriteImpl(gadget, content);
+ rewriteImpl(gadget, content);
} catch (GadgetException ge) {
// TODO: Rewriter interface needs to be modified to handle GadgetException or
// RewriterException or something along those lines.
throw new RuntimeException(ge);
}
}
- return null;
}
/**
@@ -111,7 +103,7 @@
return (!"true".equalsIgnoreCase(f.getParams().get(DISABLE_AUTO_PROCESSING_PARAM)));
}
- private RewriterResults rewriteImpl(Gadget gadget, MutableContent content)
+ private void rewriteImpl(Gadget gadget, MutableContent content)
throws GadgetException {
List<Element> templates = ImmutableList.copyOf(
Iterables.filter(
@@ -124,7 +116,7 @@
TagRegistry registry = registerCustomTags(templates);
- return processInlineTemplates(gadget, content, templates, registry);
+ processInlineTemplates(gadget, content, templates, registry);
}
/**
@@ -158,7 +150,7 @@
return baseTagRegistry.addHandlers(handlers.build());
}
- private RewriterResults processInlineTemplates(Gadget gadget, MutableContent content,
+ private void processInlineTemplates(Gadget gadget, MutableContent content,
List<Element> allTemplates, TagRegistry registry) throws GadgetException {
Map<String, Object> pipelinedData = content.getPipelinedData();
@@ -208,8 +200,6 @@
if (!needsFeature) {
gadget.removeFeature("opensocial-templates");
}
-
- return RewriterResults.notCacheable();
}
/**
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java Wed Apr 15 21:35:47 2009
@@ -18,12 +18,17 @@
*/
package org.apache.shindig.gadgets.servlet;
+import org.apache.commons.lang.StringUtils;
import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import org.apache.shindig.gadgets.rewrite.MutableContent;
-import org.apache.shindig.gadgets.rewrite.RewriterResults;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URI;
+import java.util.Map;
+import java.util.logging.Logger;
import com.google.caja.lexer.CharProducer;
import com.google.caja.lexer.ExternalReference;
@@ -44,24 +49,10 @@
import com.google.caja.reporting.SnippetProducer;
import com.google.common.collect.Maps;
-import org.apache.commons.lang.StringUtils;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.net.URI;
-import java.util.Map;
-import java.util.logging.Logger;
-
-public class CajaContentRewriter implements ContentRewriter {
+public class CajaContentRewriter implements org.apache.shindig.gadgets.rewrite.GadgetRewriter {
private final Logger logger = Logger.getLogger(CajaContentRewriter.class.getName());
- public RewriterResults rewrite(HttpRequest req, HttpResponse resp, MutableContent content) {
- return null;
- }
-
- public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+ public void rewrite(Gadget gadget, MutableContent content) {
if (gadget.getSpec().getModulePrefs().getFeatures().containsKey("caja") ||
"1".equals(gadget.getContext().getParameter("caja"))) {
@@ -115,15 +106,14 @@
} catch (GadgetRewriteException e) {
content.setContent(messagesToHtml(is, origContent, mq));
throwCajolingException(e, mq);
- return RewriterResults.notCacheable();
+ return;
} catch (IOException e) {
content.setContent(messagesToHtml(is, origContent, mq));
throwCajolingException(e, mq);
- return RewriterResults.notCacheable();
+ return;
}
content.setContent(tameCajaClientApi() + output);
}
- return null;
}
private String messagesToHtml(InputSource is, CharSequence orig, MessageQueue mq) {
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java Wed Apr 15 21:35:47 2009
@@ -28,7 +28,8 @@
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
-import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewritingException;
import org.apache.shindig.protocol.BaseRequestItem;
import org.apache.shindig.protocol.Operation;
import org.apache.shindig.protocol.ProtocolException;
@@ -90,11 +91,11 @@
static final Set<String> BAD_HEADERS = ImmutableSet.of("HOST", "ACCEPT", "ACCEPT-ENCODING");
private final RequestPipeline requestPipeline;
- private final ContentRewriterRegistry contentRewriterRegistry;
+ private final RequestRewriterRegistry contentRewriterRegistry;
@Inject
public HttpRequestHandler(RequestPipeline requestPipeline,
- ContentRewriterRegistry contentRewriterRegistry) {
+ RequestRewriterRegistry contentRewriterRegistry) {
this.requestPipeline = requestPipeline;
this.contentRewriterRegistry = contentRewriterRegistry;
}
@@ -226,6 +227,8 @@
return httpApiResponse;
} catch (GadgetException ge) {
throw new ProtocolException(ResponseError.INTERNAL_ERROR, ge.getMessage());
+ } catch (RewritingException re) {
+ throw new ProtocolException(ResponseError.INTERNAL_ERROR, re.getMessage());
}
}
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=765373&r1=765372&r2=765373&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 Wed Apr 15 21:35:47 2009
@@ -31,7 +31,8 @@
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
-import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewritingException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -63,11 +64,11 @@
public static final String AUTHZ_PARAM = "authz";
private final RequestPipeline requestPipeline;
- private final ContentRewriterRegistry contentRewriterRegistry;
+ private final RequestRewriterRegistry contentRewriterRegistry;
@Inject
public MakeRequestHandler(RequestPipeline requestPipeline,
- ContentRewriterRegistry contentRewriterRegistry) {
+ RequestRewriterRegistry contentRewriterRegistry) {
this.requestPipeline = requestPipeline;
this.contentRewriterRegistry = contentRewriterRegistry;
}
@@ -85,7 +86,11 @@
// Rewrite the response
if (contentRewriterRegistry != null) {
- results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
+ try {
+ results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
+ } catch (RewritingException e) {
+ throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e);
+ }
}
// Serialize the response
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=765373&r1=765372&r2=765373&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 Wed Apr 15 21:35:47 2009
@@ -33,7 +33,8 @@
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.RequestPipeline;
-import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewritingException;
import java.io.IOException;
import java.util.Map;
@@ -55,12 +56,12 @@
private final RequestPipeline requestPipeline;
private final LockedDomainService lockedDomainService;
- private final ContentRewriterRegistry contentRewriterRegistry;
+ private final RequestRewriterRegistry contentRewriterRegistry;
@Inject
public ProxyHandler(RequestPipeline requestPipeline,
LockedDomainService lockedDomainService,
- ContentRewriterRegistry contentRewriterRegistry) {
+ RequestRewriterRegistry contentRewriterRegistry) {
this.requestPipeline = requestPipeline;
this.lockedDomainService = lockedDomainService;
this.contentRewriterRegistry = contentRewriterRegistry;
@@ -135,7 +136,11 @@
HttpRequest rcr = buildHttpRequest(request);
HttpResponse results = requestPipeline.execute(rcr);
if (contentRewriterRegistry != null) {
- results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
+ try {
+ results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
+ } catch (RewritingException e) {
+ throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e);
+ }
}
setResponseHeaders(request, response, results);
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java Wed Apr 15 21:35:47 2009
@@ -29,7 +29,7 @@
import org.apache.shindig.common.xml.DomUtil;
import org.apache.shindig.common.util.Utf8UrlCoder;
import org.apache.shindig.common.JsonSerializer;
-import org.apache.shindig.gadgets.render.SanitizedRenderingContentRewriter;
+import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
import org.apache.shindig.gadgets.GadgetFeatureRegistry;
import org.apache.shindig.gadgets.RenderingContext;
import org.apache.shindig.gadgets.GadgetFeature;
@@ -134,8 +134,8 @@
}
// Bypass sanitization for the holder tag and the call to swfobject
- SanitizedRenderingContentRewriter.bypassSanitization(altHolder, false);
- SanitizedRenderingContentRewriter.bypassSanitization(script, false);
+ SanitizingGadgetRewriter.bypassSanitization(altHolder, false);
+ SanitizingGadgetRewriter.bypassSanitization(script, false);
ensureSwfobject(result.getOwnerDocument(), processor);
}
@@ -212,7 +212,7 @@
}
swfobject.setUserData(SWFOBJECT, SWFOBJECT, null);
head.appendChild(swfobject);
- SanitizedRenderingContentRewriter.bypassSanitization(swfobject, false);
+ SanitizingGadgetRewriter.bypassSanitization(swfobject, false);
}
/**