diff options
author | Erik Johnston <erik@matrix.org> | 2016-08-03 14:47:37 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2016-08-03 14:47:37 +0100 |
commit | e3a720217a9d200a7c3db8305df53ef8bf76f565 (patch) | |
tree | 6bbae434264801172f0859f0092a70c5fc6364c9 /synapse/federation/federation_server.py | |
parent | Print status code in federation_client.py (diff) | |
download | synapse-e3a720217a9d200a7c3db8305df53ef8bf76f565.tar.xz |
Add /state_ids federation API
The new API only returns the event_ids for the state, as most requesters will already have the vast majority of the events already.
Diffstat (limited to 'synapse/federation/federation_server.py')
-rw-r--r-- | synapse/federation/federation_server.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py index 612d274bdb..40e9fda0eb 100644 --- a/synapse/federation/federation_server.py +++ b/synapse/federation/federation_server.py @@ -215,6 +215,27 @@ class FederationServer(FederationBase): defer.returnValue((200, resp)) @defer.inlineCallbacks + def on_state_ids_request(self, origin, room_id, event_id): + if not event_id: + raise NotImplementedError("Specify an event") + + in_room = yield self.auth.check_host_in_room(room_id, origin) + if not in_room: + raise AuthError(403, "Host not in room.") + + pdus = yield self.handler.get_state_for_pdu( + room_id, event_id, + ) + auth_chain = yield self.store.get_auth_chain( + [pdu.event_id for pdu in pdus] + ) + + defer.returnValue((200, { + "pdus": [pdu.event_id for pdu in pdus], + "auth_chain": [pdu.event_id for pdu in auth_chain], + })) + + @defer.inlineCallbacks def _on_context_state_request_compute(self, room_id, event_id): pdus = yield self.handler.get_state_for_pdu( room_id, event_id, |