Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/diaspora/diaspora.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorBenjamin Neff <benjamin@coding4coffee.ch>2017-09-29 02:38:16 +0300
committerBenjamin Neff <benjamin@coding4coffee.ch>2017-10-17 02:23:47 +0300
commit32067246df724b7f6455f3ef95f747391c48d043 (patch)
tree5c91f0f631a1cf6e198a6da364000cfc2c653988 /db
parentfd36517dee51d9d78796d81242f91a72f65165b2 (diff)
Delete people with invalid diaspora IDs (friendica with path)
closes #7630
Diffstat (limited to 'db')
-rw-r--r--db/migrate/20170928233609_cleanup_invalid_diaspora_ids.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/db/migrate/20170928233609_cleanup_invalid_diaspora_ids.rb b/db/migrate/20170928233609_cleanup_invalid_diaspora_ids.rb
new file mode 100644
index 000000000..f88fec22b
--- /dev/null
+++ b/db/migrate/20170928233609_cleanup_invalid_diaspora_ids.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+class CleanupInvalidDiasporaIds < ActiveRecord::Migration[5.1]
+ def up
+ ids = Person.where("diaspora_handle LIKE '%@%/%'").ids
+ return if ids.empty?
+
+ AspectMembership.joins(:contact).where(contacts: {person_id: ids}).delete_all
+
+ Person.where(id: ids).each do |person|
+ destroy_notifications_for_person(person)
+ person.destroy
+ end
+ end
+
+ def destroy_notifications_for_person(person)
+ Notification.joins(:notification_actors).where(notification_actors: {person_id: person.id}).each do |notification|
+ if notification.notification_actors.count > 1
+ notification.notification_actors.where(person_id: person.id).delete_all
+ else
+ notification.destroy
+ end
+ end
+ end
+end