diff options
author | Claire <claire.github-309c@sitedethib.com> | 2022-06-10 19:19:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-10 19:19:31 +0200 |
commit | 970f06331bc7e482226e974c468b559a9e2f3fa3 (patch) | |
tree | 5435ce8e4d315b83453b42a5391d289d765a2a58 /app/workers | |
parent | 3d841eba69b340aac4f012fb388f9e9761ec2ba5 (diff) | |
parent | d064476c4a111708fe8193ff56ebd307dd4f5a0c (diff) |
Merge pull request #1797 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/trigger_webhook_worker.rb | 12 | ||||
-rw-r--r-- | app/workers/webhooks/delivery_worker.rb | 37 |
2 files changed, 49 insertions, 0 deletions
diff --git a/app/workers/trigger_webhook_worker.rb b/app/workers/trigger_webhook_worker.rb new file mode 100644 index 000000000..2ffb6246f --- /dev/null +++ b/app/workers/trigger_webhook_worker.rb @@ -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 diff --git a/app/workers/webhooks/delivery_worker.rb b/app/workers/webhooks/delivery_worker.rb new file mode 100644 index 000000000..b1e345c5e --- /dev/null +++ b/app/workers/webhooks/delivery_worker.rb @@ -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 |