samaan / utils /runtime.py
Copilot Sync Bot
Sync backend from main branch
b953c2d
from __future__ import annotations
import os
from typing import List
def env_flag(name: str, default: bool = False) -> bool:
value = os.getenv(name)
if value is None:
return default
return value.strip().lower() in {"1", "true", "yes", "on"}
def is_production() -> bool:
return os.getenv("SAMAAN_ENV", os.getenv("APP_ENV", "development")).strip().lower() == "production"
def get_secret_key() -> str:
secret = os.getenv("SECRET_KEY")
if secret:
return secret
if is_production():
raise RuntimeError("SECRET_KEY must be set in production")
return "samaan-secret-key-for-development-only"
def get_database_url() -> str:
return os.getenv("DATABASE_URL", os.getenv("SQLALCHEMY_DATABASE_URL", "sqlite:///./samaan.db"))
def get_cors_origins() -> List[str]:
origins = os.getenv("ALLOWED_ORIGINS", "")
values = [origin.strip() for origin in origins.split(",") if origin.strip()]
if values:
return values
fallback = [origin.strip() for origin in os.getenv("FRONTEND_URL", "").split(",") if origin.strip()]
if fallback:
return fallback
if is_production():
return []
return ["http://localhost:3000", "http://localhost:5173", "http://127.0.0.1:5173"]
def get_cors_origin_regex() -> str | None:
if os.getenv("ALLOWED_ORIGINS", "").strip():
return None
if is_production():
return r"https://.*\.vercel\.app$"
return None