mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
70 lines
2.6 KiB
Python
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
|