|
|
|
@ -78,23 +78,17 @@ ALLOWED_ATTRS = { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Mailer(object): |
|
|
|
|
def __init__(self, hs, app_name): |
|
|
|
|
def __init__(self, hs, app_name, notif_template_html, notif_template_text): |
|
|
|
|
self.hs = hs |
|
|
|
|
self.notif_template_html = notif_template_html |
|
|
|
|
self.notif_template_text = notif_template_text |
|
|
|
|
|
|
|
|
|
self.store = self.hs.get_datastore() |
|
|
|
|
self.macaroon_gen = self.hs.get_macaroon_generator() |
|
|
|
|
self.state_handler = self.hs.get_state_handler() |
|
|
|
|
loader = jinja2.FileSystemLoader(self.hs.config.email_template_dir) |
|
|
|
|
self.app_name = app_name |
|
|
|
|
|
|
|
|
|
logger.info("Created Mailer for app_name %s" % app_name) |
|
|
|
|
env = jinja2.Environment(loader=loader) |
|
|
|
|
env.filters["format_ts"] = format_ts_filter |
|
|
|
|
env.filters["mxc_to_http"] = self.mxc_to_http_filter |
|
|
|
|
self.notif_template_html = env.get_template( |
|
|
|
|
self.hs.config.email_notif_template_html |
|
|
|
|
) |
|
|
|
|
self.notif_template_text = env.get_template( |
|
|
|
|
self.hs.config.email_notif_template_text |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
@defer.inlineCallbacks |
|
|
|
|
def send_notification_mail(self, app_id, user_id, email_address, |
|
|
|
@ -481,28 +475,6 @@ class Mailer(object): |
|
|
|
|
urllib.urlencode(params), |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def mxc_to_http_filter(self, value, width, height, resize_method="crop"): |
|
|
|
|
if value[0:6] != "mxc://": |
|
|
|
|
return "" |
|
|
|
|
|
|
|
|
|
serverAndMediaId = value[6:] |
|
|
|
|
fragment = None |
|
|
|
|
if '#' in serverAndMediaId: |
|
|
|
|
(serverAndMediaId, fragment) = serverAndMediaId.split('#', 1) |
|
|
|
|
fragment = "#" + fragment |
|
|
|
|
|
|
|
|
|
params = { |
|
|
|
|
"width": width, |
|
|
|
|
"height": height, |
|
|
|
|
"method": resize_method, |
|
|
|
|
} |
|
|
|
|
return "%s_matrix/media/v1/thumbnail/%s?%s%s" % ( |
|
|
|
|
self.hs.config.public_baseurl, |
|
|
|
|
serverAndMediaId, |
|
|
|
|
urllib.urlencode(params), |
|
|
|
|
fragment or "", |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def safe_markup(raw_html): |
|
|
|
|
return jinja2.Markup(bleach.linkify(bleach.clean( |
|
|
|
@ -543,3 +515,52 @@ def string_ordinal_total(s): |
|
|
|
|
|
|
|
|
|
def format_ts_filter(value, format): |
|
|
|
|
return time.strftime(format, time.localtime(value / 1000)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def load_jinja2_templates(config): |
|
|
|
|
"""Load the jinja2 email templates from disk |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
(notif_template_html, notif_template_text) |
|
|
|
|
""" |
|
|
|
|
logger.info("loading jinja2") |
|
|
|
|
|
|
|
|
|
loader = jinja2.FileSystemLoader(config.email_template_dir) |
|
|
|
|
env = jinja2.Environment(loader=loader) |
|
|
|
|
env.filters["format_ts"] = format_ts_filter |
|
|
|
|
env.filters["mxc_to_http"] = _create_mxc_to_http_filter(config) |
|
|
|
|
|
|
|
|
|
notif_template_html = env.get_template( |
|
|
|
|
config.email_notif_template_html |
|
|
|
|
) |
|
|
|
|
notif_template_text = env.get_template( |
|
|
|
|
config.email_notif_template_text |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
return notif_template_html, notif_template_text |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _create_mxc_to_http_filter(config): |
|
|
|
|
def mxc_to_http_filter(value, width, height, resize_method="crop"): |
|
|
|
|
if value[0:6] != "mxc://": |
|
|
|
|
return "" |
|
|
|
|
|
|
|
|
|
serverAndMediaId = value[6:] |
|
|
|
|
fragment = None |
|
|
|
|
if '#' in serverAndMediaId: |
|
|
|
|
(serverAndMediaId, fragment) = serverAndMediaId.split('#', 1) |
|
|
|
|
fragment = "#" + fragment |
|
|
|
|
|
|
|
|
|
params = { |
|
|
|
|
"width": width, |
|
|
|
|
"height": height, |
|
|
|
|
"method": resize_method, |
|
|
|
|
} |
|
|
|
|
return "%s_matrix/media/v1/thumbnail/%s?%s%s" % ( |
|
|
|
|
config.public_baseurl, |
|
|
|
|
serverAndMediaId, |
|
|
|
|
urllib.urlencode(params), |
|
|
|
|
fragment or "", |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
return mxc_to_http_filter |
|
|
|
|