diff options
author | Erik Johnston <erik@matrix.org> | 2015-01-29 16:50:23 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-01-29 16:52:33 +0000 |
commit | 78015948a7febb18e000651f72f8f58830a55b93 (patch) | |
tree | 42aac1eb30b723f21074bb814f33d8713008725a /synapse/federation/federation_server.py | |
parent | Make post_json(...) actually send data. (diff) | |
download | synapse-78015948a7febb18e000651f72f8f58830a55b93.tar.xz |
Initial implementation of auth conflict resolution
Diffstat (limited to 'synapse/federation/federation_server.py')
-rw-r--r-- | synapse/federation/federation_server.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py index fc5342afaa..8cff4e6472 100644 --- a/synapse/federation/federation_server.py +++ b/synapse/federation/federation_server.py @@ -230,6 +230,39 @@ class FederationServer(object): "auth_chain": [a.get_pdu_json(time_now) for a in auth_pdus], })) + @defer.inlineCallbacks + def on_query_auth_request(self, origin, content, event_id): + auth_chain = [ + (yield self._check_sigs_and_hash(self.event_from_pdu_json(e))) + for e in content["auth_chain"] + ] + + missing = [ + (yield self._check_sigs_and_hash(self.event_from_pdu_json(e))) + for e in content.get("missing", []) + ] + + ret = yield self.handler.on_query_auth( + origin, event_id, auth_chain, content.get("rejects", []), missing + ) + + time_now = self._clock.time_msec() + send_content = { + "auth_chain": [ + e.get_pdu_json(time_now) + for e in ret["auth_chain"] + ], + "rejects": content.get("rejects", []), + "missing": [ + e.get_pdu_json(time_now) + for e in ret.get("missing", []) + ], + } + + defer.returnValue( + (200, send_content) + ) + @log_function def _get_persisted_pdu(self, origin, event_id, do_auth=True): """ Get a PDU from the database with given origin and id. |