bunkerweb/utils/ConfigCaller.py

71 lines
2.6 KiB
Python
Raw Normal View History

2022-06-03 15:24:14 +00:00
from json import loads
from glob import glob
from re import match
from traceback import format_exc
from logger import setup_logger
2022-06-03 15:24:14 +00:00
class ConfigCaller:
def __init__(self):
self.__logger = setup_logger("Config", "INFO")
with open("/opt/bunkerweb/settings.json") as f:
2022-06-03 15:24:14 +00:00
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()}",
)
2022-06-03 15:24:14 +00:00
def _is_setting(self, setting):
2022-06-03 15:24:14 +00:00
return setting in self._settings
def _is_global_setting(self, setting):
if setting in self._settings:
2022-06-03 15:24:14 +00:00
return self._settings[setting]["context"] == "global"
if match("^.+_\d+$", setting):
2022-06-03 15:24:14 +00:00
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]
)
2022-06-03 15:24:14 +00:00
return False
def _is_multisite_setting(self, setting):
if setting in self._settings:
2022-06-03 15:24:14 +00:00
return self._settings[setting]["context"] == "multisite"
if match("^.+_\d+$", setting):
2022-06-03 15:24:14 +00:00
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]
)
2022-06-03 15:24:14 +00:00
return False
def _full_env(self, env_instances, env_services):
2022-06-03 15:24:14 +00:00
full_env = {}
# Fill with default values
for k, v in self._settings.items():
2022-06-03 15:24:14 +00:00
full_env[k] = v["default"]
# Replace with instances values
for k, v in env_instances.items():
2022-06-03 15:24:14 +00:00
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
2022-06-03 15:24:14 +00:00
# Replace with services values
for k, v in env_services.items():
2022-06-03 15:24:14 +00:00
full_env[k] = v
return full_env