Make EventHandler.get_event return None when the requested event is not found (#15298)

This commit is contained in:
Andrew Morgan 2023-03-21 13:23:47 +00:00 committed by GitHub
parent f11fe931f5
commit b6aef59334
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 4 deletions

1
changelog.d/15298.bugfix Normal file
View File

@ -0,0 +1 @@
Fix a bug in which the [`POST /_matrix/client/v3/rooms/{roomId}/report/{eventId}`](https://spec.matrix.org/v1.6/client-server-api/#post_matrixclientv3roomsroomidreporteventid) endpoint would return the wrong error if the user did not have permission to view the event. This aligns Synapse's implementation with [MSC2249](https://github.com/matrix-org/matrix-spec-proposals/pull/2249).

View File

@ -159,15 +159,16 @@ class EventHandler:
Returns: Returns:
An event, or None if there is no event matching this ID. An event, or None if there is no event matching this ID.
Raises: Raises:
SynapseError if there was a problem retrieving this event, or AuthError: if the user does not have the rights to inspect this event.
AuthError if the user does not have the rights to inspect this
event.
""" """
redact_behaviour = ( redact_behaviour = (
EventRedactBehaviour.as_is if show_redacted else EventRedactBehaviour.redact EventRedactBehaviour.as_is if show_redacted else EventRedactBehaviour.redact
) )
event = await self.store.get_event( event = await self.store.get_event(
event_id, check_room_id=room_id, redact_behaviour=redact_behaviour event_id,
check_room_id=room_id,
redact_behaviour=redact_behaviour,
allow_none=True,
) )
if not event: if not event:

View File

@ -84,6 +84,11 @@ class ReportEventTestCase(unittest.HomeserverTestCase):
access_token=self.other_user_tok, access_token=self.other_user_tok,
) )
self.assertEqual(404, channel.code, msg=channel.result["body"]) self.assertEqual(404, channel.code, msg=channel.result["body"])
self.assertEqual(
"Unable to report event: it does not exist or you aren't able to see it.",
channel.json_body["error"],
msg=channel.result["body"],
)
def _assert_status(self, response_status: int, data: JsonDict) -> None: def _assert_status(self, response_status: int, data: JsonDict) -> None:
channel = self.make_request( channel = self.make_request(