mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-21 03:42:55 +03:00
Merge pull request #3123 from matrix-org/dbkr/user_directory_defer_to_is
Option to defer user_directory search to an ID server
This commit is contained in:
commit
d7fad867fa
2 changed files with 19 additions and 0 deletions
|
@ -23,11 +23,15 @@ class UserDirectoryConfig(Config):
|
||||||
|
|
||||||
def read_config(self, config):
|
def read_config(self, config):
|
||||||
self.user_directory_search_all_users = False
|
self.user_directory_search_all_users = False
|
||||||
|
self.user_directory_defer_to_id_server = None
|
||||||
user_directory_config = config.get("user_directory", None)
|
user_directory_config = config.get("user_directory", None)
|
||||||
if user_directory_config:
|
if user_directory_config:
|
||||||
self.user_directory_search_all_users = (
|
self.user_directory_search_all_users = (
|
||||||
user_directory_config.get("search_all_users", False)
|
user_directory_config.get("search_all_users", False)
|
||||||
)
|
)
|
||||||
|
self.user_directory_defer_to_id_server = (
|
||||||
|
user_directory_config.get("defer_to_id_server", None)
|
||||||
|
)
|
||||||
|
|
||||||
def default_config(self, config_dir_path, server_name, **kwargs):
|
def default_config(self, config_dir_path, server_name, **kwargs):
|
||||||
return """
|
return """
|
||||||
|
@ -41,4 +45,9 @@ class UserDirectoryConfig(Config):
|
||||||
#
|
#
|
||||||
#user_directory:
|
#user_directory:
|
||||||
# search_all_users: false
|
# search_all_users: false
|
||||||
|
#
|
||||||
|
# If this is set, user search will be delegated to this ID server instead
|
||||||
|
# of synapse performing the search itself.
|
||||||
|
# This is an experimental API.
|
||||||
|
# defer_to_id_server: id.example.com
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
|
from signedjson.sign import sign_json
|
||||||
|
|
||||||
from synapse.api.errors import SynapseError
|
from synapse.api.errors import SynapseError
|
||||||
from synapse.http.servlet import RestServlet, parse_json_object_from_request
|
from synapse.http.servlet import RestServlet, parse_json_object_from_request
|
||||||
|
@ -36,6 +37,7 @@ class UserDirectorySearchRestServlet(RestServlet):
|
||||||
self.hs = hs
|
self.hs = hs
|
||||||
self.auth = hs.get_auth()
|
self.auth = hs.get_auth()
|
||||||
self.user_directory_handler = hs.get_user_directory_handler()
|
self.user_directory_handler = hs.get_user_directory_handler()
|
||||||
|
self.http_client = hs.get_simple_http_client()
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def on_POST(self, request):
|
def on_POST(self, request):
|
||||||
|
@ -60,6 +62,14 @@ class UserDirectorySearchRestServlet(RestServlet):
|
||||||
|
|
||||||
body = parse_json_object_from_request(request)
|
body = parse_json_object_from_request(request)
|
||||||
|
|
||||||
|
if self.hs.config.user_directory_defer_to_id_server:
|
||||||
|
signed_body = sign_json(body, self.hs.hostname, self.hs.config.signing_key[0])
|
||||||
|
url = "http://%s/_matrix/identity/api/v1/user_directory/search" % (
|
||||||
|
self.hs.config.user_directory_defer_to_id_server,
|
||||||
|
)
|
||||||
|
resp = yield self.http_client.post_json_get_json(url, signed_body)
|
||||||
|
defer.returnValue((200, resp))
|
||||||
|
|
||||||
limit = body.get("limit", 10)
|
limit = body.get("limit", 10)
|
||||||
limit = min(limit, 50)
|
limit = min(limit, 50)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue