diff --git a/src/github.com/matrix-org/dendrite/common/events.go b/src/github.com/matrix-org/dendrite/common/events.go index cf2df8422..f640e2c3e 100644 --- a/src/github.com/matrix-org/dendrite/common/events.go +++ b/src/github.com/matrix-org/dendrite/common/events.go @@ -42,11 +42,31 @@ func BuildEvent( builder *gomatrixserverlib.EventBuilder, cfg config.Dendrite, queryAPI api.RoomserverQueryAPI, queryRes *api.QueryLatestEventsAndStateResponse, ) (*gomatrixserverlib.Event, error) { - eventsNeeded, err := gomatrixserverlib.StateNeededForEventBuilder(builder) + err := AddPrevEventsToEvent(ctx, builder, cfg, queryAPI, queryRes) if err != nil { return nil, err } + eventID := fmt.Sprintf("$%s:%s", util.RandomString(16), cfg.Matrix.ServerName) + now := time.Now() + event, err := builder.Build(eventID, now, cfg.Matrix.ServerName, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey) + if err != nil { + return nil, err + } + + return &event, nil +} + +func AddPrevEventsToEvent( + ctx context.Context, + builder *gomatrixserverlib.EventBuilder, cfg config.Dendrite, + queryAPI api.RoomserverQueryAPI, queryRes *api.QueryLatestEventsAndStateResponse, +) error { + eventsNeeded, err := gomatrixserverlib.StateNeededForEventBuilder(builder) + if err != nil { + return err + } + // Ask the roomserver for information about this room queryReq := api.QueryLatestEventsAndStateRequest{ RoomID: builder.RoomID, @@ -56,11 +76,11 @@ func BuildEvent( queryRes = &api.QueryLatestEventsAndStateResponse{} } if err = queryAPI.QueryLatestEventsAndState(ctx, &queryReq, queryRes); err != nil { - return nil, err + return err } if !queryRes.RoomExists { - return nil, ErrRoomNoExists + return ErrRoomNoExists } builder.Depth = queryRes.Depth @@ -71,22 +91,15 @@ func BuildEvent( for i := range queryRes.StateEvents { err = authEvents.AddEvent(&queryRes.StateEvents[i]) if err != nil { - return nil, err + return err } } refs, err := eventsNeeded.AuthEventReferences(&authEvents) if err != nil { - return nil, err + return err } builder.AuthEvents = refs - eventID := fmt.Sprintf("$%s:%s", util.RandomString(16), cfg.Matrix.ServerName) - now := time.Now() - event, err := builder.Build(eventID, now, cfg.Matrix.ServerName, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey) - if err != nil { - return nil, err - } - - return &event, nil + return nil } diff --git a/src/github.com/matrix-org/dendrite/federationapi/routing/join.go b/src/github.com/matrix-org/dendrite/federationapi/routing/join.go index f77341c66..b52174a84 100644 --- a/src/github.com/matrix-org/dendrite/federationapi/routing/join.go +++ b/src/github.com/matrix-org/dendrite/federationapi/routing/join.go @@ -90,7 +90,7 @@ func MakeJoin( return util.JSONResponse{ Code: 200, - JSON: event, + JSON: map[string]interface{}{"event": builder}, } } @@ -159,6 +159,7 @@ func SendJoin( var stateAndAuthChainRepsonse api.QueryStateAndAuthChainResponse err = query.QueryStateAndAuthChain(ctx, &api.QueryStateAndAuthChainRequest{ PrevEventIDs: event.PrevEventIDs(), + AuthEventIDs: event.AuthEventIDs(), RoomID: roomID, }, &stateAndAuthChainRepsonse) if err != nil {