diff --git a/src/client_server.rs b/src/client_server.rs index 2a67a57..6cc8e3d 100644 --- a/src/client_server.rs +++ b/src/client_server.rs @@ -622,17 +622,14 @@ pub fn get_global_account_data_route( let data = db .account_data - .get::( + .get::>( None, sender_id, EventType::try_from(&body.event_type).expect("EventType::try_from can never fail"), )? .ok_or(Error::BadRequest(ErrorKind::NotFound, "Data not found."))?; - Ok(get_global_account_data::Response { - account_data: Raw::from(data), - } - .into()) + Ok(get_global_account_data::Response { account_data: data }.into()) } #[cfg_attr( diff --git a/src/database/account_data.rs b/src/database/account_data.rs index 1afbcd6..99e0d5c 100644 --- a/src/database/account_data.rs +++ b/src/database/account_data.rs @@ -1,5 +1,6 @@ use crate::{utils, Error, Result}; use ruma::{ + api::client::error::ErrorKind, events::{AnyEvent as EduEvent, EventType}, Raw, RoomId, UserId, }; @@ -19,7 +20,7 @@ impl AccountData { room_id: Option<&RoomId>, user_id: &UserId, event_type: EventType, - event: &T, + data: &T, globals: &super::globals::Globals, ) -> Result<()> { let mut prefix = room_id @@ -42,10 +43,16 @@ impl AccountData { key.push(0xff); key.extend_from_slice(event_type.to_string().as_bytes()); - self.roomuserdataid_accountdata.insert( - key, - &*serde_json::to_string(&event).expect("Map::to_string always works"), - )?; + let json = serde_json::to_value(data).expect("all types here can be serialized"); // TODO: maybe add error handling + if json.get("type").is_none() || json.get("content").is_none() { + return Err(Error::BadRequest( + ErrorKind::InvalidParam, + "Account data doesn't have all required fields.", + )); + } + + self.roomuserdataid_accountdata + .insert(key, &*json.to_string())?; Ok(()) } @@ -60,7 +67,7 @@ impl AccountData { self.find_event(room_id, user_id, &kind) .map(|r| { let (_, v) = r?; - serde_json::from_slice(&v).map_err(|_| Error::BadDatabase("could not deserialize")) + serde_json::from_slice(&v).map_err(|_| Error::bad_database("could not deserialize")) }) .transpose() }