From 6f97aa0f972c73c8539f50e0d1bd8f8ee13240e7 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 29 Apr 2019 23:20:39 -0700 Subject: [PATCH 01/13] Reverted the license back to text. --- LICENSE.md | 12 ------------ LICENSE.txt | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 12 deletions(-) delete mode 100644 LICENSE.md create mode 100644 LICENSE.txt diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 1b82601..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,12 +0,0 @@ -### Copyright © 2019, [Erik C. Thauvin](mailto:erik@thauvin.net) -#### All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -* Neither the name of this project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -*THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.* diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..964f333 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2019, Erik C. Thauvin (erik@thauvin.net) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of this project nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 94aa40f8489f5253848b26138809ceb563fa47bc Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 30 Apr 2019 16:29:58 -0700 Subject: [PATCH 02/13] Added download instruction, fixed certbot example. --- README.md | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index b65f8b4..e878699 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,9 @@ The scripts use the [untangle](https://untangle.readthedocs.io/en/latest/) libra pip install untangle ``` +Download the [latest release](https://github.com/ethauvin/namesilo-letsencrypt/releases) archive and expand it in the desired directory. + + ## Configuration Add your [NameSilo API key](https://www.namesilo.com/account_api.php) @@ -29,7 +32,7 @@ Alternatively, the API key can be set in the `NAMESILO_API` environment variable ## Using with Certbot -To issue a new certificate using the hook scripts, try something like: +To issue or renew a certificate using the hook scripts, try something like:
 certbot certonly --manual --email you@example.com \
@@ -40,17 +43,6 @@ certbot certonly --manual --email you@example.com \
 -d *.example.com -d example.com
 
-Or to renew an existing certificate: - -
-certbot renew --manual --email you@example.com \
---agree-tos --manual-public-ip-logging-ok \
---preferred-challenges=dns \
---manual-auth-hook /path/to/authenticator.py \
---manual-cleanup-hook /path/to/cleanup.py \
--d *.example.com -d example.com
-
- Please note that NameSilo DNS propagation takes up to **15 minutes**, so the scripts will wait 16 minutes before completing. From 97c2f0581f5ff8bd473dce1a9845f6ca3a0a3d2d Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 3 Mar 2020 18:48:47 -0800 Subject: [PATCH 03/13] Added configurable wait period. --- README.md | 2 +- authenticator.py | 18 +++++++++++++----- cleanup.py | 2 +- config.py | 2 ++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e878699..79d2780 100644 --- a/README.md +++ b/README.md @@ -44,5 +44,5 @@ certbot certonly --manual --email you@example.com \ Please note that NameSilo DNS propagation takes up to **15 minutes**, -so the scripts will wait 16 minutes before completing. +so the scripts will wait 20 minutes before completing. diff --git a/authenticator.py b/authenticator.py index 30d88e6..01fbe7a 100644 --- a/authenticator.py +++ b/authenticator.py @@ -1,8 +1,8 @@ -#!/usr/bin/env python3.7 +#!/usr/bin/env python3.8 # authenticator.py # -# Copyright (c) 2019, Erik C. Thauvin (erik@thauvin.net) +# Copyright (c) 2019-20, Erik C. Thauvin (erik@thauvin.net) # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -39,7 +39,15 @@ import urllib.request import untangle -from config import apikey +from config import apikey, wait + + +def sleep(minutes): + if minutes < 16: + minutes = 16 + print("Waiting", minutes, "minutes for DNS changes to complete...") + time.sleep(minutes * 60) + domain = os.environ['CERTBOT_DOMAIN'] validation = os.environ['CERTBOT_VALIDATION'] @@ -79,5 +87,5 @@ else: xml.namesilo.reply.code.cdata), file=sys.stderr) sys.exit(1) -# Sleep 16 minutes -time.sleep(960) +# Sleep X minutes +sleep(wait) diff --git a/cleanup.py b/cleanup.py index 27d38c4..eb9a289 100644 --- a/cleanup.py +++ b/cleanup.py @@ -2,7 +2,7 @@ # cleanup.py # -# Copyright (c) 2019, Erik C. Thauvin (erik@thauvin.net) +# Copyright (c) 2019-20, Erik C. Thauvin (erik@thauvin.net) # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/config.py b/config.py index b30c1c3..8679450 100644 --- a/config.py +++ b/config.py @@ -1,2 +1,4 @@ # Get your API Key from: https://www.namesilo.com/account_api.php apikey = "YOUR_API_KEY" +# Minutes to wait for DNS changes to complete. +wait = 20 From c0aaaefd116db8882e9c9e2f949a1e55f9284df4 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 3 Mar 2020 18:53:35 -0800 Subject: [PATCH 04/13] Updated wait time to 20 minutes. --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 79d2780..79ab273 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.7](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/) +[![Python 3.8](https://img.shields.io/badge/python-3.8-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 @@ -43,6 +43,4 @@ certbot certonly --manual --email you@example.com \ -d *.example.com -d example.com -Please note that NameSilo DNS propagation takes up to **15 minutes**, -so the scripts will wait 20 minutes before completing. - +Please note that NameSilo DNS propagation takes up to **15 minutes**. The scripts will wait **20 minutes** before completing, just to be safe. From 474ada35e812dd47636dc9b3500875b28c762adc Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 14 Mar 2020 20:48:33 -0700 Subject: [PATCH 05/13] Updated copyright. --- .gitignore | 52 ++++++++++----------- .idea/codeStyles/codeStyleConfig.xml | 5 ++ .idea/copyright/Erik_s_Copyright_Notice.xml | 2 +- .idea/misc.xml | 2 +- .idea/namesilo-letsencrypt.iml | 8 ++-- LICENSE.txt | 2 +- authenticator.py | 10 ++-- cleanup.py | 12 ++--- 8 files changed, 49 insertions(+), 44 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml diff --git a/.gitignore b/.gitignore index 636e7ee..f007981 100644 --- a/.gitignore +++ b/.gitignore @@ -1,33 +1,14 @@ -__pycache__ +.vscode/* !.vscode/extensions.json !.vscode/launch.json !.vscode/settings.json !.vscode/tasks.json -!gradle-wrapper.jar + +__pycache__ .classpath .DS_Store .gradle .history -.idea_modules/ -.idea/**/contentModel.xml -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/dataSources/ -.idea/**/dbnavigator.xml -.idea/**/dictionaries -.idea/**/dynamic.xml -.idea/**/gradle.xml -.idea/**/libraries -.idea/**/mongoSettings.xml -.idea/**/shelf -.idea/**/sqlDataSources.xml -.idea/**/tasks.xml -.idea/**/uiDesigner.xml -.idea/**/usage.statistics.xml -.idea/**/workspace.xml -.idea/caches/build_file_checksums.ser -.idea/httpRequests -.idea/replstate.xml .kobalt .mtj.tmp/ .mvn/timing.properties @@ -36,20 +17,39 @@ __pycache__ .project .scannerwork .settings -.vscode/* *.class *.code-workspace *.ctxt -*.ear *.iws -*.jar *.log *.nar *.rar *.sublime-* *.tar.gz -*.war *.zip +/**/.idea_modules/ +/**/.idea/**/caches/build_file_checksums.ser +/**/.idea/**/contentModel.xml +/**/.idea/**/dataSources.ids +/**/.idea/**/dataSources.local.xml +/**/.idea/**/dataSources/ +/**/.idea/**/dbnavigator.xml +/**/.idea/**/dictionaries +/**/.idea/**/dynamic.xml +/**/.idea/**/gradle.xml +/**/.idea/**/httpRequests +/**/.idea/**/libraries +/**/.idea/**/mongoSettings.xml +/**/.idea/**/replstate.xml +/**/.idea/**/shelf +/**/.idea/**/shelf/ +/**/.idea/**/sqlDataSources.xml +/**/.idea/**/tasks.xml +/**/.idea/**/uiDesigner.xml +/**/.idea/**/usage.statistics.xml +/**/.idea/**/workspace.xml +/**/.idea/$CACHE_FILE$ +/**/.idea/$PRODUCT_WORKSPACE_FILE$ atlassian-ide-plugin.xml bin/ build/ diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/copyright/Erik_s_Copyright_Notice.xml b/.idea/copyright/Erik_s_Copyright_Notice.xml index 08660a1..c6b12fd 100644 --- a/.idea/copyright/Erik_s_Copyright_Notice.xml +++ b/.idea/copyright/Erik_s_Copyright_Notice.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index cfbc99a..6649a8c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/.idea/namesilo-letsencrypt.iml b/.idea/namesilo-letsencrypt.iml index 85c7612..01981e5 100644 --- a/.idea/namesilo-letsencrypt.iml +++ b/.idea/namesilo-letsencrypt.iml @@ -1,13 +1,13 @@ + + - + - - \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt index 964f333..e6551d0 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2019, Erik C. Thauvin (erik@thauvin.net) +Copyright (c) 2019-2020, Erik C. Thauvin (erik@thauvin.net) All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/authenticator.py b/authenticator.py index 01fbe7a..c6fb9bd 100644 --- a/authenticator.py +++ b/authenticator.py @@ -2,7 +2,7 @@ # authenticator.py # -# Copyright (c) 2019-20, Erik C. Thauvin (erik@thauvin.net) +# Copyright (c) 2019-2020, Erik C. Thauvin (erik@thauvin.net) # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -22,14 +22,14 @@ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# AREDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USEOF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGE. import os import sys diff --git a/cleanup.py b/cleanup.py index eb9a289..627560a 100644 --- a/cleanup.py +++ b/cleanup.py @@ -1,8 +1,8 @@ -#!/usr/bin/env python3.7 +#!/usr/bin/env python3.8 # cleanup.py # -# Copyright (c) 2019-20, Erik C. Thauvin (erik@thauvin.net) +# Copyright (c) 2019-2020, Erik C. Thauvin (erik@thauvin.net) # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -22,14 +22,14 @@ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# AREDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USEOF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGE. import os import sys From 1867401b359d4f0abdb7fe150e00426ad5457c3a Mon Sep 17 00:00:00 2001 From: Junker Date: Tue, 14 Apr 2020 18:51:52 +0700 Subject: [PATCH 06/13] make python3.4 compatible --- README.md | 2 +- authenticator.py | 11 ++++++----- cleanup.py | 9 +++++---- 3 files changed, 12 insertions(+), 10 deletions(-) mode change 100644 => 100755 authenticator.py mode change 100644 => 100755 cleanup.py diff --git a/README.md b/README.md index 79ab273..855985e 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 diff --git a/authenticator.py b/authenticator.py old mode 100644 new mode 100755 index c6fb9bd..1db6e8d --- a/authenticator.py +++ b/authenticator.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3 # authenticator.py # @@ -51,14 +51,15 @@ 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) 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" + +url = "https://www.namesilo.com/api/dnsAddRecord?\ +version=1&type=xml&key="+apikey+"&domain="+domain+"&rrtype=TXT\ +&rrhost=_acme-challenge&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..37aebf5 --- a/cleanup.py +++ b/cleanup.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3 # cleanup.py # @@ -41,13 +41,14 @@ 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=" +url = "https://www.namesilo.com/api/dnsDeleteRecord\ +?version=1&type=xml&key="+apikey+"&domain="+domain+"&rrid=" def getrequest(record_id): 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 07/13] 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( From 94caed2d984c14727fc03647ead379e6ce8938d6 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Apr 2020 12:02:01 -0700 Subject: [PATCH 08/13] Cleanup. --- README.md | 7 ++----- authenticator.py | 15 +++++++-------- cleanup.py | 8 ++++---- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index d93e2ba..d24deae 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,10 @@ using [Certbot](https://certbot.eff.org/) DNS-01 challenge validation for domain ## Setup -The scripts use the [untangle](https://untangle.readthedocs.io/en/latest/) and tldextract libraries, if not already installed on your system: +The scripts use the [tldextract](https://github.com/john-kurkowski/tldextract) and [untangle](https://untangle.readthedocs.io/en/latest/) libraries, if not already installed on your system: ``` -pip install untangle - -pip install tldextract +pip install tldextract untangle ``` Download the [latest release](https://github.com/ethauvin/namesilo-letsencrypt/releases) archive and expand it in the desired directory. @@ -46,4 +44,3 @@ 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 8098b0c..742ff9e 100755 --- a/authenticator.py +++ b/authenticator.py @@ -52,29 +52,28 @@ def sleep(minutes): domain = os.environ['CERTBOT_DOMAIN'] validation = os.environ['CERTBOT_VALIDATION'] -tmpdir = os.path.join(tempfile.gettempdir(), "CERTBOT_"+domain) +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 +nsdomain = tld.domain + "." + tld.suffix if tld.subdomain: - rrhost += "."+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" +version=1&type=xml&key=" + apikey + "&domain=" + nsdomain + "&rrtype=TXT\ +&rrhost=" + rrhost + "&rrvalue=" + validation + "&rrttl=3600" req = urllib.request.Request( url, data=None, headers={ - 'User-Agent': ('Mozilla/5.0 (X11; CrOS x86_64 11647.154.0) ' + 'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' 'AppleWebKit/537.36 (KHTML, like Gecko) ' - 'Chrome/73.0.3683.114 Safari/537.36') + 'Chrome/80.0.3987.163 Safari/537.36') } ) diff --git a/cleanup.py b/cleanup.py index e95a369..28a8e4a 100755 --- a/cleanup.py +++ b/cleanup.py @@ -42,17 +42,17 @@ import untangle from config import apikey domain = os.environ['CERTBOT_DOMAIN'] -tmpdir = os.path.join(tempfile.gettempdir(), "CERTBOT_"+domain) - +tmpdir = os.path.join(tempfile.gettempdir(), "CERTBOT_" + domain) if "NAMESILO_API" in os.environ: apikey = os.environ['NAMESILO_API'] tld = tldextract.extract(domain) -nsdomain = tld.domain+"."+tld.suffix +nsdomain = tld.domain + "." + tld.suffix url = "https://www.namesilo.com/api/dnsDeleteRecord\ -?version=1&type=xml&key="+apikey+"&domain="+nsdomain+"&rrid=" +?version=1&type=xml&key=" + apikey + "&domain=" + nsdomain + "&rrid=" + def getrequest(record_id): return urllib.request.Request( From 2f5be01ec9585b579d9203f61d06a732e7acf6dd Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Apr 2020 12:09:27 -0700 Subject: [PATCH 09/13] Updated user-agent. --- authenticator.py | 5 ++--- cleanup.py | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/authenticator.py b/authenticator.py index 742ff9e..08c5ac9 100755 --- a/authenticator.py +++ b/authenticator.py @@ -71,9 +71,8 @@ req = urllib.request.Request( url, data=None, headers={ - 'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' - 'AppleWebKit/537.36 (KHTML, like Gecko) ' - 'Chrome/80.0.3987.163 Safari/537.36') + 'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) ' + 'Gecko/20100101 Firefox/74.0') } ) diff --git a/cleanup.py b/cleanup.py index 28a8e4a..c15d05c 100755 --- a/cleanup.py +++ b/cleanup.py @@ -59,9 +59,8 @@ def getrequest(record_id): url + record_id, data=None, headers={ - 'User-Agent': ('Mozilla/5.0 (X11; CrOS x86_64 11647.154.0) ' - 'AppleWebKit/537.36 (KHTML, like Gecko) ' - 'Chrome/73.0.3683.114 Safari/537.36') + 'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) ' + 'Gecko/20100101 Firefox/74.0') } ) From 03f68df7ec6f5f9d856298e6c807891482d70814 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 27 May 2020 17:44:29 -0700 Subject: [PATCH 10/13] Changed wait default to 25 mins. --- .idea/namesilo-letsencrypt.iml | 2 +- README.md | 2 +- authenticator.py | 1 - config.py | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.idea/namesilo-letsencrypt.iml b/.idea/namesilo-letsencrypt.iml index 01981e5..ddc01a4 100644 --- a/.idea/namesilo-letsencrypt.iml +++ b/.idea/namesilo-letsencrypt.iml @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/README.md b/README.md index d24deae..7891295 100644 --- a/README.md +++ b/README.md @@ -43,4 +43,4 @@ certbot certonly --manual --email you@example.com \ -d *.example.com -d 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. +Please note that NameSilo DNS propagation takes up to **15 minutes**. The scripts will wait **25 minutes** before completing, just to be safe. diff --git a/authenticator.py b/authenticator.py index 08c5ac9..510aa1f 100755 --- a/authenticator.py +++ b/authenticator.py @@ -46,7 +46,6 @@ from config import apikey, wait def sleep(minutes): if minutes < 16: minutes = 16 - print("Waiting", minutes, "minutes for DNS changes to complete...") time.sleep(minutes * 60) diff --git a/config.py b/config.py index 8679450..e12c194 100644 --- a/config.py +++ b/config.py @@ -1,4 +1,4 @@ # Get your API Key from: https://www.namesilo.com/account_api.php apikey = "YOUR_API_KEY" # Minutes to wait for DNS changes to complete. -wait = 20 +wait = 25 From b5e27de90d985b69c051f6a6e91c90d2bc3e1527 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 28 May 2020 14:07:52 -0700 Subject: [PATCH 11/13] Added changelog. --- CHANGELOG.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0a79563 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,25 @@ +# Changelog + +## [0.9.2](https://github.com/ethauvin/namesilo-letsencrypt/tree/0.9.2) (2020-05-28) + +[Full Changelog](https://github.com/ethauvin/namesilo-letsencrypt/compare/0.9.1...0.9.2) + +**Closed issues:** + +- Do not support multiple \_acme-challenge records [\#1](https://github.com/ethauvin/namesilo-letsencrypt/issues/1) + +**Merged pull requests:** + +- make python3.4 compatible. add subdomains support [\#2](https://github.com/ethauvin/namesilo-letsencrypt/pull/2) ([Junker](https://github.com/Junker)) + +## [0.9.1](https://github.com/ethauvin/namesilo-letsencrypt/tree/0.9.1) (2020-03-15) + +[Full Changelog](https://github.com/ethauvin/namesilo-letsencrypt/compare/0.9.0...0.9.1) + +## [0.9.0](https://github.com/ethauvin/namesilo-letsencrypt/tree/0.9.0) (2019-04-30) + +[Full Changelog](https://github.com/ethauvin/namesilo-letsencrypt/compare/8a91146faebd196b223f7653e470428130f26246...0.9.0) + + + +\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* From 9f5f0c564276da19f9cf1bb34a7a1096d9e60d49 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 11 Jun 2020 17:33:30 -0700 Subject: [PATCH 12/13] Added release build script. Closes #3 --- release.sh | 24 ++++++++++++++++++++++ release/namesilo-letsencrypt-0.9.2.tar.gz | Bin 0 -> 3482 bytes release/namesilo-letsencrypt-0.9.2.zip | Bin 0 -> 6840 bytes 3 files changed, 24 insertions(+) create mode 100755 release.sh create mode 100644 release/namesilo-letsencrypt-0.9.2.tar.gz create mode 100644 release/namesilo-letsencrypt-0.9.2.zip diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..6689a1b --- /dev/null +++ b/release.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +RELEASE=release + +if [ $# != 1 ]; +then + echo "Usage: $(basename "$0") " + exit 2 +else + if ! [ -d "$RELEASE" ] + then + mkdir "$RELEASE" + fi + PROJECT=$(basename "$(pwd)") + DIR="${PROJECT}-${1}" + mkdir "$DIR" + cp ./*.py ./*.md ./*.txt "$DIR" + dos2unix "$DIR"/*.* + touch "$DIR" "$DIR"/*.* + tar -czvf "${RELEASE}/${DIR}.tar.gz" "$DIR" + zip --to-crlf -r "${RELEASE}/${DIR}.zip" "$DIR" + touch "$RELEASE"/*.* + rm -rf "${DIR}" +fi diff --git a/release/namesilo-letsencrypt-0.9.2.tar.gz b/release/namesilo-letsencrypt-0.9.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..711d070fbc72d4eca7a76f138892ea9e69f3a993 GIT binary patch literal 3482 zcmV;L4Q28liwFP!000001MOQ|ciKo2_OpIP4L%zKK|+8pi6@>J46>sg3|=nD_&9SM zff`UOB#kb%*_{0Mt?HHpb{w48B)fY?{a~b4S9RUGtNN4d7&8`Fwkz8#445FZt*INJu2Ih~w!gXmH-9Qe zfnOe4PMJAZ;LXFS>(nG^6X34@rA_K>xZd2iCesk|qXJab%1gPbR@D+{Xdq}P(4QL7 zmE}O5EcRO{?i7cG1tPE8HgNI)d=@bOikXUF+-0T}guXS5Ld$i)a7>5-2FNLJBY(tr z56Wrya~Qk+EGWUX6;8qR`L7#=#AW81)|f;_9wjh*1|IWgRv0o9Jm0;tOuRs$Lj1#! zk8QixmNS8o>zEc11)ONc!hIpuUBLoy$B9HE*TkV1L8wb;prpjp7`j*VC^3`cq6t|^ z@Cv6^05-BCF3WQ|<{g1>&XH|cGv+H_5(Fn)vPU8aYH3C&+;@=$VkJ#?6wNR=xSa(% zBrBsYTzu@q%m~r_h8--7&Yi_+my}3#Ycq=z(g50%NG2{I(tlth5`FQI`@q5wLa7BS z*AH;cISiR#hmnIyxWF6}A2A9NWHfU_2Esl_Y@&o1elW%dVy?g)hu7r(rGNqmJT{`3 zLQ0E*&8KK`L|g^ILW%xsy$8L{QU7hds{vl0b~|tMrq+bRGkmB)qjP%J)sJ8I;dQ6g z)Ve*Wx0~48?sxUWLBE3?xq1&Nb9|-XvwHgsv_DR}TCWG4F6bwxEgkvc1l@YOuWP*$ z=)pQI7_{nLI309PJ3Y>g^lR$9Mysx$XiWuWzLahw3)104|^>$zDb_b_@z0)qB72cwW&<1s+ZgOLH+FWO}R;PPL ze90Kx7bST6TEl*HdOKFH->s85dT78#e|aR%iuUX;DGP1wxTPO!?S@8AJH+U%-qXYu z+|_$DMi-O6t>erCQlEPbWfPZ6!Cd0L1^o!>%{Mv;FKk8QF(!I?96w0c8#G?W)>kCS znt85|`%92q1@rVWWHWDU*(|-s{Uy1MeA~8$iqHOvSP-UsLfd3Fp>K@BbRcd)&IFlA zd==w0dNECw0BO^`~@Y*p|un%rA_5 zQ*Y@QRv0fhI-Gf?<%^M?5l)p4uI1ztyD1YE(lrjr7fO&zSmfY22x$tE?@wLa-wz;n zVT@)>9!(9~X3m7=(57R^wd*HZPj7WD>Zf{+_V$HL!VJQMcZ6N0LNO(D3yxSgM~Q#) zi5O0hng>TI@y&C{DI_d)1<`nH-H=S;ZYahGA!03_AKW5{he#3z3u!nFLoe7bm#?p{ zm87awM((VPI+RT(sGDY&ja=XS^__IZeA>7VD$l~X#}000_A^xTfSAV`qj1l}1iUxZ zfckx(Q}zGozmuK`;rO6LPCf)(9Wma$}aJ}dDH zWMLe%U5AO=DKjvE1qUC~aNQbUJtfyCn3lKpA-{Fv{@b!`qr9W2kbi4oCcF*+_qmFy zs6PXC>~8-IH}uE9+TYt&)BY^U%UJGV?XFhf$nx3Py(tsfR)JG}l5idH zB!5R8ymdY1cS$Ct8FHR!{a^p|VaHk-g#I z0JdtXx+VCGX(5m*w-;p0G>7S`(`{bp%^a;q<9SXP2FnH~%-=JQ&%^P;GR0&ipk;k9 z7F1(pWV@(yL1K1dE5RxE@zXwh`~>-rp9(pJNSYO2cEV)j3vX z=9A`l;QU`zYt=jF|J|y(ot^)GMB9YM6t`GryAxcSn{dv3|7SkQrW4%Iqan|uEI!MZ z?~9po=rdO4#0AI`A|R_fa`gqS`17L(5B=#hkKm0XFaZem6-80RG?G*-HfWDD0ncHW zYW9moNs^)I@`MmX9uyH?aGq8>Qm%ZxxAH^vbrtT)V0d{!gyJ!Z10W@HZ&_QcZbz#ZM?U; zQ)AnE>UQ--rKXOnyVdR8SS5aJklq!c*eC2El>m<`0by?#6NJ6l_8hRJW4=KU)^HBz zLa>WbLU0j3cJFt%xRlf3ayop)qe3xD#ea*oBL9zUW;l`e6y#sD2lD^UUUlbg{@<=- z`2P=SEAan?|1;!2L;f@5KSTaA;IDg`qzTtO@{Rz6L|PL z>DQ;?;g)%ji{G%I z&iOx#hEw~*ujrU(nMW8^pGDg}z%fNtGRO)j7W0C*a0h}Gy-4iGFf&#HnA06zH;orB zu~s4SOTHpX#i#V_-z!|gW^p+Da~-Xv(BJPDedBS?TiZ9 zllUDuR^#+`hwo6$b`J#J#QO<5qfDeoe8d4%cQWAVN46E~zlDV_R@O>*6FzN@hu;6} zZGVRURBM%N{r`ye6j0}0L`PZ!nzK$QM=Guf#^FE#CfskvaPE=d@%YU;!J9`TH>lD2 zP@A~M>+k`eo zKo27TS}fcOKoc<_N#{SEw=m`486WaBxnUcW#SeSU!s0EnHJd2G)MB<7D3)6u8s>zR zZ9ydC(0^3bnjDkLLpx$ha5ecg2B`FFxbptzx?h@TdbSP{*j_L5UB&!uze6q6iEh(L* zk`G7dR7KyOVuHlHexA7WwxYLAaRr5cP|;&y`3Ddv=IvP_5?+t$!Gd<)G4@rRv;O~dC{ z!r)3pGmwhnz#7a^;~AEC@87?dJj+XlEFq~2$e6}RP50WdT|*Q~=VDSUyliF!>=9pn z#FPPQ?2o2cpK#6DjYmItoK31Or1Vj46aS8|^qHgW$@mQputdJ7#-zGw3cXVQ@gq4N zu2=Z+&S|_LVW`raq3el~jKTX9$a&8ZDq%1Y_R{w||8s-aZLBFBRPc(~^AZ;))(J)i z7Qq;HEVa}7WnBC{#Be#)s~GoKnbIdy+;9WFfOv5lFCq+KS9}FV)uYcGb`8ezvIDW` zXc}75NwlL#ScC^I9u=na+(uo{KCe8V{UXKdk+X3fdk(TZGn~k<@q*#Pv&nA1u^WRh z46+TplVsVL_>9S+8>GW!FB;-jCR?6tyORmdBclW~7N;3AA7f+jRa$Uh;)14!F){rc zp3G%_#b&>h2^lVj?q~m<`KpXhm+9iy_xF%4UhJntCKQ!rMPv%&^j3OR<_3{YdA!rI zWa9jlMk?(13=Q1i zSOO5C%}Vfrj!DRmqQ)4rm32+lvX-^1Wi4x2%Uag5mbI*9Eo)iJTGq0bwT+Gc0P{G1 IxByT908Saras#U%ByA@^O;E@6UX^}&Ue?R;^5&~WU>G(7+IOrRFMF1Btz?Ze|1+66aWnTE*t>xpF#0yQkVdd~3UR7Hm3z%rH`xtiq@wJ&a8iyba~j2&{2r6w z8EMH$4@}a|nNreK(jY7L!beUCgm+Nu=OuF+7dCm%4F4P z;$`ew46GQe2K`G7(U(%@>EsV?Zv-edFkIjJ?kW;mP)^zUOR&t_ zof>e7fyig*XrBkmOPzV;daJM-zsKx-`(6;QSG6KZx`TtE3kwK2Rh?R4%1{P2Vux`V z)R(WhO1iiAh+@CSlx`oc?RA9!%Hkqa63I2pNyGJuUf{koZ_+7~TmpuI#Z~P+%AqJF zB3ydKgcUYgmDLz<;Y^xhN)E*OpYtX0nL1Y^Kwz5eC4-4V>DpGL`5sfb)DD}yV63(W z9AzQ&`FU1!(%m*Jdhd~$j)MJ_xGPUAFD0?JQZ`@GSOA@(yFXdZ$uiS~(iuvJA+<=P zn}{qUb6Gu#k#O34oEDFkG95f4U-PlbvYBoSLJHakxVc zSYl{d=#GO01H-1y_IrK^{E6;cH!R|*M>dyBVXml5>jKu}X2SxRp3#zG{HFO_;jR|9 z6Y%NqW9guY&P-;36G3m_Aez0+Drc$Ms^qeMs$viEgI`({S>t*h&cCXcqO0q@Z$ep-&4yLstF;b6)V0k-#^$4P_v&H4 z=hR;SfU)YDV-4^bs8Vf_Uil1!8NH!<#q;C5cKNU`0xvVU|3=SGWyiC=>P%;m=f&er z%IqEhv_;^ntd>v?W<)PN(|bcilD-rjXhd;TrYq06j%qKdYN?|trq4~ z;UVx73ZRJ|Bi*Uw!OO%!!E5-ZdW1gO4-joA$dpAdmk#qE|u6UKD_WlAj zoUcI=`YeL%Q#u`-V|fisX;TkcV0?Lx84f$xWH2uN6#_@3)Srk!vnkgakbc z-3SFg(4KJt-78O_{T(NujV`I&uJN;SR`t^zd`0`00TLA(RxXOy3|#AhxE3R7f)6K- z?5qeK&j639pF5B;^(zKoa1YJk(@YMA5?anV6dd-yZPeTf9xG-h^#1W(|KuX_)%pl` z=L%AGWJJy8lp^#8V)T5=#+wH5VeBn#{2v!H7Wi8-%H4_6^^=Oc7gWAJ=MjSW{dkLA;^!Q^5^)^^-ZIr2^K& z!;!-gD+CHqGt#5$tfx?GD7$U(aW8EdD7WCa`&xTXHIg`6HH7*C-PJZWPyzh(Nj+GL zj)OG$)}34v(=B&`w65`=3cUOAgR&7c6383Ir}<(?k{###T_=6!N4(x zVbnaR3i8#{%Pj|NT=Li{r!Z_IYa!42GdG>fXh=iv6}&nc6!*o>{Mr`{^R$(zEPD+J zjP_MeM`G)g+)>7mYjdilU|79iIF_HaBziN3?y=(q5_Iq9n)iTPs4X>*xCdi~=XE#d z$@Je%q#wy~f(0Jne&6M|vs>^F1OR~g$+S@Xd6$iCObzW^9sbF#sN32@IWZrINgvnt zV4H%<>l59yQ#5Ntu}BqOPB&A%-gLpLcS+ zC*o`L(PoQEq*zuRs&r%SNi<4A8A1$1g()?F!6Y zAwtIp#q|jA2@Xd)rPW-ieU2JI2pQZSU@T*A0w?a|9a>{HmaK=EUE=Z;5mXc#yt5wg zK$1@H_*CL&z@ZLaFOk?>h zd6kR43*mXnR!s&@Jy!i#3LP#_K7~zwmwg0VUD5E75AR}rU@!$GB%>;R4F&Y#K3g$0 zz>x3t>9eTFmtecqh-QyDF?=ARmKk+nxjtsuYJx~2dE;mt`6U^>(l~d;jq-B2#O@`o zu1CHC zvn!Yxw$I&hHdd5XuN%hhA`8giJyH=U(gy(?pYvZ700S`lZ3HQRVZuT-e36 zLEMWPjw(|`;cWtNBAN7-Jl>9yXI0eI)dfm)gW*7R{tK!Xw=!HZX{REf1FZVm(+lH( zRLB*T9)4`#^(2}Z`suCj(eXgRV4B5rxmfi9Q&w_sN`VikSgSC?P-`5zaJ9<7jxGms zM-o^`_rywnmO7esF%4Y0>1mJ{lOH)GD6CFj4~#lPb#=>!9zsrcYb!|tML9nEc%TSq zpDJtr@M<%0M@Dmwv;rq5srj(uFD@@Hcs15%L1~ztNm<1uH_1BFT1u%f)(c%;eQ3)U zL2IArAZ#n!-L39lA-#(4wC@sjw|_b2brqkufEQp|nBx@dnkV~}zPX1Z$jxzpwP6G~ zr_x$Ua36-x<{KfAz;~9omJ_`VMUpH^(k6ny=!65K~Qa;)y( zF#lwG;2JtNISCYi-^f~f?W7GC6B3v&a0lOdx)G}2Q2L>JWI}=DARpi>&JAP0vN1z5Be6Y6;`m_=ctrBG)tA}3`I9uo(u|i4`BKM>YzLQ)`JPA` z*C=GnND`MSoOTfyTA(X?pkgQ}eqC*WA@n6o-3NynY&^+5r@kcb9CKq!Qs)WJa5CC@ zn0XKO1^lil>he}^!k^0G)Td7V51L|cXJ%>s50XL=C4dshj3a&}{Lm$S1q@~k5X~OR?iUE;GekBl_7Xz|uP8TTDw1focXfUC=FXZW?S?aE?o=w@vtUBb z>^;j8Sw^E)M zui5!PTf*2lMYfk-oW}M$^DY1gfE3P z;-F3RV=JxMwKdC(H6y#c$v2#_M?I;_8w86s+KG8)rQBq^u*1eW=V(hS-F|ffoXuPt z>rgUbx8$zR!0UZ^%u6QTc6g?($GyBr@Mu%%GOBa`Y+(L(#LZ*HS7r8QQJ;C_Nt8li zf=B7#@ZJU2<&UI>mT>7QV1^#8fcC|GaYWB>>EL?INx9?=-WN)41RJQ3uEZ1Y;za2q zf4#8dbQwjcBAPaw-}UQEw{!}<`G#>^C(&I%6Ny!CLsGR*nZ$1c}9OyHZBDiU{WwOeaNFjeC>~bvN`*2;F|vnMfIO3Cy*j zamv4XJ1Dc;nOOC;_oI<=WaDUhQF)458Fz=qD^rnT9&GI#hOZd%>lp3hMV$0w5XNU;O&n+ajHN5zjIaqo#EvQ@I9VG}P{3*3luY zaLg=f_SE|7M(RlIw3XKc2F0jg&9GMb0PP~xL9pZxo**RhMySK0EQys=lc)s$W^^W|SNP*NuOl8(0XJ)7ihy$lSX|9W%&ZI9A0hg`k8 z9&s&LU(XmJskKrzjA3b<$LZiP_xEGCf5nd$^K=aNpN`=_{B4xQ--?06|Di~UR{Pt) zKILs|3kDiCLCR1Y{eU9v6nN1IdWMW2qVZ@f4B6x}I0Fe(d_S-Fl+R@SjG%a#l*e11 zM@Kv)9oaUgdX^|HQbNyKS%Qy=KvYu$U6G;MYI#V&zS4D>p%?|olK$9(pk0^__mK0q z8BGhEJyw&!ZCTBkwEYh0+V2?ldf5>ZYV@w5ni{hZ_&p9iRjmZz3h#HvsD79#<9E;- zShoFr+mCV1^mRSVvg3l6(;9H4^9qkJeH5Y{A$;(NsGOM~PK~0V2C4U`M94L-5V-9s zbw~W@`(teAkUAKpX$$4hFvbR(V=Lle(NjeYsK*n_RXZNmOnASGI6>B-#R3lWA(5yR zRxa&dKI7HsiB3pWO-uu=%hYJ3S$YS(s0k8TUoX5hhBHK(afoit_K}}Cv0a5$*4hdV zk*yTIX_eg5;eVW8jqy0(Iz2|5q!5fx?SUE9Qkr5=NvdgPG5U6sycCo?cs0WoR}vID z8pqz$3qHT3Jg1hGS6U!*MFmwG`-E9qH(gB9G2(tij-rU;&A9q%LNh~l7L-$pATrhn zZICjk(~zT*Z>xH7u=bVn(1Igd2O2%0o&q=Wn!{t78ty|Xt@4}CO{_P~QR{gVH@gIB zEle+)db>$-b?%hA7UZ>NK&L+Pw()!YSLxt4WPwuBvL^b|P@8=n2i~ zcpTx)KJj<#L}Q=#G1{7QcL>v9r7wPcQgsl;(_KokzI}U9Bms1xHH8>W*}=x zgx5-hpWzL0fNk6PsV-ZwYPs{y>7fhjAcuIp#1*L+9f*p9B+j+W7|FMXYM%F5zi9xZ z1pBqgAr``XZ3AAl_Sq-wK_uJ#3}+;X_$VHg;2bK612^GTYR%K{t}Z)E(_uk(ub?e$ ziPM`V=N=;*5ja&lX1P0eKZom9(>bzlV~(%ShAVo-MpJt8R?#MXKl z$SfZfua~b0Mnp)3hUE z;R7~E8JCdWA8HJ|VnUCvT(`J;s#alOiQ)cNa*zL{zJE1Lz~kG$?tjej5&q8c|0~1) z3-G^E{J#NDDG1=vU+vF;|IYOP9q{*@~J_WUmr!jpml0Ekc5 N9xMRRiuc#s{{i#*8*l&s literal 0 HcmV?d00001 From 08f7f8d87ba90fd91713764b49a27c76cc9ae7f2 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 30 Jul 2024 10:18:20 -0700 Subject: [PATCH 13/13] Fixed API manager URL --- README.md | 7 +++---- config.py | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7891295..3e2232a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 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) +[![License (3-Clause BSD)](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg?style=flat-square)](https://opensource.org/licenses/BSD-3-Clause) [![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, @@ -17,14 +17,13 @@ pip install tldextract untangle Download the [latest release](https://github.com/ethauvin/namesilo-letsencrypt/releases) archive and expand it in the desired directory. - ## Configuration -Add your [NameSilo API key](https://www.namesilo.com/account_api.php) +Add your [NameSilo API key](https://www.namesilo.com/account/api-manager) to the top of the `config.py` file: ```python -# Get your API Key from: https://www.namesilo.com/account_api.php +# Get your API Key from: https://www.namesilo.com/account/api-manager apikey = "YOUR_API_KEY" ``` diff --git a/config.py b/config.py index e12c194..0bcd226 100644 --- a/config.py +++ b/config.py @@ -1,4 +1,4 @@ -# Get your API Key from: https://www.namesilo.com/account_api.php +# Get your API Key from: https://www.namesilo.com/account/api-manager apikey = "YOUR_API_KEY" # Minutes to wait for DNS changes to complete. wait = 25