From 72e77ae329751dcd94358efb0ab343a6edeb4e88 Mon Sep 17 00:00:00 2001 From: Ginger Date: Mon, 13 Apr 2026 16:52:27 -0400 Subject: [PATCH] refactor: Fix errors in `admin/debug/commands.rs` --- conduwuit-example.toml | 12 --------- src/admin/debug/commands.rs | 52 ++++++++++++++++++++++++------------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/conduwuit-example.toml b/conduwuit-example.toml index b4ea8da11..c0f3f0ca9 100644 --- a/conduwuit-example.toml +++ b/conduwuit-example.toml @@ -573,18 +573,6 @@ # #allow_public_room_directory_over_federation = false -# Allow guests/unauthenticated users to access TURN credentials. -# -# This is the equivalent of Synapse's `turn_allow_guests` config option. -# This allows any unauthenticated user to call the endpoint -# `/_matrix/client/v3/voip/turnServer`. -# -# It is unlikely you need to enable this as all major clients support -# authentication for this endpoint and prevents misuse of your TURN server -# from potential bots. -# -#turn_allow_guests = false - # Set this to true to lock down your server's public room directory and # only allow admins to publish rooms to the room directory. Unpublishing # is still allowed by all users with this enabled. diff --git a/src/admin/debug/commands.rs b/src/admin/debug/commands.rs index 5bf5be90f..d55d63a2c 100644 --- a/src/admin/debug/commands.rs +++ b/src/admin/debug/commands.rs @@ -79,12 +79,14 @@ pub(super) async fn parse_pdu(&self) -> Result { } let string = self.body[1..self.body.len().saturating_sub(1)].join("\n"); + let room_version_rules = RoomVersionId::V12.rules().unwrap(); + match serde_json::from_str(&string) { | Err(e) => return Err!("Invalid json in command body: {e}"), - | Ok(value) => match ruma::signatures::reference_hash(&value, &RoomVersionId::V6) { + | Ok(value) => match ruma::signatures::reference_hash(&value, &room_version_rules) { | Err(e) => return Err!("Could not parse PDU JSON: {e:?}"), | Ok(hash) => { - let event_id = OwnedEventId::parse(format!("${hash}")); + let event_id = EventId::parse(format!("${hash}")); match serde_json::from_value::(serde_json::to_value(value)?) { | Err(e) => return Err!("EventId: {event_id:?}\nCould not parse event: {e}"), | Ok(pdu) => write!(self, "EventId: {event_id:?}\n{pdu:#?}"), @@ -237,10 +239,10 @@ pub(super) async fn get_remote_pdu( match self .services .sending - .send_federation_request(&server, ruma::api::federation::event::get_event::v1::Request { - event_id: event_id.clone(), - include_unredacted_content: None, - }) + .send_federation_request( + &server, + ruma::api::federation::event::get_event::v1::Request::new(event_id.clone()), + ) .await { | Err(e) => { @@ -330,9 +332,9 @@ pub(super) async fn ping(&self, server: OwnedServerName) -> Result { match self .services .sending - .send_federation_request( + .send_unauthenticated_request( &server, - ruma::api::federation::discovery::get_server_version::v1::Request {}, + ruma::api::federation::discovery::get_server_version::v1::Request::new(), ) .await { @@ -361,7 +363,7 @@ pub(super) async fn force_device_list_updates(&self) -> Result { self.services .users .stream() - .for_each(|user_id| self.services.users.mark_device_key_update(user_id)) + .for_each(async |user_id| self.services.users.mark_device_key_update(&user_id).await) .await; write!(self, "Marked all devices for all users as having new keys to update").await @@ -430,9 +432,16 @@ pub(super) async fn verify_json(&self) -> Result { } let string = self.body[1..self.body.len().checked_sub(1).unwrap()].join("\n"); + let room_version_rules = RoomVersionId::V12.rules().unwrap(); + match serde_json::from_str::(&string) { | Err(e) => return Err!("Invalid json: {e}"), - | Ok(value) => match self.services.server_keys.verify_json(&value, None).await { + | Ok(value) => match self + .services + .server_keys + .verify_json(&value, &room_version_rules) + .await + { | Err(e) => return Err!("Signature verification failed: {e}"), | Ok(()) => write!(self, "Signature correct"), }, @@ -445,9 +454,15 @@ pub(super) async fn verify_pdu(&self, event_id: OwnedEventId) -> Result { use ruma::signatures::Verified; let mut event = self.services.rooms.timeline.get_pdu_json(&event_id).await?; + let room_version_rules = RoomVersionId::V12.rules().unwrap(); event.remove("event_id"); - let msg = match self.services.server_keys.verify_event(&event, None).await { + let msg = match self + .services + .server_keys + .verify_event(&event, &room_version_rules) + .await + { | Err(e) => return Err(e), | Ok(Verified::Signatures) => "signatures OK, but content hash failed (redaction).", | Ok(Verified::All) => "signatures and hashes OK.", @@ -544,16 +559,17 @@ pub(super) async fn force_set_room_state_from_server( }; let room_version = self.services.rooms.state.get_room_version(&room_id).await?; + let room_version_rules = room_version.rules().unwrap(); let mut state: HashMap = HashMap::new(); let remote_state_response = self .services .sending - .send_federation_request(&server_name, get_room_state::v1::Request { - room_id: room_id.clone(), - event_id: at_event_id, - }) + .send_federation_request( + &server_name, + get_room_state::v1::Request::new(at_event_id, room_id.clone()), + ) .await?; for pdu in remote_state_response.pdus.clone() { @@ -576,7 +592,7 @@ pub(super) async fn force_set_room_state_from_server( for result in remote_state_response.pdus.iter().map(|pdu| { self.services .server_keys - .validate_and_add_event_id(pdu, &room_version) + .validate_and_add_event_id(pdu, &room_version_rules) }) { let Ok((event_id, value)) = result.await else { continue; @@ -608,7 +624,7 @@ pub(super) async fn force_set_room_state_from_server( for result in remote_state_response.auth_chain.iter().map(|pdu| { self.services .server_keys - .validate_and_add_event_id(pdu, &room_version) + .validate_and_add_event_id(pdu, &room_version_rules) }) { let Ok((event_id, value)) = result.await else { continue; @@ -625,7 +641,7 @@ pub(super) async fn force_set_room_state_from_server( .services .rooms .event_handler - .resolve_state(&room_id, &room_version, state) + .resolve_state(&room_id, &room_version_rules, state) .await?; info!("Compressing new room state");