Implement OTP verification
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime
|
||||
from fastapi import HTTPException
|
||||
|
||||
from app.schemas import *
|
||||
from database import SessionLocal
|
||||
@@ -34,29 +35,29 @@ def delete_data(model, data, db):
|
||||
return result
|
||||
|
||||
|
||||
def fetch_user(data, db):
|
||||
result = db.query(Users).filter(Users.email == data.email).first()
|
||||
return result
|
||||
def fetch_user_by_key(data, db):
|
||||
return db.query(Users).filter(Users.access_key == data.access_key).first()
|
||||
|
||||
|
||||
def fetch_otp(access_key, db):
|
||||
result = db.query(Users).filter(Users.access_key == access_key).first()
|
||||
return result.otp
|
||||
def fetch_user_by_email(data, db):
|
||||
return db.query(Users).filter(Users.email == data.email).first()
|
||||
|
||||
|
||||
def activate_account(data: OTPVerify, db):
|
||||
db.query(Users).filter(Users.access_key == data.access_key).update(
|
||||
{Users.status: 1}
|
||||
)
|
||||
db.commit()
|
||||
user = fetch_user_by_key(data=data, db=db)
|
||||
return user
|
||||
|
||||
|
||||
def verify_otp(data: OTPVerify, db):
|
||||
user = fetch_otp(data=data, db=db)
|
||||
same_otp = user.otp == data.otp
|
||||
valid_time = datetime.now() <= user.otp_valid_time
|
||||
valid_otp = same_otp and valid_time
|
||||
user = fetch_user_by_key(data=data, db=db)
|
||||
matching_otp = user.otp == data.otp
|
||||
valid_time = datetime.now() < user.otp_valid_time
|
||||
valid_otp = matching_otp and valid_time
|
||||
if valid_otp:
|
||||
activate_account(data=data, db=db)
|
||||
return True
|
||||
return False
|
||||
result = activate_account(data=data, db=db)
|
||||
return result
|
||||
else:
|
||||
raise HTTPException(status_code=400, detail="The OTP is not correct")
|
||||
|
||||
Reference in New Issue
Block a user