| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | #!/usr/bin/env python3import json, sys, subprocess, astif len(sys.argv) < 3:    print(f"Error, use {sys.argv[0]} install|update")    sys.exit(1)settings = sys.argv[1]conv = {    "LISTENIP": ("listen.ip", str),    "PORT": ("listen.port", int),    "GIT": ("git", bool),    "BASEPATH": ("basepath.dir", str),    "ENFORCE_BASEPATH": ("basepath.enforce", bool),    "SSL_CERTIFICATE": ("ssl.certificate", str),    "SSL_KEY": ("ssl.key", str),    "IGNORE_SSL": ("ssl.ignore", bool),    "HASS_API": ("hass.api.url", str),    "HASS_WS_API": ("hass.api.ws-url", str),    "HASS_API_PASSWORD": ("hass.api.password", str),    "USERNAME": ("login.username", str),    "PASSWORD": ("login.password", str),    "ALLOWED_NETWORKS": ("allowed.networks", list),    "ALLOWED_DOMAINS": ("allowed.domains", list),    "BANNED_IPS": ("ban.ips", list),    "BANLIMIT": ("ban.limit", int),    "IGNORE_PATTERN": ("ignore-pattern", list),    "DIRSFIRST": ("dirs-first", bool),    "SESAME": ("sesame.key", str),    "SESAME_TOTP_SECRET": ("sesame.secret", str),    "VERIFY_HOSTNAME": ("verify-hostname", bool),    "ENV_PREFIX": ("env-prefix",  str),    "NOTIFY_SERVICE": ("notify-service", str)}def read(param=None):    with open(settings, "r") as json_file:        obj = json.load(json_file)        if param is None:            return obj        if param in obj:            return obj[param]    sys.exit(1)def iterate_obj(obj, orig, i, path=""):    if not isinstance(obj, dict):        raise Exception("Invalid data")    for k,v in obj.items():        if isinstance(v, dict):            iterate_obj(v, orig, i, path+k+".")        else:            key=path+k            for origkey, conversion in conv.items():                if key == conversion[0]:                    if conversion[1] == list:                        orig[origkey] = ast.literal_eval(v)                    elif conversion[1] == bool:                        orig[origkey] = True if v.lower() == "true" else False                    elif conversion[1] == int:                        orig[origkey] = (conversion[1])(v)                    else:                        if v.lower() in ("none", "null"):                            v = "null"                        else:                            orig[origkey] = (conversion[1])(v)                    i[0] = i[0] + 1                    breakif sys.argv[2] == "update":    try:        new = json.loads(sys.stdin.read())        orig = read()        i = [0]        iterate_obj(new, orig, i)        assert i[0] == len(conv), f"Wrong number of entries, {i[0]} != {len(conv)}."        with open(settings, "w+") as json_file:            json.dump(orig, json_file, indent=4)    except Exception as e:        print(e)        sys.exit(1)    sys.exit(0)if sys.argv[2] == "install":    obj = read()    for k, v in obj.items():        print(f"server.{conv[k][0]}=\"{v}\"")    sys.exit(0)sys.exit(1)
 |