tuwunel_admin/room/alias/
list.rs1use futures::StreamExt;
2use ruma::{OwnedRoomAliasId, OwnedRoomId};
3use tuwunel_core::Result;
4
5use crate::{Context, admin_command};
6
7#[admin_command]
8pub(super) async fn alias_list(&self, room_id: Option<OwnedRoomId>) -> Result {
9 match room_id {
10 | Some(room_id) => list_aliases_for_room(self, room_id).await,
11 | None => list_all_aliases(self).await,
12 }
13}
14
15async fn list_aliases_for_room(context: &Context<'_>, room_id: OwnedRoomId) -> Result {
16 let aliases: Vec<OwnedRoomAliasId> = context
17 .services
18 .alias
19 .local_aliases_for_room(&room_id)
20 .map(Into::into)
21 .collect()
22 .await;
23
24 writeln!(context, "Aliases for {room_id}:").await?;
25 for alias in aliases {
26 writeln!(context, "- {alias}").await?;
27 }
28
29 Ok(())
30}
31
32async fn list_all_aliases(context: &Context<'_>) -> Result {
33 let aliases = context
34 .services
35 .alias
36 .all_local_aliases()
37 .map(|(room_id, localpart)| (room_id.to_owned(), localpart.to_owned()))
38 .collect::<Vec<_>>()
39 .await;
40
41 let server_name = context.services.globals.server_name();
42
43 writeln!(context, "Aliases:").await?;
44 for (room_id, alias_id) in aliases {
45 writeln!(context, "- `{room_id}` -> #{alias_id}:{server_name}").await?;
46 }
47
48 Ok(())
49}