refactor: Add function to state_accessor to get create event

This commit is contained in:
Ginger
2026-04-09 14:53:12 -04:00
parent 471eb54c66
commit bf9c9716eb
5 changed files with 32 additions and 53 deletions
@@ -209,11 +209,11 @@ pub async fn handle_incoming_pdu<'a>(
}
// Fetch create event
let create_event = &(self
let ref create_event = self
.services
.state_accessor
.room_state_get(room_id, &StateEventType::RoomCreate, "")
.await?);
.get_room_create_event(room_id)
.await;
let (incoming_pdu, val) = self
.handle_outlier_pdu(origin, create_event, event_id, room_id, value, false)
+10 -5
View File
@@ -6,7 +6,7 @@ mod user_can;
use std::{collections::HashSet, sync::Arc};
use async_trait::async_trait;
use conduwuit::{Event, Result, err};
use conduwuit::{Event, Pdu, Result, err};
use database::Map;
use ruma::{
EventEncryptionAlgorithm, JsOption, OwnedRoomAliasId, OwnedUserId, RoomId, UserId,
@@ -164,6 +164,13 @@ impl Service {
.is_ok()
}
/// Get a room's create event.
pub async fn get_room_create_event(&self, room_id: &RoomId) -> Pdu {
self.room_state_get(room_id, &StateEventType::RoomCreate, "")
.await
.expect("room should have a create event")
}
/// Get a set of the room's creators. This will always contain a single user
/// for room versions 11 and earlier.
pub async fn get_room_creators(&self, room_id: &RoomId) -> HashSet<OwnedUserId> {
@@ -176,10 +183,8 @@ impl Service {
.rules()
.expect("room version should be known");
let create_event = self
.room_state_get(room_id, &StateEventType::RoomCreate, "")
.await
.expect("room should have a create event");
let create_event = self.get_room_create_event(room_id).await;
let create_content: RoomCreateEventContent = create_event
.get_content()
.expect("create event content should be valid");
@@ -44,31 +44,6 @@ pub async fn user_can_redact(
)));
}
let create_event = self
.room_state_get(room_id, &StateEventType::RoomCreate, "")
.await?;
let create_event_content: RoomCreateEventContent = create_event.get_content().unwrap();
let room_version_rules = create_event_content
.room_version
.rules()
.expect("room version should have defined rules");
if room_version_rules
.authorization
.explicitly_privilege_room_creators
{
let sender_owned = sender.to_owned();
// NOTE: we don't check the pre-v11 `creator` field because no room version has
// `explicitly_privilege_room_creators` and `use_room_create_sender` set at the
// same time
if sender == create_event.sender()
|| create_event_content
.additional_creators
.contains(&sender_owned)
{
return Ok(true);
}
}
let power_levels = self.get_room_power_levels(room_id).await;
if power_levels.user_can_redact_event_of_other(sender) {