Add options for resolvers and the api url

This commit is contained in:
sonny 2020-12-27 19:30:14 +01:00
parent c512919fac
commit 2d9a070514
2 changed files with 24 additions and 17 deletions

View file

@ -7,28 +7,27 @@ import requests
logger = logging.getLogger(__name__)
def _get_ip():
def _get_ip(resolvers):
try:
# TODO make resolvers customizable
output = subprocess.check_output(
["dig", "+short", "myip.opendns.com", "@resolver1.opendns.com"],
["dig", "+short", *resolvers],
stderr=subprocess.STDOUT,
)
except subprocess.CalledProcessError as e:
raise OSError("Unable to retrieve current IP") from e
# TODO set URL global
def _get_domain(domain, token):
def _get_domain(domain, token, api_url):
headers = {"Authorization": f"Bearer {token}"}
return requests.get(url, headers=headers)
return requests.get(f"{api_url}/domains/{domain}/dns", headers=headers)
def _get_domain_data(domains, token):
def _get_domain_data(domains, token, api_url):
with ThreadPoolExecutor(max_workers=10) as executor:
futures = {
executor.submit(_get_domain, domain, token): domain for domain in domains
executor.submit(_get_domain, domain, token, api_url): domain
for domain in domains
}
for future in as_completed(futures):
@ -44,11 +43,12 @@ def _get_domain_data(domains, token):
yield {"domain": domain, **response.json()}
# TODO set URL global
def _update_domain(domain, payload, token):
def _update_domain(domain, payload, token, api_url):
headers = {"Authorization": f"Bearer {token}"}
return requests.put(url, data=json.dumps(payload), headers=headers)
return requests.put(
f"{api_url}/domains/{domain}/dns", data=json.dumps(payload), headers=headers
)
def _update_domains(updated_domains, token, read_only):
@ -74,9 +74,9 @@ def _update_domains(updated_domains, token, read_only):
logger.info(f"Updated domain {domain}")
def detect(domains, token, read_only):
ip = _get_ip()
domain_data = _get_domain_data(domains, token)
def detect(domains, resolvers, token, api_url, read_only):
ip = _get_ip(resolvers)
domain_data = _get_domain_data(domains, token, api_url)
updated_domains = {}
for data in domain_data:
@ -97,4 +97,4 @@ def detect(domains, token, read_only):
updated_domains[domain] = {"dnsEntries": updated_entries}
_update_domains(updated_domains, token)
_update_domains(updated_domains, token, api_url, read_only)