summary refs log tree commit diff
path: root/synapse/app
diff options
context:
space:
mode:
authorDavid Baker <dbkr@users.noreply.github.com>2017-11-02 15:18:37 +0000
committerGitHub <noreply@github.com>2017-11-02 15:18:37 +0000
commitd4553818a082d21217640e031e7bccc581de538a (patch)
treec02106bc62b09ddec822f9eef669aad3e0387808 /synapse/app
parentMerge pull request #2626 from matrix-org/rav/refactor_module_api (diff)
parentAdd a hook for custom rest endpoints (diff)
downloadsynapse-d4553818a082d21217640e031e7bccc581de538a.tar.xz
Merge pull request #2627 from matrix-org/rav/custom_rest_endpoints
Add a hook for custom rest endpoints
Diffstat (limited to 'synapse/app')
-rwxr-xr-xsynapse/app/homeserver.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index 97d2b01a5e..9e26146338 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -30,6 +30,8 @@ from synapse.config._base import ConfigError
 from synapse.config.homeserver import HomeServerConfig
 from synapse.crypto import context_factory
 from synapse.federation.transport.server import TransportLayerServer
+from synapse.module_api import ModuleApi
+from synapse.http.additional_resource import AdditionalResource
 from synapse.http.server import RootRedirect
 from synapse.http.site import SynapseSite
 from synapse.metrics import register_memory_metrics
@@ -49,6 +51,7 @@ from synapse.storage.prepare_database import UpgradeDatabaseException, prepare_d
 from synapse.util.httpresourcetree import create_resource_tree
 from synapse.util.logcontext import LoggingContext
 from synapse.util.manhole import manhole
+from synapse.util.module_loader import load_module
 from synapse.util.rlimit import change_resource_limit
 from synapse.util.versionstring import get_version_string
 from twisted.application import service
@@ -111,6 +114,15 @@ class SynapseHomeServer(HomeServer):
                     name, res.get("compress", False),
                 ))
 
+        additional_resources = listener_config.get("additional_resources", {})
+        logger.debug("Configuring additional resources: %r",
+                     additional_resources)
+        module_api = ModuleApi(self, self.get_auth_handler())
+        for path, resmodule in additional_resources.items():
+            handler_cls, config = load_module(resmodule)
+            handler = handler_cls(config, module_api)
+            resources[path] = AdditionalResource(self, handler.handle_request)
+
         if WEB_CLIENT_PREFIX in resources:
             root_resource = RootRedirect(WEB_CLIENT_PREFIX)
         else: