Implement OTP verification

This commit is contained in:
2020-09-28 18:19:59 +02:00
parent 43bcc703d0
commit d87aade803
5 changed files with 64 additions and 29 deletions

View File

@@ -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")