From 39ac49678e5038c24b46fb9689ee4e5751a5e7d4 Mon Sep 17 00:00:00 2001 From: jkirkcaldy Date: Fri, 5 May 2023 16:49:10 +0100 Subject: [PATCH 1/6] Update email_handler.py --- verify_email/email_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/verify_email/email_handler.py b/verify_email/email_handler.py index b3fae6f..6416bbd 100644 --- a/verify_email/email_handler.py +++ b/verify_email/email_handler.py @@ -28,7 +28,7 @@ def __send_email(self, msg, useremail): ) # Public : - def send_verification_link(self, request, inactive_user=None, form=None): + def send_verification_link(self, request, form=None): if form: inactive_user = form.save(commit=False) From dfb81c99a9b0e6448f632f88bef855ac2545fba7 Mon Sep 17 00:00:00 2001 From: jkirkcaldy Date: Fri, 5 May 2023 17:29:48 +0100 Subject: [PATCH 2/6] add click to verfy --- .../verify_email/verification_template.html | 33 ++++ verify_email/views.py | 142 +++++++++--------- 2 files changed, 107 insertions(+), 68 deletions(-) create mode 100644 verify_email/templates/verify_email/verification_template.html diff --git a/verify_email/templates/verify_email/verification_template.html b/verify_email/templates/verify_email/verification_template.html new file mode 100644 index 0000000..7396967 --- /dev/null +++ b/verify_email/templates/verify_email/verification_template.html @@ -0,0 +1,33 @@ +{% extends "email_index.html" %} + +{%block content%} + +
+
+

Click the button below to verify your email address

+
+
+ {% csrf_token %} +
+ +
+
+ +
+ Usually this template needs to be changed by your own app's template +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/verify_email/views.py b/verify_email/views.py index 07873db..db10bf3 100644 --- a/verify_email/views.py +++ b/verify_email/views.py @@ -33,7 +33,7 @@ link_expired_template = pkg_configs.get('link_expired_template') request_new_email_template = pkg_configs.get('request_new_email_template') new_email_sent_template = pkg_configs.get('new_email_sent_template') - +verify_template = pkg_configs.get('verification_template') def verify_user_and_activate(request, useremail, usertoken): """ @@ -42,78 +42,84 @@ def verify_user_and_activate(request, useremail, usertoken): verify the user's email and token and redirect'em accordingly. """ - if request.method == 'GET': - try: - verified = verify_user(useremail, usertoken) - if verified is True: - if login_page and not success_template: - messages.success(request, success_msg) - return redirect(to=login_page) + def verify_button_clicked(request, useremail, usertoken): + if request.method == 'GET': + try: + verified = verify_user(useremail, usertoken) + if verified is True: + if login_page and not success_template: + messages.success(request, success_msg) + return redirect(to=login_page) + return render( + request, + template_name=success_template, + context={ + 'msg': success_msg, + 'status': 'Verification Successful!', + 'link': reverse(login_page) + } + ) + else: + # we dont know what went wrong... + raise ValueError + except (ValueError, TypeError) as error: + logger.error(f'[ERROR]: Something went wrong while verifying user, exception: {error}') return render( request, - template_name=success_template, + template_name=failed_template, context={ - 'msg': success_msg, - 'status': 'Verification Successful!', - 'link': reverse(login_page) + 'msg': failed_msg, + 'minor_msg': 'There is something wrong with this link...', + 'status': 'Verification Failed!', } ) - else: - # we dont know what went wrong... - raise ValueError - except (ValueError, TypeError) as error: - logger.error(f'[ERROR]: Something went wrong while verifying user, exception: {error}') - return render( - request, - template_name=failed_template, - context={ - 'msg': failed_msg, - 'minor_msg': 'There is something wrong with this link...', - 'status': 'Verification Failed!', - } - ) - except SignatureExpired: - return render( - request, - template_name=link_expired_template, - context={ - 'msg': 'The link has lived its life :( Request a new one!', - 'status': 'Expired!', - 'encoded_email': useremail, - 'encoded_token': usertoken - } - ) - except BadSignature: - return render( - request, - template_name=failed_template, - context={ - 'msg': 'This link was modified before verification.', - 'minor_msg': 'Cannot request another verification link with faulty link.', - 'status': 'Faulty Link Detected!', - } - ) - except MaxRetriesExceeded: - return render( - request, - template_name=failed_template, - context={ - 'msg': 'You have exceeded the maximum verification requests! Contact admin.', - 'status': 'Maxed out!', - } - ) - except InvalidToken: - return render( - request, - template_name=failed_template, - context={ - 'msg': 'This link is invalid or been used already, we cannot verify using this link.', - 'status': 'Invalid Link', - } - ) - except UserNotFound: - raise Http404("404 User not found") - + except SignatureExpired: + return render( + request, + template_name=link_expired_template, + context={ + 'msg': 'The link has lived its life :( Request a new one!', + 'status': 'Expired!', + 'encoded_email': useremail, + 'encoded_token': usertoken + } + ) + except BadSignature: + return render( + request, + template_name=failed_template, + context={ + 'msg': 'This link was modified before verification.', + 'minor_msg': 'Cannot request another verification link with faulty link.', + 'status': 'Faulty Link Detected!', + } + ) + except MaxRetriesExceeded: + return render( + request, + template_name=failed_template, + context={ + 'msg': 'You have exceeded the maximum verification requests! Contact admin.', + 'status': 'Maxed out!', + } + ) + except InvalidToken: + return render( + request, + template_name=failed_template, + context={ + 'msg': 'This link is invalid or been used already, we cannot verify using this link.', + 'status': 'Invalid Link', + } + ) + except UserNotFound: + raise Http404("404 User not found") + if request.method == 'POST': + form = request.POST + if form.is_valid(): + verify_button_clicked(request, useremail, usertoken) + else: + return render(request, template_name=verify_template) def request_new_link(request, useremail=None, usertoken=None): try: From 699bf9765e66f027d6ec9379bf2b4fcf4fd6d718 Mon Sep 17 00:00:00 2001 From: jkirkcaldy Date: Fri, 5 May 2023 17:32:12 +0100 Subject: [PATCH 3/6] add template --- verify_email/app_configurations.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/verify_email/app_configurations.py b/verify_email/app_configurations.py index 5efa7b5..8a0efbe 100644 --- a/verify_email/app_configurations.py +++ b/verify_email/app_configurations.py @@ -84,6 +84,12 @@ def __init__(self): 'verify_email/new_email_sent.html' ), + 'verification_template': ( + 'NEW_EMAIL_SENT_TEMPLATE', + 'verify_email/verification_template.html' + ), + + 'salt': ( 'HASH_SALT', None From 4c437ad2993e75adfa527c64f2c42a282c2977a8 Mon Sep 17 00:00:00 2001 From: jkirkcaldy Date: Fri, 5 May 2023 17:37:19 +0100 Subject: [PATCH 4/6] verification template --- verify_email/app_configurations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/verify_email/app_configurations.py b/verify_email/app_configurations.py index 8a0efbe..5823201 100644 --- a/verify_email/app_configurations.py +++ b/verify_email/app_configurations.py @@ -85,7 +85,7 @@ def __init__(self): ), 'verification_template': ( - 'NEW_EMAIL_SENT_TEMPLATE', + 'VERIFICATION_TEMPLATE', 'verify_email/verification_template.html' ), From df4d70b70377e309d9b183f8b601441e0988cef0 Mon Sep 17 00:00:00 2001 From: jkirkcaldy Date: Fri, 5 May 2023 17:39:09 +0100 Subject: [PATCH 5/6] verification button --- verify_email/views.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/verify_email/views.py b/verify_email/views.py index db10bf3..c53ba60 100644 --- a/verify_email/views.py +++ b/verify_email/views.py @@ -115,9 +115,7 @@ def verify_button_clicked(request, useremail, usertoken): except UserNotFound: raise Http404("404 User not found") if request.method == 'POST': - form = request.POST - if form.is_valid(): - verify_button_clicked(request, useremail, usertoken) + verify_button_clicked(request, useremail, usertoken) else: return render(request, template_name=verify_template) From d2776f1b81d43cfff844d5037b7af2901dafc582 Mon Sep 17 00:00:00 2001 From: jkirkcaldy Date: Fri, 5 May 2023 17:45:03 +0100 Subject: [PATCH 6/6] add button to confirm verification --- verify_email/views.py | 137 +++++++++++++++++++++--------------------- 1 file changed, 67 insertions(+), 70 deletions(-) diff --git a/verify_email/views.py b/verify_email/views.py index c53ba60..ef9be69 100644 --- a/verify_email/views.py +++ b/verify_email/views.py @@ -42,83 +42,80 @@ def verify_user_and_activate(request, useremail, usertoken): verify the user's email and token and redirect'em accordingly. """ - def verify_button_clicked(request, useremail, usertoken): - if request.method == 'GET': - try: - verified = verify_user(useremail, usertoken) - if verified is True: - if login_page and not success_template: - messages.success(request, success_msg) - return redirect(to=login_page) - return render( - request, - template_name=success_template, - context={ - 'msg': success_msg, - 'status': 'Verification Successful!', - 'link': reverse(login_page) - } - ) - else: - # we dont know what went wrong... - raise ValueError - except (ValueError, TypeError) as error: - logger.error(f'[ERROR]: Something went wrong while verifying user, exception: {error}') - return render( - request, - template_name=failed_template, - context={ - 'msg': failed_msg, - 'minor_msg': 'There is something wrong with this link...', - 'status': 'Verification Failed!', - } - ) - except SignatureExpired: - return render( - request, - template_name=link_expired_template, - context={ - 'msg': 'The link has lived its life :( Request a new one!', - 'status': 'Expired!', - 'encoded_email': useremail, - 'encoded_token': usertoken - } - ) - except BadSignature: - return render( - request, - template_name=failed_template, - context={ - 'msg': 'This link was modified before verification.', - 'minor_msg': 'Cannot request another verification link with faulty link.', - 'status': 'Faulty Link Detected!', - } - ) - except MaxRetriesExceeded: - return render( - request, - template_name=failed_template, - context={ - 'msg': 'You have exceeded the maximum verification requests! Contact admin.', - 'status': 'Maxed out!', - } - ) - except InvalidToken: + if request.method == 'POST': + try: + verified = verify_user(useremail, usertoken) + if verified is True: + if login_page and not success_template: + messages.success(request, success_msg) + return redirect(to=login_page) return render( request, - template_name=failed_template, + template_name=success_template, context={ - 'msg': 'This link is invalid or been used already, we cannot verify using this link.', - 'status': 'Invalid Link', + 'msg': success_msg, + 'status': 'Verification Successful!', + 'link': reverse(login_page) } ) - except UserNotFound: - raise Http404("404 User not found") - if request.method == 'POST': - verify_button_clicked(request, useremail, usertoken) + else: + # we dont know what went wrong... + raise ValueError + except (ValueError, TypeError) as error: + logger.error(f'[ERROR]: Something went wrong while verifying user, exception: {error}') + return render( + request, + template_name=failed_template, + context={ + 'msg': failed_msg, + 'minor_msg': 'There is something wrong with this link...', + 'status': 'Verification Failed!', + } + ) + except SignatureExpired: + return render( + request, + template_name=link_expired_template, + context={ + 'msg': 'The link has lived its life :( Request a new one!', + 'status': 'Expired!', + 'encoded_email': useremail, + 'encoded_token': usertoken + } + ) + except BadSignature: + return render( + request, + template_name=failed_template, + context={ + 'msg': 'This link was modified before verification.', + 'minor_msg': 'Cannot request another verification link with faulty link.', + 'status': 'Faulty Link Detected!', + } + ) + except MaxRetriesExceeded: + return render( + request, + template_name=failed_template, + context={ + 'msg': 'You have exceeded the maximum verification requests! Contact admin.', + 'status': 'Maxed out!', + } + ) + except InvalidToken: + return render( + request, + template_name=failed_template, + context={ + 'msg': 'This link is invalid or been used already, we cannot verify using this link.', + 'status': 'Invalid Link', + } + ) + except UserNotFound: + raise Http404("404 User not found") else: return render(request, template_name=verify_template) - + def request_new_link(request, useremail=None, usertoken=None): try: if useremail is None or usertoken is None: