forked from MirrorHub/synapse
Merge pull request #4069 from matrix-org/rav/fix_email_templates_4065
Calculate absolute path for email templates
This commit is contained in:
commit
f62c597d14
3 changed files with 21 additions and 28 deletions
1
changelog.d/4068.bugfix
Normal file
1
changelog.d/4068.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix bug which prevented email notifications from being sent unless an absolute path was given for `email_templates`.
|
|
@ -19,19 +19,13 @@ from __future__ import print_function
|
||||||
import email.utils
|
import email.utils
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
import textwrap
|
|
||||||
|
|
||||||
from ._base import Config
|
import pkg_resources
|
||||||
|
|
||||||
|
from ._base import Config, ConfigError
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
TEMPLATE_DIR_WARNING = """\
|
|
||||||
WARNING: The email notifier is configured to look for templates in '%(template_dir)s',
|
|
||||||
but no templates could be found there. We will fall back to using the example templates;
|
|
||||||
to get rid of this warning, leave 'email.template_dir' unset.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class EmailConfig(Config):
|
class EmailConfig(Config):
|
||||||
def read_config(self, config):
|
def read_config(self, config):
|
||||||
|
@ -78,20 +72,22 @@ class EmailConfig(Config):
|
||||||
self.email_notif_template_html = email_config["notif_template_html"]
|
self.email_notif_template_html = email_config["notif_template_html"]
|
||||||
self.email_notif_template_text = email_config["notif_template_text"]
|
self.email_notif_template_text = email_config["notif_template_text"]
|
||||||
|
|
||||||
self.email_template_dir = email_config.get("template_dir")
|
template_dir = email_config.get("template_dir")
|
||||||
|
# we need an absolute path, because we change directory after starting (and
|
||||||
# backwards-compatibility hack
|
# we don't yet know what auxilliary templates like mail.css we will need).
|
||||||
if (
|
# (Note that loading as package_resources with jinja.PackageLoader doesn't
|
||||||
self.email_template_dir == "res/templates"
|
# work for the same reason.)
|
||||||
and not os.path.isfile(
|
if not template_dir:
|
||||||
os.path.join(self.email_template_dir, self.email_notif_template_text)
|
template_dir = pkg_resources.resource_filename(
|
||||||
|
'synapse', 'res/templates'
|
||||||
)
|
)
|
||||||
):
|
template_dir = os.path.abspath(template_dir)
|
||||||
t = TEMPLATE_DIR_WARNING % {
|
|
||||||
"template_dir": self.email_template_dir,
|
for f in self.email_notif_template_text, self.email_notif_template_html:
|
||||||
}
|
p = os.path.join(template_dir, f)
|
||||||
print(textwrap.fill(t, width=80) + "\n", file=sys.stderr)
|
if not os.path.isfile(p):
|
||||||
self.email_template_dir = None
|
raise ConfigError("Unable to find email template file %s" % (p, ))
|
||||||
|
self.email_template_dir = template_dir
|
||||||
|
|
||||||
self.email_notif_for_new_users = email_config.get(
|
self.email_notif_for_new_users = email_config.get(
|
||||||
"notif_for_new_users", True
|
"notif_for_new_users", True
|
||||||
|
|
|
@ -526,12 +526,8 @@ def load_jinja2_templates(config):
|
||||||
Returns:
|
Returns:
|
||||||
(notif_template_html, notif_template_text)
|
(notif_template_html, notif_template_text)
|
||||||
"""
|
"""
|
||||||
logger.info("loading jinja2")
|
logger.info("loading email templates from '%s'", config.email_template_dir)
|
||||||
|
|
||||||
if config.email_template_dir:
|
|
||||||
loader = jinja2.FileSystemLoader(config.email_template_dir)
|
loader = jinja2.FileSystemLoader(config.email_template_dir)
|
||||||
else:
|
|
||||||
loader = jinja2.PackageLoader('synapse', 'res/templates')
|
|
||||||
env = jinja2.Environment(loader=loader)
|
env = jinja2.Environment(loader=loader)
|
||||||
env.filters["format_ts"] = format_ts_filter
|
env.filters["format_ts"] = format_ts_filter
|
||||||
env.filters["mxc_to_http"] = _create_mxc_to_http_filter(config)
|
env.filters["mxc_to_http"] = _create_mxc_to_http_filter(config)
|
||||||
|
|
Loading…
Reference in a new issue