def account_settings(request): user = request.user form = AccountSettingsForm( user, request, request.POST or None, initial={ 'email': UserEmail.get_primary_email(user).email, 'username': user.username, 'name': user.name, }, ) if form.is_valid(): old_email = user.email form.save() # update notification settings for those set to primary email with new primary email alert_email = UserOption.objects.get_value(user=user, key='alert_email') if alert_email == old_email: UserOption.objects.set_value(user=user, key='alert_email', value=user.email) options = UserOption.objects.filter(user=user, key='mail:email') for option in options: if option.value != old_email: continue option.value = user.email option.save() # TODO(dcramer): we should maintain validation here when we support # multiple email addresses if request.user.email != old_email: try: with transaction.atomic(): user_email = UserEmail.objects.create( user=user, email=user.email, ) except IntegrityError: pass else: user_email.set_hash() user_email.save() user.send_confirm_email_singular(user_email) msg = _('A confirmation email has been sent to %s.' ) % user_email.email messages.add_message(request, messages.SUCCESS, msg) user.clear_lost_passwords() messages.add_message(request, messages.SUCCESS, _('Your settings were saved.')) return HttpResponseRedirect(request.path) context = csrf(request) context.update({ 'form': form, 'page': 'settings', 'has_2fa': Authenticator.objects.user_has_2fa(request.user), 'AUTH_PROVIDERS': auth.get_auth_providers(), 'email': UserEmail.get_primary_email(user), 'has_newsletters': newsletter.is_enabled, }) return render_to_response('sentry/account/settings.html', context, request)