| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | 
							- #!/usr/bin/env python3
 
- import json, sys, subprocess, ast
 
- if 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
 
-                     else:
 
-                         if v.lower() in ("none", "null"):
 
-                             v = "null"
 
-                         else:
 
-                             orig[origkey] = (conversion[1])(v)
 
-                     i[0] = i[0] + 1
 
-                     break
 
- if 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)
 
 
  |