from typing import Literal from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): """Application settings.""" model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", env_ignore_empty=True, extra="ignore", ) HOST: str = "localhost" PORT: int = 8000 RELOAD: bool = True DATABASE_URL: str = "sqlite+aiosqlite:///data/soundboard.db" DATABASE_ECHO: bool = False LOG_LEVEL: str = "info" LOG_FILE: str = "logs/app.log" LOG_MAX_SIZE: int = 10 * 1024 * 1024 LOG_BACKUP_COUNT: int = 5 LOG_FORMAT: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" # JWT Configuration JWT_SECRET_KEY: str = ( "your-secret-key-change-in-production" # noqa: S105 default value if none set in .env ) JWT_ALGORITHM: str = "HS256" JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = 15 # Shorter-lived access token JWT_REFRESH_TOKEN_EXPIRE_DAYS: int = 7 # Longer-lived refresh token # Cookie Configuration COOKIE_SECURE: bool = True # Set to False for development without HTTPS COOKIE_SAMESITE: Literal["strict", "lax", "none"] = "lax" settings = Settings()