tuwunel_admin/room/directory/
publish.rs1use std::borrow::Cow;
2
3use ruma::OwnedRoomOrAliasId;
4use tuwunel_core::{Err, Result};
5
6use super::local_alias;
7use crate::admin_command;
8
9#[admin_command]
10pub(super) async fn directory_publish(&self, room: OwnedRoomOrAliasId, force: bool) -> Result {
11 let alias = local_alias(self.services, &room)?.filter(|_| !force);
12
13 let room_id = self.services.alias.maybe_resolve(&room).await?;
14
15 if !force && !self.services.metadata.exists(&room_id).await {
16 return Err!(
17 "Room {room_id} is not known to this server; use the force flag to publish anyway"
18 );
19 }
20
21 self.services
22 .directory
23 .set_public(&room_id, alias);
24
25 let out = match alias {
26 | None => Cow::Borrowed("Room published"),
27 | Some(alias) => format!("Room published as {alias}").into(),
28 };
29
30 self.write_str(&out).await
31}