63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Settings:
|
|
root_aliases: dict[str, str]
|
|
task_db_path: str
|
|
remote_client_registration_token: str
|
|
remote_client_offline_timeout_seconds: int
|
|
remote_client_agent_auth_header: str
|
|
remote_client_agent_auth_scheme: str
|
|
remote_client_agent_auth_token: str
|
|
|
|
|
|
DEFAULT_ROOT_ALIASES = {
|
|
"storage1": "/Volumes/8TB",
|
|
"storage2": "/Volumes/8TB_RAID1",
|
|
}
|
|
|
|
|
|
def _load_root_aliases() -> dict[str, str]:
|
|
# Minimal env override format: storage1=/path1,storage2=/path2
|
|
raw = os.getenv("WEBMANAGER_ROOT_ALIASES", "").strip()
|
|
if not raw:
|
|
return dict(DEFAULT_ROOT_ALIASES)
|
|
|
|
parsed: dict[str, str] = {}
|
|
for entry in raw.split(","):
|
|
if "=" not in entry:
|
|
continue
|
|
alias, root = entry.split("=", 1)
|
|
alias = alias.strip()
|
|
root = root.strip()
|
|
if alias and root:
|
|
parsed[alias] = root
|
|
return parsed or dict(DEFAULT_ROOT_ALIASES)
|
|
|
|
|
|
def get_settings() -> Settings:
|
|
default_task_db_path = str(Path(__file__).resolve().parents[1] / "data" / "tasks.db")
|
|
task_db_path = os.getenv("WEBMANAGER_TASK_DB_PATH", default_task_db_path).strip()
|
|
if not task_db_path:
|
|
task_db_path = default_task_db_path
|
|
raw_offline_timeout = os.getenv("WEBMANAGER_REMOTE_CLIENT_OFFLINE_TIMEOUT_SECONDS", "60").strip()
|
|
try:
|
|
remote_client_offline_timeout_seconds = max(1, int(raw_offline_timeout))
|
|
except ValueError:
|
|
remote_client_offline_timeout_seconds = 60
|
|
return Settings(
|
|
root_aliases=_load_root_aliases(),
|
|
task_db_path=task_db_path,
|
|
remote_client_registration_token=os.getenv("WEBMANAGER_REMOTE_CLIENT_REGISTRATION_TOKEN", "").strip(),
|
|
remote_client_offline_timeout_seconds=remote_client_offline_timeout_seconds,
|
|
remote_client_agent_auth_header=os.getenv("WEBMANAGER_REMOTE_CLIENT_AGENT_AUTH_HEADER", "Authorization").strip()
|
|
or "Authorization",
|
|
remote_client_agent_auth_scheme=os.getenv("WEBMANAGER_REMOTE_CLIENT_AGENT_AUTH_SCHEME", "Bearer").strip() or "Bearer",
|
|
remote_client_agent_auth_token=os.getenv("WEBMANAGER_REMOTE_CLIENT_AGENT_AUTH_TOKEN", "").strip(),
|
|
)
|