diff options
author | Till <2353100+S7evinK@users.noreply.github.com> | 2022-11-30 12:40:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-30 11:40:36 +0000 |
commit | ac5f3f025eaf157d2a2bb15adcd19a5732325608 (patch) | |
tree | ab568c37ff22c94536e141443c9f60e15fd3d161 /userapi/consumers/roomserver.go | |
parent | ed497aa8b2d24b5d5ac00df773dab5087ddcf5ca (diff) |
Calculate correct room member count for push rule evaluation (#2894)
Fixes a bug where we would return only the local member count, which
could result in wrongly calculated push rules.
Diffstat (limited to 'userapi/consumers/roomserver.go')
-rw-r--r-- | userapi/consumers/roomserver.go | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/userapi/consumers/roomserver.go b/userapi/consumers/roomserver.go index 5d8924dd..3ce5af62 100644 --- a/userapi/consumers/roomserver.go +++ b/userapi/consumers/roomserver.go @@ -385,7 +385,6 @@ func (s *OutputRoomEventConsumer) localRoomMembers(ctx context.Context, roomID s req := &rsapi.QueryMembershipsForRoomRequest{ RoomID: roomID, JoinedOnly: true, - LocalOnly: true, } var res rsapi.QueryMembershipsForRoomResponse @@ -396,8 +395,23 @@ func (s *OutputRoomEventConsumer) localRoomMembers(ctx context.Context, roomID s } var members []*localMembership - var ntotal int for _, event := range res.JoinEvents { + // Filter out invalid join events + if event.StateKey == nil { + continue + } + if *event.StateKey == "" { + continue + } + _, serverName, err := gomatrixserverlib.SplitID('@', *event.StateKey) + if err != nil { + log.WithError(err).Error("failed to get servername from statekey") + continue + } + // Only get memberships for our server + if serverName != s.serverName { + continue + } member, err := newLocalMembership(&event) if err != nil { log.WithError(err).Errorf("Parsing MemberContent") @@ -410,11 +424,10 @@ func (s *OutputRoomEventConsumer) localRoomMembers(ctx context.Context, roomID s continue } - ntotal++ members = append(members, member) } - return members, ntotal, nil + return members, len(res.JoinEvents), nil } // roomName returns the name in the event (if type==m.room.name), or @@ -641,7 +654,7 @@ func (s *OutputRoomEventConsumer) evaluatePushRules(ctx context.Context, event * if rule == nil { // SPEC: If no rules match an event, the homeserver MUST NOT // notify the Push Gateway for that event. - return nil, err + return nil, nil } log.WithFields(log.Fields{ |