Package org.archive.wayback.core

Examples of org.archive.wayback.core.WaybackRequest


  }

  public WaybackRequest parse(HttpServletRequest httpRequest,
            AccessPoint wbContext) throws BadQueryException, BetterRequestException {
 
      WaybackRequest wbRequest = super.parse(httpRequest, wbContext);
      if (wbRequest != null) {          
       
          // First, try memento Accept-Datetime:
            String replayDateStr = httpRequest.getHeader(MementoUtils.ACCEPT_DATETIME);
           
            if (replayDateStr != null) {               
                Date date = MementoUtils.parseAcceptDateTimeHeader(replayDateStr);
               
                if (date != null) {
                    wbRequest.setReplayDate(date);
                    wbRequest.setAnchorDate(date);
                    wbRequest.setMementoTimegate();
                    return wbRequest;
                }
            }
         
            // Now, try custom timestamp header
            replayDateStr = httpRequest.getHeader("Proxy-Timestamp");           
           
                                   
            if (replayDateStr == null) {
                String id = httpRequest.getHeader("Proxy-Id");
                if (id == null) {
                    id = httpRequest.getRemoteAddr();
                }
               
                // Get the id from the request.
            // If no id, use the ip-address instead.
            // Check if the parser parsed a replay request and found a
            // timestamp. If so, then we need to store the timestamp and
            // redirect, which is done with a BetterRequestException:
            if (wbRequest.isReplayRequest()) {
              String replayTimestamp = wbRequest.getReplayTimestamp();
              if (replayTimestamp != null) {
                BDBMap.addTimestampForId(httpRequest.getContextPath(),
                    id, replayTimestamp);
                throw new BetterRequestException(wbRequest.getRequestUrl());
              }
            }
                   
              // Then get the timestamp (or rather datestr) matching this id.
              // TODO: This is hacky - need generic way to store session data
              replayDateStr = BDBMap.getTimestampForId(httpRequest.getContextPath(), id);
            }
   
            wbRequest.setReplayTimestamp(replayDateStr);
            wbRequest.setAnchorTimestamp(replayDateStr);
      }
      return wbRequest;
  }
View Full Code Here


      // local means query: let the following RequestParsers have a go
      // at it.
      return null;
    }

    WaybackRequest wbRequest = null;
    String requestServer = httpRequest.getServerName();
    String requestPath = httpRequest.getRequestURI();
    //int port = httpRequest.getServerPort();
    String requestQuery = httpRequest.getQueryString();
    String requestScheme = httpRequest.getScheme();
    if (requestQuery != null) {
      requestPath = requestPath + "?" + requestQuery;
    }

    String requestUrl = requestScheme + "://" + requestServer + requestPath;

    wbRequest = new WaybackRequest();
    wbRequest.setRequestUrl(requestUrl);
    wbRequest.setReplayRequest();
    wbRequest.setResultsPerPage(getMaxRecords());
    return wbRequest;
  }
View Full Code Here

      }
    }
       
    String translatedQ = "/" + translateRequestPathQuery(httpRequest);

    WaybackRequest wbRequest = new WaybackRequest();
//      wbRequest.setContextPrefix(getUrlRoot());
    wbRequest.setAccessPoint(this);
    wbRequest.extractHttpRequestInfo(httpRequest);
    UIResults uiResults = new UIResults(wbRequest,uriConverter);
    try {
      uiResults.forward(httpRequest, httpResponse, translatedQ);
      return true;
    } catch(IOException e) {
View Full Code Here

   */
  public boolean handleRequest(HttpServletRequest httpRequest,
      HttpServletResponse httpResponse)
  throws ServletException, IOException {

    WaybackRequest wbRequest = null;
    boolean handled = false;

    try {
      PerfStats.clearAll();
     
      if (this.isEnablePerfStatsHeader() && (perfStatsHeader != null)) {
        PerfStats.timeStart(PerfStat.Total);
        httpResponse = new PerfWritingHttpServletResponse(httpRequest, httpResponse, PerfStat.Total, perfStatsHeader);
      }
     
      String inputPath = translateRequestPathQuery(httpRequest);
      Thread.currentThread().setName("Thread " +
          Thread.currentThread().getId() + " " + getBeanName() +
          " handling: " + inputPath);
      LOGGER.fine("Handling translated: " + inputPath);
      wbRequest = getParser().parse(httpRequest, this);

      if (wbRequest != null) {
        handled = true;

        // TODO: refactor this code into RequestParser implementations
        wbRequest.setAccessPoint(this);
//        wbRequest.setContextPrefix(getAbsoluteLocalPrefix(httpRequest));
//        wbRequest.setContextPrefix(getUrlRoot());
        wbRequest.extractHttpRequestInfo(httpRequest);
        // end of refactor

        if(getAuthentication() != null) {
          if(!getAuthentication().isTrue(wbRequest)) {
            throw new AuthenticationControlException(
                "Unauthorized", isRequestAuth());
          }
        }

        if(getExclusionFactory() != null) {
          ExclusionFilter exclusionFilter =
            getExclusionFactory().get();
          if(exclusionFilter == null) {
            throw new AdministrativeAccessControlException(
                "AccessControl list unavailable");
          }
          wbRequest.setExclusionFilter(exclusionFilter);
        }
        // TODO: refactor this into RequestParser implementations, so a
        // user could alter requests to change the behavior within a
        // single AccessPoint. For now, this is a simple way to expose
        // the feature to configuration.g
        wbRequest.setExactScheme(isExactSchemeMatch());

        if(wbRequest.isReplayRequest()) {
          if(bounceToReplayPrefix) {
            // we don't accept replay requests on this AccessPoint
            // bounce the user to the right place:
            String suffix = translateRequestPathQuery(httpRequest);
            String replayUrl = replayPrefix + suffix;
            httpResponse.sendRedirect(replayUrl);
            return true;
          }
          handleReplay(wbRequest,httpRequest,httpResponse);
         
        } else {
          if (bounceToQueryPrefix) {
            // we don't accept replay requests on this AccessPoint
            // bounce the user to the right place:
            String suffix = translateRequestPathQuery(httpRequest);
            String replayUrl = queryPrefix + suffix;
            httpResponse.sendRedirect(replayUrl);
            return true;
          }
          wbRequest.setExactHost(isExactHostMatch());
          handleQuery(wbRequest,httpRequest,httpResponse);
        }
      } else {
        handled = dispatchLocal(httpRequest,httpResponse);
      }
     
    } catch(BetterRequestException e) {     
      e.generateResponse(httpResponse, wbRequest);
      httpResponse.getWriter(); // cause perf headers to be committed
      handled = true;

    } catch(WaybackException e) {
     
      if (httpResponse.isCommitted()) {
        return true;
      }
     
      if (wbRequest == null) {
        wbRequest = new WaybackRequest();
        wbRequest.setAccessPoint(this);
      }
     
      logError(httpResponse, errorMsgHeader, e, wbRequest);
     
      LiveWebState liveWebState = LiveWebState.NOT_FOUND;
     
      if ((getLiveWebRedirector() != null) &&
          !wbRequest.hasMementoAcceptDatetime() && !wbRequest.isMementoTimemapRequest()) {
        liveWebState = getLiveWebRedirector().handleRedirect(e, wbRequest, httpRequest, httpResponse);
      }
     
      // If not liveweb redirected, then render current exception
      if (liveWebState != LiveWebState.REDIRECTED) {
View Full Code Here

        }
      }
    }
   
    if (payloadUri != null && payloadTimestamp != null) {
      WaybackRequest wbr = currRequest.clone();
      wbr.setReplayTimestamp(payloadTimestamp);
      wbr.setAnchorTimestamp(payloadTimestamp);
      wbr.setTimestampSearchKey(true);
      wbr.setRequestUrl(payloadUri);

      SearchResults results = queryIndex(wbr);
     
      if(!(results instanceof CaptureSearchResults)) {
        throw new ResourceNotAvailableException("Bad results looking up " + payloadTimestamp + " " + payloadUri);
View Full Code Here

            new PathPrefixDateRangeQueryRequestParser(brp),
    };

    private ArchivalUrl parseAU(String path)
    throws BetterRequestException, BadQueryException {
        WaybackRequest wbRequest = null;
        for(int i = 0; i < parsers.length; i++) {
            wbRequest = parsers[i].parse(path, null);
            if (wbRequest != null) {
                break;
            }
View Full Code Here

    public void testReplayRequestParser() throws Exception {
        ReplayRequestParser parser = new ReplayRequestParser(brp);
        // note AccessPoint arg is unused
        {
            WaybackRequest wbr = parser.parse("20100101000000/http://www.yahoo.com/", null);
            assertEquals("replayTimestamp", "20100101000000", wbr.getReplayTimestamp());
            assertNull("startTimestamp", wbr.getStartTimestamp());
            // endTimestamp is current timestamp
            assertNotNull("endTimestamp", wbr.getEndTimestamp());
        }
        // old Alexa ARCs has 12-digits dates - padded with "00" -> same as prev case
        {
            WaybackRequest wbr = parser.parse("201001010000/http://www.yahoo.com/", null);
            assertEquals("replayTimestamp", "20100101000000", wbr.getReplayTimestamp());
            assertNull("startTimestamp", wbr.getStartTimestamp());
            // endTimestamp is current timestamp
            assertNotNull("endTimestamp", wbr.getEndTimestamp());
        }
        {
            WaybackRequest wbr = parser.parse("20100101/http://www.yahoo.com/", null);
            assertEquals("replayTimestamp", "20100101235959", wbr.getReplayTimestamp());
            assertEquals("startTimestamp", "20100101000000", wbr.getStartTimestamp());
            assertEquals("endTimestamp", "20100101235959", wbr.getEndTimestamp());
        }
       
    }
View Full Code Here

  /**
   * @throws Exception
   */
  public void testGroupBalance() throws Exception {
    WaybackRequest r = new WaybackRequest();
    r.setRequestUrl(index.canonicalize("apple.com/"));
    RangeGroup g = index.getRangeGroupForRequest(r);
    assertEquals(g.getName(),"b");

        RangeMember b1 = g.members.get("b1");
    RangeMember b2 = g.members.get("b2");
View Full Code Here

TOP

Related Classes of org.archive.wayback.core.WaybackRequest

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.