diff options
author | reivilibre <38398653+reivilibre@users.noreply.github.com> | 2019-08-28 09:00:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-28 09:00:21 +0100 |
commit | 7ccc25141578ec612f157d2756fb670200035fb9 (patch) | |
tree | 0a78c77d41a91bce2767b6600a0b5806153f2c45 /synapse/federation/transport/server.py | |
parent | Merge pull request #5864 from matrix-org/erikj/reliable_lookups (diff) | |
parent | Newsfile on one line (diff) | |
download | synapse-7ccc25141578ec612f157d2756fb670200035fb9.tar.xz |
Merge pull request #5859 from matrix-org/rei/msc2197
MSC2197 Search Filters over Federation
Diffstat (limited to 'synapse/federation/transport/server.py')
-rw-r--r-- | synapse/federation/transport/server.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/synapse/federation/transport/server.py b/synapse/federation/transport/server.py index dc53b4b170..f9930b6460 100644 --- a/synapse/federation/transport/server.py +++ b/synapse/federation/transport/server.py @@ -770,6 +770,42 @@ class PublicRoomList(BaseFederationServlet): ) return 200, data + async def on_POST(self, origin, content, query): + # This implements MSC2197 (Search Filtering over Federation) + if not self.allow_access: + raise FederationDeniedError(origin) + + limit = int(content.get("limit", 100)) + since_token = content.get("since", None) + search_filter = content.get("filter", None) + + include_all_networks = content.get("include_all_networks", False) + third_party_instance_id = content.get("third_party_instance_id", None) + + if include_all_networks: + network_tuple = None + if third_party_instance_id is not None: + raise SynapseError( + 400, "Can't use include_all_networks with an explicit network" + ) + elif third_party_instance_id is None: + network_tuple = ThirdPartyInstanceID(None, None) + else: + network_tuple = ThirdPartyInstanceID.from_string(third_party_instance_id) + + if search_filter is None: + logger.warning("Nonefilter") + + data = await self.handler.get_local_public_room_list( + limit=limit, + since_token=since_token, + search_filter=search_filter, + network_tuple=network_tuple, + from_federation=True, + ) + + return 200, data + class FederationVersionServlet(BaseFederationServlet): PATH = "/version" |