Skip to main content

tuwunel_admin/room/alias/
list.rs

1use 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}