diff options
author | Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> | 2022-10-12 14:37:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-12 14:37:20 +0100 |
commit | 9c23442ac909afe3d827534b00d52ee182d2f423 (patch) | |
tree | df4952945972b59cd88f996840bb409be3d61090 /synapse/handlers/federation.py | |
parent | Bump bleach from 4.1.0 to 5.0.1 (#14116) (diff) | |
download | synapse-9c23442ac909afe3d827534b00d52ee182d2f423.tar.xz |
Correct field name for stripped state events when knocking. `knock_state_events` -> `knock_room_state` (#14102)
Diffstat (limited to '')
-rw-r--r-- | synapse/handlers/federation.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py index 986ffed3d5..44e70c6c3c 100644 --- a/synapse/handlers/federation.py +++ b/synapse/handlers/federation.py @@ -781,15 +781,27 @@ class FederationHandler: # Send the signed event back to the room, and potentially receive some # further information about the room in the form of partial state events - stripped_room_state = await self.federation_client.send_knock( - target_hosts, event - ) + knock_response = await self.federation_client.send_knock(target_hosts, event) # Store any stripped room state events in the "unsigned" key of the event. # This is a bit of a hack and is cribbing off of invites. Basically we # store the room state here and retrieve it again when this event appears # in the invitee's sync stream. It is stripped out for all other local users. - event.unsigned["knock_room_state"] = stripped_room_state["knock_state_events"] + stripped_room_state = ( + knock_response.get("knock_room_state") + # Since v1.37, Synapse incorrectly used "knock_state_events" for this field. + # Thus, we also check for a 'knock_state_events' to support old instances. + # See https://github.com/matrix-org/synapse/issues/14088. + or knock_response.get("knock_state_events") + ) + + if stripped_room_state is None: + raise KeyError( + "Missing 'knock_room_state' (or legacy 'knock_state_events') field in " + "send_knock response" + ) + + event.unsigned["knock_room_state"] = stripped_room_state context = EventContext.for_outlier(self._storage_controllers) stream_id = await self._federation_event_handler.persist_events_and_notify( |