67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
from django.shortcuts import redirect
|
|
from django.contrib import messages
|
|
from django.conf import settings
|
|
from auth.views import AuthView
|
|
from auth.models import Profile
|
|
from auth.helpers import send_verification_email
|
|
import uuid
|
|
|
|
|
|
|
|
class VerifyEmailTokenView(AuthView):
|
|
def get(self, request, token):
|
|
try:
|
|
profile = Profile.objects.filter(email_token=token).first()
|
|
profile.is_verified = True
|
|
profile.email_token = ""
|
|
profile.save()
|
|
if not request.user.is_authenticated:
|
|
# User is not already authenticated
|
|
# Perform the email verification and any other necessary actions
|
|
messages.success(request, "Email verified successfully")
|
|
return redirect("login")
|
|
# Now, redirect to the login page
|
|
|
|
except Profile.DoesNotExist:
|
|
messages.error(request, "Invalid token, please try again")
|
|
return redirect("verify-email-page")
|
|
|
|
class VerifyEmailView(AuthView):
|
|
def get(self, request):
|
|
# Render the login page for users who are not logged in.
|
|
return super().get(request)
|
|
|
|
|
|
class SendVerificationView(AuthView):
|
|
def get(self, request):
|
|
email, message = self.get_email_and_message(request)
|
|
|
|
if email:
|
|
token = str(uuid.uuid4())
|
|
user_profile = Profile.objects.filter(email=email).first()
|
|
user_profile.email_token = token
|
|
user_profile.save()
|
|
send_verification_email(email, token)
|
|
messages.success(request, message)
|
|
else:
|
|
messages.error(request, "Email not found in session")
|
|
|
|
return redirect("verify-email-page")
|
|
|
|
def get_email_and_message(self, request):
|
|
if request.user.is_authenticated:
|
|
email = request.user.profile.email
|
|
|
|
if settings.EMAIL_HOST_USER and settings.EMAIL_HOST_PASSWORD:
|
|
message = messages.success(request, "Verification email sent successfully")
|
|
else:
|
|
message = messages.error(request, "Email settings are not configured. Unable to send verification email.")
|
|
else:
|
|
email = request.session.get('email')
|
|
if settings.EMAIL_HOST_USER and settings.EMAIL_HOST_PASSWORD:
|
|
message = "Resend verification email successfully" if email else None
|
|
else:
|
|
message = messages.error(request, "Email settings are not configured. Unable to send verification email.")
|
|
|
|
return email, message
|