diff --git a/import_mailman3_list_config.py b/import_mailman3_list_config.py new file mode 100644 index 0000000..47fff86 --- /dev/null +++ b/import_mailman3_list_config.py @@ -0,0 +1,80 @@ +#!/bin/env python3 + +import sys +import requests +import argparse +import json +from pathlib import Path + +from requests.auth import HTTPBasicAuth + +REST_USER="restadmin" +REST_PATH="http://127.0.0.1:8001/3.0/lists" + +BANNER=""" + _) | __ / _|_) + ` \ _` | | | ` \ _` | \ _ \ _| _ \ \ _| | _` | +_|_|_|\__,_|_|_|_|_|_|\__,_|_| _|___/\__|\___/_| _|_| _|\__, | + ____/ +""" + + +def parse_args(args): + parser = argparse.ArgumentParser("load a json config into local mailman configuration") + + parser.add_argument("list", help="list name (eg `test`)") + parser.add_argument("patch", help="config to push to list", type=Path) + + return parser.parse_args(args) + +def main(args): + print(BANNER) + pargs = parse_args(args[1:]) + + if (not pargs.patch.exists()): + print("need input patchfile (json)") + return 1 + with pargs.patch.open() as inf: + p = json.load(inf) + + rest_pass = Path("/run/secrets/mailman_rest_password").read_text().strip() + rest_auth = HTTPBasicAuth(REST_USER, rest_pass) + + # determine if list exists, if not create with defaults + result = requests.get(REST_PATH, auth=rest_auth) + if result.ok: + if (not (pargs.list in [x['fqdn_listname'] for x in result.json()['entries']])): + # create list + print("list not found: creating") + result = requests.post(f"{REST_PATH}", auth=rest_auth, json={"fqdn_listname": pargs.list}) + if (result.ok): + print("success") + print(result) + print(result.text) + else: + print("failed") + print(result) + print(result.reason) + return 1 + # list exists + else: + print("cannot get list of lists") + print(result) + print(result.reason) + return 1 + + + # patch config + result = requests.patch(f"{REST_PATH}/{pargs.list}/config", auth=rest_auth, json=p) + if result.ok: + print("success") + print(result) + print(result.text) + else: + print("failed") + print(result) + print(result.reason) + + +if __name__ == "__main__": + sys.exit(main(sys.argv))