From d8d1f94c95df859432c0bac9184d3e5252ad55d6 Mon Sep 17 00:00:00 2001 From: petermaksymo Date: Wed, 15 Dec 2021 21:53:19 -0500 Subject: [PATCH] Change default email address, refactored email error messages into a helper function --- Dockerfile | 2 +- docker-compose.yml | 2 +- docs/configuration.md | 2 +- ihatemoney/conf-templates/ihatemoney.cfg.j2 | 2 +- ihatemoney/default_settings.py | 2 +- ihatemoney/tests/ihatemoney.cfg | 2 +- ihatemoney/tests/ihatemoney_envvar.cfg | 2 +- ihatemoney/tests/main_test.py | 2 +- ihatemoney/utils.py | 28 +++++++++++++- ihatemoney/web.py | 41 +++++---------------- 10 files changed, 44 insertions(+), 41 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9e298167..5bb068a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ ENV DEBUG="False" \ ALLOW_PUBLIC_PROJECT_CREATION="True" \ BABEL_DEFAULT_TIMEZONE="UTC" \ GREENLET_TEST_CPP="no" \ - MAIL_DEFAULT_SENDER="('Budget manager', 'budget@notmyidea.org')" \ + MAIL_DEFAULT_SENDER="('Budget manager', 'admin@email.com')" \ MAIL_PASSWORD="" \ MAIL_PORT="25" \ MAIL_SERVER="localhost" \ diff --git a/docker-compose.yml b/docker-compose.yml index 2890847a..1994e69e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,7 @@ services: - ALLOW_PUBLIC_PROJECT_CREATION=True - BABEL_DEFAULT_TIMEZONE=UTC - GREENLET_TEST_CPP=no - - MAIL_DEFAULT_SENDER=('Budget manager', 'budget@notmyidea.org') + - MAIL_DEFAULT_SENDER=('Budget manager', 'admin@email.com') - MAIL_PASSWORD= - MAIL_PORT=25 - MAIL_SERVER=localhost diff --git a/docs/configuration.md b/docs/configuration.md index 71ae2291..fd65b6db 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -79,7 +79,7 @@ for details. A python tuple describing the name and email address to use when sending emails. -- **Default value:** `("Budget manager", "budget@notmyidea.org")` +- **Default value:** `("Budget manager", "admin@email.com")` - **Production value:** Any tuple you want. ## ACTIVATE_DEMO_PROJECT diff --git a/ihatemoney/conf-templates/ihatemoney.cfg.j2 b/ihatemoney/conf-templates/ihatemoney.cfg.j2 index f33930dd..6e0dbef7 100644 --- a/ihatemoney/conf-templates/ihatemoney.cfg.j2 +++ b/ihatemoney/conf-templates/ihatemoney.cfg.j2 @@ -19,7 +19,7 @@ SQLALCHEMY_TRACK_MODIFICATIONS = False SECRET_KEY = "{{ secret_key }}" # A python tuple describing the name and email adress of the sender of the mails. -MAIL_DEFAULT_SENDER = ("Budget manager", "budget@notmyidea.org") # CUSTOMIZE +MAIL_DEFAULT_SENDER = ("Budget manager", "admin@email.com") # CUSTOMIZE # If set to True, a demonstration project will be activated. ACTIVATE_DEMO_PROJECT = True diff --git a/ihatemoney/default_settings.py b/ihatemoney/default_settings.py index 860e3b1e..0cc113e0 100644 --- a/ihatemoney/default_settings.py +++ b/ihatemoney/default_settings.py @@ -3,7 +3,7 @@ DEBUG = SQLACHEMY_ECHO = False SQLALCHEMY_DATABASE_URI = "sqlite:////tmp/ihatemoney.db" SQLALCHEMY_TRACK_MODIFICATIONS = False SECRET_KEY = "tralala" -MAIL_DEFAULT_SENDER = ("Budget manager", "budget@notmyidea.org") +MAIL_DEFAULT_SENDER = ("Budget manager", "admin@email.com") ACTIVATE_DEMO_PROJECT = True ADMIN_PASSWORD = "" ALLOW_PUBLIC_PROJECT_CREATION = True diff --git a/ihatemoney/tests/ihatemoney.cfg b/ihatemoney/tests/ihatemoney.cfg index 648a01c4..1fe52e5c 100644 --- a/ihatemoney/tests/ihatemoney.cfg +++ b/ihatemoney/tests/ihatemoney.cfg @@ -6,4 +6,4 @@ SQLACHEMY_ECHO = DEBUG SECRET_KEY = "supersecret" -MAIL_DEFAULT_SENDER = ("Budget manager", "budget@notmyidea.org") +MAIL_DEFAULT_SENDER = ("Budget manager", "admin@email.com") diff --git a/ihatemoney/tests/ihatemoney_envvar.cfg b/ihatemoney/tests/ihatemoney_envvar.cfg index 0feec9b8..9517047d 100644 --- a/ihatemoney/tests/ihatemoney_envvar.cfg +++ b/ihatemoney/tests/ihatemoney_envvar.cfg @@ -6,4 +6,4 @@ SQLACHEMY_ECHO = DEBUG SECRET_KEY = "lalatra" -MAIL_DEFAULT_SENDER = ("Budget manager", "budget@notmyidea.org") +MAIL_DEFAULT_SENDER = ("Budget manager", "admin@email.com") diff --git a/ihatemoney/tests/main_test.py b/ihatemoney/tests/main_test.py index 9707bd8a..af8a334a 100644 --- a/ihatemoney/tests/main_test.py +++ b/ihatemoney/tests/main_test.py @@ -26,7 +26,7 @@ class ConfigurationTestCase(BaseTestCase): self.assertFalse(self.app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]) self.assertEqual( self.app.config["MAIL_DEFAULT_SENDER"], - ("Budget manager", "budget@notmyidea.org"), + ("Budget manager", "admin@email.com"), ) self.assertTrue(self.app.config["ACTIVATE_DEMO_PROJECT"]) self.assertTrue(self.app.config["ALLOW_PUBLIC_PROJECT_CREATION"]) diff --git a/ihatemoney/utils.py b/ihatemoney/utils.py index 66f5b6a4..18dbfa12 100644 --- a/ihatemoney/utils.py +++ b/ihatemoney/utils.py @@ -12,7 +12,7 @@ import socket from babel import Locale from babel.numbers import get_currency_name, get_currency_symbol -from flask import current_app, escape, redirect, render_template +from flask import current_app, escape, flash, redirect, render_template from flask_babel import get_locale, lazy_gettext as _ import jinja2 from markupsafe import Markup @@ -47,6 +47,32 @@ def send_email(mail_message): return True +def flash_email_error(error_message, category="danger"): + """Helper to flash a message for email errors. It will also show the + admin email as a contact if public project creation is allowed and + the MAIL_DEFAULT_SENDER is not the default value. + + """ + admin_email = current_app.config.get("MAIL_DEFAULT_SENDER") + error_extension = "." + if ( + admin_email + and admin_email[1] != "admin@email.com" + and current_app.config.get("ALLOW_PUBLIC_PROJECT_CREATION") + ): + error_extension = " or contact the administrator at {}.".format(admin_email[1]) + + flash( + _( + error_message + + " Please check the email configuration of the server {}".format( + error_extension + ) + ), + category=category, + ) + + class Redirect303(HTTPException, RoutingException): """Raise if the map requests a redirect. This is for example the case if diff --git a/ihatemoney/web.py b/ihatemoney/web.py index 1dd6d660..ee833f60 100644 --- a/ihatemoney/web.py +++ b/ihatemoney/web.py @@ -58,6 +58,7 @@ from ihatemoney.models import Bill, LoggingMode, Person, Project, db from ihatemoney.utils import ( LoginThrottler, Redirect303, + flash_email_error, format_form_errors, get_members, list_of_dicts2csv, @@ -334,11 +335,9 @@ def create_project(): else: # Display the error as a simple "info" alert, because it's # not critical and doesn't prevent using the project. - flash( - _( - "We tried to send you an reminder email, but there was an error. " - "You can still use the project normally." - ), + flash_email_error( + "We tried to send you an reminder email, but there was an error. " + "You can still use the project normally.", category="info", ) return redirect(url_for(".list_bills", project_id=project.id)) @@ -363,26 +362,9 @@ def remind_password(): if success: return redirect(url_for(".password_reminder_sent")) else: - # Only display admin email if its not the default and public creation is allowed - admin_email = current_app.config.get("MAIL_DEFAULT_SENDER") - error_extension = "" - if ( - admin_email - and admin_email[1] != "budget@notmyidea.org" - and current_app.config.get("ALLOW_PUBLIC_PROJECT_CREATION") - ): - error_extension = "Contact the administrator at {}.".format( - admin_email[1] - ) - - flash( - _( - "Sorry, there was an error while sending you an email " - "with password reset instructions. " - "Please check the email configuration of the server " - "or contact the administrator. {}".format(error_extension) - ), - category="danger", + flash_email_error( + "Sorry, there was an error while sending you an email with " + "password reset instructions." ) # Fall-through: we stay on the same page and display the form again return render_template("password_reminder.html", form=form) @@ -646,13 +628,8 @@ def invite(): flash(_("Your invitations have been sent"), category="success") return redirect(url_for(".list_bills")) else: - flash( - _( - "Sorry, there was an error while trying to send the invitation emails. " - "Please check the email configuration of the server " - "or contact the administrator." - ), - category="danger", + flash_email_error( + "Sorry, there was an error while trying to send the invitation emails." ) # Fall-through: we stay on the same page and display the form again return render_template("send_invites.html", form=form)