From d680a58068f8fd08468ce46e07a2f93e84d23210 Mon Sep 17 00:00:00 2001 From: Junker <1144095+Junker@users.noreply.github.com> Date: Tue, 14 Apr 2020 19:21:09 +0700 Subject: [PATCH] add subdomains support --- README.md | 5 ++++- authenticator.py | 11 +++++++++-- cleanup.py | 7 +++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 855985e..d93e2ba 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,12 @@ using [Certbot](https://certbot.eff.org/) DNS-01 challenge validation for domain ## Setup -The scripts use the [untangle](https://untangle.readthedocs.io/en/latest/) library, if not already installed on your system: +The scripts use the [untangle](https://untangle.readthedocs.io/en/latest/) and tldextract libraries, if not already installed on your system: ``` pip install untangle + +pip install tldextract ``` Download the [latest release](https://github.com/ethauvin/namesilo-letsencrypt/releases) archive and expand it in the desired directory. @@ -44,3 +46,4 @@ certbot certonly --manual --email you@example.com \ Please note that NameSilo DNS propagation takes up to **15 minutes**. The scripts will wait **20 minutes** before completing, just to be safe. +q diff --git a/authenticator.py b/authenticator.py index 1db6e8d..8098b0c 100755 --- a/authenticator.py +++ b/authenticator.py @@ -37,6 +37,7 @@ import tempfile import time import urllib.request +import tldextract import untangle from config import apikey, wait @@ -52,14 +53,20 @@ def sleep(minutes): domain = os.environ['CERTBOT_DOMAIN'] validation = os.environ['CERTBOT_VALIDATION'] tmpdir = os.path.join(tempfile.gettempdir(), "CERTBOT_"+domain) +rrhost = "_acme-challenge" if "NAMESILO_API" in os.environ: apikey = os.environ['NAMESILO_API'] +tld = tldextract.extract(domain) +nsdomain = tld.domain+"."+tld.suffix +if tld.subdomain: + rrhost += "."+tld.subdomain + url = "https://www.namesilo.com/api/dnsAddRecord?\ -version=1&type=xml&key="+apikey+"&domain="+domain+"&rrtype=TXT\ -&rrhost=_acme-challenge&rrvalue="+validation+"&rrttl=3600" +version=1&type=xml&key="+apikey+"&domain="+nsdomain+"&rrtype=TXT\ +&rrhost="+rrhost+"&rrvalue="+validation+"&rrttl=3600" req = urllib.request.Request( url, diff --git a/cleanup.py b/cleanup.py index 37aebf5..e95a369 100755 --- a/cleanup.py +++ b/cleanup.py @@ -36,6 +36,7 @@ import sys import tempfile import urllib.request +import tldextract import untangle from config import apikey @@ -47,9 +48,11 @@ tmpdir = os.path.join(tempfile.gettempdir(), "CERTBOT_"+domain) if "NAMESILO_API" in os.environ: apikey = os.environ['NAMESILO_API'] -url = "https://www.namesilo.com/api/dnsDeleteRecord\ -?version=1&type=xml&key="+apikey+"&domain="+domain+"&rrid=" +tld = tldextract.extract(domain) +nsdomain = tld.domain+"."+tld.suffix +url = "https://www.namesilo.com/api/dnsDeleteRecord\ +?version=1&type=xml&key="+apikey+"&domain="+nsdomain+"&rrid=" def getrequest(record_id): return urllib.request.Request(