From 9f337640686cc9bcd13fae2ff8c7de285f9d41c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Casaj=C3=BAs?= Date: Fri, 6 Sep 2024 15:47:47 +0200 Subject: [PATCH] Ensure mailbox verifcation exception is caught and show proper error to the user --- app/dashboard/views/mailbox.py | 7 ++++++- app/models.py | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/app/dashboard/views/mailbox.py b/app/dashboard/views/mailbox.py index 0746387a..2fba1b5e 100644 --- a/app/dashboard/views/mailbox.py +++ b/app/dashboard/views/mailbox.py @@ -123,7 +123,12 @@ def mailbox_verify(): if not code: # Old way return verify_with_signed_secret(mailbox_id) - mailbox = mailbox_utils.verify_mailbox_code(current_user, mailbox_id, code) + try: + mailbox = mailbox_utils.verify_mailbox_code(current_user, mailbox_id, code) + except mailbox_utils.MailboxError as e: + LOG.i(f"Cannot verify mailbox {mailbox_id} because of {e}") + flash(f"Cannot verify mailbox: {e.msg}", "error") + return render_template("dashboard/mailbox_validation.html", mailbox=mailbox) LOG.d("Mailbox %s is verified", mailbox) return render_template("dashboard/mailbox_validation.html", mailbox=mailbox) diff --git a/app/models.py b/app/models.py index 96794d8c..9ad0ed1e 100644 --- a/app/models.py +++ b/app/models.py @@ -1660,18 +1660,6 @@ class Alias(Base, ModelMixin): Session.add(new_alias) DailyMetric.get_or_create_today_metric().nb_alias += 1 - # Internal import to avoid global import cycles - from app.events.event_dispatcher import EventDispatcher - from app.events.generated.event_pb2 import AliasCreated, EventContent - - event = AliasCreated( - alias_id=new_alias.id, - alias_email=new_alias.email, - alias_note=new_alias.note, - enabled=True, - ) - EventDispatcher.send_event(user, EventContent(alias_created=event)) - if ( new_alias.flags & cls.FLAG_PARTNER_CREATED > 0 and new_alias.user.flags & User.FLAG_CREATED_ALIAS_FROM_PARTNER == 0 @@ -1684,6 +1672,18 @@ class Alias(Base, ModelMixin): if flush: Session.flush() + # Internal import to avoid global import cycles + from app.events.event_dispatcher import EventDispatcher + from app.events.generated.event_pb2 import AliasCreated, EventContent + + event = AliasCreated( + alias_id=new_alias.id, + alias_email=new_alias.email, + alias_note=new_alias.note, + enabled=True, + ) + EventDispatcher.send_event(user, EventContent(alias_created=event)) + return new_alias @classmethod