fix(push_subscription): Guard against malformed favourite notification (#4271)
This commit is contained in:
		
							parent
							
								
									4f2513337f
								
							
						
					
					
						commit
						dcb9497148
					
				| @ -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( | ||||
|  | ||||
| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user