forked-synapse/synapse/config/emailconfig.py

90 lines
3.2 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# Copyright 2015, 2016 OpenMarket Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This file can't be called email.py because if it is, we cannot:
import email.utils
from ._base import Config
class EmailConfig(Config):
def read_config(self, config):
self.email_enable_notifs = False
2016-04-29 09:27:40 -04:00
email_config = config.get("email", {})
2016-04-29 09:46:18 -04:00
self.email_enable_notifs = email_config.get("enable_notifs", False)
2016-04-20 13:35:29 -04:00
if self.email_enable_notifs:
2016-04-29 14:13:52 -04:00
# make sure we can import the required deps
import jinja2
import bleach
# prevent unused warnings
jinja2
bleach
2016-04-20 13:35:29 -04:00
required = [
"smtp_host",
"smtp_port",
"notif_from",
"template_dir",
"notif_template_html",
"notif_template_text",
2016-04-20 13:35:29 -04:00
]
missing = []
for k in required:
if k not in email_config:
missing.append(k)
if (len(missing) > 0):
raise RuntimeError(
2016-04-20 13:35:29 -04:00
"email.enable_notifs is True but required keys are missing: %s" %
2016-04-28 10:16:30 -04:00
(", ".join(["email." + k for k in missing]),)
)
if config.get("public_baseurl") is None:
raise RuntimeError(
"email.enable_notifs is True but no public_baseurl is set"
)
self.email_smtp_host = email_config["smtp_host"]
self.email_smtp_port = email_config["smtp_port"]
self.email_notif_from = email_config["notif_from"]
2016-04-20 13:35:29 -04:00
self.email_template_dir = email_config["template_dir"]
self.email_notif_template_html = email_config["notif_template_html"]
self.email_notif_template_text = email_config["notif_template_text"]
# make sure it's valid
parsed = email.utils.parseaddr(self.email_notif_from)
if parsed[1] == '':
raise RuntimeError("Invalid notif_from address")
else:
self.email_enable_notifs = False
2016-04-20 13:35:29 -04:00
# Not much point setting defaults for the rest: it would be an
# error for them to be used.
def default_config(self, config_dir_path, server_name, **kwargs):
return """
# Enable sending emails for notification events
2016-05-04 06:37:21 -04:00
#email:
# enable_notifs: false
# smtp_host: "localhost"
# smtp_port: 25
2016-04-20 13:35:29 -04:00
# notif_from: Your Friendly Matrix Home Server <noreply@example.com>
# template_dir: res/templates
2016-05-04 06:37:21 -04:00
# notif_template_html: notif_mail.html
# notif_template_text: notif_mail.txt
"""