Skip to main content

tuwunel_api_client/account/
whoami.rs

1use axum::extract::State;
2use ruma::api::client::account::whoami;
3use tuwunel_core::{Err, Result};
4
5use crate::{Ruma, utils::sender_is_guest};
6
7/// # `GET _matrix/client/r0/account/whoami`
8///
9/// Get `user_id` of the sender user.
10///
11/// Note: Also works for Application Services
12pub(crate) async fn whoami_route(
13	State(services): State<crate::State>,
14	body: Ruma<whoami::v3::Request>,
15) -> Result<whoami::v3::Response> {
16	let sender_user = body.sender_user();
17
18	// Skips the spec's SHOULD to verify registration, as appservice auth does.
19	if body.appservice_info.is_none() && !services.users.exists(sender_user).await {
20		return Err!(Request(Forbidden("User does not exist.")));
21	}
22
23	let is_guest = sender_is_guest(&services, &body).await;
24
25	Ok(whoami::v3::Response {
26		user_id: sender_user.to_owned(),
27		device_id: body.sender_device.clone(),
28		is_guest,
29	})
30}