added task to send otp on email

This commit is contained in:
abutalib-kiwi
2023-07-27 12:56:50 +05:30
parent c079f3ceca
commit 68b77ef766
4 changed files with 43 additions and 24 deletions

2
.gitignore vendored
View File

@ -21,4 +21,4 @@ static/*
__pycache__/ __pycache__/
*.env *.env
ve/* ve/*
celerybeat-schedule celerybeat-schedule

View File

@ -90,7 +90,8 @@ ERROR_CODE = {
# email not null # email not null
"2062": "Please enter email address", "2062": "Please enter email address",
"2063": "Unauthorized access.", "2063": "Unauthorized access.",
"2064": "To change your password first request an OTP and get it verify then change your password." "2064": "To change your password first request an OTP and get it verify then change your password.",
"2065": "Passwords do not match. Please try again."
} }
"""Success message code""" """Success message code"""
SUCCESS_CODE = { SUCCESS_CODE = {

29
base/tasks.py Normal file
View File

@ -0,0 +1,29 @@
"""
web_admin tasks file
"""
# third party imports
from celery import shared_task
from templated_email import send_templated_mail
# django imports
from django.conf import settings
@shared_task
def send_email_otp(email, verification_code):
"""
used to send otp on email
:param email: e-mail
:param verification_code: otp
"""
from_email = settings.EMAIL_FROM_ADDRESS
recipient_list = [email]
send_templated_mail(
template_name='email_reset_verification.email',
from_email=from_email,
recipient_list=recipient_list,
context={
'verification_code': verification_code
}
)
return True

View File

@ -7,15 +7,14 @@ from datetime import datetime
# django imports # django imports
from rest_framework import serializers from rest_framework import serializers
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.conf import settings
from django.utils import timezone from django.utils import timezone
from templated_email import send_templated_mail
# local imports # local imports
from account.models import UserEmailOtp from account.models import UserEmailOtp
from base.constants import USER_TYPE from base.constants import USER_TYPE
from base.messages import ERROR_CODE from base.messages import ERROR_CODE
from guardian.tasks import generate_otp from guardian.tasks import generate_otp
from base.tasks import send_email_otp
USER = get_user_model() USER = get_user_model()
@ -53,26 +52,16 @@ class AdminOTPSerializer(serializers.ModelSerializer):
verification_code = generate_otp() verification_code = generate_otp()
# Send the verification code to the user's email # Send the verification code to the user's email
from_email = settings.EMAIL_FROM_ADDRESS send_email_otp.delay(email, verification_code)
recipient_list = [email]
send_templated_mail(
template_name='email_reset_verification.email',
from_email=from_email,
recipient_list=recipient_list,
context={
'verification_code': verification_code
}
)
expiry = timezone.now() + timezone.timedelta(days=1) expiry = timezone.now() + timezone.timedelta(days=1)
user_data, created = UserEmailOtp.objects.get_or_create(email=email) user_data, created = UserEmailOtp.objects.update_or_create(email=email,
if created: defaults={
user_data.expired_at = expiry "otp": verification_code,
user_data.user_type = dict(USER_TYPE).get('3') "expired_at": expiry,
if user_data: "user_type": dict(USER_TYPE).get('3'),
user_data.otp = verification_code })
user_data.expired_at = expiry
user_data.user_type = dict(USER_TYPE).get('3')
user_data.save()
return user_data return user_data
@ -134,7 +123,7 @@ class AdminCreatePasswordSerializer(serializers.ModelSerializer):
# matching password # matching password
if new_password != confirm_password: if new_password != confirm_password:
raise serializers.ValidationError('password do not match') raise serializers.ValidationError(ERROR_CODE['2065'])
user_otp_details = UserEmailOtp.objects.filter(email=email).last() user_otp_details = UserEmailOtp.objects.filter(email=email).last()
if not user_otp_details: if not user_otp_details: