예제 #1
0
 def confirm(self, password):
     if self.confirmed:
         return False
     self.user.password = encrypt_password(password)
     self.user.save()
     self.confirmed = True
     self.save()
     return True
예제 #2
0
def registration(request):

    if request.user.is_authenticated():
        return redirect("frontpage")

    page_title = u"Registration"
    breadcrumbs = [{"url": reverse("users:registration"), "title": page_title}]

    form = RegistrationForm()
    if request.method == "POST":
        form = RegistrationForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            email = data["email"]
            username = "******" % (User.objects.aggregate(Max("id"))["id__max"] + 1)
            email_taken = False
            email_pending = False
            if User.objects.filter(email=email).exists():
                email_taken = True
                user = User.objects.get(email=email)
                if RegistrationConfirmation.objects.filter(user=user, confirmed=False).count():
                    email_pending = True

            if email_pending:
                resend_confirmation_url = reverse("users:registration_resend")
                message = u"A registration request for the user account with email <em>%(email)s</em> needs to be confirmed. <a href=\"%(url)s?email=%(email)s\">Click here</a> to re-send the confirmation email."
                message = message % dict(email=email,
                                         url=resend_confirmation_url)
                messages.warning(request, message)
                return direct_to_template(request, "users/registration.html", locals())

            elif email_taken:
                reset_password_url = reverse("users:reset_password_init")
                message = u"User with email <em>%(email)s</em> is registered already. If you forgot your password you can <a href=\"%(url)s\">click here</a> to reset it."
                message = message % dict(email=email,
                                         url=reset_password_url)
                messages.warning(request, message)
                return direct_to_template(request, "users/registration.html", locals())

            else:
                password = encrypt_password(data["password"])
                user = User(username=username, first_name=u"",
                            last_name=u"", email=email,
                            password=password, is_active=True)
                user.save()
                Profile.objects.create(user=user)
                confirmation = RegistrationConfirmation(user=user,
                                                        confirmed=False)
                confirmation.save()
                confirmation.send_confirmation()
                
                if data["newsletter"]:
                    subscribe.delay(email)

                messages.success(request, u"Confirmation email was sent to you.")
                backend = BcryptBackend()
                user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
                auth_login(request, user)
                
                return redirect("users:welcome")

        else:
            messages.error(request, u"Please correct the indicated errors.")

    return direct_to_template(request, "users/registration.html", locals())
예제 #3
0
 def test_encrypt_unicode_password(self):
     # Test encrypt unicode password condition.
     password = unicode(self.get_test_password())
     result = encrypt_password(password)
     self.assertTrue(result.startswith(BCRYPT_PREFIX))
예제 #4
0
 def save(self, *args, **kwargs):
     super(ChangePasswordForm, self).save(*args, **kwargs)
     user = self.instance
     user.password = encrypt_password(self.cleaned_data["new_password"])
     user.save()
예제 #5
0
 def test_encrypt_password(self):
     # Test encypt password function.
     password = self.get_test_password()
     result = encrypt_password(password)
     self.assertTrue(result.startswith(BCRYPT_PREFIX))