""" Application configuration management. Uses pydantic-settings for typed configuration with environment variable overrides. """ from pydantic_settings import BaseSettings from typing import Optional from functools import lru_cache class Settings(BaseSettings): """Application settings loaded from environment variables or .env file.""" # Application APP_NAME: str = "Cockatrice Web" APP_VERSION: str = "0.1.0" DEBUG: bool = False SECRET_KEY: str = "change-me-in-production" # Database DATABASE_URL: str = "postgresql+asyncpg://cockatrice:cockatrice@localhost:5432/cockatrice" # Redis REDIS_URL: str = "redis://localhost:6379/0" # JWT Configuration JWT_ALGORITHM: str = "HS256" JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 JWT_REFRESH_TOKEN_EXPIRE_DAYS: int = 7 # CORS CORS_ORIGINS: list[str] = ["http://localhost:3000", "http://localhost:8080"] # Email (for password reset, account activation) SMTP_HOST: Optional[str] = None SMTP_PORT: int = 587 SMTP_USER: Optional[str] = None SMTP_PASSWORD: Optional[str] = None EMAIL_FROM: Optional[str] = None # Security BCRYPT_ROUNDS: int = 12 MAX_LOGIN_ATTEMPTS: int = 5 LOGIN_BLOCK_MINUTES: int = 15 class Config: env_file = ".env" env_file_encoding = "utf-8" @lru_cache() def get_settings() -> Settings: """Get cached application settings.""" return Settings()