aboutsummaryrefslogtreecommitdiff
path: root/roomserver
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-04-25 19:05:01 +0200
committerGitHub <noreply@github.com>2022-04-25 19:05:01 +0200
commite8ab2154aa57d46bffa2db1e7c1333c2fa40cb21 (patch)
tree4a3f99cc2e2f8a93fd8db06c707e8a3e5ebb84d2 /roomserver
parente95fc5c5e3e4945949fbc1e9036c599687925a4d (diff)
Return M_NOT_FOUND for rejected events (#2371)
* Return M_NOT_FOUND for rejected events * Add passing tests
Diffstat (limited to 'roomserver')
-rw-r--r--roomserver/api/query.go2
-rw-r--r--roomserver/internal/query/query.go24
2 files changed, 19 insertions, 7 deletions
diff --git a/roomserver/api/query.go b/roomserver/api/query.go
index 8f84edcb..ef2e6bb5 100644
--- a/roomserver/api/query.go
+++ b/roomserver/api/query.go
@@ -230,6 +230,8 @@ type QueryStateAndAuthChainResponse struct {
// The lists will be in an arbitrary order.
StateEvents []*gomatrixserverlib.HeaderedEvent `json:"state_events"`
AuthChainEvents []*gomatrixserverlib.HeaderedEvent `json:"auth_chain_events"`
+ // True if the queried event was rejected earlier.
+ IsRejected bool `json:"is_rejected"`
}
// QueryRoomVersionCapabilitiesRequest asks for the default room version
diff --git a/roomserver/internal/query/query.go b/roomserver/internal/query/query.go
index 7e4d5668..5b33ec3c 100644
--- a/roomserver/internal/query/query.go
+++ b/roomserver/internal/query/query.go
@@ -441,11 +441,11 @@ func (r *Queryer) QueryStateAndAuthChain(
}
var stateEvents []*gomatrixserverlib.Event
- stateEvents, err = r.loadStateAtEventIDs(ctx, info, request.PrevEventIDs)
+ stateEvents, rejected, err := r.loadStateAtEventIDs(ctx, info, request.PrevEventIDs)
if err != nil {
return err
}
-
+ response.IsRejected = rejected
response.PrevEventsExist = true
// add the auth event IDs for the current state events too
@@ -480,15 +480,23 @@ func (r *Queryer) QueryStateAndAuthChain(
return err
}
-func (r *Queryer) loadStateAtEventIDs(ctx context.Context, roomInfo *types.RoomInfo, eventIDs []string) ([]*gomatrixserverlib.Event, error) {
+func (r *Queryer) loadStateAtEventIDs(ctx context.Context, roomInfo *types.RoomInfo, eventIDs []string) ([]*gomatrixserverlib.Event, bool, error) {
roomState := state.NewStateResolution(r.DB, roomInfo)
prevStates, err := r.DB.StateAtEventIDs(ctx, eventIDs)
if err != nil {
switch err.(type) {
case types.MissingEventError:
- return nil, nil
+ return nil, false, nil
default:
- return nil, err
+ return nil, false, err
+ }
+ }
+ // Currently only used on /state and /state_ids
+ rejected := false
+ for i := range prevStates {
+ if prevStates[i].IsRejected {
+ rejected = true
+ break
}
}
@@ -497,10 +505,12 @@ func (r *Queryer) loadStateAtEventIDs(ctx context.Context, roomInfo *types.RoomI
ctx, prevStates,
)
if err != nil {
- return nil, err
+ return nil, rejected, err
}
- return helpers.LoadStateEvents(ctx, r.DB, stateEntries)
+ events, err := helpers.LoadStateEvents(ctx, r.DB, stateEntries)
+
+ return events, rejected, err
}
type eventsFromIDs func(context.Context, []string) ([]types.Event, error)