Change default email address, refactored email error messages into a helper function

This commit is contained in:
petermaksymo 2021-12-15 21:53:19 -05:00
parent 75a1640c37
commit d8d1f94c95
10 changed files with 44 additions and 41 deletions

View file

@ -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" \

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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")

View file

@ -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")

View file

@ -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"])

View file

@ -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

View file

@ -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)