Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/web_hooks/destroy_service.rb')
-rw-r--r--app/services/web_hooks/destroy_service.rb24
1 files changed, 20 insertions, 4 deletions
diff --git a/app/services/web_hooks/destroy_service.rb b/app/services/web_hooks/destroy_service.rb
index 54c6c7ea71b..dbd164ab20e 100644
--- a/app/services/web_hooks/destroy_service.rb
+++ b/app/services/web_hooks/destroy_service.rb
@@ -1,25 +1,41 @@
# frozen_string_literal: true
module WebHooks
+ # Destroy a hook, and schedule the logs for deletion.
class DestroyService
+ include Services::ReturnServiceResponses
+
attr_accessor :current_user
+ DENIED = 'Insufficient permissions'
+
def initialize(current_user)
@current_user = current_user
end
- # Destroy the hook immediately, schedule the logs for deletion
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("User #{current_user&.id} scheduled a deletion of logs for hook ID #{hook_id}")
+ Gitlab::AppLogger.info(log_message(web_hook))
- ServiceResponse.success(payload: { async: false })
+ success({ async: false })
else
- ServiceResponse.error(message: "Unable to destroy #{web_hook.model_name.human}")
+ error("Unable to destroy #{web_hook.model_name.human}", 500)
end
end
+
+ private
+
+ def log_message(hook)
+ "User #{current_user&.id} scheduled a deletion of logs for hook ID #{hook.id}"
+ end
+
+ def authorized?(web_hook)
+ Ability.allowed?(current_user, :destroy_web_hook, web_hook)
+ end
end
end