添加虎牙短信登录
This commit is contained in:
@@ -11,7 +11,13 @@ from fastapi.responses import StreamingResponse
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
|
||||
from core.huya import HuyaCredentialError, HuyaLoginError, login_huya_password
|
||||
from core.huya import (
|
||||
HuyaCredentialError,
|
||||
HuyaLoginError,
|
||||
login_huya_password,
|
||||
login_huya_sms,
|
||||
send_huya_sms_code,
|
||||
)
|
||||
from core.huya.cookie_utils import normalize_huya_cookie
|
||||
|
||||
from ..database import SessionLocal, get_db
|
||||
@@ -31,6 +37,8 @@ from ..schemas import (
|
||||
HuyaPasswordLoginRequest,
|
||||
HuyaPasswordLoginSelectedRequest,
|
||||
HuyaRechargeGoodsOut,
|
||||
HuyaSmsCodeRequest,
|
||||
HuyaSmsLoginRequest,
|
||||
HuyaTaskBatchRequest,
|
||||
HuyaTaskOut,
|
||||
)
|
||||
@@ -258,6 +266,77 @@ def password_login_account(
|
||||
}
|
||||
|
||||
|
||||
@router.post("/accounts/sms-code")
|
||||
def send_sms_code(
|
||||
req: HuyaSmsCodeRequest,
|
||||
current: User = Depends(get_current_user),
|
||||
):
|
||||
"""发送虎牙短信验证码,返回提交登录所需 state。"""
|
||||
_require_huya_perm(current, "huya:import")
|
||||
try:
|
||||
result = send_huya_sms_code(
|
||||
phone=req.phone.strip(),
|
||||
cookie=req.cookie.strip() or None,
|
||||
)
|
||||
except HuyaLoginError as exc:
|
||||
raise HTTPException(status_code=502, detail=str(exc)) from exc
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=502, detail=f"虎牙短信发码失败: {exc}") from exc
|
||||
|
||||
if not result.success or not result.state:
|
||||
raise HTTPException(status_code=502, detail=result.message or "虎牙短信发码失败")
|
||||
|
||||
return {
|
||||
"message": result.message or "短信已发送",
|
||||
"success": True,
|
||||
"state": result.state,
|
||||
"sdid": result.sdid,
|
||||
"context": result.context,
|
||||
"request_id": result.request_id,
|
||||
}
|
||||
|
||||
|
||||
@router.post("/accounts/sms-login")
|
||||
def sms_login_account(
|
||||
req: HuyaSmsLoginRequest,
|
||||
db: Session = Depends(get_db),
|
||||
current: User = Depends(get_current_user),
|
||||
):
|
||||
"""提交虎牙短信验证码登录,成功后保存 Cookie。"""
|
||||
_require_huya_perm(current, "huya:import")
|
||||
try:
|
||||
result = login_huya_sms(
|
||||
authcode=req.authcode.strip(),
|
||||
state=req.state.strip(),
|
||||
phone=req.phone.strip(),
|
||||
)
|
||||
except HuyaLoginError as exc:
|
||||
raise HTTPException(status_code=502, detail=str(exc)) from exc
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=502, detail=f"虎牙短信登录失败: {exc}") from exc
|
||||
|
||||
if not result.success or not result.cookie:
|
||||
raise HTTPException(status_code=502, detail=result.message or "虎牙短信登录失败")
|
||||
|
||||
try:
|
||||
account = upsert_huya_cookie(db, result.cookie, tag=req.tag, username_hint="")
|
||||
phone = (req.phone or "").strip()
|
||||
if phone:
|
||||
account.game_phone = phone
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
db.commit()
|
||||
db.refresh(account)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(status_code=502, detail=str(exc)) from exc
|
||||
|
||||
return {
|
||||
"message": "登录成功,Cookie 已保存",
|
||||
"success": True,
|
||||
"account": _account_out(account),
|
||||
"sdid": result.sdid,
|
||||
}
|
||||
|
||||
|
||||
@router.post("/accounts/password-login/selected")
|
||||
def password_login_selected_accounts(
|
||||
req: HuyaPasswordLoginSelectedRequest,
|
||||
|
||||
@@ -183,6 +183,20 @@ class HuyaPasswordLoginRequest(BaseModel):
|
||||
cookie: str = ""
|
||||
|
||||
|
||||
class HuyaSmsCodeRequest(BaseModel):
|
||||
"""发送虎牙短信验证码。"""
|
||||
phone: str = Field(..., min_length=5, max_length=32)
|
||||
cookie: str = ""
|
||||
|
||||
|
||||
class HuyaSmsLoginRequest(BaseModel):
|
||||
"""提交虎牙短信验证码并保存 Cookie。"""
|
||||
authcode: str = Field(..., min_length=4, max_length=8)
|
||||
state: str = Field(..., min_length=1)
|
||||
phone: str = ""
|
||||
tag: str = ""
|
||||
|
||||
|
||||
class HuyaPasswordAccountImport(BaseModel):
|
||||
"""导入虎牙账号密码,稍后再选择登录。"""
|
||||
text: str = Field(..., min_length=1)
|
||||
|
||||
Reference in New Issue
Block a user