From f5d10eff7d464ef850f75e9ba065ab09e8ec8543 Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Sun, 22 Nov 2015 15:24:12 +0100 Subject: [PATCH] Stub for let's encrypt renewal script --- letsencrypt_renew.py | 67 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 letsencrypt_renew.py diff --git a/letsencrypt_renew.py b/letsencrypt_renew.py new file mode 100644 index 0000000..e9c6397 --- /dev/null +++ b/letsencrypt_renew.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 + +from io import TextIOWrapper +import logging + +from sarge import run, shell_format, capture_both +from systemd.journal import JournalHandler + +logger = logging.getLogger("letsencrypt-renew") +logger.propagate = False +logger.addHandler(JournalHandler()) +logger.setLevel(logging.INFO) + + +def parse_domain_list(domainfile): + + domains = list() + + with open(domainfile, "r") as handle: + + for row in handle: + + if not row.rstrip(): + continue + + # Ignore everything after # (comment) + row = row.partition("#")[0] + row = row.rstrip() + + if not row: + continue + + domains.append(row) + + if not domains: + logger.warning("No domains found in configuration.") + return + + domains = [shell_format("-d {0}", domain) for domain in domains] + + return domains + + +def renew_domains(letsencrypt_path, domains): + + domains = " ".join(domains) + command = " ".join([letsencrypt_path, "certonly", domains]) + + logger.info("Renewing domain certificates...") + process = capture_both(command) + + for stdout in TextIOWrapper(process.stdout): + logger.info(stdin) + + for stderr in TextIOWrapper(process.stderr): + logger.info(stderr) + + if process.returncode != 0: + logger.error("Let's Encrypt domain renewal failed.") + return + else: + logger.info("Domain renewal succeeded.") + + + + +