From c54e56a73eeb626537441ad962f6cb5e458bc8b4 Mon Sep 17 00:00:00 2001 From: timedout Date: Fri, 26 Jun 2026 06:11:22 +0100 Subject: [PATCH] style: Remove `implement` for AccessCheck, rename `check` to `assert` --- src/api/server/backfill.rs | 2 +- src/api/server/event.rs | 2 +- src/api/server/event_auth.rs | 2 +- src/api/server/get_missing_events.rs | 2 +- src/api/server/state.rs | 2 +- src/api/server/state_ids.rs | 2 +- src/api/server/utils.rs | 88 +++++++++++++++------------- 7 files changed, 52 insertions(+), 48 deletions(-) diff --git a/src/api/server/backfill.rs b/src/api/server/backfill.rs index 7e0b18f00..73cb0f7ae 100644 --- a/src/api/server/backfill.rs +++ b/src/api/server/backfill.rs @@ -32,7 +32,7 @@ pub(crate) async fn get_backfill_route( room_id: &body.room_id, event_id: None, } - .check() + .assert() .await?; if !services .rooms diff --git a/src/api/server/event.rs b/src/api/server/event.rs index ff82f3d00..9e0c8d751 100644 --- a/src/api/server/event.rs +++ b/src/api/server/event.rs @@ -44,7 +44,7 @@ pub(crate) async fn get_event_route( room_id, event_id: Some(&body.event_id), } - .check() + .assert() .await?; if !services diff --git a/src/api/server/event_auth.rs b/src/api/server/event_auth.rs index 66fae5e01..fd24cefd1 100644 --- a/src/api/server/event_auth.rs +++ b/src/api/server/event_auth.rs @@ -23,7 +23,7 @@ pub(crate) async fn get_event_authorization_route( room_id: &body.room_id, event_id: None, } - .check() + .assert() .await?; if services diff --git a/src/api/server/get_missing_events.rs b/src/api/server/get_missing_events.rs index a4915bb8b..a5b3c41d3 100644 --- a/src/api/server/get_missing_events.rs +++ b/src/api/server/get_missing_events.rs @@ -26,7 +26,7 @@ pub(crate) async fn get_missing_events_route( room_id: &body.room_id, event_id: None, } - .check() + .assert() .await?; if !services diff --git a/src/api/server/state.rs b/src/api/server/state.rs index 709c62fb6..90aa4253e 100644 --- a/src/api/server/state.rs +++ b/src/api/server/state.rs @@ -21,7 +21,7 @@ pub(crate) async fn get_room_state_route( room_id: &body.room_id, event_id: None, } - .check() + .assert() .await?; if services diff --git a/src/api/server/state_ids.rs b/src/api/server/state_ids.rs index bd7414f7a..81fadb167 100644 --- a/src/api/server/state_ids.rs +++ b/src/api/server/state_ids.rs @@ -22,7 +22,7 @@ pub(crate) async fn get_room_state_ids_route( room_id: &body.room_id, event_id: None, } - .check() + .assert() .await?; if services diff --git a/src/api/server/utils.rs b/src/api/server/utils.rs index e698f235e..7b9103876 100644 --- a/src/api/server/utils.rs +++ b/src/api/server/utils.rs @@ -10,52 +10,56 @@ pub(super) struct AccessCheck<'a> { pub(super) event_id: Option<&'a EventId>, } -#[implement(AccessCheck, params = "<'_>")] -pub(super) async fn check(&self) -> Result { - let acl_check = self - .services - .rooms - .event_handler - .acl_check(self.origin, self.room_id) - .map(|result| result.is_ok()); +impl<'a> AccessCheck { + /// Asserts that the server has access to the room and event (if any). + /// If the server is permitted, `Ok(())` is returned. Otherwise, a Forbidden + /// error is returned. + pub(super) async fn assert(&self) -> Result { + let acl_check = self + .services + .rooms + .event_handler + .acl_check(self.origin, self.room_id) + .map(|result| result.is_ok()); - let world_readable = self - .services - .rooms - .state_accessor - .is_world_readable(self.room_id); + let world_readable = self + .services + .rooms + .state_accessor + .is_world_readable(self.room_id); - let server_in_room = self - .services - .rooms - .state_cache - .server_in_room(self.origin, self.room_id); + let server_in_room = self + .services + .rooms + .state_cache + .server_in_room(self.origin, self.room_id); - let server_can_see: OptionFuture<_> = self - .event_id - .map(|event_id| { - self.services.rooms.state_accessor.server_can_see_event( - self.origin, - self.room_id, - event_id, - ) - }) - .into(); + let server_can_see: OptionFuture<_> = self + .event_id + .map(|event_id| { + self.services.rooms.state_accessor.server_can_see_event( + self.origin, + self.room_id, + event_id, + ) + }) + .into(); - let (world_readable, server_in_room, server_can_see, acl_check) = - join!(world_readable, server_in_room, server_can_see, acl_check); + let (world_readable, server_in_room, server_can_see, acl_check) = + join!(world_readable, server_in_room, server_can_see, acl_check); - if !acl_check { - return Err!(Request(Forbidden("Server access denied."))); + if !acl_check { + return Err!(Request(Forbidden("Server access denied."))); + } + + if !world_readable && !server_in_room { + return Err!(Request(Forbidden("Server is not in room."))); + } + + if server_can_see.is_some_and(is_false!()) { + return Err!(Request(Forbidden("Server is not allowed to see event."))); + } + + Ok(()) } - - if !world_readable && !server_in_room { - return Err!(Request(Forbidden("Server is not in room."))); - } - - if server_can_see.is_some_and(is_false!()) { - return Err!(Request(Forbidden("Server is not allowed to see event."))); - } - - Ok(()) }