|
|
|
@ -30,7 +30,10 @@ use ruma_client_api::{ |
|
|
|
read_marker::set_read_marker, |
|
|
|
read_marker::set_read_marker, |
|
|
|
room::create_room, |
|
|
|
room::create_room, |
|
|
|
session::{get_login_types, login}, |
|
|
|
session::{get_login_types, login}, |
|
|
|
state::{create_state_event_for_empty_key, create_state_event_for_key}, |
|
|
|
state::{ |
|
|
|
|
|
|
|
create_state_event_for_empty_key, create_state_event_for_key, get_state_events, |
|
|
|
|
|
|
|
get_state_events_for_empty_key, get_state_events_for_key, |
|
|
|
|
|
|
|
}, |
|
|
|
sync::sync_events, |
|
|
|
sync::sync_events, |
|
|
|
thirdparty::get_protocols, |
|
|
|
thirdparty::get_protocols, |
|
|
|
to_device::{self, send_event_to_device}, |
|
|
|
to_device::{self, send_event_to_device}, |
|
|
|
@ -1233,10 +1236,10 @@ pub fn get_protocols_route() -> MatrixResult<get_protocols::Response> { |
|
|
|
)] |
|
|
|
)] |
|
|
|
pub fn create_message_event_route( |
|
|
|
pub fn create_message_event_route( |
|
|
|
db: State<'_, Database>, |
|
|
|
db: State<'_, Database>, |
|
|
|
|
|
|
|
body: Ruma<create_message_event::Request>, |
|
|
|
_room_id: String, |
|
|
|
_room_id: String, |
|
|
|
_event_type: String, |
|
|
|
_event_type: String, |
|
|
|
_txn_id: String, |
|
|
|
_txn_id: String, |
|
|
|
body: Ruma<create_message_event::Request>, |
|
|
|
|
|
|
|
) -> MatrixResult<create_message_event::Response> { |
|
|
|
) -> MatrixResult<create_message_event::Response> { |
|
|
|
let user_id = body.user_id.as_ref().expect("user is authenticated"); |
|
|
|
let user_id = body.user_id.as_ref().expect("user is authenticated"); |
|
|
|
|
|
|
|
|
|
|
|
@ -1267,10 +1270,10 @@ pub fn create_message_event_route( |
|
|
|
)] |
|
|
|
)] |
|
|
|
pub fn create_state_event_for_key_route( |
|
|
|
pub fn create_state_event_for_key_route( |
|
|
|
db: State<'_, Database>, |
|
|
|
db: State<'_, Database>, |
|
|
|
|
|
|
|
body: Ruma<create_state_event_for_key::Request>, |
|
|
|
_room_id: String, |
|
|
|
_room_id: String, |
|
|
|
_event_type: String, |
|
|
|
_event_type: String, |
|
|
|
_state_key: String, |
|
|
|
_state_key: String, |
|
|
|
body: Ruma<create_state_event_for_key::Request>, |
|
|
|
|
|
|
|
) -> MatrixResult<create_state_event_for_key::Response> { |
|
|
|
) -> MatrixResult<create_state_event_for_key::Response> { |
|
|
|
let user_id = body.user_id.as_ref().expect("user is authenticated"); |
|
|
|
let user_id = body.user_id.as_ref().expect("user is authenticated"); |
|
|
|
|
|
|
|
|
|
|
|
@ -1299,9 +1302,9 @@ pub fn create_state_event_for_key_route( |
|
|
|
)] |
|
|
|
)] |
|
|
|
pub fn create_state_event_for_empty_key_route( |
|
|
|
pub fn create_state_event_for_empty_key_route( |
|
|
|
db: State<'_, Database>, |
|
|
|
db: State<'_, Database>, |
|
|
|
|
|
|
|
body: Ruma<create_state_event_for_empty_key::Request>, |
|
|
|
_room_id: String, |
|
|
|
_room_id: String, |
|
|
|
_event_type: String, |
|
|
|
_event_type: String, |
|
|
|
body: Ruma<create_state_event_for_empty_key::Request>, |
|
|
|
|
|
|
|
) -> MatrixResult<create_state_event_for_empty_key::Response> { |
|
|
|
) -> MatrixResult<create_state_event_for_empty_key::Response> { |
|
|
|
let user_id = body.user_id.as_ref().expect("user is authenticated"); |
|
|
|
let user_id = body.user_id.as_ref().expect("user is authenticated"); |
|
|
|
|
|
|
|
|
|
|
|
@ -1324,6 +1327,80 @@ pub fn create_state_event_for_empty_key_route( |
|
|
|
})) |
|
|
|
})) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[get("/_matrix/client/r0/rooms/<_room_id>/state", data = "<body>")] |
|
|
|
|
|
|
|
pub fn get_state_events_route( |
|
|
|
|
|
|
|
db: State<'_, Database>, |
|
|
|
|
|
|
|
body: Ruma<get_state_events::Request>, |
|
|
|
|
|
|
|
_room_id: String, |
|
|
|
|
|
|
|
) -> MatrixResult<get_state_events::Response> { |
|
|
|
|
|
|
|
MatrixResult(Ok(get_state_events::Response { |
|
|
|
|
|
|
|
room_state: db |
|
|
|
|
|
|
|
.rooms |
|
|
|
|
|
|
|
.room_state(&body.room_id) |
|
|
|
|
|
|
|
.unwrap() |
|
|
|
|
|
|
|
.values() |
|
|
|
|
|
|
|
.map(|pdu| pdu.to_state_event()) |
|
|
|
|
|
|
|
.collect(), |
|
|
|
|
|
|
|
})) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[get(
|
|
|
|
|
|
|
|
"/_matrix/client/r0/rooms/<_room_id>/state/<_event_type>/<_state_key>", |
|
|
|
|
|
|
|
data = "<body>" |
|
|
|
|
|
|
|
)] |
|
|
|
|
|
|
|
pub fn get_state_events_for_key_route( |
|
|
|
|
|
|
|
db: State<'_, Database>, |
|
|
|
|
|
|
|
body: Ruma<get_state_events_for_key::Request>, |
|
|
|
|
|
|
|
_room_id: String, |
|
|
|
|
|
|
|
_event_type: String, |
|
|
|
|
|
|
|
_state_key: String, |
|
|
|
|
|
|
|
) -> MatrixResult<get_state_events_for_key::Response> { |
|
|
|
|
|
|
|
if let Some(event) = db |
|
|
|
|
|
|
|
.rooms |
|
|
|
|
|
|
|
.room_state(&body.room_id) |
|
|
|
|
|
|
|
.unwrap() |
|
|
|
|
|
|
|
.get(&(body.event_type.clone(), body.state_key.clone())) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MatrixResult(Ok(get_state_events_for_key::Response { |
|
|
|
|
|
|
|
content: serde_json::value::to_raw_value(event).unwrap(), |
|
|
|
|
|
|
|
})) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
MatrixResult(Err(Error { |
|
|
|
|
|
|
|
kind: ErrorKind::NotFound, |
|
|
|
|
|
|
|
message: "State event not found.".to_owned(), |
|
|
|
|
|
|
|
status_code: http::StatusCode::BAD_REQUEST, |
|
|
|
|
|
|
|
})) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[get(
|
|
|
|
|
|
|
|
"/_matrix/client/r0/rooms/<_room_id>/state/<_event_type>", |
|
|
|
|
|
|
|
data = "<body>" |
|
|
|
|
|
|
|
)] |
|
|
|
|
|
|
|
pub fn get_state_events_for_empty_key_route( |
|
|
|
|
|
|
|
db: State<'_, Database>, |
|
|
|
|
|
|
|
body: Ruma<get_state_events_for_empty_key::Request>, |
|
|
|
|
|
|
|
_room_id: String, |
|
|
|
|
|
|
|
_event_type: String, |
|
|
|
|
|
|
|
) -> MatrixResult<get_state_events_for_key::Response> { |
|
|
|
|
|
|
|
if let Some(event) = db |
|
|
|
|
|
|
|
.rooms |
|
|
|
|
|
|
|
.room_state(&body.room_id) |
|
|
|
|
|
|
|
.unwrap() |
|
|
|
|
|
|
|
.get(&(body.event_type.clone(), "".to_owned())) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MatrixResult(Ok(get_state_events_for_key::Response { |
|
|
|
|
|
|
|
content: serde_json::value::to_raw_value(event).unwrap(), |
|
|
|
|
|
|
|
})) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
MatrixResult(Err(Error { |
|
|
|
|
|
|
|
kind: ErrorKind::NotFound, |
|
|
|
|
|
|
|
message: "State event not found.".to_owned(), |
|
|
|
|
|
|
|
status_code: http::StatusCode::BAD_REQUEST, |
|
|
|
|
|
|
|
})) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#[get("/_matrix/client/r0/sync", data = "<body>")] |
|
|
|
#[get("/_matrix/client/r0/sync", data = "<body>")] |
|
|
|
pub fn sync_route( |
|
|
|
pub fn sync_route( |
|
|
|
db: State<'_, Database>, |
|
|
|
db: State<'_, Database>, |
|
|
|
|