diff options
Diffstat (limited to 'app/workers/web_hook_worker.rb')
-rw-r--r-- | app/workers/web_hook_worker.rb | 12 |
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 |