"""Настройки Synapse. Всё из окружения (.env), никаких секретов в коде."""
from functools import lru_cache
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict
BASE_DIR = Path(__file__).resolve().parent.parent
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
app_name: str = "Gnexus Synapse"
database_url: str = "postgresql+psycopg://synapse:synapse@localhost:5432/synapse"
redis_url: str = "redis://localhost:6379/0"
# gnexus-auth (SSO). Пока клиент не зарегистрирован на сервере auth,
# здесь заглушки (не пустые — валидатор GAuthConfig требует непустые).
gauth_base_url: str = "https://192.168.1.167"
gauth_client_id: str = "set-me"
gauth_client_secret: str = "set-me"
gauth_redirect_uri: str = "https://synapse.localhost/oauth/callback"
# SPA лежит в образе рядом с приложением; в dev используется vite-сервер.
spa_dist_dir: Path = BASE_DIR / "spa_static"
# CORS для dev-режима (vite :5173); в проде SPA раздаётся с того же origin.
cors_origins: list[str] = ["http://localhost:5173"]
def gauth_configured(self) -> bool:
return self.gauth_client_id != "set-me" and self.gauth_client_secret != "set-me"
@lru_cache
def get_settings() -> Settings:
return Settings()