Implement gomatrixserverlib.HeaderedEvent in roomserver query API (#912)

* Implement gomatrixserverlib.HeaderedEvent, which should allow us to store room version headers along with the event across API boundaries and consumers/producers, and intercept unmarshalling to get the event structure right

* Add federationsender to previous
This commit is contained in:
Neil Alexander 2020-03-16 17:29:52 +00:00 committed by GitHub
parent 452f393dd7
commit acb505b717
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 163 additions and 36 deletions

View file

@ -84,10 +84,10 @@ func Backfill(
// Filter any event that's not from the requested room out.
evs := make([]gomatrixserverlib.Event, 0)
var ev gomatrixserverlib.Event
var ev gomatrixserverlib.HeaderedEvent
for _, ev = range res.Events {
if ev.RoomID() == roomID {
evs = append(evs, ev)
evs = append(evs, ev.Event)
}
}

View file

@ -80,5 +80,5 @@ func getEvent(
return nil, &util.JSONResponse{Code: http.StatusNotFound, JSON: nil}
}
return &eventsResponse.Events[0], nil
return &eventsResponse.Events[0].Event, nil
}

View file

@ -78,7 +78,7 @@ func MakeJoin(
// Check that the join is allowed or not
stateEvents := make([]*gomatrixserverlib.Event, len(queryRes.StateEvents))
for i := range queryRes.StateEvents {
stateEvents[i] = &queryRes.StateEvents[i]
stateEvents[i] = &queryRes.StateEvents[i].Event
}
provider := gomatrixserverlib.NewAuthEvents(stateEvents)
if err = gomatrixserverlib.Allowed(*event, &provider); err != nil {

View file

@ -76,7 +76,7 @@ func MakeLeave(
// Check that the leave is allowed or not
stateEvents := make([]*gomatrixserverlib.Event, len(queryRes.StateEvents))
for i := range queryRes.StateEvents {
stateEvents[i] = &queryRes.StateEvents[i]
stateEvents[i] = &queryRes.StateEvents[i].Event
}
provider := gomatrixserverlib.NewAuthEvents(stateEvents)
if err = gomatrixserverlib.Allowed(*event, &provider); err != nil {

View file

@ -68,8 +68,8 @@ func GetMissingEvents(
// filterEvents returns only those events with matching roomID and having depth greater than minDepth
func filterEvents(
events []gomatrixserverlib.Event, minDepth int64, roomID string,
) []gomatrixserverlib.Event {
events []gomatrixserverlib.HeaderedEvent, minDepth int64, roomID string,
) []gomatrixserverlib.HeaderedEvent {
ref := events[:0]
for _, ev := range events {
if ev.Depth() >= minDepth && ev.RoomID() == roomID {

View file

@ -162,7 +162,11 @@ func (t *txnReq) processEvent(e gomatrixserverlib.Event) error {
}
// Check that the event is allowed by the state at the event.
if err := checkAllowedByState(e, stateResp.StateEvents); err != nil {
var events []gomatrixserverlib.Event
for _, headeredEvent := range stateResp.StateEvents {
events = append(events, headeredEvent.Event)
}
if err := checkAllowedByState(e, events); err != nil {
return err
}

View file

@ -129,9 +129,17 @@ func getState(
return nil, &util.JSONResponse{Code: http.StatusNotFound, JSON: nil}
}
var stateEvents, authEvents []gomatrixserverlib.Event
for _, headeredEvent := range response.StateEvents {
stateEvents = append(stateEvents, headeredEvent.Event)
}
for _, headeredEvent := range response.AuthChainEvents {
authEvents = append(authEvents, headeredEvent.Event)
}
return &gomatrixserverlib.RespState{
StateEvents: response.StateEvents,
AuthEvents: response.AuthChainEvents,
StateEvents: stateEvents,
AuthEvents: authEvents,
}, nil
}

View file

@ -264,7 +264,7 @@ func buildMembershipEvent(
authEvents := gomatrixserverlib.NewAuthEvents(nil)
for i := range queryRes.StateEvents {
err = authEvents.AddEvent(&queryRes.StateEvents[i])
err = authEvents.AddEvent(&queryRes.StateEvents[i].Event)
if err != nil {
return nil, err
}