瀏覽代碼

fix(push_subscription): Guard against malformed favourite notification (#4271)

master
Sorin Davidoi 6 年之前
committed by Eugen Rochko
父節點
當前提交
dcb9497148
共有 2 個檔案被更改,包括 10 行新增7 行删除
  1. +4
    -6
      app/models/web/push_subscription.rb
  2. +6
    -1
      app/services/notify_service.rb

+ 4
- 6
app/models/web/push_subscription.rb 查看文件

@@ -26,8 +26,6 @@ class Web::PushSubscription < ApplicationRecord
before_create :send_welcome_notification

def push(notification)
return unless pushable? notification

name = display_name notification.from_account
title = title_str(name, notification)
body = body_str notification
@@ -69,6 +67,10 @@ class Web::PushSubscription < ApplicationRecord
)
end

def pushable?(notification)
data && data.key?('alerts') && data['alerts'][notification.type.to_s]
end

def as_payload
payload = {
id: id,
@@ -148,10 +150,6 @@ class Web::PushSubscription < ApplicationRecord
rtl?(body) ? 'rtl' : 'ltr'
end

def pushable?(notification)
data && data.key?('alerts') && data['alerts'][notification.type.to_s]
end

def send_welcome_notification
Webpush.payload_send(
message: JSON.generate(


+ 6
- 1
app/services/notify_service.rb 查看文件

@@ -65,7 +65,12 @@ class NotifyService < BaseService
end

def send_push_notifications
sessions_with_subscriptions_ids = @recipient.user.session_activations.where.not(web_push_subscription: nil).pluck(:id)
# HACK: Can be caused by quickly unfavouriting a status, since creating
# a favourite and creating a notification are not wrapped in a transaction.
return if @notification.activity.nil?

sessions_with_subscriptions = @recipient.user.session_activations.where.not(web_push_subscription: nil)
sessions_with_subscriptions_ids = sessions_with_subscriptions.select { |session| session.web_push_subscription.pushable? @notification }.map(&:id)

WebPushNotificationWorker.push_bulk(sessions_with_subscriptions_ids) do |session_activation_id|
[session_activation_id, @notification.id]


Loading…
取消
儲存