feat: room_account_data endpoints
This commit is contained in:
		
							parent
							
								
									1d00a8c41f
								
							
						
					
					
						commit
						e305889b72
					
				
					 2 changed files with 55 additions and 1 deletions
				
			
		|  | @ -3,7 +3,7 @@ use crate::{ConduitResult, Database, Error, Ruma}; | |||
| use ruma::{ | ||||
|     api::client::{ | ||||
|         error::ErrorKind, | ||||
|         r0::config::{get_global_account_data, set_global_account_data}, | ||||
|         r0::config::{get_room_account_data, get_global_account_data, set_room_account_data, set_global_account_data}, | ||||
|     }, | ||||
|     events::{custom::CustomEventContent, BasicEvent}, | ||||
|     serde::Raw, | ||||
|  | @ -43,6 +43,37 @@ pub async fn set_global_account_data_route( | |||
|     Ok(set_global_account_data::Response.into()) | ||||
| } | ||||
| 
 | ||||
| #[cfg_attr(
 | ||||
|     feature = "conduit_bin", | ||||
|     put("/_matrix/client/r0/user/<_>/rooms/<_>/account_data/<_>", data = "<body>") | ||||
| )] | ||||
| #[tracing::instrument(skip(db, body))] | ||||
| pub async fn set_room_account_data_route( | ||||
|     db: State<'_, Database>, | ||||
|     body: Ruma<set_room_account_data::Request<'_>>, | ||||
| ) -> ConduitResult<set_room_account_data::Response> { | ||||
|     let sender_user = body.sender_user.as_ref().expect("user is authenticated"); | ||||
| 
 | ||||
|     let data = serde_json::from_str(body.data.get()) | ||||
|         .map_err(|_| Error::BadRequest(ErrorKind::BadJson, "Data is invalid."))?; | ||||
| 
 | ||||
|     let event_type = body.event_type.to_string(); | ||||
| 
 | ||||
|     db.account_data.update( | ||||
|         Some(&body.room_id), | ||||
|         sender_user, | ||||
|         event_type.clone().into(), | ||||
|         &BasicEvent { | ||||
|             content: CustomEventContent { event_type, data }, | ||||
|         }, | ||||
|         &db.globals, | ||||
|     )?; | ||||
| 
 | ||||
|     db.flush().await?; | ||||
| 
 | ||||
|     Ok(set_room_account_data::Response.into()) | ||||
| } | ||||
| 
 | ||||
| #[cfg_attr(
 | ||||
|     feature = "conduit_bin", | ||||
|     get("/_matrix/client/r0/user/<_>/account_data/<_>", data = "<body>") | ||||
|  | @ -63,3 +94,24 @@ pub async fn get_global_account_data_route( | |||
| 
 | ||||
|     Ok(get_global_account_data::Response { account_data: data }.into()) | ||||
| } | ||||
| 
 | ||||
| #[cfg_attr(
 | ||||
|     feature = "conduit_bin", | ||||
|     get("/_matrix/client/r0/user/<_>/rooms/<_>/account_data/<_>", data = "<body>") | ||||
| )] | ||||
| #[tracing::instrument(skip(db, body))] | ||||
| pub async fn get_room_account_data_route( | ||||
|     db: State<'_, Database>, | ||||
|     body: Ruma<get_room_account_data::Request<'_>>, | ||||
| ) -> ConduitResult<get_room_account_data::Response> { | ||||
|     let sender_user = body.sender_user.as_ref().expect("user is authenticated"); | ||||
| 
 | ||||
|     let data = db | ||||
|         .account_data | ||||
|         .get::<Raw<ruma::events::AnyBasicEvent>>(Some(&body.room_id), sender_user, body.event_type.clone().into())? | ||||
|         .ok_or(Error::BadRequest(ErrorKind::NotFound, "Data not found."))?; | ||||
| 
 | ||||
|     db.flush().await?; | ||||
| 
 | ||||
|     Ok(get_room_account_data::Response { account_data: data }.into()) | ||||
| } | ||||
|  |  | |||
|  | @ -77,7 +77,9 @@ fn setup_rocket() -> (rocket::Rocket, Config) { | |||
|                 client_server::get_filter_route, | ||||
|                 client_server::create_filter_route, | ||||
|                 client_server::set_global_account_data_route, | ||||
|                 client_server::set_room_account_data_route, | ||||
|                 client_server::get_global_account_data_route, | ||||
|                 client_server::get_room_account_data_route, | ||||
|                 client_server::set_displayname_route, | ||||
|                 client_server::get_displayname_route, | ||||
|                 client_server::set_avatar_url_route, | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue