#!/usr/bin/env python3 # SPDX-FileCopyrightText: 2024 Matthew Fennell # # SPDX-License-Identifier: AGPL-3.0-only import argparse import itertools import os import subprocess parser = argparse.ArgumentParser() parser.add_argument("identity_file") parser.add_argument("--prosody", nargs=1, default = []) parser.add_argument("--forgejo", nargs=1, default = []) args = parser.parse_args() ssh_args = f"-o IdentitiesOnly=yes -F /dev/null -i {args.identity_file}" commands = { "prosody": [ "sudo chmod 640 ~/*.crt ~/*.key", "sudo mv ~/*.crt ~/*.key /etc/prosody/certs", "sudo chown -R root:prosody /etc/prosody/certs", "sudo service nginx restart", "sudo service prosody restart", ], "forgejo": [ "sudo chown root:root ~/*.crt ~/*.key", "sudo mv ~/*.crt ~/*.key /etc/nginx/ssl/", "sudo service forgejo restart", "sudo service nginx restart", ], } possible_services = { "prosody": next(iter(args.prosody), None), "forgejo": next(iter(args.forgejo), None), } services = dict(filter(lambda service: service[1] is not None, possible_services.items())) files_to_copy = {os.environ["LEGO_CERT_PATH"], os.environ["LEGO_CERT_KEY_PATH"]} def scp_commands(files: set[str], host:str) -> list[str]: return [f"scp {ssh_args} {' '.join(files)} {host}:~"] def ssh_commands(service: str, host: str) -> list[str]: return list(map(lambda command: f"ssh {ssh_args} -tt {host} '{command}'", commands[service])) for service, host in services.items(): commands_to_run = itertools.chain(scp_commands(files_to_copy, host), ssh_commands(service, host)) for command in commands_to_run: print(command) subprocess.run(command, shell=True)