Merge branch 'main' into glitch-soc/merge-upstream
This commit is contained in:
12
app/workers/trigger_webhook_worker.rb
Normal file
12
app/workers/trigger_webhook_worker.rb
Normal file
@ -0,0 +1,12 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class TriggerWebhookWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
def perform(event, class_name, id)
|
||||
object = class_name.constantize.find(id)
|
||||
WebhookService.new.call(event, object)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
true
|
||||
end
|
||||
end
|
37
app/workers/webhooks/delivery_worker.rb
Normal file
37
app/workers/webhooks/delivery_worker.rb
Normal file
@ -0,0 +1,37 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Webhooks::DeliveryWorker
|
||||
include Sidekiq::Worker
|
||||
include JsonLdHelper
|
||||
|
||||
sidekiq_options queue: 'push', retry: 16, dead: false
|
||||
|
||||
def perform(webhook_id, body)
|
||||
@webhook = Webhook.find(webhook_id)
|
||||
@body = body
|
||||
@response = nil
|
||||
|
||||
perform_request
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
true
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def perform_request
|
||||
request = Request.new(:post, @webhook.url, body: @body)
|
||||
|
||||
request.add_headers(
|
||||
'Content-Type' => 'application/json',
|
||||
'X-Hub-Signature' => "sha256=#{signature}"
|
||||
)
|
||||
|
||||
request.perform do |response|
|
||||
raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response)
|
||||
end
|
||||
end
|
||||
|
||||
def signature
|
||||
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @webhook.secret, @body)
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user