tuwunel_api/client/admin/mas/
upsert_device.rs1use 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
8pub(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}