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()
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()
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
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'))
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)