2026-04-25 20:43:37 +12:00
|
|
|
import os
|
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
|
|
|
|
|
2026-04-27 21:53:36 +12:00
|
|
|
DEFAULT_CORS_ALLOW_ORIGIN_REGEX = (
|
|
|
|
|
r"^https?://("
|
|
|
|
|
r"localhost|127\.0\.0\.1|"
|
|
|
|
|
r"10\.\d{1,3}\.\d{1,3}\.\d{1,3}|"
|
|
|
|
|
r"192\.168\.\d{1,3}\.\d{1,3}|"
|
|
|
|
|
r"172\.(1[6-9]|2\d|3[0-1])\.\d{1,3}\.\d{1,3}"
|
|
|
|
|
r")(:\d+)?$"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _parse_csv_env(value: str) -> tuple[str, ...]:
|
|
|
|
|
return tuple(part.strip() for part in value.split(",") if part.strip())
|
|
|
|
|
|
|
|
|
|
|
2026-04-25 20:43:37 +12:00
|
|
|
@dataclass(frozen=True)
|
|
|
|
|
class Settings:
|
|
|
|
|
app_name: str
|
|
|
|
|
database_url: str
|
2026-04-25 22:51:36 +12:00
|
|
|
client_name: str
|
|
|
|
|
client_email: str
|
|
|
|
|
client_password: str
|
|
|
|
|
client_tenant_id: str
|
|
|
|
|
admin_name: str
|
|
|
|
|
admin_email: str
|
|
|
|
|
admin_password: str
|
|
|
|
|
auth_secret: str
|
2026-04-27 21:53:36 +12:00
|
|
|
cors_allow_origins: tuple[str, ...]
|
|
|
|
|
cors_allow_origin_regex: str
|
2026-04-25 20:43:37 +12:00
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def from_env(cls) -> "Settings":
|
|
|
|
|
return cls(
|
|
|
|
|
app_name=os.getenv("APP_NAME", "Data Entry App API"),
|
|
|
|
|
database_url=os.getenv("DATABASE_URL", "sqlite:///./data_entry_app.db"),
|
2026-04-25 22:51:36 +12:00
|
|
|
client_name=os.getenv("CLIENT_NAME", "Hunter Premium Produce"),
|
|
|
|
|
client_email=os.getenv("CLIENT_EMAIL", "operator@example.com"),
|
|
|
|
|
client_password=os.getenv("CLIENT_PASSWORD", "changeme"),
|
|
|
|
|
client_tenant_id=os.getenv("CLIENT_TENANT_ID", "hunter-premium-produce"),
|
|
|
|
|
admin_name=os.getenv("ADMIN_NAME", "Lean 101"),
|
|
|
|
|
admin_email=os.getenv("ADMIN_EMAIL", "admin@lean101.local"),
|
|
|
|
|
admin_password=os.getenv("ADMIN_PASSWORD", "lean101-admin"),
|
|
|
|
|
auth_secret=os.getenv("AUTH_SECRET", "lean-101-local-dev-secret"),
|
2026-04-27 21:53:36 +12:00
|
|
|
cors_allow_origins=_parse_csv_env(
|
|
|
|
|
os.getenv(
|
|
|
|
|
"CORS_ALLOW_ORIGINS",
|
|
|
|
|
"http://localhost:5173,http://localhost:5174,http://127.0.0.1:5173,http://127.0.0.1:5174",
|
|
|
|
|
)
|
|
|
|
|
),
|
|
|
|
|
cors_allow_origin_regex=os.getenv("CORS_ALLOW_ORIGIN_REGEX", DEFAULT_CORS_ALLOW_ORIGIN_REGEX),
|
2026-04-25 20:43:37 +12:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
settings = Settings.from_env()
|