From 66797bb29a7ddeef38e91b9640759ddbd5e82417 Mon Sep 17 00:00:00 2001 From: Lucas Kanashiro Date: Fri, 3 Oct 2014 12:02:08 -0300 Subject: [PATCH] Added validation of user creation via email --- colab/accounts/views.py | 6 +++++- colab/super_archives/models.py | 9 ++++++++- colab/super_archives/views.py | 7 ++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/colab/accounts/views.py b/colab/accounts/views.py index c8152b6..a5d4307 100644 --- a/colab/accounts/views.py +++ b/colab/accounts/views.py @@ -20,7 +20,7 @@ from conversejs import xmpp from conversejs.models import XMPPAccount from haystack.query import SearchQuerySet -from colab.super_archives.models import EmailAddress, Message +from colab.super_archives.models import EmailAddress, Message, EmailAddressValidation from colab.search.utils import trans # from proxy.trac.models import WikiCollabCount, TicketCollabCount from .forms import (UserCreationForm, ListsForm, UserUpdateForm, @@ -160,6 +160,10 @@ def signup(request): user = user_form.save(commit=False) user.needs_update = False + if not browser_id: + user.is_active = False + EmailAddressValidation.create(user.email, user) + user.save() # Check if the user's email have been used previously diff --git a/colab/super_archives/models.py b/colab/super_archives/models.py index b7d0d6c..5857513 100644 --- a/colab/super_archives/models.py +++ b/colab/super_archives/models.py @@ -17,7 +17,7 @@ from taggit.managers import TaggableManager from hitcounter.models import HitCounterModelMixin from .managers import NotSpamManager, MostVotedManager, HighestScore -from .utils import blocks +from .utils import blocks, email from .utils.etiquetador import etiquetador @@ -36,6 +36,13 @@ class EmailAddressValidation(models.Model): class Meta: unique_together = ('user', 'address') + @classmethod + def create(cls, address, user): + email_address_validation = cls.objects.create(address=address, user=user) + email.send_verification_email(email_address_validation.address, + email_address_validation.user, + email_address_validation.validation_key) + return email_address_validation class EmailAddress(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, diff --git a/colab/super_archives/views.py b/colab/super_archives/views.py index a38e2c5..02925f7 100644 --- a/colab/super_archives/views.py +++ b/colab/super_archives/views.py @@ -21,6 +21,7 @@ from django.shortcuts import render, redirect, get_object_or_404 from haystack.query import SearchQuerySet from colab.accounts.utils import mailman +from colab.accounts.models import User from .utils.email import send_verification_email from .models import MailingList, Thread, EmailAddress, \ EmailAddressValidation, Message @@ -159,7 +160,7 @@ class EmailView(View): except EmailAddress.DoesNotExist: email = EmailAddress(address=email_val.address) - if email.user: + if email.user and email.user.is_active: messages.error(request, _('The email address you are trying to ' 'verify is already an active email ' 'address.')) @@ -169,6 +170,10 @@ class EmailView(View): email.user = email_val.user email.save() email_val.delete() + + user = User.objects.get(username=email.user.username) + user.is_active = True + user.save() messages.success(request, _('Email address verified!')) return redirect('user_profile', username=email_val.user.username) -- libgit2 0.21.2