diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2019-01-07 10:14:31 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-07 10:14:31 +0000 |
commit | b7c021881293c60ad0874f6d15375a9b7a40c22c (patch) | |
tree | 1ce62a02f81d408a2d49c8ba13a58f638905534b /synapse/config/server.py | |
parent | fix the check for whether `is_url` to match all the other ones in codebase (#... (diff) | |
download | synapse-b7c021881293c60ad0874f6d15375a9b7a40c22c.tar.xz |
Check jinja version for consent resource (#4327)
* Raise a ConfigError if an invalid resource is specified * Require Jinja 2.9 for the consent resource * changelog
Diffstat (limited to 'synapse/config/server.py')
-rw-r--r-- | synapse/config/server.py | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/synapse/config/server.py b/synapse/config/server.py index 120c2b81fc..fb57791098 100644 --- a/synapse/config/server.py +++ b/synapse/config/server.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # Copyright 2014-2016 OpenMarket Ltd -# Copyright 2017 New Vector Ltd +# Copyright 2017-2018 New Vector Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ import logging import os.path from synapse.http.endpoint import parse_and_validate_server_name +from synapse.python_dependencies import DependencyException, check_requirements from ._base import Config, ConfigError @@ -204,6 +205,8 @@ class ServerConfig(Config): ] }) + _check_resource_config(self.listeners) + def default_config(self, server_name, data_dir_path, **kwargs): _, bind_port = parse_and_validate_server_name(server_name) if bind_port is not None: @@ -465,3 +468,36 @@ def _warn_if_webclient_configured(listeners): if name == 'webclient': logger.warning(NO_MORE_WEB_CLIENT_WARNING) return + + +KNOWN_RESOURCES = ( + 'client', + 'consent', + 'federation', + 'keys', + 'media', + 'metrics', + 'replication', + 'static', + 'webclient', +) + + +def _check_resource_config(listeners): + resource_names = set( + res_name + for listener in listeners + for res in listener.get("resources", []) + for res_name in res.get("names", []) + ) + + for resource in resource_names: + if resource not in KNOWN_RESOURCES: + raise ConfigError( + "Unknown listener resource '%s'" % (resource, ) + ) + if resource == "consent": + try: + check_requirements('resources.consent') + except DependencyException as e: + raise ConfigError(e.message) |