MukeshKapoor25's picture
remember me
9b51d59
from dotenv import load_dotenv
import os
load_dotenv()
class Settings:
# MongoDB
MONGO_URI: str = os.getenv("MONGO_URI")
DB_NAME: str = os.getenv("DB_NAME")
# Redis
CACHE_URI: str = os.getenv("CACHE_URI")
CACHE_K: str = os.getenv("CACHE_K")
# JWT (Unified across services)
# Prefer JWT_* envs; fall back to legacy names to ensure compatibility
JWT_SECRET_KEY: str = os.getenv("JWT_SECRET_KEY") or os.getenv("SECRET_KEY", "B00Kmyservice@7")
JWT_ALGORITHM: str = os.getenv("JWT_ALGORITHM") or os.getenv("ALGORITHM", "HS256")
JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = int(
os.getenv("JWT_ACCESS_TOKEN_EXPIRE_MINUTES", os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "43200"))
)
JWT_REFRESH_TOKEN_EXPIRE_DAYS: int = int(
os.getenv("JWT_REFRESH_TOKEN_EXPIRE_DAYS", os.getenv("REFRESH_TOKEN_EXPIRE_DAYS", "7"))
)
JWT_TEMP_TOKEN_EXPIRE_MINUTES: int = int(
os.getenv("JWT_TEMP_TOKEN_EXPIRE_MINUTES", os.getenv("TEMP_TOKEN_EXPIRE_MINUTES", "10"))
)
JWT_REMEMBER_ME_EXPIRE_DAYS: int = int(
os.getenv("JWT_REMEMBER_ME_EXPIRE_DAYS", "30") # 30 days for remember me
)
# Backward compatibility: keep legacy attributes pointing to unified values
SECRET_KEY: str = JWT_SECRET_KEY
ALGORITHM: str = JWT_ALGORITHM
# Twilio SMS
TWILIO_ACCOUNT_SID: str = os.getenv("TWILIO_ACCOUNT_SID")
TWILIO_AUTH_TOKEN: str = os.getenv("TWILIO_AUTH_TOKEN")
TWILIO_SMS_FROM: str = os.getenv("TWILIO_SMS_FROM")
# SMTP Email
SMTP_HOST: str = os.getenv("SMTP_HOST")
SMTP_PORT: int = int(os.getenv("SMTP_PORT", "587"))
SMTP_USER: str = os.getenv("SMTP_USER")
SMTP_PASS: str = os.getenv("SMTP_PASS")
SMTP_FROM: str = os.getenv("SMTP_FROM")
# OAuth Providers
GOOGLE_CLIENT_ID: str = os.getenv("GOOGLE_CLIENT_ID")
APPLE_AUDIENCE: str = os.getenv("APPLE_AUDIENCE")
FACEBOOK_APP_ID: str = os.getenv("FACEBOOK_APP_ID")
FACEBOOK_APP_SECRET: str = os.getenv("FACEBOOK_APP_SECRET")
# Local testing: bypass external OAuth verification when enabled
OAUTH_TEST_MODE: bool = os.getenv("OAUTH_TEST_MODE", "false").lower() == "true"
# Security Settings
MAX_LOGIN_ATTEMPTS: int = int(os.getenv("MAX_LOGIN_ATTEMPTS", "5"))
ACCOUNT_LOCK_DURATION: int = int(os.getenv("ACCOUNT_LOCK_DURATION", "900")) # 15 minutes
OTP_VALIDITY_MINUTES: int = int(os.getenv("OTP_VALIDITY_MINUTES", "5"))
IP_RATE_LIMIT_MAX: int = int(os.getenv("IP_RATE_LIMIT_MAX", "10"))
IP_RATE_LIMIT_WINDOW: int = int(os.getenv("IP_RATE_LIMIT_WINDOW", "3600")) # 1 hour
def __post_init__(self):
if not self.MONGO_URI or not self.DB_NAME:
raise ValueError("MongoDB URI or DB_NAME not configured.")
if not self.CACHE_URI or not self.CACHE_K:
raise ValueError("Redis URI or password (CACHE_K) not configured.")
settings = Settings()