"""OmniParse AI — Configuration & Secrets. All sensitive values from env vars.""" import os # ── API Keys ──────────────────────────────────────────────────────────────── HF_TOKEN = os.environ.get("HF_TOKEN") GROQ_API_KEY = os.environ.get("GROQ_API_KEY") SUPABASE_URL = os.environ.get("SUPABASE_URL") SUPABASE_KEY = os.environ.get("SUPABASE_KEY") GOOGLE_VISION_KEY = os.environ.get("GOOGLE_VISION_KEY") STRIPE_SECRET_KEY = os.environ.get("STRIPE_SECRET_KEY") STRIPE_PRICE_BASIC = os.environ.get("STRIPE_PRICE_BASIC") STRIPE_PRICE_PRO = os.environ.get("STRIPE_PRICE_PRO") STRIPE_PRICE_ENTERPRISE = os.environ.get("STRIPE_PRICE_ENTERPRISE") STRIPE_WEBHOOK_SECRET = os.environ.get("STRIPE_WEBHOOK_SECRET") APP_URL = os.environ.get("APP_URL", "http://localhost:7860") # ── Session & Cookies ─────────────────────────────────────────────────────── SESSION_TTL_HOURS = 168 # 7 days COOKIE_NAME = "op_sid" COOKIE_SECURE = os.environ.get("COOKIE_SECURE", "false").lower() == "true" COOKIE_HTTPONLY = True COOKIE_SAMESITE = "lax" # ── Password Policy ───────────────────────────────────────────────────────── BCRYPT_ROUNDS = 12 MIN_PASSWORD_LENGTH = 10 REQUIRE_MIXED_CASE = True REQUIRE_DIGIT = True REQUIRE_SPECIAL = True BANNED_PASSWORDS = { "password", "1234567890", "qwerty12345", "admin12345", "letmein123", "welcome123", "monkey1234", "dragon1234", "password123", "omniparse123", "invoice1234", "changeme123", } # ── File Upload Limits ────────────────────────────────────────────────────── MAX_FILE_SIZE_MB = 20 MAX_FILES_PER_REQ = 10 # ── Rate Limits ───────────────────────────────────────────────────────────── RATE_GLOBAL = "200/minute" RATE_AUTH = "10/minute" RATE_UPLOAD = "30/minute" RATE_API = "60/minute" # ── Plans ─────────────────────────────────────────────────────────────────── PLAN_LIMITS = {"free": 20, "basic": 200, "pro": 2000, "enterprise": float("inf")} PLAN_LABELS = {"free": "Free", "basic": "Basic", "pro": "Pro", "enterprise": "Enterprise"} PLAN_PRICES = {"free": 0, "basic": 29, "pro": 129, "enterprise": 499} PLAN_PRICE_IDS = { "basic": STRIPE_PRICE_BASIC, "pro": STRIPE_PRICE_PRO, "enterprise": STRIPE_PRICE_ENTERPRISE, } # ── Database ──────────────────────────────────────────────────────────────── SQLITE_PATH = os.environ.get("SQLITE_PATH", "omniparse.db") USE_SUPABASE = bool(SUPABASE_URL and SUPABASE_KEY)