aboutsummaryrefslogtreecommitdiff
path: root/userapi/consumers/roomserver.go
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-11-30 12:40:36 +0100
committerGitHub <noreply@github.com>2022-11-30 11:40:36 +0000
commitac5f3f025eaf157d2a2bb15adcd19a5732325608 (patch)
treeab568c37ff22c94536e141443c9f60e15fd3d161 /userapi/consumers/roomserver.go
parented497aa8b2d24b5d5ac00df773dab5087ddcf5ca (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.go23
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{