45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
import os
|
||
from dataclasses import dataclass, field
|
||
from functools import lru_cache
|
||
|
||
|
||
def _csv_env(name: str, default: list[str]) -> list[str]:
|
||
raw = os.getenv(name)
|
||
if not raw:
|
||
return default
|
||
return [item.strip() for item in raw.split(",") if item.strip()]
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class Settings:
|
||
app_name: str = os.getenv("APP_NAME", "Certificate Management System")
|
||
app_env: str = os.getenv("APP_ENV", "development")
|
||
database_url: str = os.getenv("DATABASE_URL", "sqlite:///./dev.db")
|
||
secret_key: str = os.getenv("SECRET_KEY", "change-me")
|
||
public_base_url: str = os.getenv("PUBLIC_BASE_URL", "http://localhost:8080")
|
||
certificate_no_secret: str = os.getenv("CERTIFICATE_NO_SECRET", "change-me")
|
||
data_root: str = os.getenv("DATA_ROOT", "/data/certificate-system")
|
||
cors_origins: list[str] = field(
|
||
default_factory=lambda: _csv_env("CORS_ORIGINS", ["http://localhost:5173", "http://localhost:8080"])
|
||
)
|
||
|
||
# 短信服务配置
|
||
# local=本地测试(验证码打印到终端),aliyun=阿里云短信
|
||
sms_mode: str = os.getenv("SMS_MODE", "local")
|
||
aliyun_access_key_id: str = os.getenv("ALIYUN_ACCESS_KEY_ID", "")
|
||
aliyun_access_key_secret: str = os.getenv("ALIYUN_ACCESS_KEY_SECRET", "")
|
||
aliyun_sms_sign_name: str = os.getenv("ALIYUN_SMS_SIGN_NAME", "")
|
||
aliyun_sms_template_code: str = os.getenv("ALIYUN_SMS_TEMPLATE_CODE", "")
|
||
|
||
# PDF配置
|
||
pdf_cache_days: int = int(os.getenv("PDF_CACHE_DAYS", "30"))
|
||
pdf_cleanup_days: int = int(os.getenv("PDF_CLEANUP_DAYS", "5"))
|
||
|
||
|
||
@lru_cache
|
||
def get_settings() -> Settings:
|
||
return Settings()
|
||
|
||
|
||
settings = get_settings()
|