# DNS Provider for AuroRa DNS from the dutch hosting provider pcextreme # https://www.pcextreme.nl/aurora/dns # Aurora uses libcloud from apache # https://libcloud.apache.org/ try: aurora_dependencies = True from libcloud.dns.providers import get_driver from libcloud.dns.types import Provider, RecordType import tldextract except ImportError: aurora_dependencies = False from . import common class AuroraDns(common.BaseDns): """ Todo: re-organize this class so that we make it easier to mock things out to facilitate better tests. """ dns_provider_name = "aurora" def __init__(self, AURORA_API_KEY, AURORA_SECRET_KEY): if not aurora_dependencies: raise ImportError( """You need to install AuroraDns dependencies. run; pip3 install sewer[aurora]""" ) self.AURORA_API_KEY = AURORA_API_KEY self.AURORA_SECRET_KEY = AURORA_SECRET_KEY super(AuroraDns, self).__init__() def create_dns_record(self, domain_name, domain_dns_value): self.logger.info("create_dns_record") # if we have been given a wildcard name, strip wildcard domain_name = domain_name.lstrip("*.") extractedDomain = tldextract.extract(domain_name) domainSuffix = extractedDomain.domain + "." + extractedDomain.suffix if extractedDomain.subdomain is "": subDomain = "_acme-challenge" else: subDomain = "_acme-challenge." + extractedDomain.subdomain cls = get_driver(Provider.AURORADNS) driver = cls(key=self.AURORA_API_KEY, secret=self.AURORA_SECRET_KEY) zone = driver.get_zone(domainSuffix) zone.create_record(name=subDomain, type=RecordType.TXT, data=domain_dns_value) self.logger.info("create_dns_record_success") return def delete_dns_record(self, domain_name, domain_dns_value): self.logger.info("delete_dns_record") extractedDomain = tldextract.extract(domain_name) domainSuffix = extractedDomain.domain + "." + extractedDomain.suffix if extractedDomain.subdomain is "": subDomain = "_acme-challenge" else: subDomain = "_acme-challenge." + extractedDomain.subdomain cls = get_driver(Provider.AURORADNS) driver = cls(key=self.AURORA_API_KEY, secret=self.AURORA_SECRET_KEY) zone = driver.get_zone(domainSuffix) records = driver.list_records(zone) for x in records: if x.name == subDomain and x.type == "TXT": record_id = x.id self.logger.info( "Found record " + subDomain + "." + domainSuffix + " with id : " + record_id + "." ) record = driver.get_record(zone_id=zone.id, record_id=record_id) driver.delete_record(record) self.logger.info( "Deleted record " + subDomain + "." + domainSuffix + " with id : " + record_id + "." ) else: self.logger.info( "Record " + subDomain + "." + domainSuffix + " not found. No record to delete." ) self.logger.info("delete_dns_record_success") return