When we do an invite rejection, save the signed leave event to the db

During a rejection of an invite received over federation, we ask a remote
server to make us a `leave` event, then sign it, then send that with
`send_leave`.

We were saving the *unsigned* version of the event (which has a different event
id to the signed version) to our db (and sending it to the clients), whereas
other servers in the room will have seen the *signed* version. We're not aware
of any actual problems that caused, except that it makes the database confusing
to look at and generally leaves the room in a weird state.
This commit is contained in:
Richard van der Hoff 2017-04-07 14:39:32 +01:00
parent a41fe500d6
commit 64765e5199

View File

@ -1101,15 +1101,15 @@ class FederationHandler(BaseHandler):
user_id, user_id,
"leave" "leave"
) )
signed_event = self._sign_event(event) event = self._sign_event(event)
except SynapseError: except SynapseError:
raise raise
except CodeMessageException as e: except CodeMessageException as e:
logger.warn("Failed to reject invite: %s", e) logger.warn("Failed to reject invite: %s", e)
raise SynapseError(500, "Failed to reject invite") raise SynapseError(500, "Failed to reject invite")
# Try the host we successfully got a response to /make_join/ # Try the host that we succesfully called /make_leave/ on first for
# request first. # the /send_leave/ request.
try: try:
target_hosts.remove(origin) target_hosts.remove(origin)
target_hosts.insert(0, origin) target_hosts.insert(0, origin)
@ -1119,7 +1119,7 @@ class FederationHandler(BaseHandler):
try: try:
yield self.replication_layer.send_leave( yield self.replication_layer.send_leave(
target_hosts, target_hosts,
signed_event event
) )
except SynapseError: except SynapseError:
raise raise