###############################################################################
import datetime
+import functools
import logging
import sqlmodel
import typing
# Updated At
updated_at : datetime.datetime | None
+ @functools.cached_property
+ def zone(self):
+ return "%s.dnsbl.ipfire.org." % self.slug
+
@property
def domains(self):
"""
# Export!
- def export(self, f, format):
+ def export(self, f, format, ttl=60, rpz_action="."):
"""
Exports the list
"""
for domain in self.domains:
f.write("%s\n" % domain)
+ # Write a RPZ zone file
+ elif format == "rpz":
+ # Write the SOA
+ f.write("%s\n" % " ".join((
+ self.zone,
+ "%s" % ttl,
+ "IN",
+ "SOA",
+ "master.lwldns.net.",
+ "hostmaster.ipfire.org.",
+ self.updated_at.strftime("%s"),
+ "3600",
+ "600",
+ "3600000",
+ "%s" % ttl,
+ )))
+
+ # Write all domains
+ for domain in self.domains:
+ f.write("%s.%s %s IN CNAME %s\n" % (domain, self.zone, ttl, rpz_action))
+
else:
raise ValueError("Unknown output format: %s" % format)
# export
export = subparsers.add_parser("export", help=_("Exports a list"))
export.add_argument("list", help=_("The name of the list"))
- export.add_argument("--format", default="domains", choices=("domains",),
+ export.add_argument("--format", default="domains", choices=("domains", "rpz",),
help=_("Output Format"))
export.set_defaults(func=self.__export)