From f1a29a7c5b23d4e2aa8153c2289fc49fa023d2f6 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 11 Oct 2023 11:39:45 +0200 Subject: [PATCH] Customer account: Catch IntegrityError during email change --- src/pretix/presale/views/customer.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/pretix/presale/views/customer.py b/src/pretix/presale/views/customer.py index e0d36c9c9a..665f4ffdce 100644 --- a/src/pretix/presale/views/customer.py +++ b/src/pretix/presale/views/customer.py @@ -562,17 +562,21 @@ class ConfirmChangeView(View): messages.error(request, _('You clicked an invalid link.')) return HttpResponseRedirect(self.get_success_url()) - with transaction.atomic(): - customer.email = data['email'] - customer.save() - customer.log_action('pretix.customer.changed', { - 'email': data['email'] - }) + try: + with transaction.atomic(): + customer.email = data['email'] + customer.save() + customer.log_action('pretix.customer.changed', { + 'email': data['email'] + }) + except IntegrityError: + messages.success(request, _('Your email address has not been updated since the address is already in use ' + 'for another customer account.')) + else: + messages.success(request, _('Your email address has been updated.')) - messages.success(request, _('Your email address has been updated.')) - - if customer == request.customer: - update_customer_session_auth_hash(self.request, customer) + if customer == request.customer: + update_customer_session_auth_hash(self.request, customer) return HttpResponseRedirect(self.get_success_url())