Update token - 使用ST自动刷新AT
(
token_id: int,
request: UpdateTokenRequest,
token: str = Depends(verify_admin_token)
)
| 911 | |
| 912 | @router.put("/api/tokens/{token_id}") |
| 913 | async def update_token( |
| 914 | token_id: int, |
| 915 | request: UpdateTokenRequest, |
| 916 | token: str = Depends(verify_admin_token) |
| 917 | ): |
| 918 | """Update token - 使用ST自动刷新AT""" |
| 919 | try: |
| 920 | # 先ST转AT |
| 921 | result = await token_manager.flow_client.st_to_at(request.st) |
| 922 | at = result["access_token"] |
| 923 | expires = result.get("expires") |
| 924 | |
| 925 | # 解析过期时间 |
| 926 | from datetime import datetime |
| 927 | at_expires = None |
| 928 | if expires: |
| 929 | try: |
| 930 | at_expires = datetime.fromisoformat(expires.replace('Z', '+00:00')) |
| 931 | except: |
| 932 | pass |
| 933 | |
| 934 | # 更新token (包含AT、ST、AT过期时间、project_id和project_name) |
| 935 | await token_manager.update_token( |
| 936 | token_id=token_id, |
| 937 | st=request.st, |
| 938 | at=at, |
| 939 | at_expires=at_expires, # 🆕 更新AT过期时间 |
| 940 | project_id=request.project_id, |
| 941 | project_name=request.project_name, |
| 942 | remark=request.remark, |
| 943 | captcha_proxy_url=request.captcha_proxy_url.strip() if request.captcha_proxy_url is not None else None, |
| 944 | extension_route_key=request.extension_route_key.strip() if request.extension_route_key is not None else None, |
| 945 | image_enabled=request.image_enabled, |
| 946 | video_enabled=request.video_enabled, |
| 947 | image_concurrency=request.image_concurrency, |
| 948 | video_concurrency=request.video_concurrency, |
| 949 | protocol_mode=request.protocol_mode, |
| 950 | google_cookies=request.google_cookies, |
| 951 | login_account=request.login_account, |
| 952 | login_password=request.login_password, |
| 953 | proxy_url=request.proxy_url, |
| 954 | auto_refresh_enabled=request.auto_refresh_enabled, |
| 955 | refresh_interval_minutes=request.refresh_interval_minutes |
| 956 | ) |
| 957 | |
| 958 | # 热更新并发限制,确保管理台修改立即生效 |
| 959 | if concurrency_manager: |
| 960 | updated_token = await token_manager.get_token(token_id) |
| 961 | if updated_token: |
| 962 | await concurrency_manager.reset_token( |
| 963 | token_id, |
| 964 | image_concurrency=updated_token.image_concurrency, |
| 965 | video_concurrency=updated_token.video_concurrency |
| 966 | ) |
| 967 | |
| 968 | return {"success": True, "message": "Token更新成功"} |
| 969 | except Exception as e: |
| 970 | raise HTTPException(status_code=500, detail=str(e)) |
nothing calls this directly
no test coverage detected