コード例 #1
0
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)
コード例 #2
0
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)
コード例 #3
0
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}")
コード例 #4
0
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")
コード例 #5
0
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)
コード例 #6
0
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)