File size: 3,356 Bytes
f44391a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""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)