Skip to content

Instantly share code, notes, and snippets.

Created September 4, 2020 17:04
What would you like to do?
replace acme-dns random domains with custom domains.
from __future__ import print_function
import os
import sqlite3
import sys
import re
_args = sys.argv
if len(_args) != 3:
raise ValueError("wrong number of args")
(_subdomain_old, _subdomain_new) = _args[1:3]
if not all((_subdomain_old, _subdomain_new)):
raise ValueError("Missing old or new subdomain")
# validate the domain inputs
_regex_subdomain = re.compile("^[A-Za-z0-9](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?$")
if not _regex_subdomain.match(_subdomain_old):
raise ValueError("Invalid domain: old")
if not _regex_subdomain.match(_subdomain_new):
raise ValueError("Invalid domain: new")
except Exception as exc:
print("Please invoke this as ` {OLD_DOMAIN} {NEW_DOMAIN}`")
_database_path = os.environ.get("ACMEDNS_DB", "acme-dns.db")
print("Using acme-dns database at: %s" % _database_path)
if not os.path.exists(_database_path):
raise ValueError(
"XXX Invalid Database Path. Please override with `ACMEDNS_DB=` environment variable"
with sqlite3.connect(_database_path) as connection:
cursor = connection.cursor()
cursor.execute("SELECT * FROM records WHERE subdomain=?", (_subdomain_old,))
row = cursor.fetchone()
if row is None:
raise ValueError("Old Subdomain not found in acme-dns")
print("updating the database...")
"UPDATE records SET subdomain=? WHERE subdomain=?",
(_subdomain_new, _subdomain_old),
"UPDATE txt SET subdomain=? WHERE subdomain=?", (_subdomain_new, _subdomain_old)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment