From 74b29ce06738a1e728649c5e54e5cc7fc7506b33 Mon Sep 17 00:00:00 2001 From: strawberry Date: Mon, 10 Jun 2024 03:27:15 -0400 Subject: [PATCH] adminroom: improved room list outputs, add counts Signed-off-by: strawberry --- src/admin/federation/federation_commands.rs | 10 ++-- src/admin/room/room_moderation_commands.rs | 62 ++++++++++++++------- 2 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/admin/federation/federation_commands.rs b/src/admin/federation/federation_commands.rs index 7f6b7004..b52a62f2 100644 --- a/src/admin/federation/federation_commands.rs +++ b/src/admin/federation/federation_commands.rs @@ -101,7 +101,8 @@ pub(crate) async fn remote_user_in_rooms(_body: Vec<&str>, user_id: Box) rooms.reverse(); let output_plain = format!( - "Rooms {user_id} shares with us:\n{}", + "Rooms {user_id} shares with us ({}):\n{}", + rooms.len(), rooms .iter() .map(|(id, members, name)| format!("{id}\tMembers: {members}\tName: {name}")) @@ -109,15 +110,16 @@ pub(crate) async fn remote_user_in_rooms(_body: Vec<&str>, user_id: Box) .join("\n") ); let output_html = format!( - "\n\t\t\n{}
Rooms {user_id} shares with \ - us
idmembersname
", + "\n\t\t\n{}
Rooms {user_id} shares with us \ + ({})
idmembersname
", + rooms.len(), rooms .iter() .fold(String::new(), |mut output, (id, members, name)| { writeln!( output, "{}\t{}\t{}", - escape_html(id.as_ref()), + id, members, escape_html(name) ) diff --git a/src/admin/room/room_moderation_commands.rs b/src/admin/room/room_moderation_commands.rs index f6d3206a..9886756b 100644 --- a/src/admin/room/room_moderation_commands.rs +++ b/src/admin/room/room_moderation_commands.rs @@ -6,11 +6,8 @@ use ruma::{ }; use tracing::{debug, error, info, warn}; -use super::{ - super::{escape_html, Service}, - RoomModerationCommand, -}; -use crate::{services, user_is_local, Result}; +use super::{super::Service, RoomModerationCommand}; +use crate::{escape_html, get_room_info, services, user_is_local, Result}; pub(crate) async fn process(command: RoomModerationCommand, body: Vec<&str>) -> Result { match command { @@ -479,26 +476,51 @@ async fn list_banned_rooms(_body: Vec<&str>) -> Result match rooms { Ok(room_ids) => { - // TODO: add room name from our state cache if available, default to the room ID - // as the room name if we dont have it TODO: do same if we have a room alias for - // this - let plain_list = room_ids.iter().fold(String::new(), |mut output, room_id| { - writeln!(output, "- `{room_id}`").unwrap(); - output - }); + if room_ids.is_empty() { + return Ok(RoomMessageEventContent::text_plain("No rooms are banned.")); + } - let html_list = room_ids.iter().fold(String::new(), |mut output, room_id| { - writeln!(output, "
  • {}
  • ", escape_html(room_id.as_ref())).unwrap(); - output - }); + let mut rooms = room_ids + .into_iter() + .map(|room_id| get_room_info(&room_id)) + .collect::>(); + rooms.sort_by_key(|r| r.1); + rooms.reverse(); - let plain = format!("Rooms:\n{plain_list}"); - let html = format!("Rooms:\n
      {html_list}
    "); - Ok(RoomMessageEventContent::text_html(plain, html)) + let output_plain = format!( + "Rooms Banned ({}):\n```\n{}```", + rooms.len(), + rooms + .iter() + .map(|(id, members, name)| format!("{id}\tMembers: {members}\tName: {name}")) + .collect::>() + .join("\n") + ); + + let output_html = format!( + "\n\t\t\n{}
    Rooms Banned ({}) \ +
    idmembersname
    ", + rooms.len(), + rooms + .iter() + .fold(String::new(), |mut output, (id, members, name)| { + writeln!( + output, + "{}\t{}\t{}", + id, + members, + escape_html(name.as_ref()) + ) + .expect("should be able to write to string buffer"); + output + }) + ); + + Ok(RoomMessageEventContent::text_html(output_plain, output_html)) }, Err(e) => { error!("Failed to list banned rooms: {}", e); - Ok(RoomMessageEventContent::text_plain(format!("Unable to list room aliases: {e}"))) + Ok(RoomMessageEventContent::text_plain(format!("Unable to list banned rooms: {e}"))) }, } }