refactor: Fix errors in admin/debug/commands.rs

This commit is contained in:
Ginger
2026-04-28 09:16:56 -04:00
parent c12dd20431
commit 385b4b10d1
2 changed files with 34 additions and 30 deletions
-12
View File
@@ -573,18 +573,6 @@
# #
#allow_public_room_directory_over_federation = false #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 # 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 # only allow admins to publish rooms to the room directory. Unpublishing
# is still allowed by all users with this enabled. # is still allowed by all users with this enabled.
+34 -18
View File
@@ -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 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) { match serde_json::from_str(&string) {
| Err(e) => return Err!("Invalid json in command body: {e}"), | 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:?}"), | Err(e) => return Err!("Could not parse PDU JSON: {e:?}"),
| Ok(hash) => { | Ok(hash) => {
let event_id = OwnedEventId::parse(format!("${hash}")); let event_id = EventId::parse(format!("${hash}"));
match serde_json::from_value::<PduEvent>(serde_json::to_value(value)?) { match serde_json::from_value::<PduEvent>(serde_json::to_value(value)?) {
| Err(e) => return Err!("EventId: {event_id:?}\nCould not parse event: {e}"), | Err(e) => return Err!("EventId: {event_id:?}\nCould not parse event: {e}"),
| Ok(pdu) => write!(self, "EventId: {event_id:?}\n{pdu:#?}"), | Ok(pdu) => write!(self, "EventId: {event_id:?}\n{pdu:#?}"),
@@ -237,10 +239,10 @@ pub(super) async fn get_remote_pdu(
match self match self
.services .services
.sending .sending
.send_federation_request(&server, ruma::api::federation::event::get_event::v1::Request { .send_federation_request(
event_id: event_id.clone(), &server,
include_unredacted_content: None, ruma::api::federation::event::get_event::v1::Request::new(event_id.clone()),
}) )
.await .await
{ {
| Err(e) => { | Err(e) => {
@@ -330,9 +332,9 @@ pub(super) async fn ping(&self, server: OwnedServerName) -> Result {
match self match self
.services .services
.sending .sending
.send_federation_request( .send_unauthenticated_request(
&server, &server,
ruma::api::federation::discovery::get_server_version::v1::Request {}, ruma::api::federation::discovery::get_server_version::v1::Request::new(),
) )
.await .await
{ {
@@ -361,7 +363,7 @@ pub(super) async fn force_device_list_updates(&self) -> Result {
self.services self.services
.users .users
.stream() .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; .await;
write!(self, "Marked all devices for all users as having new keys to update").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 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::<CanonicalJsonObject>(&string) { match serde_json::from_str::<CanonicalJsonObject>(&string) {
| Err(e) => return Err!("Invalid json: {e}"), | 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}"), | Err(e) => return Err!("Signature verification failed: {e}"),
| Ok(()) => write!(self, "Signature correct"), | Ok(()) => write!(self, "Signature correct"),
}, },
@@ -445,9 +454,15 @@ pub(super) async fn verify_pdu(&self, event_id: OwnedEventId) -> Result {
use ruma::signatures::Verified; use ruma::signatures::Verified;
let mut event = self.services.rooms.timeline.get_pdu_json(&event_id).await?; 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"); 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), | Err(e) => return Err(e),
| Ok(Verified::Signatures) => "signatures OK, but content hash failed (redaction).", | Ok(Verified::Signatures) => "signatures OK, but content hash failed (redaction).",
| Ok(Verified::All) => "signatures and hashes OK.", | 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 = self.services.rooms.state.get_room_version(&room_id).await?;
let room_version_rules = room_version.rules().unwrap();
let mut state: HashMap<u64, OwnedEventId> = HashMap::new(); let mut state: HashMap<u64, OwnedEventId> = HashMap::new();
let remote_state_response = self let remote_state_response = self
.services .services
.sending .sending
.send_federation_request(&server_name, get_room_state::v1::Request { .send_federation_request(
room_id: room_id.clone(), &server_name,
event_id: at_event_id, get_room_state::v1::Request::new(at_event_id, room_id.clone()),
}) )
.await?; .await?;
for pdu in remote_state_response.pdus.clone() { 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| { for result in remote_state_response.pdus.iter().map(|pdu| {
self.services self.services
.server_keys .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 { let Ok((event_id, value)) = result.await else {
continue; 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| { for result in remote_state_response.auth_chain.iter().map(|pdu| {
self.services self.services
.server_keys .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 { let Ok((event_id, value)) = result.await else {
continue; continue;
@@ -625,7 +641,7 @@ pub(super) async fn force_set_room_state_from_server(
.services .services
.rooms .rooms
.event_handler .event_handler
.resolve_state(&room_id, &room_version, state) .resolve_state(&room_id, &room_version_rules, state)
.await?; .await?;
info!("Compressing new room state"); info!("Compressing new room state");