diff --git a/src/main/java/bubble/abp/BlockList.java b/src/main/java/bubble/abp/BlockList.java index b63d797..eb3507c 100644 --- a/src/main/java/bubble/abp/BlockList.java +++ b/src/main/java/bubble/abp/BlockList.java @@ -73,6 +73,20 @@ public class BlockList { return decision; } + public BlockDecision getFqdnDecision(String fqdn) { + for (BlockSpec allow : whitelist) { + if (allow.matchesFqdn(fqdn)) return BlockDecision.ALLOW; + } + final BlockDecision decision = new BlockDecision(); + for (BlockSpec block : blacklist) { + if (block.matchesFqdn(fqdn)) { + if (!block.hasSelector()) return BlockDecision.BLOCK; + decision.add(block); + } + } + return decision; + } + @JsonIgnore public Set getBlacklistDomains() { return blacklist.stream().filter(BlockSpec::hasNoSelector).collect(Collectors.toSet()); } diff --git a/src/main/java/bubble/abp/BlockSpec.java b/src/main/java/bubble/abp/BlockSpec.java index eccde57..7194a4d 100644 --- a/src/main/java/bubble/abp/BlockSpec.java +++ b/src/main/java/bubble/abp/BlockSpec.java @@ -143,6 +143,18 @@ public class BlockSpec { return false; } + public boolean matchesFqdn(String fqdn) { + if (target.hasDomainRegex() && target.getDomainPattern().matcher(fqdn).find()) { + return checkDomainExclusionsAndType(fqdn, null); + + } else if (target.hasRegex()) { + if (target.getRegexPattern().matcher(fqdn).find()) { + return checkDomainExclusionsAndType(fqdn, null); + }; + } + return false; + } + public boolean checkDomainExclusionsAndType(String fqdn, String contentType) { if (domainExclusions != null) { for (String domain : domainExclusions) {