Skip to main content

tuwunel_api/client/admin/devices/
get_device.rs

1use axum::extract::State;
2use synapse_admin_api::devices::get_device::v1 as get_device;
3use tuwunel_core::{Err, Result};
4
5use super::{device_response, require_local_user};
6use crate::{Ruma, client::admin::require_admin};
7
8/// # `GET /_synapse/admin/v2/users/{user_id}/devices/{device_id}`
9pub(crate) async fn admin_get_device_route(
10	State(services): State<crate::State>,
11	body: Ruma<get_device::Request>,
12) -> Result<get_device::Response> {
13	require_admin(&services, body.sender_user()).await?;
14
15	let user_id = &body.user_id;
16	require_local_user(&services, user_id).await?;
17
18	let Ok(device) = services
19		.users
20		.get_device_metadata(user_id, &body.device_id)
21		.await
22	else {
23		return Err!(Request(NotFound("No device found")));
24	};
25
26	// The single-device view carries no `dehydrated` flag; it is a list-only
27	// field in Synapse.
28	Ok(get_device::Response {
29		device: device_response(device, user_id, None),
30	})
31}