package org.archive.wayback.accesscontrol.robotstxt;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.httpclient.URIException;
import org.archive.wayback.UrlCanonicalizer;
import org.archive.wayback.accesscontrol.ExclusionFilterFactory;
import org.archive.wayback.core.FastCaptureSearchResult;
import org.archive.wayback.resourceindex.filters.ExclusionFilter;
import org.archive.wayback.util.webapp.AbstractRequestHandler;
public class AccessControlChecker extends AbstractRequestHandler {
protected final static String HTTP_PREFIX = "http://";
protected final static String HTTPS_PREFIX = "https://";
protected ExclusionFilterFactory exclusionFactory;
protected UrlCanonicalizer canonicalizer = null;
@Override
public boolean handleRequest(HttpServletRequest httpRequest,
HttpServletResponse httpResponse) throws ServletException,
IOException {
String url = this.translateRequestPath(httpRequest);
if (!url.startsWith(HTTP_PREFIX) && !url.startsWith(HTTPS_PREFIX)) {
url = HTTP_PREFIX + url;
}
PrintWriter writer = httpResponse.getWriter();
httpResponse.setContentType("application/json");
return checkAccess(url, writer);
}
protected boolean checkAccess(String url, PrintWriter writer) {
if (exclusionFactory == null) {
return false;
}
ExclusionFilter filter = exclusionFactory.get();
FastCaptureSearchResult result = new FastCaptureSearchResult();
result.setOriginalUrl(url);
int status = ExclusionFilter.FILTER_EXCLUDE;
String urlKey = url;
try {
// Must set canonicalizer
urlKey = canonicalizer.urlStringToKey(url);
result.setUrlKey(urlKey);
status = filter.filterObject(result);
} catch (URIException e) {
//Exclude invalid
}
if (status == ExclusionFilter.FILTER_INCLUDE) {
writer.println("[\"allow\"]");
} else {
writer.println("[\"block\"]");
}
return true;
}
public ExclusionFilterFactory getExclusionFactory() {
return exclusionFactory;
}
public void setExclusionFactory(ExclusionFilterFactory exclusionFactory) {
this.exclusionFactory = exclusionFactory;
}
public UrlCanonicalizer getCanonicalizer() {
return canonicalizer;
}
public void setCanonicalizer(UrlCanonicalizer canonicalizer) {
this.canonicalizer = canonicalizer;
}
}