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:
parent
a41fe500d6
commit
64765e5199
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue