summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-11-07 11:22:12 +0000
committerErik Johnston <erik@matrix.org>2014-11-07 11:22:12 +0000
commit3b4dec442da51c6c999dd946db6ea6ce5f07ff0c (patch)
treeaad98c0fe05b4e403db5c37591124c1557ef3d22 /synapse
parentFix bug in _get_auth_chain_txn (diff)
downloadsynapse-3b4dec442da51c6c999dd946db6ea6ce5f07ff0c.tar.xz
Return auth chain when handling send_join
Diffstat (limited to 'synapse')
-rw-r--r--synapse/federation/replication.py20
-rw-r--r--synapse/handlers/federation.py15
2 files changed, 27 insertions, 8 deletions
diff --git a/synapse/federation/replication.py b/synapse/federation/replication.py
index 92a9678e2c..d1eddf249d 100644
--- a/synapse/federation/replication.py
+++ b/synapse/federation/replication.py
@@ -426,8 +426,12 @@ class ReplicationLayer(object):
     @defer.inlineCallbacks
     def on_send_join_request(self, origin, content):
         pdu = Pdu(**content)
-        state = yield self.handler.on_send_join_request(origin, pdu)
-        defer.returnValue((200, self._transaction_from_pdus(state).get_dict()))
+        res_pdus = yield self.handler.on_send_join_request(origin, pdu)
+
+        defer.returnValue((200, {
+            "state": [p.get_dict() for p in res_pdus["state"]],
+            "auth_chain": [p.get_dict() for p in res_pdus["auth_chain"]],
+        }))
 
     @defer.inlineCallbacks
     def make_join(self, destination, context, user_id):
@@ -451,11 +455,17 @@ class ReplicationLayer(object):
         )
 
         logger.debug("Got content: %s", content)
-        pdus = [Pdu(outlier=True, **p) for p in content.get("pdus", [])]
-        for pdu in pdus:
+        state = [Pdu(outlier=True, **p) for p in content.get("state", [])]
+        for pdu in state:
             yield self._handle_new_pdu(destination, pdu)
 
-        defer.returnValue(pdus)
+        auth_chain = [
+            Pdu(outlier=True, **p) for p in content.get("auth_chain", [])
+        ]
+        for pdu in auth_chain:
+            yield self._handle_new_pdu(destination, pdu)
+
+        defer.returnValue(state)
 
     @log_function
     def _get_persisted_pdu(self, event_id):
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 09593303a4..c193da12b7 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -366,10 +366,19 @@ class FederationHandler(BaseHandler):
 
         yield self.replication_layer.send_pdu(new_pdu)
 
-        defer.returnValue([
+        auth_chain = yield self.store.get_auth_chain(event.event_id)
+        pdu_auth_chain = [
             self.pdu_codec.pdu_from_event(e)
-            for e in event.state_events.values()
-        ])
+            for e in auth_chain
+        ]
+
+        defer.returnValue({
+            "state": [
+                self.pdu_codec.pdu_from_event(e)
+                for e in event.state_events.values()
+            ],
+            "auth_chain": pdu_auth_chain,
+        })
 
     @defer.inlineCallbacks
     def get_state_for_pdu(self, event_id):