diff --git a/app/services/web_hooks/destroy_service.rb b/app/services/web_hooks/destroy_service.rb index dbd164ab20e6df861ada1875a6bd433bafae221c..47e0a36b47356cd9312a7dd5f520990f478775b9 100644 --- a/app/services/web_hooks/destroy_service.rb +++ b/app/services/web_hooks/destroy_service.rb @@ -16,13 +16,8 @@ def initialize(current_user) def execute(web_hook) return error(DENIED, 401) unless authorized?(web_hook) - hook_id = web_hook.id - if web_hook.destroy - WebHooks::LogDestroyWorker.perform_async({ 'hook_id' => hook_id }) - Gitlab::AppLogger.info(log_message(web_hook)) - - success({ async: false }) + after_destroy(web_hook) else error("Unable to destroy #{web_hook.model_name.human}", 500) end @@ -30,6 +25,15 @@ def execute(web_hook) private + def after_destroy(web_hook) + hook_id = web_hook.id + + WebHooks::LogDestroyWorker.perform_async({ 'hook_id' => hook_id }) + Gitlab::AppLogger.info(log_message(web_hook)) + + success({ async: false }) + end + def log_message(hook) "User #{current_user&.id} scheduled a deletion of logs for hook ID #{hook.id}" end @@ -39,3 +43,5 @@ def authorized?(web_hook) end end end + +WebHooks::DestroyService.prepend_mod_with('WebHooks::DestroyService') diff --git a/ee/app/services/ee/web_hooks/destroy_service.rb b/ee/app/services/ee/web_hooks/destroy_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..783b16c8e701d31409f33e3e4b97c1f23589a4e6 --- /dev/null +++ b/ee/app/services/ee/web_hooks/destroy_service.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module EE + module WebHooks + module DestroyService + extend ::Gitlab::Utils::Override + + private + + override :after_destroy + def after_destroy(web_hook) + log_audit_event(web_hook) + super + end + + def log_audit_event(web_hook) + audit_context = { + name: "delete_#{web_hook.model_name.singular}", + author: current_user, + scope: web_hook.parent || current_user, + target: web_hook, + message: "Deleted #{web_hook.model_name.human.downcase}", + target_details: { id: web_hook.id, url: web_hook.url } + } + + ::Gitlab::Audit::Auditor.audit(audit_context) + end + end + end +end