Compare commits

...

9 commits

Author SHA1 Message Date
08f7f8d87b
Fixed API manager URL 2024-07-30 10:21:12 -07:00
9f5f0c5642 Added release build script. Closes #3 2020-06-11 17:33:30 -07:00
b5e27de90d Added changelog. 2020-05-28 14:07:52 -07:00
03f68df7ec Changed wait default to 25 mins. 2020-05-27 17:44:29 -07:00
2f5be01ec9 Updated user-agent. 2020-04-14 12:09:27 -07:00
94caed2d98 Cleanup. 2020-04-14 12:02:01 -07:00
e0fc2e71fa
Merge pull request #2 from Junker/master
Made python3.4 compatible. added subdomains support.
2020-04-14 09:15:56 -07:00
Junker
d680a58068 add subdomains support 2020-04-14 19:21:09 +07:00
Junker
1867401b35 make python3.4 compatible 2020-04-14 18:51:52 +07:00
9 changed files with 83 additions and 27 deletions

View file

@ -7,7 +7,7 @@
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.8" jdkType="Python SDK" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

25
CHANGELOG.md Normal file
View file

@ -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)*

View file

@ -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/)
[![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,
using [Certbot](https://certbot.eff.org/) DNS-01 challenge validation for domains DNS hosted on
@ -9,22 +9,21 @@ 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 [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 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"
```
@ -43,4 +42,4 @@ certbot certonly --manual --email you@example.com \
-d *.example.com -d example.com
</pre>
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.

23
authenticator.py Normal file → Executable file
View file

@ -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
@ -45,28 +46,32 @@ 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']
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,
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')
}
)

17
cleanup.py Normal file → Executable file
View file

@ -1,4 +1,4 @@
#!/usr/bin/env python3.8
#!/usr/bin/env python3
# cleanup.py
#
@ -36,18 +36,22 @@ 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):
@ -55,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')
}
)

View file

@ -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 = 20
wait = 25

24
release.sh Executable file
View file

@ -0,0 +1,24 @@
#!/bin/bash
RELEASE=release
if [ $# != 1 ];
then
echo "Usage: $(basename "$0") <version>"
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

Binary file not shown.

Binary file not shown.