24 lines
721 B
Python
24 lines
721 B
Python
import secrets
|
|
from fastapi import Request
|
|
|
|
OTP_CODE_KEY = "otp_code"
|
|
OTP_VERIFIED_KEY = "otp_verified"
|
|
|
|
def start_otp(request: Request) -> str:
|
|
# 6-digit numeric code
|
|
code = str(secrets.randbelow(900000) + 100000)
|
|
request.session[OTP_CODE_KEY] = code
|
|
request.session[OTP_VERIFIED_KEY] = False
|
|
return code
|
|
|
|
def verify_otp(request: Request, code: str) -> bool:
|
|
expected = request.session.get(OTP_CODE_KEY)
|
|
if expected and code and code.strip() == expected:
|
|
request.session[OTP_VERIFIED_KEY] = True
|
|
request.session.pop(OTP_CODE_KEY, None)
|
|
return True
|
|
return False
|
|
|
|
def is_otp_verified(request: Request) -> bool:
|
|
return bool(request.session.get(OTP_VERIFIED_KEY))
|