summaryrefslogtreecommitdiff
path: root/app/workers/web_hook_worker.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/web_hook_worker.rb')
-rw-r--r--app/workers/web_hook_worker.rb12
1 files changed, 11 insertions, 1 deletions
diff --git a/app/workers/web_hook_worker.rb b/app/workers/web_hook_worker.rb
index 5b4567dde29..952ac94d5e6 100644
--- a/app/workers/web_hook_worker.rb
+++ b/app/workers/web_hook_worker.rb
@@ -13,11 +13,21 @@ class WebHookWorker
worker_has_external_dependencies!
- def perform(hook_id, data, hook_name)
+ # Webhook recursion detection properties are passed through the `data` arg.
+ # This will be migrated to the `params` arg over the next few releases.
+ # See https://gitlab.com/gitlab-org/gitlab/-/issues/347389.
+ def perform(hook_id, data, hook_name, params = {})
hook = WebHook.find_by_id(hook_id)
return unless hook
data = data.with_indifferent_access
+
+ # Before executing the hook, reapply any recursion detection UUID that was
+ # initially present in the request header so the hook can pass this same header
+ # value in its request.
+ recursion_detection_uuid = data.delete(:_gitlab_recursion_detection_request_uuid)
+ Gitlab::WebHooks::RecursionDetection.set_request_uuid(recursion_detection_uuid)
+
WebHookService.new(hook, data, hook_name, jid).execute
end
end