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

59 lines
1.6 KiB
Plaintext

from PDAPI import *
TOTP_CONFIG = {
"digits": 6,
"interval": 30,
}
__metadata__ = {
"methods": ["GET"],
"blueprint": "GERP",
"permission": 1.0,
"attributes": [],
"limit": "1 per second",
}
def HandleRequest(_CleanedData):
current_user = UGM.GetELTUser()
if not current_user:
return {"code": 401, "msg": "未登录"}, 401
existing = GERPUser2FA.query.filter(GERPUser2FA.UserUUID == current_user.UserUUID).first()
if existing and existing.IsEnabled == 1:
return {"code": 1, "msg": "2FA已启用,请先禁用后再重新设置"}, 200
Secret = pyotp.random_base32()
Totp = pyotp.TOTP(Secret, digits=TOTP_CONFIG["digits"], interval=TOTP_CONFIG["interval"])
QrUrl = Totp.provisioning_uri(
f"{current_user.UserName} / {current_user.UserEmail}",
issuer_name=f"GVSDS - {current_user.UserName}",
image="https://www.gvsds.com/assets/hlogos/nobg.png"
)
QrImg = qrcode.make(QrUrl)
ImgBuffer = BytesIO()
QrImg.save(ImgBuffer, format='PNG')
ImgBuffer.seek(0)
if existing:
existing.SecretKey = Secret
existing.Verified = 0
existing.IsEnabled = 0
else:
new_2fa = GERPUser2FA()
new_2fa.User2FAUUID = NewBUUID()
new_2fa.UserUUID = current_user.UserUUID
new_2fa.SecretKey = Secret
new_2fa.Verified = 0
new_2fa.IsEnabled = 0
db.session.add(new_2fa)
try:
db.session.commit()
except:
db.session.rollback()
return {"code": 1, "msg": "SQL 提交失败"}, 200
return flask.Response(ImgBuffer.getvalue(), mimetype='image/png')