diff options
author | Fire Demon <firedemon@creature.cafe> | 2020-09-01 19:39:52 -0500 |
---|---|---|
committer | Fire Demon <firedemon@creature.cafe> | 2020-09-01 19:59:18 -0500 |
commit | 0e3cc6ba7551effd5396699553fa954aa816b1e8 (patch) | |
tree | 514aeb8d87e347b9a851cc08cac0fab3f18d656a | |
parent | ff791b8e8b9ce08679105dca9114f04af72338d3 (diff) |
[Privacy] Purge and re-download remote accounts if their actor key suddenly changes monsterfork-2020-09-01
-rw-r--r-- | app/services/activitypub/process_account_service.rb | 7 | ||||
-rw-r--r-- | app/workers/reset_account_worker.rb | 16 |
2 files changed, 20 insertions, 3 deletions
diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index f78f8a030..7f17e460c 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -27,7 +27,6 @@ class ActivityPub::ProcessAccountService < BaseService update_account process_tags process_attachments - process_sync else raise Mastodon::RaceConditionError end @@ -36,12 +35,13 @@ class ActivityPub::ProcessAccountService < BaseService return if @account.nil? after_protocol_change! if protocol_changed? - after_key_change! if key_changed? && !@options[:signed_with_known_key] clear_tombstones! if key_changed? + return after_key_change! if key_changed? && !@options[:signed_with_known_key] unless @options[:only_key] check_featured_collection! if @account.featured_collection_url.present? check_links! unless @account.fields.empty? + process_sync end @account @@ -110,7 +110,8 @@ class ActivityPub::ProcessAccountService < BaseService end def after_key_change! - RefollowWorker.perform_async(@account.id) + ResetAccountWorker.perform_async(@account.id) + nil end def check_featured_collection! diff --git a/app/workers/reset_account_worker.rb b/app/workers/reset_account_worker.rb new file mode 100644 index 000000000..f63d8682a --- /dev/null +++ b/app/workers/reset_account_worker.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class ResetAccountWorker + include Sidekiq::Worker + + def perform(account_id) + account = Account.find(account_id) + return if account.local? + + account_uri = account.uri + SuspendAccountService.new.call(account) + ResolveAccountService.new.call(account_uri) + rescue ActiveRecord::RecordNotFound + true + end +end |