Add auth chain to federated response

This commit is contained in:
Kegan Dougal 2020-11-24 11:56:11 +00:00
parent 4b4ff74103
commit 04e879b581
2 changed files with 26 additions and 1 deletions

View file

@ -198,6 +198,30 @@ func federatedEventRelationship(
if resErr != nil { if resErr != nil {
return *resErr return *resErr
} }
// add auth chain information
requiredAuthEventsSet := make(map[string]bool)
var requiredAuthEvents []string
for _, ev := range res.Events {
for _, a := range ev.AuthEventIDs() {
if requiredAuthEventsSet[a] {
continue
}
requiredAuthEvents = append(requiredAuthEvents, a)
requiredAuthEventsSet[a] = true
}
}
var queryRes roomserver.QueryAuthChainResponse
err = rsAPI.QueryAuthChain(ctx, &roomserver.QueryAuthChainRequest{
EventIDs: requiredAuthEvents,
}, &queryRes)
if err != nil {
// they may already have the auth events so don't fail this request
util.GetLogger(ctx).WithError(err).Error("Failed to QueryAuthChain")
}
res.AuthChain = make([]*gomatrixserverlib.Event, len(queryRes.AuthChain))
for i := range queryRes.AuthChain {
res.AuthChain[i] = queryRes.AuthChain[i].Unwrap()
}
return util.JSONResponse{ return util.JSONResponse{
Code: 200, Code: 200,

View file

@ -127,7 +127,8 @@ type RoomserverInternalAPI interface {
) error ) error
// QueryAuthChain returns the entire auth chain for the event IDs given. // QueryAuthChain returns the entire auth chain for the event IDs given.
// Omits without error any missing auth events. // The response includes the events in the request.
// Omits without error for any missing auth events. There will be no duplicates.
QueryAuthChain( QueryAuthChain(
ctx context.Context, ctx context.Context,
request *QueryAuthChainRequest, request *QueryAuthChainRequest,