Skip to main content

tuwunel_api/client/admin/devices/
create_device.rs

1use axum::extract::State;
2use synapse_admin_api::devices::create_device::v1 as create_device;
3use tuwunel_core::Result;
4
5use super::require_local_user;
6use crate::{Ruma, client::admin::require_admin};
7
8/// # `POST /_synapse/admin/v2/users/{user_id}/devices`
9///
10/// Creating a device that already exists is a no-op.
11pub(crate) async fn admin_create_device_route(
12	State(services): State<crate::State>,
13	body: Ruma<create_device::Request>,
14) -> Result<create_device::Response> {
15	require_admin(&services, body.sender_user()).await?;
16
17	let user_id = &body.user_id;
18
19	require_local_user(&services, user_id).await?;
20
21	let device_id = &body.device_id;
22
23	if services
24		.users
25		.device_exists(user_id, device_id)
26		.await
27	{
28		return Ok(create_device::Response {});
29	}
30
31	services
32		.users
33		.create_device(user_id, Some(device_id), (None, None), None, None, None)
34		.await?;
35
36	Ok(create_device::Response {})
37}