diff --git a/filter_plugins/domain_relative_to.py b/filter_plugins/domain_relative_to.py new file mode 100644 index 0000000..72a75e8 --- /dev/null +++ b/filter_plugins/domain_relative_to.py @@ -0,0 +1,10 @@ +def domain_relative_to(domain): + if domain == '@': + return zone + if domain[-1] != '.': + return f"{domain}.{zone}" + return domain + +class FilterModule(object): + def filters(self): + return {'domain_relative_to': domain_relative_to} diff --git a/filter_plugins/ip_net_rev.py b/filter_plugins/ip_net_rev.py new file mode 100644 index 0000000..6c2b4fb --- /dev/null +++ b/filter_plugins/ip_net_rev.py @@ -0,0 +1,29 @@ +from netaddr import IPNetwork, IPSet + +def ip_rev(orig, rev, net): + if orig.isdisjoint(IPSet(net)): + rev.add(net) + return + elif orig.issuperset(IPSet(net)): + return + else: + for net in net.subnet(net.prefixlen + 1): + ip_rev(orig, rev, net) + +def ip_net_rev(addresses, version=None): + orig = IPSet(addresses) + rev = IPSet() + if version in [None, 4]: + ip_rev(orig, rev, IPNetwork('0.0.0.0/0')) + if version in [None, 6]: + ip_rev(orig, rev, IPNetwork('::/0')) + return [str(net) for net in rev.iter_cidrs()] + +class FilterModule(object): + def filters(self): + return {'ip_net_rev': ip_net_rev} + +if __name__ == '__main__': + import sys + for ip in ip_net_rev(sys.argv[1:]): + print(ip) diff --git a/filter_plugins/mapping.py b/filter_plugins/mapping.py new file mode 100644 index 0000000..6183181 --- /dev/null +++ b/filter_plugins/mapping.py @@ -0,0 +1,8 @@ +from collections import Mapping + +def mapping(val): + return isinstance(val, Mapping) + +class FilterModule(object): + def filters(self): + return {'mapping': mapping}