diff --git a/src/api/server/event.rs b/src/api/server/event.rs index bea167d2b..403fbeb47 100644 --- a/src/api/server/event.rs +++ b/src/api/server/event.rs @@ -22,6 +22,15 @@ pub(crate) async fn get_event_route( .await .map_err(|_| err!(Request(NotFound("Event not found."))))?; + if services + .rooms + .pdu_metadata + .is_event_rejected(&body.event_id) + .await + { + return Err!(Request(NotFound("Event not found."))); + } + let room_id: &RoomId = event .get("room_id") .and_then(|val| val.as_str()) diff --git a/src/api/server/event_auth.rs b/src/api/server/event_auth.rs index b99f7918f..70caa16f0 100644 --- a/src/api/server/event_auth.rs +++ b/src/api/server/event_auth.rs @@ -26,6 +26,15 @@ pub(crate) async fn get_event_authorization_route( .check() .await?; + if services + .rooms + .pdu_metadata + .is_event_rejected(&body.event_id) + .await + { + return Err!(Request(NotFound("Event not found."))); + } + if !services .rooms .state_cache diff --git a/src/api/server/get_missing_events.rs b/src/api/server/get_missing_events.rs index dd6725400..25ec86d3d 100644 --- a/src/api/server/get_missing_events.rs +++ b/src/api/server/get_missing_events.rs @@ -78,6 +78,15 @@ pub(crate) async fn get_missing_events_route( body.room_id ))); } + if services + .rooms + .pdu_metadata + .is_event_rejected(pdu.event_id()) + .await + { + debug!(%next_event_id, "event rejected, not traversing"); + continue; + } if !services .rooms diff --git a/src/api/server/state.rs b/src/api/server/state.rs index 822c35b60..bc4d32274 100644 --- a/src/api/server/state.rs +++ b/src/api/server/state.rs @@ -24,6 +24,15 @@ pub(crate) async fn get_room_state_route( .check() .await?; + if services + .rooms + .pdu_metadata + .is_event_rejected(&body.event_id) + .await + { + return Err!(Request(NotFound("Event not found."))); + } + if !services .rooms .state_cache diff --git a/src/api/server/state_ids.rs b/src/api/server/state_ids.rs index 5cda24b86..e2b852a7e 100644 --- a/src/api/server/state_ids.rs +++ b/src/api/server/state_ids.rs @@ -25,6 +25,15 @@ pub(crate) async fn get_room_state_ids_route( .check() .await?; + if services + .rooms + .pdu_metadata + .is_event_rejected(&body.event_id) + .await + { + return Err!(Request(NotFound("Event not found."))); + } + if !services .rooms .state_cache