/** * Create a new datespec + flags which represent the same options * as requested by the instances own WaybackRequest, using the constant WaybackRequest.REQUEST_DATE constant as * a prefix. * @return a String representing the flags on the WaybackRequest. */ public String getDateSpec() { return getDateSpec(wbRequest.getReplayTimestamp()); }
/** * Create a new datespec + flags which represent the same options * as requested by the instances own WaybackRequest, using the constant WaybackRequest.REQUEST_DATE constant as * a prefix. * @return a String representing the flags on the WaybackRequest. */ public String getDateSpec() { return getDateSpec(wbRequest.getReplayTimestamp()); }
public String toReplayString(String url) { return toString(wbRequest.getReplayTimestamp(),url); }
public String toReplayString(String url) { return toString(wbRequest.getReplayTimestamp(),url); }
@Override public boolean canHandle(WaybackRequest wbRequest, CaptureSearchResult result, Resource httpHeadersResource, Resource payloadResource) { String reqDateStr = wbRequest.getReplayTimestamp(); String resDateStr = result.getCaptureTimestamp(); // if the request date is shorter than the result date, always redirect: if(reqDateStr.length() < resDateStr.length()) { return true; } // if the result is not for the exact date requested, redirect to the // exact date. some capture dates are not 14 digits, only compare as // many digits as are in the result date: return !resDateStr.equals(reqDateStr.substring(0, resDateStr.length())); } }
@Override public boolean canHandle(WaybackRequest wbRequest, CaptureSearchResult result, Resource httpHeadersResource, Resource payloadResource) { String reqDateStr = wbRequest.getReplayTimestamp(); String resDateStr = result.getCaptureTimestamp(); // if the request date is shorter than the result date, always redirect: if(reqDateStr.length() < resDateStr.length()) { return true; } // if the result is not for the exact date requested, redirect to the // exact date. some capture dates are not 14 digits, only compare as // many digits as are in the result date: return !resDateStr.equals(reqDateStr.substring(0, resDateStr.length())); } }
@Override public void setRequest(WaybackRequest wbRequest) { this.wbRequest = wbRequest; requestMS = Timestamp .parseBefore(wbRequest.getReplayTimestamp()).getDate() .getTime(); }
@Override public void setRequest(WaybackRequest wbRequest) { this.wbRequest = wbRequest; requestMS = Timestamp .parseBefore(wbRequest.getReplayTimestamp()).getDate() .getTime(); }
protected CaptureSearchResults searchCaptures(WaybackRequest wbr) throws ResourceIndexNotAvailableException, ResourceNotInArchiveException, BadQueryException, AccessControlException, ConfigurationException, ResourceNotAvailableException { SearchResults results = queryIndex(wbr); if (!(results instanceof CaptureSearchResults)) { throw new ResourceNotAvailableException( "Bad results looking up " + wbr.getReplayTimestamp() + " " + wbr.getRequestUrl()); } return (CaptureSearchResults)results; }
protected CaptureSearchResults searchCaptures(WaybackRequest wbr) throws ResourceIndexNotAvailableException, ResourceNotInArchiveException, BadQueryException, AccessControlException, ConfigurationException, ResourceNotAvailableException { SearchResults results = queryIndex(wbr); if (!(results instanceof CaptureSearchResults)) { throw new ResourceNotAvailableException( "Bad results looking up " + wbr.getReplayTimestamp() + " " + wbr.getRequestUrl()); } return (CaptureSearchResults)results; }
@Override public boolean matches(Object actual) { if (!(actual instanceof WaybackRequest)) return false; WaybackRequest wbRequest = (WaybackRequest)actual; String replayTimestamp = wbRequest.getReplayTimestamp(); String url = wbRequest.getRequestUrl(); if (url == null || replayTimestamp == null) return false; if (this.url == null || this.replayTimestamp == null) return false; // Only exact match is supported. i.e. http://example.com/ and // http://example.com are different even though they typically // get canonicalized into the same string. // Also not checking if wbRequest is in fact a capture search // request. return this.url.equals(url) && this.replayTimestamp.equals(replayTimestamp); }
/** * Accept-Datetime is ignored unless {@code enabledMemento} is {@code true}. * @throws Exception */ public void testMementoDisabled() throws Exception { acceptDatetime = "Mon, 27 Oct 2014 20:36:02 GMT"; accessPoint.setEnableMemento(false); setupRequest("http://example.com/"); EasyMock.replay(request); WaybackRequest wbr = cut.parse(request, accessPoint); assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertFalse(wbr.isMementoTimegate()); assertEquals("http://example.com/", wbr.getRequestUrl()); assertNotNull(wbr.getReplayTimestamp()); assertFalse("20141027203602".equals(wbr.getReplayTimestamp())); }
public void testProtocolRelative() throws Exception { acceptDatetime = "Mon, 27 Oct 2014 20:36:02 GMT"; accessPoint.setEnableMemento(true); setupRequest("//example.com/"); EasyMock.replay(request); try { WaybackRequest wbr = cut.parse(request, accessPoint); assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertTrue(wbr.isMementoTimegate()); assertEquals("http://example.com/", wbr.getRequestUrl()); assertEquals("20141027203602", wbr.getReplayTimestamp()); } catch (NullPointerException ex) { // it fails with NullPointerException currently. System.err.println("needs fix"); ex.printStackTrace(); } }
public void testReplayRequest() throws Exception { WaybackRequest wbr = parse("/web/20100101000000/http://www.yahoo.com/"); assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertEquals("20100101000000", wbr.getReplayTimestamp()); assertEquals("http://www.yahoo.com/", wbr.getRequestUrl()); }
public void testAcceptDatetime() throws Exception { acceptDatetime = "Mon, 27 Oct 2014 20:36:02 GMT"; accessPoint.setEnableMemento(true); setupRequest("http://example.com/"); EasyMock.replay(request); WaybackRequest wbr = cut.parse(request, accessPoint); assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertTrue(wbr.isMementoTimegate()); assertEquals("http://example.com/", wbr.getRequestUrl()); assertEquals("20141027203602", wbr.getReplayTimestamp()); }
/** * timestamp without "*", path ending with "*". * <p>this is interpreted as replay request for the URL including trailing "*". * That sounds inconsistent with other cases. (BTW, resultant time-redirect URL * has no trailing "*" - there's a special handling happening somewhere.) * Should this be interpreted as URL-query for the specific date?</p> * @throws Exception */ public void testDatePathPrefix() throws Exception { WaybackRequest wbr = parse("/web/20100101000000/http://www.yahoo.com/*"); assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertEquals("20100101000000", wbr.getReplayTimestamp()); // ReplayRequestParser does not strip trailing "*" off. assertEquals("http://www.yahoo.com/*", wbr.getRequestUrl()); }
/** * Alternate header {@code Accept-Timestamp} is in DT14 format. * @throws Exception */ public void testAcceptTimestamp() throws Exception { acceptTimestamp = "20141027203602"; accessPoint.setEnableMemento(true); setupRequest("http://example.com/"); EasyMock.replay(request); WaybackRequest wbr = cut.parse(request, accessPoint); assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertTrue(wbr.isMementoTimegate()); assertEquals("http://example.com/", wbr.getRequestUrl()); assertEquals("20141027203602", wbr.getReplayTimestamp()); }
/** * invalid Accept-Timestamp is simply ignored * @throws Exception */ public void testAcceptTimestamp_invalid() throws Exception { // Valid HTTP Date, but invalid for Accept-Timestamp acceptTimestamp = "Mon, 27 Oct 2014 20:36:02 GMT"; accessPoint.setEnableMemento(true); setupRequest("http://example.com/"); EasyMock.replay(request); WaybackRequest wbr = cut.parse(request, accessPoint); assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertTrue(wbr.isMementoTimegate()); assertEquals("http://example.com/", wbr.getRequestUrl()); assertNotNull(wbr.getReplayTimestamp()); }
/** * Invalid Accept-Datetime is simply ignored if valid * Accept-Timestamp is present. * @throws Exception */ public void testAcceptDate_invalidWithTimestamp() throws Exception { acceptDatetime = "2014-10-27 20:36:02"; acceptTimestamp = "20141027203602"; accessPoint.setEnableMemento(true); setupRequest("http://example.com/"); EasyMock.replay(request); WaybackRequest wbr = cut.parse(request, accessPoint); assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertTrue(wbr.isMementoTimegate()); assertEquals("http://example.com/", wbr.getRequestUrl()); assertEquals("20141027203602", wbr.getReplayTimestamp()); }
/** * test for {@link PathDateRangeQueryRequestParser}, %-encoded version. * @throws Exception */ public void testPathDateRangeEncoded() throws Exception { WaybackRequest wbr1 = parse("/web/20100101000000-20100630235959%2A/http://www.yahoo.com/"); assertNotNull(wbr1); assertTrue(wbr1.isCaptureQueryRequest()); assertEquals("20100101000000", wbr1.getStartTimestamp()); assertEquals("20100630235959", wbr1.getEndTimestamp()); // assertEquals("20100630235959", wbr1.getReplayTimestamp()); assertEquals(null, wbr1.getReplayTimestamp()); assertEquals("http://www.yahoo.com/", wbr1.getRequestUrl()); }