The code powering m.abunchtell.com https://m.abunchtell.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

41 lines
1022 B

  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