Implement resend OTP
This commit is contained in:
		
							parent
							
								
									d87aade803
								
							
						
					
					
						commit
						97700c0855
					
				@ -1,7 +1,7 @@
 | 
				
			|||||||
from twilio.rest import Client
 | 
					from twilio.rest import Client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from constants import ACCOUNT_ID, SMS_SENDER, TOKEN
 | 
					from constants import ACCOUNT_ID, SMS_SENDER, TOKEN
 | 
				
			||||||
from database.crud import fetch_user_by_key
 | 
					from database.crud import fetch_user_by_email, fetch_user_by_key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def create_twilio_client(account_sid, auth_token):
 | 
					def create_twilio_client(account_sid, auth_token):
 | 
				
			||||||
@ -13,4 +13,12 @@ def send_otp(data, db):
 | 
				
			|||||||
    client = create_twilio_client(account_sid=ACCOUNT_ID, auth_token=TOKEN)
 | 
					    client = create_twilio_client(account_sid=ACCOUNT_ID, auth_token=TOKEN)
 | 
				
			||||||
    user = fetch_user_by_key(data=data, db=db)
 | 
					    user = fetch_user_by_key(data=data, db=db)
 | 
				
			||||||
    message = "Your OTP code is {0}".format(user.otp)
 | 
					    message = "Your OTP code is {0}".format(user.otp)
 | 
				
			||||||
    client.messages.create(to=data.mobile, from_=SMS_SENDER, body=message)
 | 
					    # client.messages.create(to=data.mobile, from_=SMS_SENDER, body=message)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def resend_otp(data, db):
 | 
				
			||||||
 | 
					    client = create_twilio_client(account_sid=ACCOUNT_ID, auth_token=TOKEN)
 | 
				
			||||||
 | 
					    user = fetch_user_by_email(data=data, db=db)
 | 
				
			||||||
 | 
					    message = "Your OTP code is {0}".format(user.otp)
 | 
				
			||||||
 | 
					    # client.messages.create(to=data.mobile, from_=SMS_SENDER, body=message)
 | 
				
			||||||
 | 
					    return user
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends
 | 
				
			|||||||
from fastapi.security import OAuth2PasswordBearer
 | 
					from fastapi.security import OAuth2PasswordBearer
 | 
				
			||||||
from sqlalchemy.orm import Session
 | 
					from sqlalchemy.orm import Session
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from app.external_services import send_otp
 | 
					from app.external_services import resend_otp, send_otp
 | 
				
			||||||
from app.schemas import *
 | 
					from app.schemas import *
 | 
				
			||||||
from database.crud import get_db, insert_data, verify_otp
 | 
					from database.crud import get_db, insert_data, verify_otp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -31,3 +31,9 @@ def log_in(
 | 
				
			|||||||
def validate_otp(data: OTPVerify, db: Session = Depends(get_db)):
 | 
					def validate_otp(data: OTPVerify, db: Session = Depends(get_db)):
 | 
				
			||||||
    response = verify_otp(data=data, db=db)
 | 
					    response = verify_otp(data=data, db=db)
 | 
				
			||||||
    return response
 | 
					    return response
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@router.post("/resendOTP", response_model=OTPresendResponse)
 | 
				
			||||||
 | 
					def deliver_otp(data: OTPresend, db: Session = Depends(get_db)):
 | 
				
			||||||
 | 
					    response = resend_otp(data=data, db=db)
 | 
				
			||||||
 | 
					    return response
 | 
				
			||||||
 | 
				
			|||||||
@ -106,6 +106,20 @@ class OTPVerifyResponse(OTPBase):
 | 
				
			|||||||
        orm_mode = True
 | 
					        orm_mode = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class OTPresend(BaseModel):
 | 
				
			||||||
 | 
					    email: EmailStr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Config:
 | 
				
			||||||
 | 
					        orm_mode = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class OTPresendResponse(UserCreateResponse):
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Config:
 | 
				
			||||||
 | 
					        orm_mode = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    access_key: str
 | 
					    access_key: str
 | 
				
			||||||
    otp: int = Query(None, ge=6, le=6)
 | 
					    otp: int = Query(None, ge=6, le=6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
from pytest import mark, fixture
 | 
					from pytest import mark
 | 
				
			||||||
from secrets import token_hex
 | 
					from secrets import token_hex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from app.schemas import *
 | 
					from app.schemas import *
 | 
				
			||||||
@ -45,3 +45,11 @@ def test_otp_verification(get_test_db):
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    response = client.post("/otpVerification", json=data)
 | 
					    response = client.post("/otpVerification", json=data)
 | 
				
			||||||
    assert response.status_code == 200
 | 
					    assert response.status_code == 200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def test_resend_otp():
 | 
				
			||||||
 | 
					    data = {
 | 
				
			||||||
 | 
					        "email": "testorganizer@odyfo.com",
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    response = client.post("/resendOTP", json=data)
 | 
				
			||||||
 | 
					    assert response.status_code == 200
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user