Commit 5346dbc83eec95c174f6e2ab625ad4c8c694c851
1 parent
0a531154
Exists in
master
and in
39 other branches
Adding email verification
Showing
3 changed files
with
51 additions
and
2 deletions
Show diff stats
src/accounts/templates/accounts/user_update_form.html
| ... | ... | @@ -43,6 +43,29 @@ $(function() { |
| 43 | 43 | event.preventDefault(); |
| 44 | 44 | }); |
| 45 | 45 | |
| 46 | + $('.verify-email').on('click', function(event) { | |
| 47 | + var $email_block = $(event.target).parent().parent(); | |
| 48 | + $.ajax({ | |
| 49 | + url: "{% url 'archive_email_validation_view' %}", | |
| 50 | + type: 'post', | |
| 51 | + data: { email: $('.email-address', $email_block).text() }, | |
| 52 | + context: $email_block[0], | |
| 53 | + beforeSend: function(xhr, settings) { | |
| 54 | + xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken')); | |
| 55 | + } | |
| 56 | + }).done(function() { | |
| 57 | + var email = $('.email-address', $(this)).text(); | |
| 58 | + var msg = '{% trans "We sent a verification email to " %}' + email + '. ' + | |
| 59 | + '{% trans "Please follow the instructions in it." %}'; | |
| 60 | + $('#alert-message').text(msg); | |
| 61 | + $('#alert-js').removeClass('alert-warning').addClass('alert-success'); | |
| 62 | + $('#alert-js').show(); | |
| 63 | + window.scroll(0, 0); | |
| 64 | + }); | |
| 65 | + | |
| 66 | + event.preventDefault(); | |
| 67 | + }); | |
| 68 | + | |
| 46 | 69 | $('.set-primary').on('click', function(event) { |
| 47 | 70 | var $email_block = $(event.target).parent().parent(); |
| 48 | 71 | $.ajax({ | ... | ... |
src/super_archives/urls.py
| 1 | 1 | from django.conf.urls import patterns, include, url |
| 2 | 2 | |
| 3 | -from .views import EmailView | |
| 3 | +from .views import EmailView, EmailValidationView | |
| 4 | 4 | |
| 5 | 5 | |
| 6 | 6 | urlpatterns = patterns('super_archives.views', |
| ... | ... | @@ -8,6 +8,8 @@ urlpatterns = patterns('super_archives.views', |
| 8 | 8 | url(r'thread/(?P<mailinglist>[-\w]+)/(?P<thread_token>[-\w]+)$', 'thread', |
| 9 | 9 | name="thread_view"), |
| 10 | 10 | url(r'thread/$', 'list_messages', name='thread_list'), |
| 11 | + url(r'manage/email/validate/?$', EmailValidationView.as_view(), | |
| 12 | + name="archive_email_validation_view"), | |
| 11 | 13 | url(r'manage/email/(?P<key>[0-9a-z]{32})?', EmailView.as_view(), |
| 12 | 14 | name="archive_email_view"), |
| 13 | 15 | ) | ... | ... |
src/super_archives/views.py
| 1 | 1 | # -*- coding: utf-8 -*- |
| 2 | 2 | |
| 3 | +import smtplib | |
| 4 | + | |
| 3 | 5 | from django import http |
| 4 | 6 | from django.contrib import messages |
| 5 | 7 | from django.db import IntegrityError |
| ... | ... | @@ -12,6 +14,7 @@ from django.contrib.auth.decorators import login_required |
| 12 | 14 | from django.shortcuts import render, redirect |
| 13 | 15 | |
| 14 | 16 | from . import queries |
| 17 | +from .utils import send_verification_email | |
| 15 | 18 | from .decorators import count_hit |
| 16 | 19 | from .models import MailingList, Thread, EmailAddress, EmailAddressValidation |
| 17 | 20 | |
| ... | ... | @@ -95,7 +98,7 @@ class EmailView(View): |
| 95 | 98 | |
| 96 | 99 | try: |
| 97 | 100 | email_val = EmailAddressValidation.objects.get(validation_key=key, |
| 98 | - user=request.user) | |
| 101 | + user__pk=request.user.pk) | |
| 99 | 102 | except EmailAddressValidation.DoesNotExist: |
| 100 | 103 | messages.error(request, _('The email address you are trying to ' |
| 101 | 104 | 'verify either has already been verified ' |
| ... | ... | @@ -189,3 +192,24 @@ class EmailView(View): |
| 189 | 192 | request.user.email = email_addr |
| 190 | 193 | request.user.save() |
| 191 | 194 | return http.HttpResponse(status=204) |
| 195 | + | |
| 196 | + | |
| 197 | +class EmailValidationView(View): | |
| 198 | + | |
| 199 | + http_method_names = [u'post'] | |
| 200 | + | |
| 201 | + def post(self, request): | |
| 202 | + email_addr = request.POST.get('email') | |
| 203 | + try: | |
| 204 | + email = EmailAddressValidation.objects.get(address=email_addr, | |
| 205 | + user=request.user) | |
| 206 | + except http.DoesNotExist: | |
| 207 | + raise http.Http404 | |
| 208 | + | |
| 209 | + try: | |
| 210 | + send_verification_email(email_addr, request.user, | |
| 211 | + email.validation_key) | |
| 212 | + except smtplib.SMTPException: | |
| 213 | + return http.HttpResponseServerError() | |
| 214 | + | |
| 215 | + return http.HttpResponse(status=204) | ... | ... |