forked from fedi/mastodon
parent
25f6f41052
commit
6226aa83d7
|
@ -23,9 +23,7 @@ class SuspendAccountService < BaseService
|
||||||
|
|
||||||
def purge_content!
|
def purge_content!
|
||||||
if @account.local?
|
if @account.local?
|
||||||
ActivityPub::RawDistributionWorker.perform_async(delete_actor_json, @account.id)
|
ActivityPub::DeliveryWorker.push_bulk(delivery_inboxes) do |inbox_url|
|
||||||
|
|
||||||
ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
|
|
||||||
[delete_actor_json, @account.id, inbox_url]
|
[delete_actor_json, @account.id, inbox_url]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -75,4 +73,8 @@ class SuspendAccountService < BaseService
|
||||||
|
|
||||||
@delete_actor_json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account))
|
@delete_actor_json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delivery_inboxes
|
||||||
|
Account.inboxes + Relay.enabled.pluck(:inbox_url)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,11 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe SuspendAccountService, type: :service do
|
RSpec.describe SuspendAccountService, type: :service do
|
||||||
describe '#call' do
|
describe '#call' do
|
||||||
|
before do
|
||||||
|
stub_request(:post, "https://alice.com/inbox").to_return(status: 201)
|
||||||
|
stub_request(:post, "https://bob.com/inbox").to_return(status: 201)
|
||||||
|
end
|
||||||
|
|
||||||
subject do
|
subject do
|
||||||
-> { described_class.new.call(account) }
|
-> { described_class.new.call(account) }
|
||||||
end
|
end
|
||||||
|
@ -14,6 +19,8 @@ RSpec.describe SuspendAccountService, type: :service do
|
||||||
let!(:active_relationship) { Fabricate(:follow, account: account) }
|
let!(:active_relationship) { Fabricate(:follow, account: account) }
|
||||||
let!(:passive_relationship) { Fabricate(:follow, target_account: account) }
|
let!(:passive_relationship) { Fabricate(:follow, target_account: account) }
|
||||||
let!(:subscription) { Fabricate(:subscription, account: account) }
|
let!(:subscription) { Fabricate(:subscription, account: account) }
|
||||||
|
let!(:remote_alice) { Fabricate(:account, inbox_url: 'https://alice.com/inbox', protocol: :activitypub) }
|
||||||
|
let!(:remote_bob) { Fabricate(:account, inbox_url: 'https://bob.com/inbox', protocol: :activitypub) }
|
||||||
|
|
||||||
it 'deletes associated records' do
|
it 'deletes associated records' do
|
||||||
is_expected.to change {
|
is_expected.to change {
|
||||||
|
@ -29,5 +36,11 @@ RSpec.describe SuspendAccountService, type: :service do
|
||||||
].map(&:count)
|
].map(&:count)
|
||||||
}.from([1, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0])
|
}.from([1, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'sends a delete actor activity to all known inboxes' do
|
||||||
|
subject.call
|
||||||
|
expect(a_request(:post, "https://alice.com/inbox")).to have_been_made.once
|
||||||
|
expect(a_request(:post, "https://bob.com/inbox")).to have_been_made.once
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue