Initial YakPanel commit
This commit is contained in:
79
class/sewer/dns_providers/hurricane.py
Normal file
79
class/sewer/dns_providers/hurricane.py
Normal file
@@ -0,0 +1,79 @@
|
||||
"""
|
||||
Hurricane Electric DNS Support
|
||||
"""
|
||||
import json
|
||||
|
||||
try:
|
||||
hedns_dependencies = True
|
||||
import HurricaneDNS as _hurricanedns
|
||||
except ImportError:
|
||||
hedns_dependencies = False
|
||||
|
||||
from . import common
|
||||
|
||||
|
||||
class _Response(object):
|
||||
"""
|
||||
wrapper aliyun resp to the format sewer wanted.
|
||||
"""
|
||||
|
||||
def __init__(self, status_code=200, content=None, headers=None):
|
||||
self.status_code = status_code
|
||||
self.headers = headers or {}
|
||||
self.content = content or {}
|
||||
self.content = json.dumps(content)
|
||||
super(_Response, self).__init__()
|
||||
|
||||
def json(self):
|
||||
return json.loads(self.content)
|
||||
|
||||
|
||||
class HurricaneDns(common.BaseDns):
|
||||
def __init__(self, username, password):
|
||||
super(HurricaneDns, self).__init__()
|
||||
if not hedns_dependencies:
|
||||
raise ImportError(
|
||||
"""You need to install HurricaneDns dependencies. run: pip3 install sewer[hurricane]"""
|
||||
)
|
||||
|
||||
self.clt = _hurricanedns.HurricaneDNS(username, password)
|
||||
|
||||
@staticmethod
|
||||
def extract_zone(domain_name):
|
||||
"""
|
||||
extract domain to root, sub, acme_txt
|
||||
:param str domain_name: the value sewer client passed in, like *.menduo.example.com
|
||||
:return tuple: root, zone, acme_txt
|
||||
"""
|
||||
# if we have been given a wildcard name, strip wildcard
|
||||
domain_name = domain_name.lstrip("*.")
|
||||
if domain_name.count(".") > 1:
|
||||
zone, middle, last = str(domain_name).rsplit(".", 2)
|
||||
root = ".".join([middle, last])
|
||||
acme_txt = "_acme-challenge.%s" % zone
|
||||
else:
|
||||
zone = ""
|
||||
root = domain_name
|
||||
acme_txt = "_acme-challenge"
|
||||
return root, zone, acme_txt
|
||||
|
||||
def create_dns_record(self, domain_name, domain_dns_value):
|
||||
self.logger.info("create_dns_record start: %s", (domain_name, domain_dns_value))
|
||||
|
||||
root, _, acme_txt = self.extract_zone(domain_name)
|
||||
self.clt.add_record(root, acme_txt, "TXT", domain_dns_value, ttl=300)
|
||||
|
||||
self.logger.info("create_dns_record end: %s", (domain_name, domain_dns_value))
|
||||
|
||||
def delete_dns_record(self, domain_name, domain_dns_value):
|
||||
self.logger.info("delete_dns_record start: %s", (domain_name, domain_dns_value))
|
||||
|
||||
root, _, acme_txt = self.extract_zone(domain_name)
|
||||
host = "%s.%s" % (acme_txt, root)
|
||||
|
||||
recored_list = self.clt.get_records(root, host, "TXT")
|
||||
|
||||
for i in recored_list:
|
||||
self.clt.del_record(root, i["id"])
|
||||
|
||||
self.logger.info("delete_dns_record end: %s", (domain_name, domain_dns_value))
|
||||
Reference in New Issue
Block a user