mirror of
https://forgejo.ellis.link/continuwuation/continuwuity/
synced 2026-08-28 08:14:06 +00:00
style: Remove implement for AccessCheck, rename check to assert
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -44,7 +44,7 @@ pub(crate) async fn get_event_route(
|
||||
room_id,
|
||||
event_id: Some(&body.event_id),
|
||||
}
|
||||
.check()
|
||||
.assert()
|
||||
.await?;
|
||||
|
||||
if !services
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+46
-42
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user