Skip to main content

tuwunel_api/client/admin/users/
deactivate_account.rs

1use axum::extract::State;
2use synapse_admin_api::users::deactivate_account::v1 as deactivate_account;
3use tuwunel_core::{Err, Result};
4
5use crate::{
6	Ruma,
7	client::admin::{refuse_server_user, require_admin},
8};
9
10/// # `POST /_synapse/admin/v1/deactivate/{user_id}`
11pub(crate) async fn admin_deactivate_account_route(
12	State(services): State<crate::State>,
13	body: Ruma<deactivate_account::Request>,
14) -> Result<deactivate_account::Response> {
15	require_admin(&services, body.sender_user()).await?;
16
17	if !services.globals.user_is_local(&body.user_id) {
18		return Err!(Request(InvalidParam("Can only deactivate local users")));
19	}
20
21	refuse_server_user(services, &body.user_id)?;
22
23	if !services.users.exists(&body.user_id).await {
24		return Err!(Request(NotFound("User not found")));
25	}
26
27	services
28		.deactivate
29		.full_deactivate(&body.user_id, body.erase)
30		.await?;
31
32	Ok(deactivate_account::Response::new("success".to_owned()))
33}