bunkerweb/utils/ConfigCaller.py
2022-10-28 12:01:05 +02:00

70 lines
2.6 KiB
Python

from json import loads
from glob import glob
from re import match
from traceback import format_exc
from logger import setup_logger
class ConfigCaller:
def __init__(self):
self.__logger = setup_logger("Config", "INFO")
with open("/opt/bunkerweb/settings.json") as f:
self._settings = loads(f.read())
for plugin in glob("/opt/bunkerweb/core/*/plugin.json") + glob(
"/opt/bunkerweb/plugins/*/plugin.json"
):
with open(plugin) as f:
try:
self._settings.update(loads(f.read())["settings"])
except:
self.__logger.error(
f"Exception while loading plugin metadata file at {plugin} :\n{format_exc()}",
)
def _is_setting(self, setting):
return setting in self._settings
def _is_global_setting(self, setting):
if setting in self._settings:
return self._settings[setting]["context"] == "global"
if match("^.+_\d+$", setting):
multiple_setting = "_".join(setting.split("_")[0:-1])
return (
multiple_setting in self._settings
and self._settings[multiple_setting]["context"] == "global"
and "multiple" in self._settings[multiple_setting]
)
return False
def _is_multisite_setting(self, setting):
if setting in self._settings:
return self._settings[setting]["context"] == "multisite"
if match("^.+_\d+$", setting):
multiple_setting = "_".join(setting.split("_")[0:-1])
return (
multiple_setting in self._settings
and self._settings[multiple_setting]["context"] == "multisite"
and "multiple" in self._settings[multiple_setting]
)
return False
def _full_env(self, env_instances, env_services):
full_env = {}
# Fill with default values
for k, v in self._settings.items():
full_env[k] = v["default"]
# Replace with instances values
for k, v in env_instances.items():
full_env[k] = v
if (
not self._is_global_setting(k)
and env_instances.get("MULTISITE", "no") == "yes"
and env_instances.get("SERVER_NAME", "") != ""
):
for server_name in env_instances["SERVER_NAME"].split(" "):
full_env[f"{server_name}_{k}"] = v
# Replace with services values
for k, v in env_services.items():
full_env[k] = v
return full_env