tuwunel_api/client/admin/devices/
delete_devices.rs1use 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
12pub(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}