diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2017-08-30 15:37:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-30 15:37:02 +0200 |
commit | 7b8f26284072120701289f90bc6602ce918e4304 (patch) | |
tree | fb3fa887fcbde89b9f3a6fe200b2fbc9546719cc /app/workers | |
parent | 3f51a22d3b6fb1550b373cfd17b1125cc4747c52 (diff) |
Forward ActivityPub creates that reply to local statuses (#4709)
* Forward ActivityPub creates that reply to local statuses * Fix test * Fix wrong signers
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/activitypub/reply_distribution_worker.rb | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/app/workers/activitypub/reply_distribution_worker.rb b/app/workers/activitypub/reply_distribution_worker.rb new file mode 100644 index 000000000..f9127340f --- /dev/null +++ b/app/workers/activitypub/reply_distribution_worker.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +class ActivityPub::ReplyDistributionWorker + include Sidekiq::Worker + + sidekiq_options queue: 'push' + + def perform(status_id) + @status = Status.find(status_id) + @account = @status.thread.account + + return if skip_distribution? + + ActivityPub::DeliveryWorker.push_bulk(inboxes) do |inbox_url| + [signed_payload, @status.account_id, inbox_url] + end + rescue ActiveRecord::RecordNotFound + true + end + + private + + def skip_distribution? + @status.private_visibility? || @status.direct_visibility? + end + + def inboxes + @inboxes ||= @account.followers.inboxes + end + + def signed_payload + @signed_payload ||= Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@status.account)) + end + + def payload + @payload ||= ActiveModelSerializers::SerializableResource.new( + @status, + serializer: ActivityPub::ActivitySerializer, + adapter: ActivityPub::Adapter + ).as_json + end +end |