From: <bra...@us...> - 2007-12-12 02:19:07
|
Revision: 2110 http://archive-access.svn.sourceforge.net/archive-access/?rev=2110&view=rev Author: bradtofel Date: 2007-12-11 18:19:12 -0800 (Tue, 11 Dec 2007) Log Message: ----------- BUGFIX: (unreported) no longer rewrite mailto: and javascript: URLs in full server-side rewrite mode Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java 2007-12-12 02:15:09 UTC (rev 2109) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java 2007-12-12 02:19:12 UTC (rev 2110) @@ -214,39 +214,64 @@ String captureDate = result.getCaptureDate(); String existingBaseHref = TagMagix.getBaseHref(sb); - if (existingBaseHref != null) { + if (existingBaseHref == null) { + insertAtStartOfHead("<base href=\"" + pageUrl + "\" />"); + } else { pageUrl = existingBaseHref; } - TagMagix.markupTagREURIC(sb, uriConverter, captureDate, pageUrl, - "FRAME", "SRC"); -// TagMagix.markupTagREURIC(page, uriConverter, captureDate, pageUrl, -// "IFRAME", "SRC"); - TagMagix.markupTagREURIC(sb, uriConverter, captureDate, pageUrl, - "META", "URL"); - TagMagix.markupTagREURIC(sb, uriConverter, captureDate, pageUrl, - "LINK", "HREF"); + String markups[][] = { + {"FRAME","SRC"}, + {"META","URL"}, + {"LINK","HREF"}, + {"SCRIPT","SRC"} + }; // TODO: The classic WM added a js_ to the datespec, so NotInArchives // can return an valid javascript doc, and not cause Javascript errors. - TagMagix.markupTagREURIC(sb, uriConverter, captureDate, pageUrl, - "SCRIPT", "SRC"); - - if (existingBaseHref == null) { - String baseTag = "<base href=\"" + pageUrl + "\" />"; - int insertPoint = sb.indexOf("<head>"); - if (-1 == insertPoint) { - insertPoint = sb.indexOf("<HEAD>"); - } - if (-1 == insertPoint) { - insertPoint = 0; - } else { - insertPoint += 6; // just after the tag - } - sb.insert(insertPoint, baseTag); + for(String tagAttr[] : markups) { + TagMagix.markupTagREURIC(sb, uriConverter, captureDate, pageUrl, + tagAttr[0], tagAttr[1]); } } + /** + * Update all URLs inside the page, so they resolve correctly to absolute + * URLs within the Wayback service. + */ + public void resolveAllPageUrls() { + // TODO: get url from Resource instead of SearchResult? + String pageUrl = result.getAbsoluteUrl(); + String captureDate = result.getCaptureDate(); + + String existingBaseHref = TagMagix.getBaseHref(sb); + if (existingBaseHref != null) { + pageUrl = existingBaseHref; + } + ResultURIConverter ruc = new SpecialResultURIConverter(uriConverter); + + // TODO: forms...? + String markups[][] = { + {"FRAME","SRC"}, + {"META","URL"}, + {"LINK","HREF"}, + {"SCRIPT","SRC"}, + {"IMG","SRC"}, + {"A","HREF"}, + {"AREA","HREF"}, + {"OBJECT","CODEBASE"}, + {"OBJECT","CDATA"}, + {"APPLET","CODEBASE"}, + {"APPLET","ARCHIVE"}, + {"EMBED","SRC"}, + {"IFRAME","SRC"}, + {"BODY","BACKGROUND"}, + }; + for(String tagAttr[] : markups) { + TagMagix.markupTagREURIC(sb, ruc, captureDate, pageUrl, + tagAttr[0], tagAttr[1]); + } + } /** * @param charSet * @throws IOException @@ -310,9 +335,20 @@ } os.write(b); } - + /** * @param toInsert + */ + public void insertAtStartOfHead(String toInsert) { + int insertPoint = TagMagix.getEndOfFirstTag(sb,"head"); + if (-1 == insertPoint) { + insertPoint = 0; + } + sb.insert(insertPoint,toInsert); + } + + /** + * @param toInsert */ public void insertAtEndOfBody(String toInsert) { int insertPoint = sb.lastIndexOf("</body>"); @@ -325,6 +361,16 @@ sb.insert(insertPoint,toInsert); } /** + * @param toInsert + */ + public void insertAtStartOfBody(String toInsert) { + int insertPoint = TagMagix.getEndOfFirstTag(sb,"body"); + if (-1 == insertPoint) { + insertPoint = 0; + } + sb.insert(insertPoint,toInsert); + } + /** * @param jspPath * @param httpRequest * @param httpResponse @@ -373,4 +419,22 @@ public void setCharSet(String charSet) { this.charSet = charSet; } + + private class SpecialResultURIConverter implements ResultURIConverter { + private static final String EMAIL_PROTOCOL_PREFIX = "mailto:"; + private static final String JAVASCRIPT_PROTOCOL_PREFIX = "javascript:"; + private ResultURIConverter base = null; + public SpecialResultURIConverter(ResultURIConverter base) { + this.base = base; + } + public String makeReplayURI(String datespec, String url) { + if(url.startsWith(EMAIL_PROTOCOL_PREFIX)) { + return url; + } + if(url.startsWith(JAVASCRIPT_PROTOCOL_PREFIX)) { + return url; + } + return base.makeReplayURI(datespec, url); + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |