diff --git a/src/main/java/org/cobbzilla/util/dns/DnsRecordBase.java b/src/main/java/org/cobbzilla/util/dns/DnsRecordBase.java index cc3e97c..d72d619 100644 --- a/src/main/java/org/cobbzilla/util/dns/DnsRecordBase.java +++ b/src/main/java/org/cobbzilla/util/dns/DnsRecordBase.java @@ -31,9 +31,10 @@ public class DnsRecordBase { @Getter @Setter protected String value; public boolean hasValue () { return !empty(value); } - @JsonIgnore - public DnsRecordMatch getMatcher() { + @JsonIgnore public DnsRecordMatch getMatcher() { return (DnsRecordMatch) new DnsRecordMatch().setFqdn(fqdn).setType(type).setValue(value); } + @JsonIgnore public DnsRecordMatch getNonMatcher() { return DnsRecordMatch.invert(getMatcher()); } + } diff --git a/src/main/java/org/cobbzilla/util/dns/DnsRecordMatch.java b/src/main/java/org/cobbzilla/util/dns/DnsRecordMatch.java index e172028..58e26f6 100644 --- a/src/main/java/org/cobbzilla/util/dns/DnsRecordMatch.java +++ b/src/main/java/org/cobbzilla/util/dns/DnsRecordMatch.java @@ -39,12 +39,20 @@ public class DnsRecordMatch extends DnsRecordBase { public DnsRecordMatch(String fqdn) { this(null, fqdn); } + public static DnsRecordMatch invert(DnsRecordMatch other) { + return new DnsRecordMatch() { + @Override public boolean matches(DnsRecord record) { + return !other.matches(record); + } + }; + } + public boolean matches (DnsRecord record) { if (hasType() && !getType().equals(record.getType())) return false; - if (hasFqdn() && !getFqdn().equals(record.getFqdn())) return false; - if (hasSubdomain() && record.hasFqdn() && !record.getFqdn().endsWith(getSubdomain())) return false; + if (hasFqdn() && !getFqdn().equalsIgnoreCase(record.getFqdn())) return false; + if (hasSubdomain() && record.hasFqdn() && !record.getFqdn().toLowerCase().endsWith(getSubdomain().toLowerCase())) return false; if (hasPattern() && record.hasFqdn() && !get_pattern().matcher(record.getFqdn()).find()) return false; - if (hasFqdns() && record.hasFqdn() && !getFqdns().contains(record.getFqdn())) return false; + if (hasFqdns() && record.hasFqdn() && getFqdns().stream().noneMatch(f -> record.getFqdn().equalsIgnoreCase(f))) return false; return true; }