Beispiel #1
0
    def get_redirect_url(self, *args, **kwargs):
        request = self.request
        user = request.user
        qs = self.queryset.filter(user=user)
        key = get_object_or_404(qs, key=kwargs['key'])

        user.email = key.to
        # Compute the normalized email address
        user.normalized_email = normalize_email(user.email)

        user.confirmed = timezone.now()

        with transaction.atomic():
            # Update list of GPG keys
            user.gpg_keys.all().delete()
            gpg_keys = key.payload.get('gpg_recv_pub')
            if gpg_keys:
                add_gpg_key_task.delay(user_pk=user.pk, address=key.address.address, key=gpg_keys)

            user.save()
            key.delete()

            messages.success(request,
                             _('Confirmed email address change to %(email)s.')
                             % {'email': user.email, })
            user.log(ugettext_noop('Confirmed email address change to %(email)s.'),
                     request.META['REMOTE_ADDR'], email=key.to)
            stat(STAT_SET_EMAIL_CONFIRMED)

            return super(ConfirmSetEmailView, self).get_redirect_url()
Beispiel #2
0
def normalize(apps, schema_editor):
    User = apps.get_model('account', 'User')
    for user in User.objects.all():
        if user.email:
            user.normalized_email = normalize_email(user.email)
        else:
            user.normalized_email = ''
        user.save()
Beispiel #3
0
    def form_valid(self, form):
        request = self.request
        self.ratelimit(request)
        address = request.META['REMOTE_ADDR']
        lang = request.LANGUAGE_CODE
        base_url = '%s://%s' % (request.scheme, request.get_host())

        if BlockedEmail.objects.is_blocked(form.cleaned_data['email']):
            BlockedIpAddress.objects.block(address)
            raise BlockedException(_('You cannot register with this email address.'))

        with transaction.atomic(), version(comment='User created'):
            response = super(RegistrationView, self).form_valid(form)
            user = self.object

            # Compute the normalized email address
            user.normalized_email = normalize_email(user.email)

            # save default language
            user.default_language = lang
            user.save()

            # log user creation, display help message.
            user.log(ugettext_noop('Account created.'), address=address)
            AddressActivity.objects.log(request, ACTIVITY_REGISTER, user=user, note=user.email)
            stat(STAT_REGISTER)

            messages.success(request, _(
                """Successfully created the account %(username)s. A confirmation email was
just sent to the email address you provided (%(email)s). Before you can use
your account, you must click on the confirmation link in that email.""") % {
                    'username': user.username,
                    'email': user.email,
            })

            user.backend = settings.AUTHENTICATION_BACKENDS[0]
            login(self.request, user)

        task = send_confirmation_task.si(
            user_pk=user.pk, purpose=PURPOSE_REGISTER, language=lang, address=address,
            to=user.email, base_url=base_url, hostname=request.site['NAME'])

        # Store GPG key if any
        fp, key = form.get_gpg_data()
        if fp or key:
            gpg_task = add_gpg_key_task.si(
                user_pk=user.pk, address=address, fingerprint=fp, key=key)
            task = chain(gpg_task, task)
        task.delay()

        return response
Beispiel #4
0
    def handle_new_account(self, request, form):
        self.ratelimit(request)
        user = request.user

        address = request.META['REMOTE_ADDR']
        lang = request.LANGUAGE_CODE
        base_url = '%s://%s' % (request.scheme, request.get_host())

        fp, key = form.get_gpg_data()

        with transaction.atomic():
            request.user.email = form.cleaned_data['email']

            # Compute the normalized email address
            request.user.normalized_email = normalize_email(user.email)

            request.user.save()

            # Remove existing confirmation keys for different email addresses, otherwise the user might be
            # able to get a confirmed address with the old key, but the new address is already set above
            Confirmation.objects.filter(user=user, purpose=PURPOSE_REGISTER).exclude(to=user.email).delete()

            # If the user has not set any keys, remove them before sending.
            if not fp and not key:
                user.gpg_keys.all().delete()

            # log user creation, display help message.
            user.log(ugettext_noop('Resent confirmation.'), address=address)
            AddressActivity.objects.log(request, ACTIVITY_RESEND_CONFIRMATION, user=user, note=user.email)
            stat(STAT_RESEND_CONFIRMATION)
            messages.success(request, _("Resent confirmation email to %(email)s.") % {'email': user.email})

        task = send_confirmation_task.si(
            user_pk=user.pk, purpose=PURPOSE_REGISTER, language=lang, address=address,
            to=user.email, base_url=base_url, hostname=request.site['NAME'])

        # Store GPG key if any
        if fp or key:
            # TODO: If the user is not confirmed yet and a key is added, this does not seem to work
            gpg_task = add_gpg_key_task.si(
                user_pk=user.pk, address=address, fingerprint=fp, key=key)
            task = chain(gpg_task, task)

        # User has not set a new GPG key, so we remove any keys
        task.delay()

        return HttpResponseRedirect(reverse('account:detail'))
Beispiel #5
0
 def save_model(self, request, obj, form, change):
     obj.normalized_email = normalize_email(obj.email)
     return super(UserAdmin, self).save_model(request, obj, form, change)
Beispiel #6
0
 def save_model(self, request, obj, form, change):
     obj.normalized_email = normalize_email(obj.email)
     return super(UserAdmin, self).save_model(request, obj, form, change)