fix(huya): 优化账号密码导入交互并将导入类型严格限制为四段格式
- 交互优化:将账号标签选择器移至弹窗顶部,避免下拉列表向下展开时遮挡底部的'确定'/'导入'按钮 - 格式限制:严格限制仅允许'账号----密码----手机号----接码链接'四段格式导入 - 前后端校验:前端逐行校验格式并提示具体错误行号,后端限制 require_four_segments=True 兜底
This commit is contained in:
@@ -136,8 +136,13 @@ def _looks_like_url(value: str) -> bool:
|
||||
return parsed.scheme in {"http", "https"} and bool(parsed.netloc)
|
||||
|
||||
|
||||
def split_huya_password_line(line: str) -> HuyaPasswordLine | None:
|
||||
"""拆分虎牙账号密码行,兼容账号----密码----手机号----验证码链接。"""
|
||||
def split_huya_password_line(
|
||||
line: str, require_four_segments: bool = False
|
||||
) -> HuyaPasswordLine | None:
|
||||
"""拆分虎牙账号密码行,兼容账号----密码----手机号----验证码链接。
|
||||
|
||||
若 require_four_segments 为 True,则严格限制必须包含手机号和有效接码链接。
|
||||
"""
|
||||
raw = (line or "").strip()
|
||||
if not raw or raw.startswith("#"):
|
||||
return None
|
||||
@@ -174,6 +179,10 @@ def split_huya_password_line(line: str) -> HuyaPasswordLine | None:
|
||||
cookie = "----".join(extra)
|
||||
if not username or not password:
|
||||
return None
|
||||
if require_four_segments and (
|
||||
not phone or not sms_url or not _looks_like_url(sms_url)
|
||||
):
|
||||
return None
|
||||
return HuyaPasswordLine(
|
||||
username=username,
|
||||
password=password,
|
||||
@@ -184,15 +193,23 @@ def split_huya_password_line(line: str) -> HuyaPasswordLine | None:
|
||||
|
||||
|
||||
def import_huya_password_accounts(
|
||||
db: Session, text: str, tag: str = ""
|
||||
db: Session,
|
||||
text: str,
|
||||
tag: str = "",
|
||||
require_four_segments: bool = True,
|
||||
) -> tuple[int, int]:
|
||||
"""导入虎牙账号密码,返回 (导入/更新数, 跳过数)。"""
|
||||
"""导入虎牙账号密码,返回 (导入/更新数, 跳过数)。
|
||||
|
||||
默认仅允许四段格式(账号----密码----手机号----接码链接)。
|
||||
"""
|
||||
created_or_updated = 0
|
||||
skipped = 0
|
||||
tag = (tag or "").strip()
|
||||
|
||||
for line in (text or "").splitlines():
|
||||
parsed = split_huya_password_line(line)
|
||||
parsed = split_huya_password_line(
|
||||
line, require_four_segments=require_four_segments
|
||||
)
|
||||
if not parsed:
|
||||
if line.strip():
|
||||
skipped += 1
|
||||
|
||||
Reference in New Issue
Block a user