package org.archive.wayback.resourceindex.cdxserver;
import org.archive.cdxserver.auth.AuthToken;
import org.archive.cdxserver.filter.CDXAccessFilter;
import org.archive.cdxserver.filter.FilenamePrefixFilter;
import org.archive.wayback.accesspoint.CompositeAccessPoint;
import org.archive.wayback.resourceindex.filters.ExclusionFilter;
import org.archive.wayback.webapp.AccessPoint;
/**
* {@link WaybackAuthChecker} modified to set up {@link FilenamePrefixFilter}
* from {@code fileIncludePrefixes} and {@code fileExcludePrefixes} of
* {@link AccessPoint}. This is meant to be used with {@link CompositeAccessPoint}
* to use different prefix filters for different collections.
*
* Needs {@link APContextAuthToken} to be passed to {@link #createAccessFilter(AuthToken)}.
* @see EmbeddedCDXServerIndex#createAuthToken(org.archive.wayback.core.WaybackRequest, String)
*/
public class WaybackAPAuthChecker extends WaybackAuthChecker {
@Override
public CDXAccessFilter createAccessFilter(AuthToken token) {
APContextAuthToken apToken = null;
if (!(token instanceof APContextAuthToken)) {
return super.createAccessFilter(apToken);
}
apToken = (APContextAuthToken)token;
AccessPoint ap = apToken.ap;
FilenamePrefixFilter include = null, exclude = null;
if (ap.getFileIncludePrefixes() != null) {
include = new FilenamePrefixFilter();
include.setExclusion(false);
include.setPrefixList(ap.getFileIncludePrefixes());
}
if (ap.getFileExcludePrefixes() != null) {
exclude = new FilenamePrefixFilter();
exclude.setExclusion(true);
exclude.setPrefixList(ap.getFileExcludePrefixes());
}
ExclusionFilter adminFilter = null;
if (adminExclusions != null) {
adminFilter = adminExclusions.get();
}
ExclusionFilter robotsFilter = null;
if (robotsExclusions != null &&
!isAllowed(token, ignoreRobotsAccessTokens) &&
!token.isIgnoreRobots()) {
robotsFilter = robotsExclusions.get();
}
return new AccessCheckFilter(token, adminFilter, robotsFilter, include,
exclude);
}
}