update_distribution_worker.rb 1022 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. # frozen_string_literal: true
  2. class ActivityPub::UpdateDistributionWorker
  3. include Sidekiq::Worker
  4. sidekiq_options queue: 'push'
  5. def perform(account_id, options = {})
  6. @options = options.with_indifferent_access
  7. @account = Account.find(account_id)
  8. ActivityPub::DeliveryWorker.push_bulk(inboxes) do |inbox_url|
  9. [signed_payload, @account.id, inbox_url]
  10. end
  11. ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
  12. [signed_payload, @account.id, inbox_url]
  13. end
  14. rescue ActiveRecord::RecordNotFound
  15. true
  16. end
  17. private
  18. def inboxes
  19. @inboxes ||= @account.followers.inboxes
  20. end
  21. def signed_payload
  22. @signed_payload ||= Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account, sign_with: @options[:sign_with]))
  23. end
  24. def payload
  25. @payload ||= ActiveModelSerializers::SerializableResource.new(
  26. @account,
  27. serializer: ActivityPub::UpdateSerializer,
  28. adapter: ActivityPub::Adapter
  29. ).as_json
  30. end
  31. end