"""Configuration settings for OAuth backend""" from typing import List, Optional from pydantic_settings import BaseSettings from pydantic import Field import json class Settings(BaseSettings): # Application environment: str = Field(default="dev", env="ENVIRONMENT") api_prefix: str = Field(default="/api/v1", env="API_PREFIX") secret_key: str = Field(..., env="SECRET_KEY") # MongoDB mongodb_url: str = Field(..., env="MONGODB_URL") database_name: str = Field(default="oauth_db", env="DATABASE_NAME") # Redis redis_url: str = Field(..., env="REDIS_URL") redis_db: int = Field(default=0, env="REDIS_DB") # JWT jwt_algorithm: str = Field(default="HS256", env="JWT_ALGORITHM") jwt_access_token_expire_minutes: int = Field(default=30, env="JWT_ACCESS_TOKEN_EXPIRE_MINUTES") jwt_refresh_token_expire_days: int = Field(default=7, env="JWT_REFRESH_TOKEN_EXPIRE_DAYS") # CORS cors_origins: List[str] = Field(default=["http://localhost:5173"], env="CORS_ORIGINS") cors_allow_credentials: bool = Field(default=True, env="CORS_ALLOW_CREDENTIALS") # Rate Limiting rate_limit_requests: int = Field(default=100, env="RATE_LIMIT_REQUESTS") rate_limit_period: int = Field(default=60, env="RATE_LIMIT_PERIOD") # Logging log_level: str = Field(default="INFO", env="LOG_LEVEL") log_path: str = Field(default="/var/log/oauth", env="LOG_PATH") # Admin admin_email: Optional[str] = Field(default="admin@oauth.local", env="ADMIN_EMAIL") admin_password: Optional[str] = Field(default="admin123", env="ADMIN_PASSWORD") # Session session_secret_key: str = Field(default="session-secret-key", env="SESSION_SECRET_KEY") session_cookie_name: str = Field(default="oauth_session", env="SESSION_COOKIE_NAME") session_expire_minutes: int = Field(default=1440, env="SESSION_EXPIRE_MINUTES") class Config: env_file = ".env" env_file_encoding = "utf-8" case_sensitive = False @classmethod def parse_env_var(cls, field_name: str, raw_val: str): if field_name == "cors_origins": return json.loads(raw_val) if isinstance(raw_val, str) else raw_val return raw_val # Create settings instance settings = Settings()