Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/19768.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Allow the Third Party Rules `check_event_allowed()` callback to work with [MSC4291](https://github.com/matrix-org/matrix-spec-proposals/pull/4291) rooms. Contributed by @famedly.
27 changes: 22 additions & 5 deletions synapse/handlers/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -2376,7 +2376,15 @@ async def _rebuild_event_after_third_party_rules(
original_event.room_version, third_party_result
)
self.validator.validate_builder(builder)
assert builder.room_id is not None

# The room_id should only be None for creation events using msc4291
# rooms(version "12" and newer)
if not (
builder.room_version.msc4291_room_ids_as_hashes
and builder.type == EventTypes.Create
):
assert builder.room_id is not None

except SynapseError as e:
raise Exception(
"Third party rules module created an invalid event: " + e.msg,
Expand Down Expand Up @@ -2411,12 +2419,21 @@ async def _rebuild_event_after_third_party_rules(
for k, v in original_event.internal_metadata.get_dict().items():
setattr(builder.internal_metadata, k, v)

# modules can send new state events, so we re-calculate the auth events just in
# case.
prev_event_ids = await self.store.get_prev_events_for_room(builder.room_id)
# Creation events using msc4291 rooms will not have a room_id, and will
# also not have prev_events nor prev_state_events.
# This was asserted above, so makes an acceptable sign that room_id can not be
# None here(which makes mypy happy) but if it is then the lists should be empty.
prev_event_ids = []
if builder.room_id is not None:
# modules can send new state events, so we re-calculate the auth events just
# in case.
prev_event_ids = await self.store.get_prev_events_for_room(builder.room_id)

prev_state_events = None
if original_event.room_version.msc4242_state_dags:
if (
original_event.room_version.msc4242_state_dags
and builder.room_id is not None
):
prev_state_events = list(
await self.store.get_state_dag_extremities(builder.room_id)
)
Expand Down
3 changes: 2 additions & 1 deletion tests/rest/client/test_third_party_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,8 @@ def test_send_event(self) -> None:
"third_party_event_rules": {
"module": __name__ + ".LegacyChangeEvents",
"config": {},
}
},
"default_room_version": "12",
}
)
def test_legacy_check_event_allowed(self) -> None:
Expand Down
Loading