config.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from typing import Any, Dict, List, Optional, Union
  2. from pydantic import AnyHttpUrl, validator
  3. from pydantic_settings import BaseSettings
  4. class Settings(BaseSettings):
  5. PROJECT_NAME: str = "Unified Authentication Platform"
  6. API_V1_STR: str = "/api/v1"
  7. # Database
  8. MYSQL_SERVER: str = "localhost"
  9. MYSQL_USER: str = "root"
  10. MYSQL_PASSWORD: str = "secret"
  11. MYSQL_DB: str = "uap_db"
  12. MYSQL_PORT: int = 3306
  13. DATABASE_URI: Optional[str] = None
  14. @validator("DATABASE_URI", pre=True)
  15. def assemble_db_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any:
  16. if isinstance(v, str):
  17. return v
  18. return f"mysql://{values.get('MYSQL_USER')}:{values.get('MYSQL_PASSWORD')}@{values.get('MYSQL_SERVER')}:{values.get('MYSQL_PORT')}/{values.get('MYSQL_DB')}"
  19. # Redis
  20. REDIS_HOST: str = "localhost"
  21. REDIS_PORT: int = 6379
  22. REDIS_DB: int = 0
  23. REDIS_PASSWORD: Optional[str] = None
  24. # Security
  25. SECRET_KEY: str = "change_me_in_production"
  26. ALGORITHM: str = "HS256"
  27. ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
  28. ACCESS_TOKEN_EXPIRE_MINUTES_LONG: int = 43200 # 30 days
  29. # CORS
  30. BACKEND_CORS_ORIGINS: List[AnyHttpUrl] = []
  31. @validator("BACKEND_CORS_ORIGINS", pre=True)
  32. def assemble_cors_origins(cls, v: Union[str, List[str]]) -> Union[List[str], str]:
  33. if isinstance(v, str) and not v.startswith("["):
  34. return [i.strip() for i in v.split(",")]
  35. elif isinstance(v, (list, str)):
  36. return v
  37. raise ValueError(v)
  38. # Captcha
  39. CAPTCHA_EXPIRE_SECONDS: int = 600
  40. # SMS
  41. # SMS_PROVIDER: str = "mock" # Options: "mock", "aliyun"
  42. SMS_PROVIDER: str = "aliyun"
  43. ALIYUN_ACCESS_KEY_ID: Optional[str] = "LTAI5tDScnqnCTKVPwLgHCqS"
  44. ALIYUN_ACCESS_KEY_SECRET: Optional[str] = "cRr1ThS29pycEiZ3nvCokZjswMEYP3"
  45. ALIYUN_SMS_SIGN_NAME: Optional[str] = "速通互联验证服务"
  46. ALIYUN_SMS_TEMPLATE_CODE: Optional[str] = "100001"
  47. # MinIO
  48. MINIO_ENDPOINT: str = "https://api.hnyunzhu.com:9004"
  49. MINIO_ACCESS_KEY: str = "1jC3nmjfWAyMGJ3pinbT"
  50. MINIO_SECRET_KEY: str = "6FHE9lzeQ6rZ3wIXSA9jGu8pGf49vgwT18NJ9XpO"
  51. MINIO_BUCKET_NAME: str = "unified-message-files"
  52. MINIO_DB_BACKUP_BUCKET_NAME: str = "unified-db-backups"
  53. MINIO_DISTRIBUTION_BUCKET_NAME: str = "unified-application-distribution"
  54. MINIO_SECURE: bool = False
  55. class Config:
  56. case_sensitive = True
  57. env_file = ".env"
  58. settings = Settings()