Undo outgoing follows when suspending a remote account (#15188)

This commit is contained in:
ThibG 2020-11-21 21:27:00 +01:00 committed by GitHub
parent c43f4cd3bb
commit 66832cbf33
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -56,6 +56,7 @@ class DeleteAccountService < BaseService
@options[:skip_activitypub] = true if @options[:skip_side_effects] @options[:skip_activitypub] = true if @options[:skip_side_effects]
reject_follows! reject_follows!
undo_follows!
purge_user! purge_user!
purge_profile! purge_profile!
purge_content! purge_content!
@ -79,6 +80,20 @@ class DeleteAccountService < BaseService
end end
end end
def undo_follows!
return if @account.local? || !@account.activitypub? || @options[:skip_activitypub]
# When deleting a remote account, the account obviously doesn't
# actually become deleted on its origin server, but following relationships
# are severed on our end. Therefore, make the remote server aware that the
# follow relationships are severed to avoid confusion and potential issues
# if the remote account gets un-suspended.
ActivityPub::DeliveryWorker.push_bulk(Follow.where(target_account: @account)) do |follow|
[Oj.dump(serialize_payload(follow, ActivityPub::UndoFollowSerializer)), follow.account_id, @account.inbox_url]
end
end
def purge_user! def purge_user!
return if !@account.local? || @account.user.nil? return if !@account.local? || @account.user.nil?