diff --git a/README.md b/README.md index 79ab273..d93e2ba 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # NameSilo Let's Encrypt [![License (3-Clause BSD)](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg?style=flat-square)](http://opensource.org/licenses/BSD-3-Clause) -[![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/) +[![Python 3.4](https://img.shields.io/badge/python-3.4-blue.svg)](https://www.python.org/) Python scripts (hook) to automate obtaining [Let's Encrypt](https://letsencrypt.org/) certificates, using [Certbot](https://certbot.eff.org/) DNS-01 challenge validation for domains DNS hosted on @@ -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 old mode 100644 new mode 100755 index c6fb9bd..8098b0c --- a/authenticator.py +++ b/authenticator.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3 # authenticator.py # @@ -37,6 +37,7 @@ import tempfile import time import urllib.request +import tldextract import untangle from config import apikey, wait @@ -51,14 +52,21 @@ def sleep(minutes): domain = os.environ['CERTBOT_DOMAIN'] validation = os.environ['CERTBOT_VALIDATION'] -tmpdir = os.path.join(tempfile.gettempdir(), f"CERTBOT_{domain}") +tmpdir = os.path.join(tempfile.gettempdir(), "CERTBOT_"+domain) +rrhost = "_acme-challenge" if "NAMESILO_API" in os.environ: apikey = os.environ['NAMESILO_API'] -url = f"https://www.namesilo.com/api/dnsAddRecord?\ -version=1&type=xml&key={apikey}&domain={domain}&rrtype=TXT\ -&rrhost=_acme-challenge&rrvalue={validation}&rrttl=3600" + +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="+nsdomain+"&rrtype=TXT\ +&rrhost="+rrhost+"&rrvalue="+validation+"&rrttl=3600" req = urllib.request.Request( url, diff --git a/cleanup.py b/cleanup.py old mode 100644 new mode 100755 index 627560a..e95a369 --- a/cleanup.py +++ b/cleanup.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3 # cleanup.py # @@ -36,19 +36,23 @@ import sys import tempfile import urllib.request +import tldextract import untangle from config import apikey domain = os.environ['CERTBOT_DOMAIN'] -tmpdir = os.path.join(tempfile.gettempdir(), f"CERTBOT_{domain}") +tmpdir = os.path.join(tempfile.gettempdir(), "CERTBOT_"+domain) + if "NAMESILO_API" in os.environ: apikey = os.environ['NAMESILO_API'] -url = f"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(