package org.archive.cdxserver.auth;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.apache.commons.io.IOUtils;
import org.archive.cdxserver.filter.CDXAccessFilter;
import org.archive.format.cdx.CDXLine;
/**
* An AuthChecker which determines if a url is allowed/restricted by checking a
* remote wayback /check-access interface
*
* @author ilya
*
*/
public class RemoteAuthChecker extends PrivTokenAuthChecker {
protected String accessCheckUrl;
public class RemoteFilter implements CDXAccessFilter {
@Override
public boolean includeCapture(CDXLine line) {
return includeUrl(line.getUrlKey(), line.getOriginalUrl());
}
@Override
public boolean includeUrl(String urlKey, String originalUrl) {
if (accessCheckUrl == null) {
return true;
}
InputStream is = null;
try {
is = new URL(accessCheckUrl + originalUrl).openStream();
String result = IOUtils.toString(is);
if (result.contains("allow")) {
return true;
}
} catch (IOException e) {
// TODO Auto-generated catch block
} finally {
if (is != null) {
IOUtils.closeQuietly(is);
}
}
return false;
}
}
public String getAccessCheckUrl() {
return accessCheckUrl;
}
public void setAccessCheckUrl(String accessCheckUrl) {
this.accessCheckUrl = accessCheckUrl;
}
@Override
public CDXAccessFilter createAccessFilter(AuthToken auth) {
return new RemoteFilter();
}
}