Skip to main content

tuwunel_admin/room/directory/
publish.rs

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