mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-10-24 22:56:48 +09:00
Stop sending push notifications to banned users (#338)
Banning a user deletes their sessions and closes their connections but keeps their push subscriptions, and Room::MessagePusher chose recipients by membership alone. A banned user's browser or phone therefore went on receiving the room name, sender and text of new direct messages, mentions, and messages in rooms they had set to everything. Choose subscriptions from active users only. The subscriptions are kept, so unbanning brings notifications back without the user having to subscribe again (the client doesn't resubscribe while the browser still holds a subscription). Co-authored-by: Marcello Costagliola <176920116+namespaceMarcello@users.noreply.github.com>
This commit is contained in:
1 parent
ee5fe3717a
commit
6e312c6028
2 files changed
+40
No files matched your search
@@ -53,9 +53,12 @@ class Room::MessagePusher
|
||||
relevant_subscriptions.merge(Membership.involved_in_mentions).where(user_id: mentionees.ids)
|
||||
end
|
||||
|
||||
# Banning keeps the user's subscriptions, so that unbanning brings their notifications back,
|
||||
# but nobody who can't sign in should be sent what's said in their rooms meanwhile.
|
||||
def relevant_subscriptions
|
||||
Push::Subscription
|
||||
.joins(user: :memberships)
|
||||
.merge(User.active)
|
||||
.merge(Membership.visible.disconnected.where(room: room).where.not(user: message.creator))
|
||||
end
|
||||
|
||||
|
||||
Reference in new issue
Block a user