Skip to main content

tuwunel_api/client/admin/mas/
upsert_device.rs

1use axum::extract::State;
2use synapse_admin_api::mas::upsert_device::{Request, Response};
3use tuwunel_core::Result;
4
5use super::{Mas, existing_user};
6use crate::Ruma;
7
8/// # `POST /_synapse/mas/upsert_device`
9pub(crate) async fn upsert_device_route(
10	_mas: Mas,
11	State(services): State<crate::State>,
12	body: Ruma<Request>,
13) -> Result<Response> {
14	let user_id = existing_user(services, &body.localpart).await?;
15
16	let created = if services
17		.users
18		.device_exists(&user_id, &body.device_id)
19		.await
20	{
21		if let Some(display_name) = body.display_name.as_deref() {
22			let mut device = services
23				.users
24				.get_device_metadata(&user_id, &body.device_id)
25				.await?;
26
27			device.display_name = Some(display_name.into());
28			services
29				.users
30				.put_device_metadata(&user_id, true, &device)
31				.await;
32		}
33
34		false
35	} else {
36		services
37			.users
38			.create_device(
39				&user_id,
40				Some(body.device_id.as_ref()),
41				(None, None),
42				None,
43				body.display_name.as_deref(),
44				None,
45			)
46			.await?;
47
48		true
49	};
50
51	Ok(Response::new(created))
52}