from functools import lru_cache
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
"""Настройки panel, всё через env с префиксом GHARD_ (см. .env.example)."""
model_config = SettingsConfigDict(env_prefix="GHARD_", env_file=".env", extra="ignore")
database_path: Path = Path("/data/hard-panel.db")
# пусто = API панели открыт без авторизации (личная панель);
# если задан — доступ только с Bearer-токеном (скрипты, MCP)
admin_token: str = ""
# gnexus-auth: задан client_id — браузерная авторизация через gnexus-auth
# (OAuth PKCE + сессионная cookie); пусто — панель открыта, как выше
auth_base_url: str = ""
auth_client_id: str = ""
auth_client_secret: str = ""
auth_redirect_uri: str = ""
auth_webhook_secret: str = ""
# пусто = пропускаем любого залогиненного; через запятую — e-mail/user_id
auth_allowlist: str = ""
session_ttl_seconds: int = 7 * 24 * 3600
# offline = нет данных дольше offline_multiplier * interval агента (сек)
offline_multiplier: int = 3
# как часто панель опрашивает сетевые хранилища (сек)
share_interval: int = 60
@lru_cache
def get_settings() -> Settings:
return Settings()