tuwunel_api/client/account_data/
get_room_account_data.rs1use axum::extract::State;
2use ruma::{
3 api::client::config::get_room_account_data, events::AnyRoomAccountDataEventContent,
4 serde::Raw,
5};
6use serde::Deserialize;
7use tuwunel_core::{Err, Result, err};
8
9use super::{assert_account_data_owner, is_empty_content};
10use crate::Ruma;
11
12#[derive(Deserialize)]
13struct ExtractRoomEventContent {
14 content: Raw<AnyRoomAccountDataEventContent>,
15}
16
17pub(crate) async fn get_room_account_data_route(
21 State(services): State<crate::State>,
22 body: Ruma<get_room_account_data::v3::Request>,
23) -> Result<get_room_account_data::v3::Response> {
24 let sender_user = body.sender_user();
25
26 assert_account_data_owner(
27 sender_user,
28 &body.user_id,
29 body.appservice_info.as_ref(),
30 "You cannot get account data of other users.",
31 )?;
32
33 let account_data: ExtractRoomEventContent = services
34 .account_data
35 .get_room(&body.room_id, &body.user_id, body.event_type.clone())
36 .await
37 .map_err(|_| err!(Request(NotFound("Data not found."))))?;
38
39 if is_empty_content(&account_data.content) {
40 return Err!(Request(NotFound("Data not found.")));
41 }
42
43 Ok(get_room_account_data::v3::Response { account_data: account_data.content })
44}