summaryrefslogtreecommitdiff
path: root/app/controllers/concerns/integrations/hooks_execution.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/concerns/integrations/hooks_execution.rb')
-rw-r--r--app/controllers/concerns/integrations/hooks_execution.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/app/controllers/concerns/integrations/hooks_execution.rb b/app/controllers/concerns/integrations/hooks_execution.rb
new file mode 100644
index 00000000000..af039057a9c
--- /dev/null
+++ b/app/controllers/concerns/integrations/hooks_execution.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+module Integrations::HooksExecution
+ extend ActiveSupport::Concern
+
+ private
+
+ def destroy_hook(hook)
+ result = WebHooks::DestroyService.new(current_user).execute(hook)
+
+ if result[:status] == :success
+ flash[:notice] =
+ if result[:async]
+ _("%{hook_type} was scheduled for deletion") % { hook_type: hook.model_name.human }
+ else
+ _("%{hook_type} was deleted") % { hook_type: hook.model_name.human }
+ end
+ else
+ flash[:alert] = result[:message]
+ end
+ end
+
+ def set_hook_execution_notice(result)
+ http_status = result[:http_status]
+ message = result[:message]
+
+ if http_status && http_status >= 200 && http_status < 400
+ flash[:notice] = "Hook executed successfully: HTTP #{http_status}"
+ elsif http_status
+ flash[:alert] = "Hook executed successfully but returned HTTP #{http_status} #{message}"
+ else
+ flash[:alert] = "Hook execution failed: #{message}"
+ end
+ end
+
+ def create_rate_limit(key, scope)
+ if rate_limiter.throttled?(key, scope: [scope, current_user])
+ rate_limiter.log_request(request, "#{key}_request_limit".to_sym, current_user)
+
+ render plain: _('This endpoint has been requested too many times. Try again later.'), status: :too_many_requests
+ end
+ end
+
+ def rate_limiter
+ ::Gitlab::ApplicationRateLimiter
+ end
+end