Skip to main content

tuwunel_api/client/admin/devices/
delete_devices.rs

1use axum::extract::State;
2use futures::StreamExt;
3use synapse_admin_api::devices::delete_devices::v1 as delete_devices;
4use tuwunel_core::{
5	Result,
6	utils::{IterStream, stream::automatic_width},
7};
8
9use super::require_local_user;
10use crate::{Ruma, client::admin::require_admin};
11
12/// # `POST /_synapse/admin/v2/users/{user_id}/delete_devices`
13///
14/// Unknown device IDs are silently ignored.
15pub(crate) async fn admin_delete_devices_route(
16	State(services): State<crate::State>,
17	body: Ruma<delete_devices::Request>,
18) -> Result<delete_devices::Response> {
19	require_admin(&services, body.sender_user()).await?;
20
21	let user_id = &body.user_id;
22	require_local_user(&services, user_id).await?;
23
24	body.devices
25		.iter()
26		.stream()
27		.for_each_concurrent(automatic_width(), |device_id| {
28			services.users.remove_device(user_id, device_id)
29		})
30		.await;
31
32	Ok(delete_devices::Response {})
33}