feat(site): add POST /site/cookie/{site_id} endpoint for updating site Cookie&UA via request body

- Introduce SiteCookieUpdate schema for structured cookie update requests
- Add POST endpoint to update site Cookie&UA using JSON body
- Refactor cookie update logic into shared _update_site_cookie function
- Update SKILL.md to document new endpoint and endpoint count
- Add tests for both POST and legacy GET cookie update endpoints
This commit is contained in:
jxxghp
2026-05-31 09:11:09 +08:00
parent ac09ce5230
commit 16ada1a6c4
4 changed files with 139 additions and 14 deletions

View File

@@ -26,6 +26,7 @@ from app.db.user_oper import (
get_current_active_superuser_async,
)
from app.helper.sites import SitesHelper # noqa
from app.log import logger
from app.scheduler import Scheduler
from app.schemas.types import SystemConfigKey, EventType
from app.utils.string import StringUtils
@@ -161,6 +162,61 @@ async def update_sites_priority(
return schemas.Response(success=True)
def _update_site_cookie(
site_id: int,
username: str,
password: str,
code: Optional[str],
db: Session,
) -> schemas.Response:
"""
执行站点 Cookie 与 UA 更新。
:param site_id: 站点编号
:param username: 站点登录用户名
:param password: 站点登录密码
:param code: 二步验证码或密钥
:param db: 数据库会话
:return: 更新结果
"""
site_info = Site.get(db, site_id)
if not site_info:
raise HTTPException(
status_code=404,
detail=f"站点 {site_id} 不存在!",
)
logger.info(f"开始更新站点【{site_info.name}】Cookie&UA")
state, message = SiteChain().update_cookie(
site_info=site_info, username=username, password=password, two_step_code=code
)
if state:
logger.info(f"站点【{site_info.name}】Cookie&UA更新成功")
else:
logger.error(f"站点【{site_info.name}】Cookie&UA更新失败{message}")
return schemas.Response(success=state, message=message)
@router.post(
"/cookie/{site_id}", summary="更新站点Cookie&UA", response_model=schemas.Response
)
def update_cookie_by_body(
site_id: int,
site_cookie_update: schemas.SiteCookieUpdate,
db: Session = Depends(get_db),
_: User = Depends(get_current_active_superuser),
) -> Any:
"""
使用请求体中的用户密码更新站点Cookie
"""
return _update_site_cookie(
site_id=site_id,
username=site_cookie_update.username,
password=site_cookie_update.password,
code=site_cookie_update.code,
db=db,
)
@router.get(
"/cookie/{site_id}", summary="更新站点Cookie&UA", response_model=schemas.Response
)
@@ -175,18 +231,13 @@ def update_cookie(
"""
使用用户密码更新站点Cookie
"""
# 查询站点
site_info = Site.get(db, site_id)
if not site_info:
raise HTTPException(
status_code=404,
detail=f"站点 {site_id} 不存在!",
)
# 更新Cookie
state, message = SiteChain().update_cookie(
site_info=site_info, username=username, password=password, two_step_code=code
return _update_site_cookie(
site_id=site_id,
username=username,
password=password,
code=code,
db=db,
)
return schemas.Response(success=state, message=message)
@router.post(