You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by lr...@apache.org on 2008/07/17 23:58:34 UTC
svn commit: r677757 - in /incubator/shindig/trunk/java/gadgets: conf/
src/main/java/org/apache/shindig/gadgets/rewrite/
src/test/java/org/apache/shindig/gadgets/rewrite/
Author: lryan
Date: Thu Jul 17 14:58:34 2008
New Revision: 677757
URL: http://svn.apache.org/viewvc?rev=677757&view=rev
Log:
Added support for 'expires' param to rewriter to control what cache-headers the open-proxy should enforce.
Modified:
incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.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/ContentRewriterFeatureTestCase.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
Modified: incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/conf/gadgets.properties?rev=677757&r1=677756&r2=677757&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/conf/gadgets.properties (original)
+++ incubator/shindig/trunk/java/gadgets/conf/gadgets.properties Thu Jul 17 14:58:34 2008
@@ -10,6 +10,7 @@
content-rewrite.include-urls=.*
content-rewrite.exclude-urls=
content-rewrite.include-tags=link,script,embed,img,style
+content-rewrite.expires=86400
cache.capacity=10000
gadget-spec.cache.capacity=0
message-bundle.cache.capacity=0
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java?rev=677757&r1=677756&r2=677757&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java Thu Jul 17 14:58:34 2008
@@ -17,9 +17,12 @@
*/
package org.apache.shindig.gadgets.rewrite;
+import com.google.common.collect.Lists;
+
import org.apache.shindig.gadgets.spec.Feature;
import org.apache.shindig.gadgets.spec.GadgetSpec;
+import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Pattern;
@@ -33,6 +36,9 @@
private static final String INCLUDE_URLS = "include-urls";
private static final String EXCLUDE_URLS = "exclude-urls";
private static final String INCLUDE_TAGS = "include-tags";
+ private static final String EXPIRES = "expires";
+
+ public static final String EXPIRES_DEFAULT = "HTTP";
// Use tree set to maintain order for fingerprint
private TreeSet<String> includeTags;
@@ -43,6 +49,9 @@
private Pattern include;
private Pattern exclude;
+ // If null then dont enforce a min TTL for proxied content. Use contents headers
+ private Integer expires;
+
private Integer fingerprint;
/**
@@ -51,15 +60,20 @@
* @param spec
* @param defaultInclude As a regex
* @param defaultExclude As a regex
+ * @param defaultExpires Either "HTTP" or a ttl in seconds
* @param defaultTags Set of default tags that can be rewritten
*/
public ContentRewriterFeature(GadgetSpec spec, String defaultInclude,
- String defaultExclude, Set<String> defaultTags) {
+ String defaultExclude,
+ String defaultExpires,
+ Set<String> defaultTags) {
Feature f = spec.getModulePrefs().getFeatures().get("content-rewrite");
String includeRegex = normalizeParam(defaultInclude, null);
String excludeRegex = normalizeParam(defaultExclude, null);
+
this.includeTags = new TreeSet<String>(defaultTags);
+ List<String> expiresOptions = Lists.newArrayListWithCapacity(3);
if (f != null) {
if (f.getParams().containsKey(INCLUDE_URLS)) {
includeRegex = normalizeParam(f.getParams().get(INCLUDE_URLS), includeRegex);
@@ -80,6 +94,25 @@
}
includeTags = tags;
}
+
+ if (f.getParams().containsKey(EXPIRES)) {
+ expiresOptions.add(normalizeParam(f.getParams().get(EXPIRES), null));
+ }
+ }
+
+ expiresOptions.add(defaultExpires);
+ expiresOptions.add(EXPIRES_DEFAULT);
+
+ for (String expiryOption : expiresOptions) {
+ try {
+ expires = new Integer(expiryOption);
+ break;
+ } catch (NumberFormatException nfe) {
+ // Not an integer
+ if (EXPIRES_DEFAULT.equalsIgnoreCase(expiryOption)) {
+ break;
+ }
+ }
}
if (".*".equals(includeRegex) && excludeRegex == null) {
@@ -136,6 +169,13 @@
}
/**
+ * @return the min TTL to enforce or null if proxy should respect headers
+ */
+ public Integer getExpires() {
+ return expires;
+ }
+
+ /**
* @return fingerprint of rewriting rule for cache-busting
*/
public int getFingerprint() {
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java?rev=677757&r1=677756&r2=677757&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java Thu Jul 17 14:58:34 2008
@@ -17,16 +17,16 @@
*/
package org.apache.shindig.gadgets.rewrite;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.google.inject.name.Named;
+
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.GadgetSpecFactory;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.spec.GadgetSpec;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.google.inject.name.Named;
-
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
@@ -50,6 +50,7 @@
private final GadgetSpecFactory specFactory;
private final String includeUrls;
private final String excludeUrls;
+ private final String expires;
private final Set<String> includeTags;
@Inject
@@ -57,10 +58,12 @@
GadgetSpecFactory specFactory,
@Named("content-rewrite.include-urls")String includeUrls,
@Named("content-rewrite.exclude-urls")String excludeUrls,
+ @Named("content-rewrite.expires")String expires,
@Named("content-rewrite.include-tags")String includeTags) {
this.specFactory = specFactory;
this.includeUrls = includeUrls;
this.excludeUrls = excludeUrls;
+ this.expires = expires;
this.includeTags = new HashSet<String>();
for (String s : includeTags.split(",")) {
if (s != null && s.trim().length() > 0) {
@@ -117,7 +120,8 @@
// Store the feature in the spec so we dont keep parsing it
ContentRewriterFeature rewriterFeature = (ContentRewriterFeature)spec.getAttribute("content-rewrite");
if (rewriterFeature == null) {
- rewriterFeature = new ContentRewriterFeature(spec, includeUrls, excludeUrls, includeTags);
+ rewriterFeature = new ContentRewriterFeature(spec, includeUrls, excludeUrls, expires,
+ includeTags);
spec.setAttribute("content-rewrite", rewriterFeature);
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java?rev=677757&r1=677756&r2=677757&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java Thu Jul 17 14:58:34 2008
@@ -19,6 +19,7 @@
package org.apache.shindig.gadgets.rewrite;
import org.apache.shindig.common.util.Utf8UrlCoder;
+import org.apache.shindig.gadgets.servlet.ProxyBase;
import java.net.URI;
import java.net.URISyntaxException;
@@ -53,12 +54,16 @@
URI linkUri = new URI(link);
URI uri = context.resolve(linkUri);
if (rewriterFeature.shouldRewriteURL(uri.toString())) {
- return prefix
+ String result = prefix
+ Utf8UrlCoder.encode(uri.toString())
+ "&gadget="
+ Utf8UrlCoder.encode(gadgetUri.toString())
+ "&fp="
+ rewriterFeature.getFingerprint();
+ if (rewriterFeature.getExpires() != null) {
+ result += "&" + ProxyBase.REFRESH_PARAM + "=" + rewriterFeature.getExpires().toString();
+ }
+ return result;
} else {
return uri.toString();
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java?rev=677757&r1=677756&r2=677757&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java Thu Jul 17 14:58:34 2008
@@ -18,6 +18,7 @@
package org.apache.shindig.gadgets.rewrite;
import com.google.common.collect.Sets;
+
import org.apache.commons.lang.StringUtils;
import org.apache.shindig.gadgets.EasyMockTestCase;
import org.apache.shindig.gadgets.GadgetException;
@@ -39,17 +40,20 @@
protected void setUp() throws Exception {
super.setUp();
tags = Sets.newHashSet("embed", "img", "script", "link");
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", tags);
+ contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", "HTTP",
+ tags);
defaultRewriter = new ProxyingLinkRewriter(
SPEC_URL,
contentRewriterFeature,
"http://www.test.com/proxy?url=");
}
- protected GadgetSpec getSpecWithRewrite(String include, String exclude, Set<String> tags) throws GadgetException {
+ protected GadgetSpec getSpecWithRewrite(String include, String exclude, String expires,
+ Set<String> tags) throws GadgetException {
String xml = "<Module>" +
"<ModulePrefs title=\"title\">" +
"<Optional feature=\"content-rewrite\">\n" +
+ " <Param name=\"expires\">" + expires + "</Param>\n" +
" <Param name=\"include-urls\">" + include + "</Param>\n" +
" <Param name=\"exclude-urls\">" + exclude + "</Param>\n" +
" <Param name=\"include-tags\">" + StringUtils.join(tags, ",") + "</Param>\n" +
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java?rev=677757&r1=677756&r2=677757&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java Thu Jul 17 14:58:34 2008
@@ -27,50 +27,56 @@
public class ContentRewriterFeatureTestCase extends BaseRewriterTestCase {
public void testContainerDefaultIncludeAll() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", tags);
+ contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", "0", tags);
assertTrue(contentRewriterFeature.isRewriteEnabled());
assertTrue(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testContainerDefaultIncludeNone() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), "", ".*", tags);
+ contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), "", ".*", "0", tags);
assertFalse(contentRewriterFeature.isRewriteEnabled());
assertFalse(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testContainerDefaultExcludeOverridesInclude() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", ".*", tags);
+ contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", ".*", "0",
+ tags);
assertFalse(contentRewriterFeature.isRewriteEnabled());
assertFalse(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testSpecExcludeOverridesContainerDefaultInclude() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite("", ".*", tags), ".*", "", tags);
+ contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite("", ".*", "0", tags), ".*",
+ "", "0", tags);
assertFalse(contentRewriterFeature.isRewriteEnabled());
assertFalse(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testSpecIncludeOverridesContainerDefaultExclude() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite(".*", "", tags), "", ".*", tags);
+ contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite(".*", "", "0", tags), "",
+ ".*", "0", tags);
assertTrue(contentRewriterFeature.isRewriteEnabled());
assertTrue(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testExcludeOverridesInclude() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite("test\\.com", "test", tags), "", "", tags);
+ contentRewriterFeature = new ContentRewriterFeature(
+ getSpecWithRewrite("test\\.com", "test", "0", tags), "", "", "0", tags);
assertTrue(contentRewriterFeature.isRewriteEnabled());
assertFalse(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testIncludeOnlyMatch() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx", tags), "", "", tags);
+ contentRewriterFeature = new ContentRewriterFeature(
+ getSpecWithRewrite("test\\.com", "testx", "0", tags), "", "", "0", tags);
assertTrue(contentRewriterFeature.isRewriteEnabled());
assertTrue(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
assertFalse(contentRewriterFeature.shouldRewriteURL("http://testx.test.com"));
}
public void testTagRewrite() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx", tags), "", "", tags);
+ contentRewriterFeature = new ContentRewriterFeature(
+ getSpecWithRewrite("test\\.com", "testx", "0", tags), "", "", "0", tags);
assertFalse(contentRewriterFeature.shouldRewriteTag("IFRAME"));
assertTrue(contentRewriterFeature.shouldRewriteTag("img"));
assertTrue(contentRewriterFeature.shouldRewriteTag("ScripT"));
@@ -78,10 +84,32 @@
public void testOverrideTagRewrite() throws Exception {
Set<String> newTags = Sets.newHashSet("iframe");
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx", newTags), "", "", tags);
+ contentRewriterFeature = new ContentRewriterFeature(
+ getSpecWithRewrite("test\\.com", "testx", "0", newTags), "", "", "0", tags);
assertTrue(contentRewriterFeature.shouldRewriteTag("IFRAME"));
assertFalse(contentRewriterFeature.shouldRewriteTag("img"));
assertFalse(contentRewriterFeature.shouldRewriteTag("ScripT"));
assertFalse(contentRewriterFeature.shouldRewriteTag("link"));
}
+
+ public void testExpiresTimeParse() throws Exception {
+ contentRewriterFeature = new ContentRewriterFeature(
+ getSpecWithRewrite("test\\.com", "testx", "12345", tags), "", "", "0", tags);
+ assertNotNull(contentRewriterFeature.getExpires());
+ assertNotNull(contentRewriterFeature.getExpires() == 12345);
+ }
+
+ public void testExpiresHTTPParse() throws Exception {
+ contentRewriterFeature = new ContentRewriterFeature(
+ getSpecWithRewrite("test\\.com", "testx", "htTp ", tags), "", "", "12345", tags);
+ assertNull(contentRewriterFeature.getExpires());
+ }
+
+ public void testExpiresInvalidParse() throws Exception {
+ contentRewriterFeature = new ContentRewriterFeature(
+ getSpecWithRewrite("test\\.com", "testx", "junk", tags), "", "", "12345", tags);
+ assertNotNull(contentRewriterFeature.getExpires());
+ assertNotNull(contentRewriterFeature.getExpires() == 12345);
+ }
+
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java?rev=677757&r1=677756&r2=677757&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java Thu Jul 17 14:58:34 2008
@@ -17,6 +17,8 @@
*/
package org.apache.shindig.gadgets.rewrite;
+import com.google.common.collect.Sets;
+
/**
* Test of proxying rewriter
*/
@@ -50,9 +52,22 @@
rewrite(val));
}
+ public void testWithRefresh() throws Exception {
+ ContentRewriterFeature contentRewriterFeature = new ContentRewriterFeature(
+ getSpecWithoutRewrite(), ".*", "", "86400",
+ Sets.newHashSet("embed", "img", "script", "link"));
+ ProxyingLinkRewriter rewriter = new ProxyingLinkRewriter(
+ SPEC_URL,
+ contentRewriterFeature,
+ "http://www.test.com/proxy?url=");
+ String val = " test.gif ";
+ assertEquals("http://www.test.com/proxy?url=http%3A%2F%2Fexample.org%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&refresh=86400",
+ rewriter.rewrite(val, SPEC_URL));
+ }
+
public void testInvalidCharRewrite() {
String val = "/images/opensocial/movie_trivia/76/${quiz.picture_url}";
- assertEquals("/images/opensocial/movie_trivia/76/${quiz.picture_url}",
+ assertEquals(val,
rewrite(val));
}
Re: svn commit: r677757 - in /incubator/shindig/trunk/java/gadgets: conf/ src/main/java/org/apache/shindig/gadgets/rewrite/ src/test/java/org/apache/shindig/gadgets/rewrite/
Posted by Louis Ryan <lr...@google.com>.
Ill fix the import order.
Honoring HTTP headers is done by setting
<param "expires">HTTP</param>
in which case we dont put the refresh param on the generated link, the open
proxy should respect headers in the absence of a forced refresh time.
On Thu, Jul 17, 2008 at 3:15 PM, Kevin Brown <et...@google.com> wrote:
> Your import order is off -- org.apache.shindig should come before the third
> party code.
>
> What about honoring HTTP headers? Wasn't that supposed to be a special
> value?
>
> On Thu, Jul 17, 2008 at 2:58 PM, <lr...@apache.org> wrote:
>
> > Author: lryan
> > Date: Thu Jul 17 14:58:34 2008
> > New Revision: 677757
> >
> > URL: http://svn.apache.org/viewvc?rev=677757&view=rev
> > Log:
> > Added support for 'expires' param to rewriter to control what
> cache-headers
> > the open-proxy should enforce.
> >
> > Modified:
> > incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
> >
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
> >
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
> >
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.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/ContentRewriterFeatureTestCase.java
> >
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
> >
> > Modified: incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/conf/gadgets.properties?rev=677757&r1=677756&r2=677757&view=diff
> >
> >
> ==============================================================================
> > --- incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
> (original)
> > +++ incubator/shindig/trunk/java/gadgets/conf/gadgets.properties Thu Jul
> 17
> > 14:58:34 2008
> > @@ -10,6 +10,7 @@
> > content-rewrite.include-urls=.*
> > content-rewrite.exclude-urls=
> > content-rewrite.include-tags=link,script,embed,img,style
> > +content-rewrite.expires=86400
> > cache.capacity=10000
> > gadget-spec.cache.capacity=0
> > message-bundle.cache.capacity=0
> >
> > Modified:
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java?rev=677757&r1=677756&r2=677757&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
> > (original)
> > +++
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
> > Thu Jul 17 14:58:34 2008
> > @@ -17,9 +17,12 @@
> > */
> > package org.apache.shindig.gadgets.rewrite;
> >
> > +import com.google.common.collect.Lists;
> > +
> > import org.apache.shindig.gadgets.spec.Feature;
> > import org.apache.shindig.gadgets.spec.GadgetSpec;
> >
> > +import java.util.List;
> > import java.util.Set;
> > import java.util.TreeSet;
> > import java.util.regex.Pattern;
> > @@ -33,6 +36,9 @@
> > private static final String INCLUDE_URLS = "include-urls";
> > private static final String EXCLUDE_URLS = "exclude-urls";
> > private static final String INCLUDE_TAGS = "include-tags";
> > + private static final String EXPIRES = "expires";
> > +
> > + public static final String EXPIRES_DEFAULT = "HTTP";
> >
> > // Use tree set to maintain order for fingerprint
> > private TreeSet<String> includeTags;
> > @@ -43,6 +49,9 @@
> > private Pattern include;
> > private Pattern exclude;
> >
> > + // If null then dont enforce a min TTL for proxied content. Use
> contents
> > headers
> > + private Integer expires;
> > +
> > private Integer fingerprint;
> >
> > /**
> > @@ -51,15 +60,20 @@
> > * @param spec
> > * @param defaultInclude As a regex
> > * @param defaultExclude As a regex
> > + * @param defaultExpires Either "HTTP" or a ttl in seconds
> > * @param defaultTags Set of default tags that can be rewritten
> > */
> > public ContentRewriterFeature(GadgetSpec spec, String defaultInclude,
> > - String defaultExclude, Set<String>
> > defaultTags) {
> > + String defaultExclude,
> > + String defaultExpires,
> > + Set<String> defaultTags) {
> > Feature f =
> spec.getModulePrefs().getFeatures().get("content-rewrite");
> > String includeRegex = normalizeParam(defaultInclude, null);
> > String excludeRegex = normalizeParam(defaultExclude, null);
> > +
> > this.includeTags = new TreeSet<String>(defaultTags);
> >
> > + List<String> expiresOptions = Lists.newArrayListWithCapacity(3);
> > if (f != null) {
> > if (f.getParams().containsKey(INCLUDE_URLS)) {
> > includeRegex = normalizeParam(f.getParams().get(INCLUDE_URLS),
> > includeRegex);
> > @@ -80,6 +94,25 @@
> > }
> > includeTags = tags;
> > }
> > +
> > + if (f.getParams().containsKey(EXPIRES)) {
> > + expiresOptions.add(normalizeParam(f.getParams().get(EXPIRES),
> > null));
> > + }
> > + }
> > +
> > + expiresOptions.add(defaultExpires);
> > + expiresOptions.add(EXPIRES_DEFAULT);
> > +
> > + for (String expiryOption : expiresOptions) {
> > + try {
> > + expires = new Integer(expiryOption);
> > + break;
> > + } catch (NumberFormatException nfe) {
> > + // Not an integer
> > + if (EXPIRES_DEFAULT.equalsIgnoreCase(expiryOption)) {
> > + break;
> > + }
> > + }
> > }
> >
> > if (".*".equals(includeRegex) && excludeRegex == null) {
> > @@ -136,6 +169,13 @@
> > }
> >
> > /**
> > + * @return the min TTL to enforce or null if proxy should respect
> > headers
> > + */
> > + public Integer getExpires() {
> > + return expires;
> > + }
> > +
> > + /**
> > * @return fingerprint of rewriting rule for cache-busting
> > */
> > public int getFingerprint() {
> >
> > Modified:
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java?rev=677757&r1=677756&r2=677757&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
> > (original)
> > +++
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
> > Thu Jul 17 14:58:34 2008
> > @@ -17,16 +17,16 @@
> > */
> > package org.apache.shindig.gadgets.rewrite;
> >
> > +import com.google.inject.Inject;
> > +import com.google.inject.Singleton;
> > +import com.google.inject.name.Named;
> > +
> > import org.apache.shindig.gadgets.GadgetException;
> > import org.apache.shindig.gadgets.GadgetSpecFactory;
> > import org.apache.shindig.gadgets.http.HttpRequest;
> > import org.apache.shindig.gadgets.http.HttpResponse;
> > import org.apache.shindig.gadgets.spec.GadgetSpec;
> >
> > -import com.google.inject.Inject;
> > -import com.google.inject.Singleton;
> > -import com.google.inject.name.Named;
> > -
> > import java.io.ByteArrayOutputStream;
> > import java.io.InputStreamReader;
> > import java.io.OutputStreamWriter;
> > @@ -50,6 +50,7 @@
> > private final GadgetSpecFactory specFactory;
> > private final String includeUrls;
> > private final String excludeUrls;
> > + private final String expires;
> > private final Set<String> includeTags;
> >
> > @Inject
> > @@ -57,10 +58,12 @@
> > GadgetSpecFactory specFactory,
> > @Named("content-rewrite.include-urls")String includeUrls,
> > @Named("content-rewrite.exclude-urls")String excludeUrls,
> > + @Named("content-rewrite.expires")String expires,
> > @Named("content-rewrite.include-tags")String includeTags) {
> > this.specFactory = specFactory;
> > this.includeUrls = includeUrls;
> > this.excludeUrls = excludeUrls;
> > + this.expires = expires;
> > this.includeTags = new HashSet<String>();
> > for (String s : includeTags.split(",")) {
> > if (s != null && s.trim().length() > 0) {
> > @@ -117,7 +120,8 @@
> > // Store the feature in the spec so we dont keep parsing it
> > ContentRewriterFeature rewriterFeature =
> > (ContentRewriterFeature)spec.getAttribute("content-rewrite");
> > if (rewriterFeature == null) {
> > - rewriterFeature = new ContentRewriterFeature(spec, includeUrls,
> > excludeUrls, includeTags);
> > + rewriterFeature = new ContentRewriterFeature(spec, includeUrls,
> > excludeUrls, expires,
> > + includeTags);
> > spec.setAttribute("content-rewrite", rewriterFeature);
> > }
> >
> >
> > Modified:
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java?rev=677757&r1=677756&r2=677757&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
> > (original)
> > +++
> >
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
> > Thu Jul 17 14:58:34 2008
> > @@ -19,6 +19,7 @@
> > package org.apache.shindig.gadgets.rewrite;
> >
> > import org.apache.shindig.common.util.Utf8UrlCoder;
> > +import org.apache.shindig.gadgets.servlet.ProxyBase;
> >
> > import java.net.URI;
> > import java.net.URISyntaxException;
> > @@ -53,12 +54,16 @@
> > URI linkUri = new URI(link);
> > URI uri = context.resolve(linkUri);
> > if (rewriterFeature.shouldRewriteURL(uri.toString())) {
> > - return prefix
> > + String result = prefix
> > + Utf8UrlCoder.encode(uri.toString())
> > + "&gadget="
> > + Utf8UrlCoder.encode(gadgetUri.toString())
> > + "&fp="
> > + rewriterFeature.getFingerprint();
> > + if (rewriterFeature.getExpires() != null) {
> > + result += "&" + ProxyBase.REFRESH_PARAM + "=" +
> > rewriterFeature.getExpires().toString();
> > + }
> > + return result;
> > } else {
> > return uri.toString();
> > }
> >
> > Modified:
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java?rev=677757&r1=677756&r2=677757&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
> > (original)
> > +++
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
> > Thu Jul 17 14:58:34 2008
> > @@ -18,6 +18,7 @@
> > package org.apache.shindig.gadgets.rewrite;
> >
> > import com.google.common.collect.Sets;
> > +
> > import org.apache.commons.lang.StringUtils;
> > import org.apache.shindig.gadgets.EasyMockTestCase;
> > import org.apache.shindig.gadgets.GadgetException;
> > @@ -39,17 +40,20 @@
> > protected void setUp() throws Exception {
> > super.setUp();
> > tags = Sets.newHashSet("embed", "img", "script", "link");
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", tags);
> > + contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", "HTTP",
> > + tags);
> > defaultRewriter = new ProxyingLinkRewriter(
> > SPEC_URL,
> > contentRewriterFeature,
> > "http://www.test.com/proxy?url=");
> > }
> >
> > - protected GadgetSpec getSpecWithRewrite(String include, String
> exclude,
> > Set<String> tags) throws GadgetException {
> > + protected GadgetSpec getSpecWithRewrite(String include, String
> exclude,
> > String expires,
> > + Set<String> tags) throws GadgetException {
> > String xml = "<Module>" +
> > "<ModulePrefs title=\"title\">" +
> > "<Optional feature=\"content-rewrite\">\n" +
> > + " <Param name=\"expires\">" + expires +
> "</Param>\n"
> > +
> > " <Param name=\"include-urls\">" + include +
> > "</Param>\n" +
> > " <Param name=\"exclude-urls\">" + exclude +
> > "</Param>\n" +
> > " <Param name=\"include-tags\">" +
> > StringUtils.join(tags, ",") + "</Param>\n" +
> >
> > Modified:
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java?rev=677757&r1=677756&r2=677757&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
> > (original)
> > +++
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
> > Thu Jul 17 14:58:34 2008
> > @@ -27,50 +27,56 @@
> > public class ContentRewriterFeatureTestCase extends BaseRewriterTestCase
> {
> >
> > public void testContainerDefaultIncludeAll() throws Exception {
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", tags);
> > + contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", "0", tags);
> > assertTrue(contentRewriterFeature.isRewriteEnabled());
> > assertTrue(contentRewriterFeature.shouldRewriteURL("
> > http://www.test.com"));
> > }
> >
> > public void testContainerDefaultIncludeNone() throws Exception {
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithoutRewrite(), "", ".*", tags);
> > + contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithoutRewrite(), "", ".*", "0", tags);
> > assertFalse(contentRewriterFeature.isRewriteEnabled());
> > assertFalse(contentRewriterFeature.shouldRewriteURL("
> > http://www.test.com"));
> > }
> >
> > public void testContainerDefaultExcludeOverridesInclude() throws
> > Exception {
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithoutRewrite(), ".*", ".*", tags);
> > + contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithoutRewrite(), ".*", ".*", "0",
> > + tags);
> > assertFalse(contentRewriterFeature.isRewriteEnabled());
> > assertFalse(contentRewriterFeature.shouldRewriteURL("
> > http://www.test.com"));
> > }
> >
> > public void testSpecExcludeOverridesContainerDefaultInclude() throws
> > Exception {
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithRewrite("", ".*", tags), ".*", "",
> tags);
> > + contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithRewrite("", ".*", "0", tags), ".*",
> > + "", "0", tags);
> > assertFalse(contentRewriterFeature.isRewriteEnabled());
> > assertFalse(contentRewriterFeature.shouldRewriteURL("
> > http://www.test.com"));
> > }
> >
> > public void testSpecIncludeOverridesContainerDefaultExclude() throws
> > Exception {
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithRewrite(".*", "", tags), "", ".*",
> tags);
> > + contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithRewrite(".*", "", "0", tags), "",
> > + ".*", "0", tags);
> > assertTrue(contentRewriterFeature.isRewriteEnabled());
> > assertTrue(contentRewriterFeature.shouldRewriteURL("
> > http://www.test.com"));
> > }
> >
> > public void testExcludeOverridesInclude() throws Exception {
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithRewrite("test\\.com", "test", tags),
> "",
> > "", tags);
> > + contentRewriterFeature = new ContentRewriterFeature(
> > + getSpecWithRewrite("test\\.com", "test", "0", tags), "", "",
> "0",
> > tags);
> > assertTrue(contentRewriterFeature.isRewriteEnabled());
> > assertFalse(contentRewriterFeature.shouldRewriteURL("
> > http://www.test.com"));
> > }
> >
> > public void testIncludeOnlyMatch() throws Exception {
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx", tags),
> "",
> > "", tags);
> > + contentRewriterFeature = new ContentRewriterFeature(
> > + getSpecWithRewrite("test\\.com", "testx", "0", tags), "", "",
> "0",
> > tags);
> > assertTrue(contentRewriterFeature.isRewriteEnabled());
> > assertTrue(contentRewriterFeature.shouldRewriteURL("
> > http://www.test.com"));
> > assertFalse(contentRewriterFeature.shouldRewriteURL("
> > http://testx.test.com"));
> > }
> >
> > public void testTagRewrite() throws Exception {
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx", tags),
> "",
> > "", tags);
> > + contentRewriterFeature = new ContentRewriterFeature(
> > + getSpecWithRewrite("test\\.com", "testx", "0", tags), "", "",
> "0",
> > tags);
> > assertFalse(contentRewriterFeature.shouldRewriteTag("IFRAME"));
> > assertTrue(contentRewriterFeature.shouldRewriteTag("img"));
> > assertTrue(contentRewriterFeature.shouldRewriteTag("ScripT"));
> > @@ -78,10 +84,32 @@
> >
> > public void testOverrideTagRewrite() throws Exception {
> > Set<String> newTags = Sets.newHashSet("iframe");
> > - contentRewriterFeature = new
> > ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx",
> newTags),
> > "", "", tags);
> > + contentRewriterFeature = new ContentRewriterFeature(
> > + getSpecWithRewrite("test\\.com", "testx", "0", newTags), "", "",
> > "0", tags);
> > assertTrue(contentRewriterFeature.shouldRewriteTag("IFRAME"));
> > assertFalse(contentRewriterFeature.shouldRewriteTag("img"));
> > assertFalse(contentRewriterFeature.shouldRewriteTag("ScripT"));
> > assertFalse(contentRewriterFeature.shouldRewriteTag("link"));
> > }
> > +
> > + public void testExpiresTimeParse() throws Exception {
> > + contentRewriterFeature = new ContentRewriterFeature(
> > + getSpecWithRewrite("test\\.com", "testx", "12345", tags), "",
> "",
> > "0", tags);
> > + assertNotNull(contentRewriterFeature.getExpires());
> > + assertNotNull(contentRewriterFeature.getExpires() == 12345);
> > + }
> > +
> > + public void testExpiresHTTPParse() throws Exception {
> > + contentRewriterFeature = new ContentRewriterFeature(
> > + getSpecWithRewrite("test\\.com", "testx", "htTp ", tags), "",
> "",
> > "12345", tags);
> > + assertNull(contentRewriterFeature.getExpires());
> > + }
> > +
> > + public void testExpiresInvalidParse() throws Exception {
> > + contentRewriterFeature = new ContentRewriterFeature(
> > + getSpecWithRewrite("test\\.com", "testx", "junk", tags), "", "",
> > "12345", tags);
> > + assertNotNull(contentRewriterFeature.getExpires());
> > + assertNotNull(contentRewriterFeature.getExpires() == 12345);
> > + }
> > +
> > }
> >
> > Modified:
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java?rev=677757&r1=677756&r2=677757&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
> > (original)
> > +++
> >
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
> > Thu Jul 17 14:58:34 2008
> > @@ -17,6 +17,8 @@
> > */
> > package org.apache.shindig.gadgets.rewrite;
> >
> > +import com.google.common.collect.Sets;
> > +
> > /**
> > * Test of proxying rewriter
> > */
> > @@ -50,9 +52,22 @@
> > rewrite(val));
> > }
> >
> > + public void testWithRefresh() throws Exception {
> > + ContentRewriterFeature contentRewriterFeature = new
> > ContentRewriterFeature(
> > + getSpecWithoutRewrite(), ".*", "", "86400",
> > + Sets.newHashSet("embed", "img", "script", "link"));
> > + ProxyingLinkRewriter rewriter = new ProxyingLinkRewriter(
> > + SPEC_URL,
> > + contentRewriterFeature,
> > + "http://www.test.com/proxy?url=");
> > + String val = " test.gif ";
> > + assertEquals("
> >
> http://www.test.com/proxy?url=http%3A%2F%2Fexample.org%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&refresh=86400
> > ",
> > + rewriter.rewrite(val, SPEC_URL));
> > + }
> > +
> > public void testInvalidCharRewrite() {
> > String val =
> "/images/opensocial/movie_trivia/76/${quiz.picture_url}";
> > -
> assertEquals("/images/opensocial/movie_trivia/76/${quiz.picture_url}",
> > + assertEquals(val,
> > rewrite(val));
> > }
> >
> >
> >
> >
>
Re: svn commit: r677757 - in /incubator/shindig/trunk/java/gadgets: conf/ src/main/java/org/apache/shindig/gadgets/rewrite/ src/test/java/org/apache/shindig/gadgets/rewrite/
Posted by Kevin Brown <et...@google.com>.
Your import order is off -- org.apache.shindig should come before the third
party code.
What about honoring HTTP headers? Wasn't that supposed to be a special
value?
On Thu, Jul 17, 2008 at 2:58 PM, <lr...@apache.org> wrote:
> Author: lryan
> Date: Thu Jul 17 14:58:34 2008
> New Revision: 677757
>
> URL: http://svn.apache.org/viewvc?rev=677757&view=rev
> Log:
> Added support for 'expires' param to rewriter to control what cache-headers
> the open-proxy should enforce.
>
> Modified:
> incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
>
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
>
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
>
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.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/ContentRewriterFeatureTestCase.java
>
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
>
> Modified: incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/conf/gadgets.properties?rev=677757&r1=677756&r2=677757&view=diff
>
> ==============================================================================
> --- incubator/shindig/trunk/java/gadgets/conf/gadgets.properties (original)
> +++ incubator/shindig/trunk/java/gadgets/conf/gadgets.properties Thu Jul 17
> 14:58:34 2008
> @@ -10,6 +10,7 @@
> content-rewrite.include-urls=.*
> content-rewrite.exclude-urls=
> content-rewrite.include-tags=link,script,embed,img,style
> +content-rewrite.expires=86400
> cache.capacity=10000
> gadget-spec.cache.capacity=0
> message-bundle.cache.capacity=0
>
> Modified:
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java?rev=677757&r1=677756&r2=677757&view=diff
>
> ==============================================================================
> ---
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
> (original)
> +++
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
> Thu Jul 17 14:58:34 2008
> @@ -17,9 +17,12 @@
> */
> package org.apache.shindig.gadgets.rewrite;
>
> +import com.google.common.collect.Lists;
> +
> import org.apache.shindig.gadgets.spec.Feature;
> import org.apache.shindig.gadgets.spec.GadgetSpec;
>
> +import java.util.List;
> import java.util.Set;
> import java.util.TreeSet;
> import java.util.regex.Pattern;
> @@ -33,6 +36,9 @@
> private static final String INCLUDE_URLS = "include-urls";
> private static final String EXCLUDE_URLS = "exclude-urls";
> private static final String INCLUDE_TAGS = "include-tags";
> + private static final String EXPIRES = "expires";
> +
> + public static final String EXPIRES_DEFAULT = "HTTP";
>
> // Use tree set to maintain order for fingerprint
> private TreeSet<String> includeTags;
> @@ -43,6 +49,9 @@
> private Pattern include;
> private Pattern exclude;
>
> + // If null then dont enforce a min TTL for proxied content. Use contents
> headers
> + private Integer expires;
> +
> private Integer fingerprint;
>
> /**
> @@ -51,15 +60,20 @@
> * @param spec
> * @param defaultInclude As a regex
> * @param defaultExclude As a regex
> + * @param defaultExpires Either "HTTP" or a ttl in seconds
> * @param defaultTags Set of default tags that can be rewritten
> */
> public ContentRewriterFeature(GadgetSpec spec, String defaultInclude,
> - String defaultExclude, Set<String>
> defaultTags) {
> + String defaultExclude,
> + String defaultExpires,
> + Set<String> defaultTags) {
> Feature f = spec.getModulePrefs().getFeatures().get("content-rewrite");
> String includeRegex = normalizeParam(defaultInclude, null);
> String excludeRegex = normalizeParam(defaultExclude, null);
> +
> this.includeTags = new TreeSet<String>(defaultTags);
>
> + List<String> expiresOptions = Lists.newArrayListWithCapacity(3);
> if (f != null) {
> if (f.getParams().containsKey(INCLUDE_URLS)) {
> includeRegex = normalizeParam(f.getParams().get(INCLUDE_URLS),
> includeRegex);
> @@ -80,6 +94,25 @@
> }
> includeTags = tags;
> }
> +
> + if (f.getParams().containsKey(EXPIRES)) {
> + expiresOptions.add(normalizeParam(f.getParams().get(EXPIRES),
> null));
> + }
> + }
> +
> + expiresOptions.add(defaultExpires);
> + expiresOptions.add(EXPIRES_DEFAULT);
> +
> + for (String expiryOption : expiresOptions) {
> + try {
> + expires = new Integer(expiryOption);
> + break;
> + } catch (NumberFormatException nfe) {
> + // Not an integer
> + if (EXPIRES_DEFAULT.equalsIgnoreCase(expiryOption)) {
> + break;
> + }
> + }
> }
>
> if (".*".equals(includeRegex) && excludeRegex == null) {
> @@ -136,6 +169,13 @@
> }
>
> /**
> + * @return the min TTL to enforce or null if proxy should respect
> headers
> + */
> + public Integer getExpires() {
> + return expires;
> + }
> +
> + /**
> * @return fingerprint of rewriting rule for cache-busting
> */
> public int getFingerprint() {
>
> Modified:
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java?rev=677757&r1=677756&r2=677757&view=diff
>
> ==============================================================================
> ---
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
> (original)
> +++
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
> Thu Jul 17 14:58:34 2008
> @@ -17,16 +17,16 @@
> */
> package org.apache.shindig.gadgets.rewrite;
>
> +import com.google.inject.Inject;
> +import com.google.inject.Singleton;
> +import com.google.inject.name.Named;
> +
> import org.apache.shindig.gadgets.GadgetException;
> import org.apache.shindig.gadgets.GadgetSpecFactory;
> import org.apache.shindig.gadgets.http.HttpRequest;
> import org.apache.shindig.gadgets.http.HttpResponse;
> import org.apache.shindig.gadgets.spec.GadgetSpec;
>
> -import com.google.inject.Inject;
> -import com.google.inject.Singleton;
> -import com.google.inject.name.Named;
> -
> import java.io.ByteArrayOutputStream;
> import java.io.InputStreamReader;
> import java.io.OutputStreamWriter;
> @@ -50,6 +50,7 @@
> private final GadgetSpecFactory specFactory;
> private final String includeUrls;
> private final String excludeUrls;
> + private final String expires;
> private final Set<String> includeTags;
>
> @Inject
> @@ -57,10 +58,12 @@
> GadgetSpecFactory specFactory,
> @Named("content-rewrite.include-urls")String includeUrls,
> @Named("content-rewrite.exclude-urls")String excludeUrls,
> + @Named("content-rewrite.expires")String expires,
> @Named("content-rewrite.include-tags")String includeTags) {
> this.specFactory = specFactory;
> this.includeUrls = includeUrls;
> this.excludeUrls = excludeUrls;
> + this.expires = expires;
> this.includeTags = new HashSet<String>();
> for (String s : includeTags.split(",")) {
> if (s != null && s.trim().length() > 0) {
> @@ -117,7 +120,8 @@
> // Store the feature in the spec so we dont keep parsing it
> ContentRewriterFeature rewriterFeature =
> (ContentRewriterFeature)spec.getAttribute("content-rewrite");
> if (rewriterFeature == null) {
> - rewriterFeature = new ContentRewriterFeature(spec, includeUrls,
> excludeUrls, includeTags);
> + rewriterFeature = new ContentRewriterFeature(spec, includeUrls,
> excludeUrls, expires,
> + includeTags);
> spec.setAttribute("content-rewrite", rewriterFeature);
> }
>
>
> Modified:
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java?rev=677757&r1=677756&r2=677757&view=diff
>
> ==============================================================================
> ---
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
> (original)
> +++
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
> Thu Jul 17 14:58:34 2008
> @@ -19,6 +19,7 @@
> package org.apache.shindig.gadgets.rewrite;
>
> import org.apache.shindig.common.util.Utf8UrlCoder;
> +import org.apache.shindig.gadgets.servlet.ProxyBase;
>
> import java.net.URI;
> import java.net.URISyntaxException;
> @@ -53,12 +54,16 @@
> URI linkUri = new URI(link);
> URI uri = context.resolve(linkUri);
> if (rewriterFeature.shouldRewriteURL(uri.toString())) {
> - return prefix
> + String result = prefix
> + Utf8UrlCoder.encode(uri.toString())
> + "&gadget="
> + Utf8UrlCoder.encode(gadgetUri.toString())
> + "&fp="
> + rewriterFeature.getFingerprint();
> + if (rewriterFeature.getExpires() != null) {
> + result += "&" + ProxyBase.REFRESH_PARAM + "=" +
> rewriterFeature.getExpires().toString();
> + }
> + return result;
> } else {
> return uri.toString();
> }
>
> Modified:
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java?rev=677757&r1=677756&r2=677757&view=diff
>
> ==============================================================================
> ---
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
> (original)
> +++
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
> Thu Jul 17 14:58:34 2008
> @@ -18,6 +18,7 @@
> package org.apache.shindig.gadgets.rewrite;
>
> import com.google.common.collect.Sets;
> +
> import org.apache.commons.lang.StringUtils;
> import org.apache.shindig.gadgets.EasyMockTestCase;
> import org.apache.shindig.gadgets.GadgetException;
> @@ -39,17 +40,20 @@
> protected void setUp() throws Exception {
> super.setUp();
> tags = Sets.newHashSet("embed", "img", "script", "link");
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", tags);
> + contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", "HTTP",
> + tags);
> defaultRewriter = new ProxyingLinkRewriter(
> SPEC_URL,
> contentRewriterFeature,
> "http://www.test.com/proxy?url=");
> }
>
> - protected GadgetSpec getSpecWithRewrite(String include, String exclude,
> Set<String> tags) throws GadgetException {
> + protected GadgetSpec getSpecWithRewrite(String include, String exclude,
> String expires,
> + Set<String> tags) throws GadgetException {
> String xml = "<Module>" +
> "<ModulePrefs title=\"title\">" +
> "<Optional feature=\"content-rewrite\">\n" +
> + " <Param name=\"expires\">" + expires + "</Param>\n"
> +
> " <Param name=\"include-urls\">" + include +
> "</Param>\n" +
> " <Param name=\"exclude-urls\">" + exclude +
> "</Param>\n" +
> " <Param name=\"include-tags\">" +
> StringUtils.join(tags, ",") + "</Param>\n" +
>
> Modified:
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java?rev=677757&r1=677756&r2=677757&view=diff
>
> ==============================================================================
> ---
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
> (original)
> +++
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
> Thu Jul 17 14:58:34 2008
> @@ -27,50 +27,56 @@
> public class ContentRewriterFeatureTestCase extends BaseRewriterTestCase {
>
> public void testContainerDefaultIncludeAll() throws Exception {
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", tags);
> + contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", "0", tags);
> assertTrue(contentRewriterFeature.isRewriteEnabled());
> assertTrue(contentRewriterFeature.shouldRewriteURL("
> http://www.test.com"));
> }
>
> public void testContainerDefaultIncludeNone() throws Exception {
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithoutRewrite(), "", ".*", tags);
> + contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithoutRewrite(), "", ".*", "0", tags);
> assertFalse(contentRewriterFeature.isRewriteEnabled());
> assertFalse(contentRewriterFeature.shouldRewriteURL("
> http://www.test.com"));
> }
>
> public void testContainerDefaultExcludeOverridesInclude() throws
> Exception {
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithoutRewrite(), ".*", ".*", tags);
> + contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithoutRewrite(), ".*", ".*", "0",
> + tags);
> assertFalse(contentRewriterFeature.isRewriteEnabled());
> assertFalse(contentRewriterFeature.shouldRewriteURL("
> http://www.test.com"));
> }
>
> public void testSpecExcludeOverridesContainerDefaultInclude() throws
> Exception {
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithRewrite("", ".*", tags), ".*", "", tags);
> + contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithRewrite("", ".*", "0", tags), ".*",
> + "", "0", tags);
> assertFalse(contentRewriterFeature.isRewriteEnabled());
> assertFalse(contentRewriterFeature.shouldRewriteURL("
> http://www.test.com"));
> }
>
> public void testSpecIncludeOverridesContainerDefaultExclude() throws
> Exception {
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithRewrite(".*", "", tags), "", ".*", tags);
> + contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithRewrite(".*", "", "0", tags), "",
> + ".*", "0", tags);
> assertTrue(contentRewriterFeature.isRewriteEnabled());
> assertTrue(contentRewriterFeature.shouldRewriteURL("
> http://www.test.com"));
> }
>
> public void testExcludeOverridesInclude() throws Exception {
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithRewrite("test\\.com", "test", tags), "",
> "", tags);
> + contentRewriterFeature = new ContentRewriterFeature(
> + getSpecWithRewrite("test\\.com", "test", "0", tags), "", "", "0",
> tags);
> assertTrue(contentRewriterFeature.isRewriteEnabled());
> assertFalse(contentRewriterFeature.shouldRewriteURL("
> http://www.test.com"));
> }
>
> public void testIncludeOnlyMatch() throws Exception {
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx", tags), "",
> "", tags);
> + contentRewriterFeature = new ContentRewriterFeature(
> + getSpecWithRewrite("test\\.com", "testx", "0", tags), "", "", "0",
> tags);
> assertTrue(contentRewriterFeature.isRewriteEnabled());
> assertTrue(contentRewriterFeature.shouldRewriteURL("
> http://www.test.com"));
> assertFalse(contentRewriterFeature.shouldRewriteURL("
> http://testx.test.com"));
> }
>
> public void testTagRewrite() throws Exception {
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx", tags), "",
> "", tags);
> + contentRewriterFeature = new ContentRewriterFeature(
> + getSpecWithRewrite("test\\.com", "testx", "0", tags), "", "", "0",
> tags);
> assertFalse(contentRewriterFeature.shouldRewriteTag("IFRAME"));
> assertTrue(contentRewriterFeature.shouldRewriteTag("img"));
> assertTrue(contentRewriterFeature.shouldRewriteTag("ScripT"));
> @@ -78,10 +84,32 @@
>
> public void testOverrideTagRewrite() throws Exception {
> Set<String> newTags = Sets.newHashSet("iframe");
> - contentRewriterFeature = new
> ContentRewriterFeature(getSpecWithRewrite("test\\.com", "testx", newTags),
> "", "", tags);
> + contentRewriterFeature = new ContentRewriterFeature(
> + getSpecWithRewrite("test\\.com", "testx", "0", newTags), "", "",
> "0", tags);
> assertTrue(contentRewriterFeature.shouldRewriteTag("IFRAME"));
> assertFalse(contentRewriterFeature.shouldRewriteTag("img"));
> assertFalse(contentRewriterFeature.shouldRewriteTag("ScripT"));
> assertFalse(contentRewriterFeature.shouldRewriteTag("link"));
> }
> +
> + public void testExpiresTimeParse() throws Exception {
> + contentRewriterFeature = new ContentRewriterFeature(
> + getSpecWithRewrite("test\\.com", "testx", "12345", tags), "", "",
> "0", tags);
> + assertNotNull(contentRewriterFeature.getExpires());
> + assertNotNull(contentRewriterFeature.getExpires() == 12345);
> + }
> +
> + public void testExpiresHTTPParse() throws Exception {
> + contentRewriterFeature = new ContentRewriterFeature(
> + getSpecWithRewrite("test\\.com", "testx", "htTp ", tags), "", "",
> "12345", tags);
> + assertNull(contentRewriterFeature.getExpires());
> + }
> +
> + public void testExpiresInvalidParse() throws Exception {
> + contentRewriterFeature = new ContentRewriterFeature(
> + getSpecWithRewrite("test\\.com", "testx", "junk", tags), "", "",
> "12345", tags);
> + assertNotNull(contentRewriterFeature.getExpires());
> + assertNotNull(contentRewriterFeature.getExpires() == 12345);
> + }
> +
> }
>
> Modified:
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java?rev=677757&r1=677756&r2=677757&view=diff
>
> ==============================================================================
> ---
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
> (original)
> +++
> incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
> Thu Jul 17 14:58:34 2008
> @@ -17,6 +17,8 @@
> */
> package org.apache.shindig.gadgets.rewrite;
>
> +import com.google.common.collect.Sets;
> +
> /**
> * Test of proxying rewriter
> */
> @@ -50,9 +52,22 @@
> rewrite(val));
> }
>
> + public void testWithRefresh() throws Exception {
> + ContentRewriterFeature contentRewriterFeature = new
> ContentRewriterFeature(
> + getSpecWithoutRewrite(), ".*", "", "86400",
> + Sets.newHashSet("embed", "img", "script", "link"));
> + ProxyingLinkRewriter rewriter = new ProxyingLinkRewriter(
> + SPEC_URL,
> + contentRewriterFeature,
> + "http://www.test.com/proxy?url=");
> + String val = " test.gif ";
> + assertEquals("
> http://www.test.com/proxy?url=http%3A%2F%2Fexample.org%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&refresh=86400
> ",
> + rewriter.rewrite(val, SPEC_URL));
> + }
> +
> public void testInvalidCharRewrite() {
> String val = "/images/opensocial/movie_trivia/76/${quiz.picture_url}";
> - assertEquals("/images/opensocial/movie_trivia/76/${quiz.picture_url}",
> + assertEquals(val,
> rewrite(val));
> }
>
>
>
>