mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-03-20 03:46:40 +08:00
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
import logging
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from module.conf import settings
|
|
from module.models import APIResponse, Config
|
|
from module.security.api import UNAUTHORIZED, get_current_user
|
|
|
|
router = APIRouter(prefix="/config", tags=["config"])
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_SENSITIVE_KEYS = ("password", "api_key", "token", "secret")
|
|
|
|
|
|
def _sanitize_dict(d: dict) -> dict:
|
|
"""Recursively mask string values whose keys contain sensitive keywords."""
|
|
result = {}
|
|
for k, v in d.items():
|
|
if isinstance(v, dict):
|
|
result[k] = _sanitize_dict(v)
|
|
elif isinstance(v, str) and any(s in k.lower() for s in _SENSITIVE_KEYS):
|
|
result[k] = "********"
|
|
else:
|
|
result[k] = v
|
|
return result
|
|
|
|
|
|
@router.get("/get", dependencies=[Depends(get_current_user)])
|
|
async def get_config():
|
|
"""Return the current configuration with sensitive fields masked."""
|
|
return _sanitize_dict(settings.dict())
|
|
|
|
|
|
@router.patch(
|
|
"/update", response_model=APIResponse, dependencies=[Depends(get_current_user)]
|
|
)
|
|
async def update_config(config: Config):
|
|
"""Persist and reload configuration from the supplied payload."""
|
|
try:
|
|
settings.save(config_dict=config.dict())
|
|
settings.load()
|
|
# update_rss()
|
|
logger.info("Config updated")
|
|
return JSONResponse(
|
|
status_code=200,
|
|
content={
|
|
"msg_en": "Update config successfully.",
|
|
"msg_zh": "更新配置成功。",
|
|
},
|
|
)
|
|
except Exception as e:
|
|
logger.warning(e)
|
|
return JSONResponse(
|
|
status_code=406,
|
|
content={"msg_en": "Update config failed.", "msg_zh": "更新配置失败。"},
|
|
)
|