Files
SMANAGE/_api_backup/TempLateAPI/GERP/API/TwoFactorAuthentication/Setup.api
T
2026-06-16 11:55:14 +08:00

49 lines
1.4 KiB
Plaintext

from PDAPI import *
TOTP_CONFIG = {
"digits": 6,
"interval": 30,
}
__metadata__ = {
"methods": ["POST"],
"blueprint": "GERP",
"permission": 1.0,
"attributes": [],
"limit": "5 per minute",
"form": [
{"Name": "token", "Type": "str", "MaxLen": 6}
]
}
def HandleRequest(_CleanedData):
current_user = UGM.GetELTUser()
if not current_user:
return {"code": 401, "msg": "未登录"}, 401
Token = _CleanedData["form"].get("token", "").strip()
if not Token or len(Token) != 6:
return {"code": 1, "msg": "请输入6位验证码"}, 200
existing = GERPUser2FA.query.filter(GERPUser2FA.UserUUID == current_user.UserUUID).first()
if not existing:
return {"code": 1, "msg": "未找到2FA记录,请先获取二维码"}, 200
if existing.IsEnabled == 1:
return {"code": 1, "msg": "2FA已启用"}, 200
Totp = pyotp.TOTP(existing.SecretKey, digits=TOTP_CONFIG["digits"], interval=TOTP_CONFIG["interval"])
if Totp.verify(Token, valid_window=1):
existing.IsEnabled = 1
existing.Verified = 1
existing.LastUsedAt = datetime.datetime.now(Timezone_CN)
try:
db.session.commit()
return {"code": 0, "msg": "2FA设置成功"}, 200
except:
db.session.rollback()
return {"code": 1, "msg": "SQL 提交失败"}, 200
return {"code": 1, "msg": "验证码错误,请重试"}, 200