mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-19 00:31:24 +01:00
largely stop using RoomCreateEventContent
This became a problem because #foundation-office:matrix.org has a malformed create event with its `predecessor` set to a string instead of a map. The solution to this is, unfortunately, to do more shotgun parsing to extract only the desired fields rather than trying to parse the entire content every time. To prevent this kind of problem from happening again, `RoomCreateEventContent` must only be used for creating new PDUs, existing PDUs must be shotgun-parsed.
This commit is contained in:
parent
9d0cf428a5
commit
51b30d9ba3
4 changed files with 50 additions and 51 deletions
|
|
@ -5,10 +5,9 @@ use std::{
|
|||
|
||||
use ruma::{
|
||||
events::{
|
||||
ignored_user_list::IgnoredUserListEvent,
|
||||
room::{create::RoomCreateEventContent, member::MembershipState},
|
||||
ignored_user_list::IgnoredUserListEvent, room::member::MembershipState,
|
||||
AnyStrippedStateEvent, AnySyncStateEvent, GlobalAccountDataEventType,
|
||||
RoomAccountDataEventType, StateEventType,
|
||||
RoomAccountDataEventType,
|
||||
},
|
||||
serde::Raw,
|
||||
OwnedRoomId, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId,
|
||||
|
|
@ -25,6 +24,8 @@ mod data;
|
|||
|
||||
pub(crate) use data::Data;
|
||||
|
||||
use super::state::ExtractPredecessor;
|
||||
|
||||
pub(crate) struct Service {
|
||||
db: &'static dyn Data,
|
||||
appservice_in_room_cache:
|
||||
|
|
@ -72,18 +73,13 @@ impl Service {
|
|||
// Check if the room has a predecessor
|
||||
if let Some(predecessor) = services()
|
||||
.rooms
|
||||
.state_accessor
|
||||
.room_state_get(
|
||||
room_id,
|
||||
&StateEventType::RoomCreate,
|
||||
"",
|
||||
)?
|
||||
.and_then(|create| {
|
||||
serde_json::from_str(create.content.get()).ok()
|
||||
})
|
||||
.and_then(|content: RoomCreateEventContent| {
|
||||
content.predecessor
|
||||
.state
|
||||
.get_create_content::<ExtractPredecessor>(room_id)
|
||||
.inspect_err(|error| {
|
||||
warn!(%error, "Failed to get room predecessor");
|
||||
})
|
||||
.ok()
|
||||
.flatten()
|
||||
{
|
||||
self.copy_upgraded_account_data(
|
||||
user_id,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue