/* * Oracle Filter Implementation that supports custom policies in addition to * allow, block, block-message and robots * * The policy is stored in the CaptureSearchResult */ package org.archive.wayback.accesscontrol.oracleclient; import java.util.Date; import java.util.logging.Logger; import org.archive.accesscontrol.RobotsUnavailableException; import org.archive.accesscontrol.RuleOracleUnavailableException; import org.archive.util.ArchiveUtils; import org.archive.wayback.core.CaptureSearchResult; public class CustomPolicyOracleFilter extends OracleExclusionFilter { public static final String CAPTURE_ORACLE_POLICY = "oracle-policy"; private static final Logger LOGGER = Logger.getLogger( CustomPolicyOracleFilter.class.getName()); enum Policy { ALLOW("allow"), BLOCK_HIDDEN("block"), BLOCK_MESSAGE("block-message"), ROBOTS("robots"); Policy(String policy) { this.policy = policy; } boolean matches(String other) { return (other.equals(this.policy)); } String policy; } protected int defaultFilter = FILTER_INCLUDE; public CustomPolicyOracleFilter(String oracleUrl, String accessGroup, String proxyHostPort) { super(oracleUrl, accessGroup, proxyHostPort); } @Override public int filterObject(CaptureSearchResult o) { String url = o.getOriginalUrl(); Date captureDate = o.getCaptureDate(); Date retrievalDate = new Date(); String policy; try { policy = client.getPolicy(ArchiveUtils.addImpliedHttpIfNecessary(url), captureDate, retrievalDate, accessGroup); o.put(CAPTURE_ORACLE_POLICY, policy); if (policy == null) { return defaultFilter; } if (Policy.ALLOW.matches(policy)) { return handleAllow(); } // Block page but silently, as if it wasn't found if (Policy.BLOCK_HIDDEN.matches(policy)) { return FILTER_EXCLUDE; } // Block page bit and display "access blocked" message if (Policy.BLOCK_MESSAGE.matches(policy)) { return handleBlock(); } if (Policy.ROBOTS.matches("policy")) { return handleRobots(); } } catch (RobotsUnavailableException e) { e.printStackTrace(); } catch (RuleOracleUnavailableException e) { LOGGER.warning("Oracle Unavailable/not running, default to allow all until it responds. Details: " + e.toString()); } return defaultFilter; } }