Skip to main content

tuwunel_api/client/admin/
lock_user.rs

1use axum::extract::State;
2use ruma::api::client::admin::lock_user;
3use tuwunel_core::Result;
4
5use super::authorize;
6use crate::Ruma;
7
8/// # `PUT /_matrix/client/v1/admin/lock/{userId}`
9pub(crate) async fn lock_user_route(
10	State(services): State<crate::State>,
11	body: Ruma<lock_user::v1::Request>,
12) -> Result<lock_user::v1::Response> {
13	let sender_user = body.sender_user();
14	let user_id = &body.user_id;
15
16	authorize(&services, sender_user, user_id).await?;
17
18	if services.users.is_locked(user_id).await == body.locked {
19		return Ok(lock_user::v1::Response::new(body.locked));
20	}
21
22	let action = match body.locked {
23		| true => {
24			services.users.set_locked(user_id, sender_user);
25			"locked"
26		},
27		| false => {
28			services.users.clear_locked(user_id);
29			"unlocked"
30		},
31	};
32
33	if services.server.config.admin_room_notices {
34		services
35			.admin
36			.send_text(&format!("{user_id} has been {action} by {sender_user}."))
37			.await;
38	}
39
40	Ok(lock_user::v1::Response::new(body.locked))
41}