Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 47 additions & 40 deletions backend/core/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,27 +19,8 @@ class Settings(BaseSettings):
case_sensitive=True,
)

# .env 环境
ENVIRONMENT: Literal['dev', 'pro']

# .env 数据库
DATABASE_TYPE: Literal['mysql', 'postgresql']
DATABASE_HOST: str
DATABASE_PORT: int
DATABASE_USER: str
DATABASE_PASSWORD: str

# .env Redis
REDIS_HOST: str
REDIS_PORT: int
REDIS_PASSWORD: str
REDIS_DATABASE: int

# .env Token
TOKEN_SECRET_KEY: str # 密钥 secrets.token_urlsafe(32)

# .env 操作日志加密密钥
OPERA_LOG_ENCRYPT_SECRET_KEY: str # 密钥 os.urandom(32), 需使用 bytes.hex() 方法转换为 str
# .env 当前环境
ENVIRONMENT: Literal['dev', 'prod']

# FastAPI
FASTAPI_API_V1_PATH: str = '/api/v1'
Expand All @@ -51,15 +32,31 @@ class Settings(BaseSettings):
FASTAPI_OPENAPI_URL: str | None = '/openapi'
FASTAPI_STATIC_FILES: bool = True

# .env 数据库
DATABASE_TYPE: Literal['mysql', 'postgresql']
DATABASE_HOST: str
DATABASE_PORT: int
DATABASE_USER: str
DATABASE_PASSWORD: str

# 数据库
DATABASE_ECHO: bool | Literal['debug'] = False
DATABASE_POOL_ECHO: bool | Literal['debug'] = False
DATABASE_SCHEMA: str = 'fba'
DATABASE_CHARSET: str = 'utf8mb4'

# .env Redis
REDIS_HOST: str
REDIS_PORT: int
REDIS_PASSWORD: str
REDIS_DATABASE: int

# Redis
REDIS_TIMEOUT: int = 5

# .env Token
TOKEN_SECRET_KEY: str # 密钥 secrets.token_urlsafe(32)

# Token
TOKEN_ALGORITHM: str = 'HS256'
TOKEN_EXPIRE_SECONDS: int = 60 * 60 * 24 # 1 天
Expand Down Expand Up @@ -89,7 +86,11 @@ class Settings(BaseSettings):
COOKIE_REFRESH_TOKEN_KEY: str = 'fba_refresh_token'
COOKIE_REFRESH_TOKEN_EXPIRE_SECONDS: int = 60 * 60 * 24 * 7 # 7 天

# 数据权限配置
# 验证码
CAPTCHA_LOGIN_REDIS_PREFIX: str = 'fba:login:captcha'
CAPTCHA_LOGIN_EXPIRE_SECONDS: int = 60 * 5 # 3 分钟

# 数据权限
DATA_PERMISSION_MODELS: dict[str, str] = { # 允许进行数据过滤的 SQLA 模型,它必须以模块字符串的方式定义
'部门': 'backend.app.admin.model.Dept',
}
Expand Down Expand Up @@ -162,6 +163,9 @@ class Settings(BaseSettings):
LOG_ACCESS_FILENAME: str = 'fba_access.log'
LOG_ERROR_FILENAME: str = 'fba_error.log'

# .env 操作日志
OPERA_LOG_ENCRYPT_SECRET_KEY: str # 密钥 os.urandom(32), 需使用 bytes.hex() 方法转换为 str

# 操作日志
OPERA_LOG_PATH_EXCLUDE: list[str] = [
'/favicon.ico',
Expand All @@ -187,21 +191,9 @@ class Settings(BaseSettings):
PLUGIN_PIP_INDEX_URL: str = 'https://mirrors.aliyun.com/pypi/simple/'
PLUGIN_REDIS_PREFIX: str = 'fba:plugin'

# App Admin
# .env OAuth2
OAUTH2_GITHUB_CLIENT_ID: str
OAUTH2_GITHUB_CLIENT_SECRET: str
OAUTH2_LINUX_DO_CLIENT_ID: str
OAUTH2_LINUX_DO_CLIENT_SECRET: str

# OAuth2
OAUTH2_FRONTEND_REDIRECT_URI: str = 'http://localhost:5173/oauth2/callback'

# 验证码
CAPTCHA_LOGIN_REDIS_PREFIX: str = 'fba:login:captcha'
CAPTCHA_LOGIN_EXPIRE_SECONDS: int = 60 * 5 # 3 分钟

# App Task
##################################################
# [ App ] task
##################################################
# .env Redis
CELERY_BROKER_REDIS_DATABASE: int

Expand All @@ -217,18 +209,33 @@ class Settings(BaseSettings):
CELERY_REDIS_PREFIX: str = 'fba:celery'
CELERY_TASK_MAX_RETRIES: int = 5

# Plugin Code Generator
##################################################
# [ Plugin ] code_generator
##################################################
CODE_GENERATOR_DOWNLOAD_ZIP_FILENAME: str = 'fba_generator'

##################################################
# [ Plugin ] oauth2
##################################################
# .env
OAUTH2_GITHUB_CLIENT_ID: str
OAUTH2_GITHUB_CLIENT_SECRET: str
OAUTH2_LINUX_DO_CLIENT_ID: str
OAUTH2_LINUX_DO_CLIENT_SECRET: str

# 基础配置
OAUTH2_FRONTEND_REDIRECT_URI: str = 'http://localhost:5173/oauth2/callback'

@model_validator(mode='before')
@classmethod
def check_env(cls, values: Any) -> Any:
"""检查环境变量"""
if values.get('ENVIRONMENT') == 'pro':
if values.get('ENVIRONMENT') == 'prod':
# FastAPI
values['FASTAPI_OPENAPI_URL'] = None
values['FASTAPI_STATIC_FILES'] = False
# Task

# task
values['CELERY_BROKER'] = 'rabbitmq'

return values
Expand Down