This repository has been archived on 2021-09-01. You can view files and clone it, but cannot push or open issues or pull requests.
certbot_dns_corenetworks/authenticator.py

115 lines
2.7 KiB
Python
Raw Normal View History

2018-06-05 00:32:16 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
2018-06-06 21:38:20 +02:00
"""API client to core-networks"""
import requests
import os
import json
import urlparse
import configparser
2018-06-09 23:54:08 +02:00
import sys
import logging
2018-06-06 21:38:20 +02:00
2018-06-09 23:54:08 +02:00
def setup_logger():
# seup logging
logger = logging.getLogger("certbot_dns_corenetworks")
logging.basicConfig(level=logging.INFO)
# create console handler
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
formatter = logging.Formatter(
'%(asctime)s - %(name)s- %(levelname)s - %(message)s')
ch.setFormatter(formatter)
# add handler to logger
logger.addHandler(ch)
logger.propagate = False
return logger
2018-06-06 21:38:20 +02:00
2018-06-10 02:26:08 +02:00
def load_config(logger):
2018-06-09 22:46:31 +02:00
try:
2018-06-09 23:54:08 +02:00
config_path = os.path.join(
os.path.expanduser("~"),
".certbot_dns_corenetworks",
"config.ini"
)
2018-06-09 22:46:31 +02:00
config = configparser.ConfigParser()
config.read(config_path)
2018-06-10 02:26:08 +02:00
data = {}
data["API_HOST"] = config['API']['HOST']
data["API_USER"] = config['API']['USER']
data["PASSWORD"] = config['API']['PASSWORD']
data["ZONE"] = config['DNS']['ZONE']
2018-06-09 23:54:08 +02:00
except KeyError, e:
logger.error("Key %s not found in config" % (e))
sys.exit(0)
2018-06-10 02:26:08 +02:00
return data
def get_auth_token(user, passwd, host, logger):
data = {}
data["login"] = user
data["password"] = passwd
json_data = json.dumps(data)
url = urlparse.urljoin(host, os.path.join("auth", "token"))
try:
r = requests.post(url, data=json_data)
r.raise_for_status()
except requests.exceptions.HTTPError, e:
logger.error(e)
sys.exit(0)
return r
def get_zone(token, host, zone, logger):
url = urlparse.urljoin(host, os.path.join("dnszones", zone))
headers = {"Authorization": "Bearer %s" % (token)}
try:
r = requests.get(url, headers=headers)
r.raise_for_status()
except requests.exceptions.HTTPError, e:
logger.error(e)
sys.exit(0)
return r
def main():
"""Main logic entrypoint"""
logger = setup_logger()
config = load_config(logger)
# get auth token
logger.info("Try to get auth token")
r_token = get_auth_token(
config["API_USER"], config["PASSWORD"], config["API_HOST"], logger)
auth_token = r_token.json()["token"]
logger.info("Authentication successful")
# verify dns zone
r_zone = get_zone(auth_token, config["API_HOST"], config["ZONE"], logger)
zone_name = r_zone.json()["name"]
zone_active = r_zone.json()["active"]
if zone_active:
logger.info("Zone '%s' verified (active)" % (zone_name))
else:
logger.error(
"Zone '%s' verified (not active)" % (zone_name))
sys.exit(0)
2018-06-06 21:38:20 +02:00
if __name__ == "__main__":
main()