diff options
author | ThibG <thib@sitedethib.com> | 2020-12-18 23:26:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-18 23:26:26 +0100 |
commit | a60d9335d8e7c4aa070f081719ee2a438b0e0202 (patch) | |
tree | 1ec5e4628240a3eb7bf3d16e310adb48775de05d /app/workers | |
parent | 052249588b77fe3d8e29658076eb385f64511d6b (diff) |
Fix resolving accounts sometimes creating duplicate records for a given AP id (#15364)
* Fix ResolveAccountService accepting mismatching acct: URI * Set attributes that should be updated regardless of suspension * Fix key fetching * Automatically merge remote accounts with duplicate `uri` * Add tests * Add "tootctl accounts fix-duplicates" Finds duplicate accounts sharing a same ActivityPub `id`, re-fetch them and merge them under the canonical `acct:` URI. Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/account_merging_worker.rb | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/app/workers/account_merging_worker.rb b/app/workers/account_merging_worker.rb new file mode 100644 index 000000000..8c234e7ac --- /dev/null +++ b/app/workers/account_merging_worker.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class AccountMergingWorker + include Sidekiq::Worker + + sidekiq_options queue: 'pull' + + def perform(account_id) + account = Account.find(account_id) + + return true if account.nil? || account.local? + + Account.where(uri: account.uri).where.not(id: account.id).find_each do |duplicate| + account.merge_with!(duplicate) + duplicate.destroy + end + end +end |