From 745d26acf5b2d418b1622003a6dce18b48c32583 Mon Sep 17 00:00:00 2001 From: Florent Daigniere Date: Sun, 28 Jul 2024 22:54:55 +0200 Subject: [PATCH 1/4] Fix email forwarding when set from the UI (cherry picked from commit 9120f731fc610407a11fb72020b21c7046924efa) --- core/admin/mailu/ui/views/users.py | 16 +++++++++------- towncrier/newsfragments/3349.bugfix | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 towncrier/newsfragments/3349.bugfix diff --git a/core/admin/mailu/ui/views/users.py b/core/admin/mailu/ui/views/users.py index d3816c4a..df0a716d 100644 --- a/core/admin/mailu/ui/views/users.py +++ b/core/admin/mailu/ui/views/users.py @@ -92,13 +92,15 @@ def user_settings(user_email): user = models.User.query.get(user_email_or_current) or flask.abort(404) form = forms.UserSettingsForm(obj=user) utils.formatCSVField(form.forward_destination) + form.forward_enabled.data = bool(flask.request.form.get('forward_enabled', False)) if form.validate_on_submit(): - if form.forward_enabled.data and (form.forward_destination.data in ['', None] or type(form.forward_destination.data) is list): + if form.forward_enabled and (form.forward_destination.data in ['', None] or type(form.forward_destination.data) is list): flask.flash('Destination email address is missing', 'error') - user.forward_enabled = True - return flask.render_template('user/settings.html', form=form, user=user) - if form.forward_enabled.data: - form.forward_destination.data = form.forward_destination.data.replace(" ","").split(",") + return flask.redirect( + flask.url_for('.user_settings', user=user.email)) + if not user.forward_enabled and not flask.request.form.get('forward_destination', None): + form.forward_destination.data = "" + form.forward_destination.data = form.forward_destination.data.replace(" ","").split(",") form.populate_obj(user) models.db.session.commit() form.forward_destination.data = ", ".join(form.forward_destination.data) @@ -107,8 +109,8 @@ def user_settings(user_email): return flask.redirect( flask.url_for('.user_list', domain_name=user.domain.name)) elif form.is_submitted() and not form.validate(): - user.forward_enabled = form.forward_enabled.data - return flask.render_template('user/settings.html', form=form, user=user) + return flask.redirect( + flask.url_for('.user_settings', user=user.email)) return flask.render_template('user/settings.html', form=form, user=user) def _process_password_change(form, user_email): diff --git a/towncrier/newsfragments/3349.bugfix b/towncrier/newsfragments/3349.bugfix new file mode 100644 index 00000000..b1dd1e0a --- /dev/null +++ b/towncrier/newsfragments/3349.bugfix @@ -0,0 +1 @@ +Fix email-forwarding when set from the web interface From 6173f5e434c0897f74ad6f400f9e63e24e7b233c Mon Sep 17 00:00:00 2001 From: Florent Daigniere Date: Mon, 29 Jul 2024 20:33:32 +0200 Subject: [PATCH 2/4] simplify again the logic (cherry picked from commit f003c0e712ba609457695ccfa89f55a4fa544c32) --- core/admin/mailu/ui/views/users.py | 9 ++++----- core/admin/mailu/utils.py | 1 + 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/admin/mailu/ui/views/users.py b/core/admin/mailu/ui/views/users.py index df0a716d..3b9e9485 100644 --- a/core/admin/mailu/ui/views/users.py +++ b/core/admin/mailu/ui/views/users.py @@ -92,14 +92,12 @@ def user_settings(user_email): user = models.User.query.get(user_email_or_current) or flask.abort(404) form = forms.UserSettingsForm(obj=user) utils.formatCSVField(form.forward_destination) - form.forward_enabled.data = bool(flask.request.form.get('forward_enabled', False)) if form.validate_on_submit(): + user.forward_enabled = bool(flask.request.form.get('forward_enabled', False)) if form.forward_enabled and (form.forward_destination.data in ['', None] or type(form.forward_destination.data) is list): flask.flash('Destination email address is missing', 'error') return flask.redirect( - flask.url_for('.user_settings', user=user.email)) - if not user.forward_enabled and not flask.request.form.get('forward_destination', None): - form.forward_destination.data = "" + flask.url_for('.user_settings', user_email=user_email)) form.forward_destination.data = form.forward_destination.data.replace(" ","").split(",") form.populate_obj(user) models.db.session.commit() @@ -109,8 +107,9 @@ def user_settings(user_email): return flask.redirect( flask.url_for('.user_list', domain_name=user.domain.name)) elif form.is_submitted() and not form.validate(): + flask.flash('Error validating the form', 'error') return flask.redirect( - flask.url_for('.user_settings', user=user.email)) + flask.url_for('.user_settings', user_email=user_email)) return flask.render_template('user/settings.html', form=form, user=user) def _process_password_change(form, user_email): diff --git a/core/admin/mailu/utils.py b/core/admin/mailu/utils.py index 13522d79..2af352db 100644 --- a/core/admin/mailu/utils.py +++ b/core/admin/mailu/utils.py @@ -532,6 +532,7 @@ def isBadOrPwned(form): def formatCSVField(field): if not field.data: + field.data = '' return if isinstance(field.data,str): data = field.data.replace(" ","").split(",") From ca6488e2ffa6c82b5aaf216158c0a9ca957e10a1 Mon Sep 17 00:00:00 2001 From: Florent Daigniere Date: Tue, 30 Jul 2024 10:41:17 +0200 Subject: [PATCH 3/4] as per review (cherry picked from commit 0eafff00c14b44e7e6970c6fdcfa4aa54553d97e) --- core/admin/mailu/ui/views/users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/admin/mailu/ui/views/users.py b/core/admin/mailu/ui/views/users.py index 3b9e9485..a430db4b 100644 --- a/core/admin/mailu/ui/views/users.py +++ b/core/admin/mailu/ui/views/users.py @@ -94,7 +94,7 @@ def user_settings(user_email): utils.formatCSVField(form.forward_destination) if form.validate_on_submit(): user.forward_enabled = bool(flask.request.form.get('forward_enabled', False)) - if form.forward_enabled and (form.forward_destination.data in ['', None] or type(form.forward_destination.data) is list): + if form.forward_enabled and not form.forward_destination.data: flask.flash('Destination email address is missing', 'error') return flask.redirect( flask.url_for('.user_settings', user_email=user_email)) From 95edcd8dcb0b2e040c1e1715c42cd78b25a9c885 Mon Sep 17 00:00:00 2001 From: Florent Daigniere Date: Tue, 30 Jul 2024 11:51:25 +0200 Subject: [PATCH 4/4] As per review (cherry picked from commit 11e72e70349c3ab89e8a6c538deb15692a40d7c0) --- core/admin/mailu/ui/views/users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/admin/mailu/ui/views/users.py b/core/admin/mailu/ui/views/users.py index a430db4b..6487c326 100644 --- a/core/admin/mailu/ui/views/users.py +++ b/core/admin/mailu/ui/views/users.py @@ -94,7 +94,7 @@ def user_settings(user_email): utils.formatCSVField(form.forward_destination) if form.validate_on_submit(): user.forward_enabled = bool(flask.request.form.get('forward_enabled', False)) - if form.forward_enabled and not form.forward_destination.data: + if user.forward_enabled and not form.forward_destination.data: flask.flash('Destination email address is missing', 'error') return flask.redirect( flask.url_for('.user_settings', user_email=user_email))