mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-12-28 18:04:35 +01:00
fix: initial state deserialize->serialize error
This commit is contained in:
parent
a5f004d7e9
commit
9ef3abacd4
2 changed files with 7 additions and 19 deletions
|
@ -344,10 +344,13 @@ pub async fn create_room_route(
|
||||||
|
|
||||||
// 6. Events listed in initial_state
|
// 6. Events listed in initial_state
|
||||||
for event in &body.initial_state {
|
for event in &body.initial_state {
|
||||||
let pdu_builder = PduBuilder::from(event.deserialize().map_err(|e| {
|
let mut pdu_builder = event.deserialize_as::<PduBuilder>().map_err(|e| {
|
||||||
warn!("Invalid initial state event: {:?}", e);
|
warn!("Invalid initial state event: {:?}", e);
|
||||||
Error::BadRequest(ErrorKind::InvalidParam, "Invalid initial state event.")
|
Error::BadRequest(ErrorKind::InvalidParam, "Invalid initial state event.")
|
||||||
})?);
|
})?;
|
||||||
|
|
||||||
|
// Implicit state key defaults to ""
|
||||||
|
pdu_builder.state_key.get_or_insert_with(|| "".to_owned());
|
||||||
|
|
||||||
// Silently skip encryption events if they are not allowed
|
// Silently skip encryption events if they are not allowed
|
||||||
if pdu_builder.event_type == EventType::RoomEncryption && !db.globals.allow_encryption() {
|
if pdu_builder.event_type == EventType::RoomEncryption && !db.globals.allow_encryption() {
|
||||||
|
|
19
src/pdu.rs
19
src/pdu.rs
|
@ -1,9 +1,8 @@
|
||||||
use crate::Error;
|
use crate::Error;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
events::{
|
events::{
|
||||||
room::member::RoomMemberEventContent, AnyEphemeralRoomEvent, AnyInitialStateEvent,
|
room::member::RoomMemberEventContent, AnyEphemeralRoomEvent, AnyRoomEvent, AnyStateEvent,
|
||||||
AnyRoomEvent, AnyStateEvent, AnyStrippedStateEvent, AnySyncRoomEvent, AnySyncStateEvent,
|
AnyStrippedStateEvent, AnySyncRoomEvent, AnySyncStateEvent, EventType, StateEvent,
|
||||||
EventType, StateEvent,
|
|
||||||
},
|
},
|
||||||
serde::{CanonicalJsonObject, CanonicalJsonValue, Raw},
|
serde::{CanonicalJsonObject, CanonicalJsonValue, Raw},
|
||||||
state_res, EventId, MilliSecondsSinceUnixEpoch, RoomId, RoomVersionId, UInt, UserId,
|
state_res, EventId, MilliSecondsSinceUnixEpoch, RoomId, RoomVersionId, UInt, UserId,
|
||||||
|
@ -361,17 +360,3 @@ pub struct PduBuilder {
|
||||||
pub state_key: Option<String>,
|
pub state_key: Option<String>,
|
||||||
pub redacts: Option<Arc<EventId>>,
|
pub redacts: Option<Arc<EventId>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Direct conversion prevents loss of the empty `state_key` that ruma requires.
|
|
||||||
impl From<AnyInitialStateEvent> for PduBuilder {
|
|
||||||
fn from(event: AnyInitialStateEvent) -> Self {
|
|
||||||
Self {
|
|
||||||
event_type: EventType::from(event.event_type()),
|
|
||||||
content: to_raw_value(&event.content())
|
|
||||||
.expect("AnyStateEventContent came from JSON and can thus turn back into JSON."),
|
|
||||||
unsigned: None,
|
|
||||||
state_key: Some(event.state_key().to_owned()),
|
|
||||||
redacts: None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue