2023-02-16 05:06:42 +00:00
|
|
|
import logging, os
|
|
|
|
from typing import Any
|
|
|
|
|
|
|
|
class ServerConfig:
|
|
|
|
def __init__(self, parent_config: "CoreConfig") -> None:
|
|
|
|
self.__config = parent_config
|
|
|
|
|
|
|
|
@property
|
|
|
|
def listen_address(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'server', 'listen_address', default='127.0.0.1')
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def allow_user_registration(self) -> bool:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'server', 'allow_user_registration', default=True)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
2023-02-18 05:00:30 +00:00
|
|
|
def allow_unregistered_serials(self) -> bool:
|
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'server', 'allow_unregistered_serials', default=True)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def name(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'server', 'name', default="ARTEMiS")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def is_develop(self) -> bool:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'server', 'is_develop', default=True)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def log_dir(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'server', 'log_dir', default='logs')
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
class TitleConfig:
|
|
|
|
def __init__(self, parent_config: "CoreConfig") -> None:
|
|
|
|
self.__config = parent_config
|
|
|
|
|
|
|
|
@property
|
|
|
|
def loglevel(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.str_to_loglevel(CoreConfig.get_config_field(self.__config, 'core', 'title', 'loglevel', default="info"))
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def hostname(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'title', 'hostname', default="localhost")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def port(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'title', 'port', default=8080)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
class DatabaseConfig:
|
|
|
|
def __init__(self, parent_config: "CoreConfig") -> None:
|
|
|
|
self.__config = parent_config
|
|
|
|
|
|
|
|
@property
|
|
|
|
def host(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'host', default="localhost")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def username(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'username', default='aime')
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def password(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'password', default='aime')
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def name(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'name', default='aime')
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def port(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'port', default=3306)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def protocol(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'type', default="mysql")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def sha2_password(self) -> bool:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'sha2_password', default=False)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def loglevel(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.str_to_loglevel(CoreConfig.get_config_field(self.__config, 'core', 'database', 'loglevel', default="info"))
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def user_table_autoincrement_start(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'user_table_autoincrement_start', default=10000)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def memcached_host(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'database', 'memcached_host', default="localhost")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
class FrontendConfig:
|
|
|
|
def __init__(self, parent_config: "CoreConfig") -> None:
|
|
|
|
self.__config = parent_config
|
|
|
|
|
|
|
|
@property
|
|
|
|
def enable(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'frontend', 'enable', default=False)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def port(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'frontend', 'port', default=8090)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def loglevel(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.str_to_loglevel(CoreConfig.get_config_field(self.__config, 'core', 'frontend', 'loglevel', default="info"))
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
class AllnetConfig:
|
|
|
|
def __init__(self, parent_config: "CoreConfig") -> None:
|
|
|
|
self.__config = parent_config
|
|
|
|
|
|
|
|
@property
|
|
|
|
def loglevel(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.str_to_loglevel(CoreConfig.get_config_field(self.__config, 'core', 'allnet', 'loglevel', default="info"))
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def port(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'allnet', 'port', default=80)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def allow_online_updates(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'allnet', 'allow_online_updates', default=False)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
class BillingConfig:
|
|
|
|
def __init__(self, parent_config: "CoreConfig") -> None:
|
|
|
|
self.__config = parent_config
|
|
|
|
|
|
|
|
@property
|
|
|
|
def port(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'billing', 'port', default=8443)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def ssl_key(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'billing', 'ssl_key', default="cert/server.key")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def ssl_cert(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'billing', 'ssl_cert', default="cert/server.pem")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def signing_key(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'billing', 'signing_key', default="cert/billing.key")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
class AimedbConfig:
|
|
|
|
def __init__(self, parent_config: "CoreConfig") -> None:
|
|
|
|
self.__config = parent_config
|
|
|
|
|
|
|
|
@property
|
|
|
|
def loglevel(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.str_to_loglevel(CoreConfig.get_config_field(self.__config, 'core', 'aimedb', 'loglevel', default="info"))
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def port(self) -> int:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'aimedb', 'port', default=22345)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def key(self) -> str:
|
2023-02-16 22:13:41 +00:00
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'aimedb', 'key', default="")
|
2023-02-16 05:06:42 +00:00
|
|
|
|
2023-02-17 06:37:59 +00:00
|
|
|
class MuchaConfig:
|
|
|
|
def __init__(self, parent_config: "CoreConfig") -> None:
|
|
|
|
self.__config = parent_config
|
|
|
|
|
|
|
|
@property
|
|
|
|
def enable(self) -> int:
|
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'mucha', 'enable', default=False)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def loglevel(self) -> int:
|
|
|
|
return CoreConfig.str_to_loglevel(CoreConfig.get_config_field(self.__config, 'core', 'mucha', 'loglevel', default="info"))
|
|
|
|
|
|
|
|
@property
|
|
|
|
def hostname(self) -> str:
|
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'mucha', 'hostname', default="localhost")
|
|
|
|
|
|
|
|
@property
|
|
|
|
def port(self) -> int:
|
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'mucha', 'port', default=8444)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def ssl_cert(self) -> str:
|
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'mucha', 'ssl_cert', default="cert/server.pem")
|
|
|
|
|
|
|
|
@property
|
|
|
|
def signing_key(self) -> str:
|
|
|
|
return CoreConfig.get_config_field(self.__config, 'core', 'mucha', 'signing_key', default="cert/billing.key")
|
|
|
|
|
2023-02-16 05:06:42 +00:00
|
|
|
class CoreConfig(dict):
|
|
|
|
def __init__(self) -> None:
|
|
|
|
self.server = ServerConfig(self)
|
|
|
|
self.title = TitleConfig(self)
|
|
|
|
self.database = DatabaseConfig(self)
|
|
|
|
self.frontend = FrontendConfig(self)
|
|
|
|
self.allnet = AllnetConfig(self)
|
|
|
|
self.billing = BillingConfig(self)
|
|
|
|
self.aimedb = AimedbConfig(self)
|
2023-02-21 21:46:43 +00:00
|
|
|
self.mucha = MuchaConfig(self)
|
2023-02-16 05:06:42 +00:00
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def str_to_loglevel(cls, level_str: str):
|
|
|
|
if level_str.lower() == "error":
|
|
|
|
return logging.ERROR
|
|
|
|
elif level_str.lower().startswith("warn"): # Fits warn or warning
|
|
|
|
return logging.WARN
|
|
|
|
elif level_str.lower() == "debug":
|
|
|
|
return logging.DEBUG
|
|
|
|
else:
|
|
|
|
return logging.INFO
|
|
|
|
|
|
|
|
@classmethod
|
2023-02-16 22:13:41 +00:00
|
|
|
def get_config_field(cls, __config: dict, module, *path: str, default: Any = "") -> Any:
|
|
|
|
envKey = f'CFG_{module}_'
|
2023-02-16 05:06:42 +00:00
|
|
|
for arg in path:
|
|
|
|
envKey += arg + '_'
|
|
|
|
|
|
|
|
if envKey.endswith('_'):
|
|
|
|
envKey = envKey[:-1]
|
|
|
|
|
|
|
|
if envKey in os.environ:
|
|
|
|
return os.environ.get(envKey)
|
|
|
|
|
|
|
|
read = __config
|
|
|
|
|
|
|
|
for x in range(len(path) - 1):
|
|
|
|
read = read.get(path[x], {})
|
|
|
|
|
|
|
|
return read.get(path[len(path) - 1], default)
|