]> cat aescling's git repositories - mastodon.git/commitdiff
Validate Web::PushSubscription (#11971)
authorabcang <abcang1015@gmail.com>
Fri, 27 Sep 2019 13:24:13 +0000 (22:24 +0900)
committerEugen Rochko <eugen@zeonfederated.com>
Fri, 27 Sep 2019 13:24:13 +0000 (15:24 +0200)
app/models/web/push_subscription.rb
db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb [new file with mode: 0644]
db/schema.rb

index b57807d1c2bd5a38144cc617d4911eaabeeb5e97..c5dbb58baad0e5d01340074118ef9577dec9006f 100644 (file)
@@ -20,6 +20,10 @@ class Web::PushSubscription < ApplicationRecord
 
   has_one :session_activation, foreign_key: 'web_push_subscription_id', inverse_of: :web_push_subscription
 
+  validates :endpoint, presence: true
+  validates :key_p256dh, presence: true
+  validates :key_auth, presence: true
+
   def push(notification)
     I18n.with_locale(associated_user&.locale || I18n.default_locale) do
       push_payload(payload_for_notification(notification), 48.hours.seconds)
diff --git a/db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb b/db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb
new file mode 100644 (file)
index 0000000..c239747
--- /dev/null
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class RemoveInvalidWebPushSubscription < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    invalid_web_push_subscriptions = Web::PushSubscription.where(endpoint: '')
+                                                          .or(Web::PushSubscription.where(key_p256dh: ''))
+                                                          .or(Web::PushSubscription.where(key_auth: ''))
+                                                          .preload(:session_activation)
+    invalid_web_push_subscriptions.find_each do |web_push_subscription|
+      web_push_subscription.session_activation&.update!(web_push_subscription_id: nil)
+      web_push_subscription.destroy!
+    end
+  end
+
+  def down; end
+end
index fabeb16f3530c519077bb8f1d6cc08b187341412..8eeaf48a08ba1cc3ff725973e958d3c6a0a1c438 100644 (file)
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 2019_09_17_213523) do
+ActiveRecord::Schema.define(version: 2019_09_27_124642) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"