# app/config.py import os from pydantic_settings import BaseSettings from dotenv import load_dotenv import logging load_dotenv() logger = logging.getLogger(__name__) class Settings(BaseSettings): DATABASE_URL: str | None = None GEMINI_API_KEY: str | None = None # --- JWT Settings --- # Generate a strong secret key using: openssl rand -hex 32 SECRET_KEY: str = "a_very_insecure_default_secret_key_replace_me" # !! MUST BE CHANGED IN PRODUCTION !! ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 30 # Default token lifetime: 30 minutes class Config: env_file = ".env" env_file_encoding = 'utf-8' extra = "ignore" settings = Settings() # Validation for critical settings if settings.DATABASE_URL is None: print("Warning: DATABASE_URL environment variable not set.") # raise ValueError("DATABASE_URL environment variable not set.") # CRITICAL: Check if the default secret key is being used if settings.SECRET_KEY == "a_very_insecure_default_secret_key_replace_me": print("*" * 80) print("WARNING: Using default insecure SECRET_KEY. Please generate a strong key and set it in the environment variables!") print("Use: openssl rand -hex 32") print("*" * 80) # Consider raising an error in a production environment check # if os.getenv("ENVIRONMENT") == "production": # raise ValueError("Default SECRET_KEY is not allowed in production!") if settings.GEMINI_API_KEY is None: print.error("CRITICAL: GEMINI_API_KEY environment variable not set. Gemini features will be unavailable.") # You might raise an error here if Gemini is essential for startup # raise ValueError("GEMINI_API_KEY must be set.") else: # Optional: Log partial key for confirmation (avoid logging full key) logger.info(f"GEMINI_API_KEY loaded (starts with: {settings.GEMINI_API_KEY[:4]}...).")