diff --git a/app/config.py b/app/config.py new file mode 100644 index 0000000..56baefb --- /dev/null +++ b/app/config.py @@ -0,0 +1,33 @@ +from pydantic import model_validator +from pydantic_settings import BaseSettings, SettingsConfigDict + + +class Settings(BaseSettings): + database_url: str = "sqlite:///./vault.db" # строка подключения к БД; + jwt_secret: str = "" # секрет для подписи JWT; + jwt_algorithm: str = "HS256" # по умолчанию `HS256`; + access_token_ttl_min: int = 60 # время жизни access-токена в минутах; + password_pepper: str = "" # глобальный «перец» для паролей; + password_min_length: int = 12 # минимальная длина пароля; + environment: str = "development" # служебные поля. + app_name: str = "Vault" # служебные поля. + + model_config = SettingsConfigDict( + env_file=".env", + env_file_encoding="utf-8", + extra="ignore", + ) + + @model_validator(mode="after") + def _require_secrets(self) -> "Settings": + missing = [ + name + for name in ("jwt_secret", "password_pepper") + if not getattr(self, name) + ] + if missing: + raise ValueError("Missing required settings: " + ", ".join(missing)) + return self + + +settings = Settings()