tuwunel_api_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 services
23 .users
24 .rename_device(&user_id, &body.device_id, display_name)
25 .await?;
26 }
27
28 false
29 } else {
30 services
31 .users
32 .create_device(
33 &user_id,
34 Some(body.device_id.as_ref()),
35 (None, None),
36 None,
37 body.display_name.as_deref(),
38 None,
39 )
40 .await?;
41
42 true
43 };
44
45 Ok(Response::new(created))
46}