import os from pathlib import Path from typing import Any from pydantic_settings import BaseSettings class Settings(BaseSettings): RUNTIME_ENV: str = "development" ENVIRONMENT: str = "development" DATABASE_URL: str = "mysql+pymysql://Adithiyan:Adithiyan$2025Mysql@127.0.0.1:3306/ifixkartecommerceadmin" CORE_DATABASE_URL: str = "mysql+pymysql://Adithiyan:Adithiyan$2025Mysql@127.0.0.1:3306/ifixkartecommerceadmin" CRM_DATABASE_URL: str = "mysql+pymysql://Adithiyan:Adithiyan$2025Mysql@127.0.0.1:3306/ifixkartcrm" COMMERCE_DATABASE_URL: str = "mysql+pymysql://Adithiyan:Adithiyan$2025Mysql@127.0.0.1:3306/ifixkartecommerce" JWT_PRIVATE_KEY_PATH: str = "jwt_private.pem" JWT_PUBLIC_KEY_PATH: str = "jwt_public.pem" ALGORITHM: str = "RS512" ACCESS_TOKEN_EXPIRE_MIN: int = 1440 REFRESH_TOKEN_EXPIRE_DAYS: int = 120 PROJECT_NAME: str = "iFixKart" MAX_FAILED_LOGIN: int = 5 LOCKOUT_MINUTES: int = 15 SECRET_KEY: str PUBLIC_API_KEY: str GOOGLE_CLIENT_ID: str = "" GOOGLE_CLIENT_SECRET: str = "" GOOGLE_REDIRECT_URI: str = "" RAZORPAY_KEY_ID: str = "rzp_test_TTUzPFYF0hRV89" RAZORPAY_KEY_SECRET: str = "74tmlSkS4qK7zQaH1zclQfeH" RAZORPAY_WEBHOOK_SECRET: str = "6TjjXgErPG3@ZpM" RAZORPAY_ENABLED: bool = True class Config: env_file = ".env" extra = "ignore" settings = Settings() def load_private_key_bytes(path=None): p = Path(path or settings.JWT_PRIVATE_KEY_PATH) if not p.is_absolute(): # resolve relative to project root (parent of app directory) project_root = Path(__file__).resolve().parents[3] p = project_root / p if not p.exists(): raise FileNotFoundError(f"Private key not found at {p}") return p.read_bytes() def load_public_key_bytes(path=None): p = Path(path or settings.JWT_PUBLIC_KEY_PATH) if not p.is_absolute(): # resolve relative to project root (parent of app directory) project_root = Path(__file__).resolve().parents[3] p = project_root / p if not p.exists(): raise FileNotFoundError(f"Public key not found at {p}") return p.read_bytes()