def cli(fqdn, value): """Request Let's encrypt (wildcard) certificates for All-Inkl.com domains. This program is designed to be used with Certbot (https://certbot.eff.org) for resolving Let's encrypt / ACME DNS challenges. Usage: certbot certonly -d foo.exmaple.com --preferred-challenges dns --manual --manual-auth-hook kasserver-dns-certbot --manual-cleanup-hook kasserver-dns-certbot -m [email protected] See https://certbot.eff.org/docs/using.html#hooks more detailed information.""" logging.basicConfig(level=logging.INFO) LOGGER.info("Received request for fqdn %s and value %a", fqdn, value) kas = kasserver.KasServer() fqdn = f"_acme-challenge.{fqdn}" record = kas.get_dns_record(fqdn, "TXT") if record: LOGGER.info( "Removing existing DNS TXT record for domain %s " "with value %s", fqdn, record["data"], ) kas.delete_dns_record(fqdn, "TXT") if not record or record["data"] != value: LOGGER.info("Setting DNS TXT record for domain %s to %s", fqdn, value) kas.add_dns_record(fqdn, "TXT", value)
def add(fqdn, record_type, value, ttl): """Add a DNS record for fqdn with record_type and value.""" LOGGER.info( "Setting DNS %s record for domain %s to %s (TTL: %s)", record_type, fqdn, value, ttl, ) kas = kasserver.KasServer() kas.add_dns_record(fqdn, record_type, value, ttl)
def list_command(zone_name): """List DNS records for zone_name.""" kas = kasserver.KasServer() records = kas.get_dns_records(zone_name) heading = { "id": "ID", "changeable": "C", "zone": "Zone", "name": "Name", "type": "Type", "data": "Data", "aux": "Aux", } for item in [heading] + records: print(f"{item['id']:>8} {item['changeable']:1} {item['zone']:20} " f"{item['name'] if item['name'] else '':20} {item['type']:5} " f"{item['data']:25} {item['aux']:>5}")
def cleanup(fqdn, value, ttl): """Remove a DNS record for fqdn with value (and ttl).""" # pylint: disable=unused-argument LOGGER.info("Removing DNS TXT record for domain %s", fqdn) kas = kasserver.KasServer() kas.delete_dns_record(fqdn, "TXT")
def present(fqdn, value, ttl): """Add a DNS record for fqdn with value (and ttl).""" LOGGER.info("Setting DNS TXT record for domain %s to %s (TTL: %s)", fqdn, value, ttl) kas = kasserver.KasServer() kas.add_dns_record(fqdn, "TXT", value, ttl)
def remove(fqdn, record_type): """Remove a DNS record for fqdn and record_type.""" LOGGER.info("Removing DNS %s record for domain %s", record_type, fqdn) kas = kasserver.KasServer() kas.delete_dns_record(fqdn, record_type)