mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-07-30 21:12:45 +00:00
Use PDU not *Event in HeaderedEvent (#3073)
Requires https://github.com/matrix-org/gomatrixserverlib/pull/376 This has numerous upsides: - Less type casting to `*Event` is required. - Making Dendrite work with `PDU` interfaces means we can swap out Event impls more easily. - Tests which represent weird event shapes are easier to write. Part of a series of refactors on GMSL.
This commit is contained in:
parent
696cbb70b8
commit
f5b3144dc3
64 changed files with 296 additions and 284 deletions
|
@ -187,9 +187,9 @@ func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent, rew
|
|||
addsStateEvents = append(addsStateEvents, eventsRes.Events...)
|
||||
}
|
||||
|
||||
evs := make([]*gomatrixserverlib.Event, len(addsStateEvents))
|
||||
evs := make([]gomatrixserverlib.PDU, len(addsStateEvents))
|
||||
for i := range evs {
|
||||
evs[i] = addsStateEvents[i].Event
|
||||
evs[i] = addsStateEvents[i].PDU
|
||||
}
|
||||
|
||||
addsJoinedHosts, err := JoinedHostsFromEvents(evs)
|
||||
|
@ -340,7 +340,7 @@ func (s *OutputRoomEventConsumer) joinedHostsAtEvent(
|
|||
ore.AddsStateEventIDs, ore.RemovesStateEventIDs,
|
||||
ore.StateBeforeAddsEventIDs, ore.StateBeforeRemovesEventIDs,
|
||||
)
|
||||
combinedAddsEvents, err := s.lookupStateEvents(combinedAdds, ore.Event.Event)
|
||||
combinedAddsEvents, err := s.lookupStateEvents(combinedAdds, ore.Event.PDU)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -374,7 +374,7 @@ func (s *OutputRoomEventConsumer) joinedHostsAtEvent(
|
|||
}
|
||||
|
||||
// handle peeking hosts
|
||||
inboundPeeks, err := s.db.GetInboundPeeks(s.ctx, ore.Event.Event.RoomID())
|
||||
inboundPeeks, err := s.db.GetInboundPeeks(s.ctx, ore.Event.PDU.RoomID())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -394,7 +394,7 @@ func (s *OutputRoomEventConsumer) joinedHostsAtEvent(
|
|||
// JoinedHostsFromEvents turns a list of state events into a list of joined hosts.
|
||||
// This errors if one of the events was invalid.
|
||||
// It should be impossible for an invalid event to get this far in the pipeline.
|
||||
func JoinedHostsFromEvents(evs []*gomatrixserverlib.Event) ([]types.JoinedHost, error) {
|
||||
func JoinedHostsFromEvents(evs []gomatrixserverlib.PDU) ([]types.JoinedHost, error) {
|
||||
var joinedHosts []types.JoinedHost
|
||||
for _, ev := range evs {
|
||||
if ev.Type() != "m.room.member" || ev.StateKey() == nil {
|
||||
|
@ -459,8 +459,8 @@ func combineDeltas(adds1, removes1, adds2, removes2 []string) (adds, removes []s
|
|||
|
||||
// lookupStateEvents looks up the state events that are added by a new event.
|
||||
func (s *OutputRoomEventConsumer) lookupStateEvents(
|
||||
addsStateEventIDs []string, event *gomatrixserverlib.Event,
|
||||
) ([]*gomatrixserverlib.Event, error) {
|
||||
addsStateEventIDs []string, event gomatrixserverlib.PDU,
|
||||
) ([]gomatrixserverlib.PDU, error) {
|
||||
// Fast path if there aren't any new state events.
|
||||
if len(addsStateEventIDs) == 0 {
|
||||
return nil, nil
|
||||
|
@ -468,11 +468,11 @@ func (s *OutputRoomEventConsumer) lookupStateEvents(
|
|||
|
||||
// Fast path if the only state event added is the event itself.
|
||||
if len(addsStateEventIDs) == 1 && addsStateEventIDs[0] == event.EventID() {
|
||||
return []*gomatrixserverlib.Event{event}, nil
|
||||
return []gomatrixserverlib.PDU{event}, nil
|
||||
}
|
||||
|
||||
missing := addsStateEventIDs
|
||||
var result []*gomatrixserverlib.Event
|
||||
var result []gomatrixserverlib.PDU
|
||||
|
||||
// Check if event itself is being added.
|
||||
for _, eventID := range missing {
|
||||
|
@ -497,7 +497,7 @@ func (s *OutputRoomEventConsumer) lookupStateEvents(
|
|||
}
|
||||
|
||||
for _, headeredEvent := range eventResp.Events {
|
||||
result = append(result, headeredEvent.Event)
|
||||
result = append(result, headeredEvent.PDU)
|
||||
}
|
||||
|
||||
missing = missingEventsFrom(result, addsStateEventIDs)
|
||||
|
@ -511,7 +511,7 @@ func (s *OutputRoomEventConsumer) lookupStateEvents(
|
|||
return result, nil
|
||||
}
|
||||
|
||||
func missingEventsFrom(events []*gomatrixserverlib.Event, required []string) []string {
|
||||
func missingEventsFrom(events []gomatrixserverlib.PDU, required []string) []string {
|
||||
have := map[string]bool{}
|
||||
for _, event := range events {
|
||||
have[event.EventID()] = true
|
||||
|
|
|
@ -133,12 +133,12 @@ func (f *fedClient) MakeJoin(ctx context.Context, origin, s spec.ServerName, roo
|
|||
}
|
||||
return
|
||||
}
|
||||
func (f *fedClient) SendJoin(ctx context.Context, origin, s spec.ServerName, event *gomatrixserverlib.Event) (res fclient.RespSendJoin, err error) {
|
||||
func (f *fedClient) SendJoin(ctx context.Context, origin, s spec.ServerName, event gomatrixserverlib.PDU) (res fclient.RespSendJoin, err error) {
|
||||
f.fedClientMutex.Lock()
|
||||
defer f.fedClientMutex.Unlock()
|
||||
for _, r := range f.allowJoins {
|
||||
if r.ID == event.RoomID() {
|
||||
r.InsertEvent(f.t, &types.HeaderedEvent{Event: event})
|
||||
r.InsertEvent(f.t, &types.HeaderedEvent{PDU: event})
|
||||
f.t.Logf("Join event: %v", event.EventID())
|
||||
res.StateEvents = types.NewEventJSONsFromHeaderedEvents(r.CurrentState())
|
||||
res.AuthEvents = types.NewEventJSONsFromHeaderedEvents(r.Events())
|
||||
|
|
|
@ -27,7 +27,7 @@ func (a *FederationInternalAPI) MakeJoin(
|
|||
}
|
||||
|
||||
func (a *FederationInternalAPI) SendJoin(
|
||||
ctx context.Context, origin, s spec.ServerName, event *gomatrixserverlib.Event,
|
||||
ctx context.Context, origin, s spec.ServerName, event gomatrixserverlib.PDU,
|
||||
) (res gomatrixserverlib.SendJoinResponse, err error) {
|
||||
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
|
||||
defer cancel()
|
||||
|
|
|
@ -204,7 +204,7 @@ func (r *FederationInternalAPI) performJoinUsingServer(
|
|||
user.Domain(),
|
||||
roomserverAPI.KindNew,
|
||||
response.StateSnapshot,
|
||||
&types.HeaderedEvent{Event: response.JoinEvent},
|
||||
&types.HeaderedEvent{PDU: response.JoinEvent},
|
||||
serverName,
|
||||
nil,
|
||||
false,
|
||||
|
@ -389,7 +389,7 @@ func (r *FederationInternalAPI) performOutboundPeekUsingServer(
|
|||
StateEvents: gomatrixserverlib.NewEventJSONsFromEvents(stateEvents),
|
||||
AuthEvents: gomatrixserverlib.NewEventJSONsFromEvents(authEvents),
|
||||
},
|
||||
&types.HeaderedEvent{Event: respPeek.LatestEvent},
|
||||
&types.HeaderedEvent{PDU: respPeek.LatestEvent},
|
||||
serverName,
|
||||
nil,
|
||||
false,
|
||||
|
@ -536,7 +536,7 @@ func (r *FederationInternalAPI) PerformInvite(
|
|||
"destination": destination,
|
||||
}).Info("Sending invite")
|
||||
|
||||
inviteReq, err := fclient.NewInviteV2Request(request.Event.Event, request.InviteRoomState)
|
||||
inviteReq, err := fclient.NewInviteV2Request(request.Event.PDU, request.InviteRoomState)
|
||||
if err != nil {
|
||||
return fmt.Errorf("gomatrixserverlib.NewInviteV2Request: %w", err)
|
||||
}
|
||||
|
@ -554,7 +554,7 @@ func (r *FederationInternalAPI) PerformInvite(
|
|||
if err != nil {
|
||||
return fmt.Errorf("r.federation.SendInviteV2 failed to decode event response: %w", err)
|
||||
}
|
||||
response.Event = &types.HeaderedEvent{Event: inviteEvent}
|
||||
response.Event = &types.HeaderedEvent{PDU: inviteEvent}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -603,7 +603,7 @@ func (r *FederationInternalAPI) MarkServersAlive(destinations []spec.ServerName)
|
|||
}
|
||||
}
|
||||
|
||||
func checkEventsContainCreateEvent(events []*gomatrixserverlib.Event) error {
|
||||
func checkEventsContainCreateEvent(events []gomatrixserverlib.PDU) error {
|
||||
// sanity check we have a create event and it has a known room version
|
||||
for _, ev := range events {
|
||||
if ev.Type() == spec.MRoomCreate && ev.StateKeyEquals("") {
|
||||
|
|
|
@ -109,7 +109,7 @@ func mustCreatePDU(t *testing.T) *types.HeaderedEvent {
|
|||
if err != nil {
|
||||
t.Fatalf("failed to create event: %v", err)
|
||||
}
|
||||
return &types.HeaderedEvent{Event: ev}
|
||||
return &types.HeaderedEvent{PDU: ev}
|
||||
}
|
||||
|
||||
func mustCreateEDU(t *testing.T) *gomatrixserverlib.EDU {
|
||||
|
|
|
@ -103,18 +103,18 @@ func Backfill(
|
|||
}
|
||||
|
||||
// Filter any event that's not from the requested room out.
|
||||
evs := make([]*gomatrixserverlib.Event, 0)
|
||||
evs := make([]gomatrixserverlib.PDU, 0)
|
||||
|
||||
var ev *types.HeaderedEvent
|
||||
for _, ev = range res.Events {
|
||||
if ev.RoomID() == roomID {
|
||||
evs = append(evs, ev.Event)
|
||||
evs = append(evs, ev.PDU)
|
||||
}
|
||||
}
|
||||
|
||||
eventJSONs := []json.RawMessage{}
|
||||
for _, e := range gomatrixserverlib.ReverseTopologicalOrdering(
|
||||
gomatrixserverlib.ToPDUs(evs),
|
||||
evs,
|
||||
gomatrixserverlib.TopologicalOrderByPrevEvents,
|
||||
) {
|
||||
eventJSONs = append(eventJSONs, e.JSON())
|
||||
|
|
|
@ -80,7 +80,7 @@ func allowedToSeeEvent(
|
|||
}
|
||||
|
||||
// fetchEvent fetches the event without auth checks. Returns an error if the event cannot be found.
|
||||
func fetchEvent(ctx context.Context, rsAPI api.FederationRoomserverAPI, roomID, eventID string) (*gomatrixserverlib.Event, *util.JSONResponse) {
|
||||
func fetchEvent(ctx context.Context, rsAPI api.FederationRoomserverAPI, roomID, eventID string) (gomatrixserverlib.PDU, *util.JSONResponse) {
|
||||
var eventsResponse api.QueryEventsByIDResponse
|
||||
err := rsAPI.QueryEventsByID(
|
||||
ctx,
|
||||
|
@ -99,5 +99,5 @@ func fetchEvent(ctx context.Context, rsAPI api.FederationRoomserverAPI, roomID,
|
|||
}
|
||||
}
|
||||
|
||||
return eventsResponse.Events[0].Event, nil
|
||||
return eventsResponse.Events[0].PDU, nil
|
||||
}
|
||||
|
|
|
@ -107,7 +107,7 @@ func InviteV1(
|
|||
func processInvite(
|
||||
ctx context.Context,
|
||||
isInviteV2 bool,
|
||||
event *gomatrixserverlib.Event,
|
||||
event gomatrixserverlib.PDU,
|
||||
roomVer gomatrixserverlib.RoomVersion,
|
||||
strippedState []fclient.InviteV2StrippedState,
|
||||
roomID string,
|
||||
|
@ -198,7 +198,7 @@ func processInvite(
|
|||
)
|
||||
|
||||
// Add the invite event to the roomserver.
|
||||
inviteEvent := &types.HeaderedEvent{Event: &signedEvent}
|
||||
inviteEvent := &types.HeaderedEvent{PDU: signedEvent}
|
||||
request := &api.PerformInviteRequest{
|
||||
Event: inviteEvent,
|
||||
InviteRoomState: strippedState,
|
||||
|
|
|
@ -163,13 +163,13 @@ func MakeJoin(
|
|||
}
|
||||
|
||||
// Check that the join is allowed or not
|
||||
stateEvents := make([]*gomatrixserverlib.Event, len(queryRes.StateEvents))
|
||||
stateEvents := make([]gomatrixserverlib.PDU, len(queryRes.StateEvents))
|
||||
for i := range queryRes.StateEvents {
|
||||
stateEvents[i] = queryRes.StateEvents[i].Event
|
||||
stateEvents[i] = queryRes.StateEvents[i].PDU
|
||||
}
|
||||
|
||||
provider := gomatrixserverlib.NewAuthEvents(gomatrixserverlib.ToPDUs(stateEvents))
|
||||
if err = gomatrixserverlib.Allowed(event.Event, &provider); err != nil {
|
||||
provider := gomatrixserverlib.NewAuthEvents(stateEvents)
|
||||
if err = gomatrixserverlib.Allowed(event.PDU, &provider); err != nil {
|
||||
return util.JSONResponse{
|
||||
Code: http.StatusForbidden,
|
||||
JSON: jsonerror.Forbidden(err.Error()),
|
||||
|
@ -414,7 +414,7 @@ func SendJoin(
|
|||
InputRoomEvents: []api.InputRoomEvent{
|
||||
{
|
||||
Kind: api.KindNew,
|
||||
Event: &types.HeaderedEvent{Event: &signed},
|
||||
Event: &types.HeaderedEvent{PDU: signed},
|
||||
SendAsServer: string(cfg.Matrix.ServerName),
|
||||
TransactionID: nil,
|
||||
},
|
||||
|
|
|
@ -110,12 +110,12 @@ func MakeLeave(
|
|||
}
|
||||
|
||||
// Check that the leave is allowed or not
|
||||
stateEvents := make([]*gomatrixserverlib.Event, len(queryRes.StateEvents))
|
||||
stateEvents := make([]gomatrixserverlib.PDU, len(queryRes.StateEvents))
|
||||
for i := range queryRes.StateEvents {
|
||||
stateEvents[i] = queryRes.StateEvents[i].Event
|
||||
stateEvents[i] = queryRes.StateEvents[i].PDU
|
||||
}
|
||||
provider := gomatrixserverlib.NewAuthEvents(gomatrixserverlib.ToPDUs(stateEvents))
|
||||
if err = gomatrixserverlib.Allowed(event.Event, &provider); err != nil {
|
||||
provider := gomatrixserverlib.NewAuthEvents(stateEvents)
|
||||
if err = gomatrixserverlib.Allowed(event, &provider); err != nil {
|
||||
return util.JSONResponse{
|
||||
Code: http.StatusForbidden,
|
||||
JSON: jsonerror.Forbidden(err.Error()),
|
||||
|
@ -313,7 +313,7 @@ func SendLeave(
|
|||
InputRoomEvents: []api.InputRoomEvent{
|
||||
{
|
||||
Kind: api.KindNew,
|
||||
Event: &types.HeaderedEvent{Event: event},
|
||||
Event: &types.HeaderedEvent{PDU: event},
|
||||
SendAsServer: string(cfg.Matrix.ServerName),
|
||||
TransactionID: nil,
|
||||
},
|
||||
|
|
|
@ -91,7 +91,7 @@ func Peek(
|
|||
StateEvents: types.NewEventJSONsFromHeaderedEvents(response.StateEvents),
|
||||
AuthEvents: types.NewEventJSONsFromHeaderedEvents(response.AuthChainEvents),
|
||||
RoomVersion: response.RoomVersion,
|
||||
LatestEvent: response.LatestEvent.Event,
|
||||
LatestEvent: response.LatestEvent.PDU,
|
||||
RenewalInterval: renewalInterval,
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ func CreateInvitesFrom3PIDInvites(
|
|||
return jsonerror.InternalServerError()
|
||||
}
|
||||
if event != nil {
|
||||
evs = append(evs, &types.HeaderedEvent{Event: event})
|
||||
evs = append(evs, &types.HeaderedEvent{PDU: event})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -210,7 +210,7 @@ func ExchangeThirdPartyInvite(
|
|||
httpReq.Context(), rsAPI,
|
||||
api.KindNew,
|
||||
[]*types.HeaderedEvent{
|
||||
{Event: inviteEvent},
|
||||
{PDU: inviteEvent},
|
||||
},
|
||||
request.Destination(),
|
||||
request.Origin(),
|
||||
|
@ -325,7 +325,7 @@ func buildMembershipEvent(
|
|||
authEvents := gomatrixserverlib.NewAuthEvents(nil)
|
||||
|
||||
for i := range queryRes.StateEvents {
|
||||
err = authEvents.AddEvent(queryRes.StateEvents[i].Event)
|
||||
err = authEvents.AddEvent(queryRes.StateEvents[i].PDU)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue