Skip to main content

tuwunel_api/client/account_data/
set_room_account_data.rs

1use axum::extract::State;
2use ruma::api::client::config::set_room_account_data;
3use tuwunel_core::{Err, Result};
4
5use super::set_account_data;
6use crate::Ruma;
7
8/// # `PUT /_matrix/client/r0/user/{userId}/rooms/{roomId}/account_data/{type}`
9///
10/// Sets some room account data for the sender user.
11pub(crate) async fn set_room_account_data_route(
12	State(services): State<crate::State>,
13	body: Ruma<set_room_account_data::v3::Request>,
14) -> Result<set_room_account_data::v3::Response> {
15	let sender_user = body.sender_user();
16
17	if sender_user != body.user_id && body.appservice_info.is_none() {
18		return Err!(Request(Forbidden("You cannot set account data for other users.")));
19	}
20
21	set_account_data(
22		&services,
23		Some(&body.room_id),
24		&body.user_id,
25		&body.event_type.to_string(),
26		body.data.json(),
27	)
28	.await?;
29
30	Ok(set_room_account_data::v3::Response {})
31}