The code powering m.abunchtell.com https://m.abunchtell.com
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

46 wiersze
1.1 KiB

  1. # frozen_string_literal: true
  2. class ActivityPub::DeliveryWorker
  3. include Sidekiq::Worker
  4. sidekiq_options queue: 'push', retry: 8, dead: false
  5. HEADERS = { 'Content-Type' => 'application/activity+json' }.freeze
  6. def perform(json, source_account_id, inbox_url)
  7. @json = json
  8. @source_account = Account.find(source_account_id)
  9. @inbox_url = inbox_url
  10. perform_request
  11. raise Mastodon::UnexpectedResponseError, @response unless response_successful?
  12. @response.connection&.close
  13. failure_tracker.track_success!
  14. rescue => e
  15. failure_tracker.track_failure!
  16. raise e.class, "Delivery failed for #{inbox_url}: #{e.message}", e.backtrace[0]
  17. end
  18. private
  19. def build_request
  20. request = Request.new(:post, @inbox_url, body: @json)
  21. request.on_behalf_of(@source_account, :uri)
  22. request.add_headers(HEADERS)
  23. end
  24. def perform_request
  25. @response = build_request.perform
  26. end
  27. def response_successful?
  28. @response.code > 199 && @response.code < 300
  29. end
  30. def failure_tracker
  31. @failure_tracker ||= DeliveryFailureTracker.new(@inbox_url)
  32. end
  33. end