diff --git a/clientapi/routing/createroom.go b/clientapi/routing/createroom.go index b0c395d36..e89d8ff24 100644 --- a/clientapi/routing/createroom.go +++ b/clientapi/routing/createroom.go @@ -459,7 +459,6 @@ func createRoom( Kind: roomserverAPI.KindNew, Event: event, Origin: cfg.Matrix.ServerName, - AuthEventIDs: event.AuthEventIDs(), SendAsServer: roomserverAPI.DoNotSendToOtherServers, }) } diff --git a/federationapi/routing/join.go b/federationapi/routing/join.go index 7310a3053..7f8d31505 100644 --- a/federationapi/routing/join.go +++ b/federationapi/routing/join.go @@ -324,7 +324,6 @@ func SendJoin( { Kind: api.KindNew, Event: event.Headered(stateAndAuthChainResponse.RoomVersion), - AuthEventIDs: event.AuthEventIDs(), SendAsServer: string(cfg.Matrix.ServerName), TransactionID: nil, }, diff --git a/federationapi/routing/leave.go b/federationapi/routing/leave.go index 6312adfaa..0b83f04ae 100644 --- a/federationapi/routing/leave.go +++ b/federationapi/routing/leave.go @@ -275,7 +275,6 @@ func SendLeave( { Kind: api.KindNew, Event: event.Headered(verRes.RoomVersion), - AuthEventIDs: event.AuthEventIDs(), SendAsServer: string(cfg.Matrix.ServerName), TransactionID: nil, }, diff --git a/roomserver/api/input.go b/roomserver/api/input.go index db0d4f302..4b0704b9f 100644 --- a/roomserver/api/input.go +++ b/roomserver/api/input.go @@ -56,12 +56,6 @@ type InputRoomEvent struct { Event *gomatrixserverlib.HeaderedEvent `json:"event"` // Which server told us about this event. Origin gomatrixserverlib.ServerName `json:"origin"` - // List of state event IDs that authenticate this event. - // These are likely derived from the "auth_events" JSON key of the event. - // But can be different because the "auth_events" key can be incomplete or wrong. - // For example many matrix events forget to reference the m.room.create event even though it is needed for auth. - // (since synapse allows this to happen we have to allow it as well.) - AuthEventIDs []string `json:"auth_event_ids"` // Whether the state is supplied as a list of event IDs or whether it // should be derived from the state at the previous events. HasState bool `json:"has_state"` diff --git a/roomserver/api/wrapper.go b/roomserver/api/wrapper.go index 63526b7b1..e9b94e48c 100644 --- a/roomserver/api/wrapper.go +++ b/roomserver/api/wrapper.go @@ -36,7 +36,6 @@ func SendEvents( Kind: kind, Event: event, Origin: origin, - AuthEventIDs: event.AuthEventIDs(), SendAsServer: string(sendAsServer), TransactionID: txnID, } @@ -63,10 +62,9 @@ func SendEventWithState( continue } ires = append(ires, InputRoomEvent{ - Kind: KindOutlier, - Event: outlier.Headered(event.RoomVersion), - Origin: origin, - AuthEventIDs: outlier.AuthEventIDs(), + Kind: KindOutlier, + Event: outlier.Headered(event.RoomVersion), + Origin: origin, }) } @@ -79,7 +77,6 @@ func SendEventWithState( Kind: kind, Event: event, Origin: origin, - AuthEventIDs: event.AuthEventIDs(), HasState: true, StateEventIDs: stateEventIDs, }) diff --git a/roomserver/internal/input/input_missing.go b/roomserver/internal/input/input_missing.go index e1e2d597c..e2b9ceb84 100644 --- a/roomserver/internal/input/input_missing.go +++ b/roomserver/internal/input/input_missing.go @@ -177,10 +177,9 @@ func (t *missingStateReq) processEventWithMissingState( continue } outlierRoomEvents = append(outlierRoomEvents, api.InputRoomEvent{ - Kind: api.KindOutlier, - Event: outlier.Headered(roomVersion), - Origin: t.origin, - AuthEventIDs: outlier.AuthEventIDs(), + Kind: api.KindOutlier, + Event: outlier.Headered(roomVersion), + Origin: t.origin, }) } // TODO: we could do this concurrently? @@ -202,7 +201,6 @@ func (t *missingStateReq) processEventWithMissingState( Kind: api.KindOld, Event: backwardsExtremity.Headered(roomVersion), Origin: t.origin, - AuthEventIDs: backwardsExtremity.AuthEventIDs(), HasState: true, StateEventIDs: stateIDs, SendAsServer: api.DoNotSendToOtherServers, @@ -220,7 +218,6 @@ func (t *missingStateReq) processEventWithMissingState( Kind: api.KindOld, Event: newEvent.Headered(roomVersion), Origin: t.origin, - AuthEventIDs: newEvent.AuthEventIDs(), SendAsServer: api.DoNotSendToOtherServers, }) if err != nil { diff --git a/roomserver/internal/perform/perform_invite.go b/roomserver/internal/perform/perform_invite.go index 6aa2bf26d..85b2322fe 100644 --- a/roomserver/internal/perform/perform_invite.go +++ b/roomserver/internal/perform/perform_invite.go @@ -173,7 +173,6 @@ func (r *Inviter) PerformInvite( Kind: api.KindNew, Event: event, Origin: event.Origin(), - AuthEventIDs: event.AuthEventIDs(), SendAsServer: req.SendAsServer, }, }, diff --git a/roomserver/internal/perform/perform_join.go b/roomserver/internal/perform/perform_join.go index 75397eb60..a1ffab5dd 100644 --- a/roomserver/internal/perform/perform_join.go +++ b/roomserver/internal/perform/perform_join.go @@ -271,7 +271,6 @@ func (r *Joiner) performJoinRoomByID( { Kind: rsAPI.KindNew, Event: event.Headered(buildRes.RoomVersion), - AuthEventIDs: event.AuthEventIDs(), SendAsServer: string(r.Cfg.Matrix.ServerName), }, }, diff --git a/roomserver/internal/perform/perform_leave.go b/roomserver/internal/perform/perform_leave.go index 5720749f6..eac528eaf 100644 --- a/roomserver/internal/perform/perform_leave.go +++ b/roomserver/internal/perform/perform_leave.go @@ -140,7 +140,6 @@ func (r *Leaver) performLeaveRoomByID( Kind: api.KindNew, Event: event.Headered(buildRes.RoomVersion), Origin: event.Origin(), - AuthEventIDs: event.AuthEventIDs(), SendAsServer: string(r.Cfg.Matrix.ServerName), }, }, diff --git a/roomserver/storage/postgres/events_table.go b/roomserver/storage/postgres/events_table.go index d100a6186..778cd8d73 100644 --- a/roomserver/storage/postgres/events_table.go +++ b/roomserver/storage/postgres/events_table.go @@ -311,7 +311,9 @@ func (s *eventStatements) BulkSelectStateAtEventByID( ); err != nil { return nil, err } - if result.BeforeStateSnapshotNID == 0 && result.EventTypeNID != types.MRoomCreateNID { + // Genuine create events are the only case where it's OK to have no previous state. + isCreate := result.EventTypeNID == types.MRoomCreateNID && result.EventStateKeyNID == 1 + if result.BeforeStateSnapshotNID == 0 && !isCreate { return nil, types.MissingEventError( fmt.Sprintf("storage: missing state for event NID %d", result.EventNID), ) diff --git a/roomserver/storage/sqlite3/events_table.go b/roomserver/storage/sqlite3/events_table.go index bd8db7bd8..7483e2815 100644 --- a/roomserver/storage/sqlite3/events_table.go +++ b/roomserver/storage/sqlite3/events_table.go @@ -322,7 +322,9 @@ func (s *eventStatements) BulkSelectStateAtEventByID( ); err != nil { return nil, err } - if result.BeforeStateSnapshotNID == 0 && result.EventTypeNID != types.MRoomCreateNID { + // Genuine create events are the only case where it's OK to have no previous state. + isCreate := result.EventTypeNID == types.MRoomCreateNID && result.EventStateKeyNID == 1 + if result.BeforeStateSnapshotNID == 0 && !isCreate { return nil, types.MissingEventError( fmt.Sprintf("storage: missing state for event NID %d", result.EventNID), ) diff --git a/setup/mscs/msc2836/msc2836.go b/setup/mscs/msc2836/msc2836.go index e048d7360..8a35e4143 100644 --- a/setup/mscs/msc2836/msc2836.go +++ b/setup/mscs/msc2836/msc2836.go @@ -643,9 +643,8 @@ func (rc *reqCtx) injectResponseToRoomserver(res *gomatrixserverlib.MSC2836Event var ires []roomserver.InputRoomEvent for _, outlier := range append(eventsInOrder, messageEvents...) { ires = append(ires, roomserver.InputRoomEvent{ - Kind: roomserver.KindOutlier, - Event: outlier.Headered(outlier.Version()), - AuthEventIDs: outlier.AuthEventIDs(), + Kind: roomserver.KindOutlier, + Event: outlier.Headered(outlier.Version()), }) } // we've got the data by this point so use a background context