|
|
|
|
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
|
|
|
|
use crate::Error; |
|
|
|
|
use crate::{Database, Error}; |
|
|
|
|
use ruma::{ |
|
|
|
|
events::{ |
|
|
|
|
room::member::RoomMemberEventContent, AnyEphemeralRoomEvent, AnyInitialStateEvent, |
|
|
|
|
@ -6,7 +6,7 @@ use ruma::{
@@ -6,7 +6,7 @@ use ruma::{
|
|
|
|
|
EventType, StateEvent, |
|
|
|
|
}, |
|
|
|
|
serde::{CanonicalJsonObject, CanonicalJsonValue, Raw}, |
|
|
|
|
state_res, EventId, MilliSecondsSinceUnixEpoch, RoomId, RoomVersionId, UInt, UserId, |
|
|
|
|
state_res, EventId, MilliSecondsSinceUnixEpoch, RoomId, UInt, UserId, |
|
|
|
|
}; |
|
|
|
|
use serde::{Deserialize, Serialize}; |
|
|
|
|
use serde_json::{ |
|
|
|
|
@ -331,16 +331,24 @@ impl Ord for PduEvent {
@@ -331,16 +331,24 @@ impl Ord for PduEvent {
|
|
|
|
|
/// Returns a tuple of the new `EventId` and the PDU as a `BTreeMap<String, CanonicalJsonValue>`.
|
|
|
|
|
pub(crate) fn gen_event_id_canonical_json( |
|
|
|
|
pdu: &RawJsonValue, |
|
|
|
|
db: &Database, |
|
|
|
|
) -> crate::Result<(EventId, CanonicalJsonObject)> { |
|
|
|
|
let value = serde_json::from_str(pdu.get()).map_err(|e| { |
|
|
|
|
let value: CanonicalJsonObject = serde_json::from_str(pdu.get()).map_err(|e| { |
|
|
|
|
warn!("Error parsing incoming event {:?}: {:?}", pdu, e); |
|
|
|
|
Error::BadServerResponse("Invalid PDU in server response") |
|
|
|
|
})?; |
|
|
|
|
|
|
|
|
|
let room_id = value |
|
|
|
|
.get("room_id") |
|
|
|
|
.and_then(|id| RoomId::try_from(id.as_str()?).ok()) |
|
|
|
|
.expect("Invalid room id in event"); |
|
|
|
|
|
|
|
|
|
let room_version_id = db.rooms.get_room_version(&room_id); |
|
|
|
|
|
|
|
|
|
let event_id = EventId::try_from(&*format!( |
|
|
|
|
"${}", |
|
|
|
|
// Anything higher than version3 behaves the same
|
|
|
|
|
ruma::signatures::reference_hash(&value, &RoomVersionId::Version6) |
|
|
|
|
ruma::signatures::reference_hash(&value, &room_version_id) |
|
|
|
|
.expect("ruma can calculate reference hashes") |
|
|
|
|
)) |
|
|
|
|
.expect("ruma's reference hashes are valid event ids"); |
|
|
|
|
|