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 'lib/api/system_hooks.rb')
-rw-r--r--lib/api/system_hooks.rb79
1 files changed, 46 insertions, 33 deletions
diff --git a/lib/api/system_hooks.rb b/lib/api/system_hooks.rb
index 7c91fbd36d9..804cedfefe9 100644
--- a/lib/api/system_hooks.rb
+++ b/lib/api/system_hooks.rb
@@ -11,7 +11,27 @@ module API
authenticated_as_admin!
end
+ helpers ::API::Helpers::WebHooksHelpers
+
+ helpers do
+ def hook_scope
+ SystemHook
+ end
+
+ params :hook_parameters do
+ optional :token, type: String, desc: 'The token used to validate payloads'
+ optional :push_events, type: Boolean, desc: "Trigger hook on push events"
+ optional :tag_push_events, type: Boolean, desc: "Trigger hook on tag push events"
+ optional :merge_requests_events, type: Boolean, desc: "Trigger hook on tag push events"
+ optional :repository_update_events, type: Boolean, desc: "Trigger hook on repository update events"
+ optional :enable_ssl_verification, type: Boolean, desc: "Do SSL verification when triggering the hook"
+ use :url_variables
+ end
+ end
+
resource :hooks do
+ mount ::API::Hooks::UrlVariables
+
desc 'Get the list of system hooks' do
success Entities::Hook
end
@@ -26,70 +46,63 @@ module API
success Entities::Hook
end
params do
- requires :id, type: Integer, desc: 'The ID of the system hook'
+ requires :hook_id, type: Integer, desc: 'The ID of the system hook'
end
- get ":id" do
- hook = SystemHook.find(params[:id])
-
- present hook, with: Entities::Hook
+ get ":hook_id" do
+ present find_hook, with: Entities::Hook
end
desc 'Create a new system hook' do
success Entities::Hook
end
params do
- requires :url, type: String, desc: "The URL to send the request to"
- optional :token, type: String, desc: 'The token used to validate payloads'
- optional :push_events, type: Boolean, desc: "Trigger hook on push events"
- optional :tag_push_events, type: Boolean, desc: "Trigger hook on tag push events"
- optional :merge_requests_events, type: Boolean, desc: "Trigger hook on tag push events"
- optional :repository_update_events, type: Boolean, desc: "Trigger hook on repository update events"
- optional :enable_ssl_verification, type: Boolean, desc: "Do SSL verification when triggering the hook"
+ use :requires_url
+ use :hook_parameters
end
post do
- hook = SystemHook.new(declared_params(include_missing: false))
+ hook_params = create_hook_params
+ hook = SystemHook.new(hook_params)
- if hook.save
- present hook, with: Entities::Hook
- else
- render_validation_error!(hook)
- end
+ save_hook(hook, Entities::Hook)
end
- desc 'Test a hook'
+ desc 'Update an existing system hook' do
+ success Entities::Hook
+ end
params do
- requires :id, type: Integer, desc: 'The ID of the system hook'
+ requires :hook_id, type: Integer, desc: "The ID of the hook to update"
+ use :optional_url
+ use :hook_parameters
end
- post ":id" do
- hook = SystemHook.find(params[:id])
- data = {
+ put ":hook_id" do
+ update_hook(entity: Entities::Hook)
+ end
+
+ mount ::API::Hooks::Test, with: {
+ data: {
event_name: "project_create",
name: "Ruby",
path: "ruby",
project_id: 1,
owner_name: "Someone",
owner_email: "example@gitlabhq.com"
- }
- hook.execute(data, 'system_hooks')
- data
- end
+ },
+ kind: 'system_hooks'
+ }
desc 'Delete a hook' do
success Entities::Hook
end
params do
- requires :id, type: Integer, desc: 'The ID of the system hook'
+ requires :hook_id, type: Integer, desc: 'The ID of the system hook'
end
- # rubocop: disable CodeReuse/ActiveRecord
- delete ":id" do
- hook = SystemHook.find_by(id: params[:id])
- not_found!('System hook') unless hook
+ delete ":hook_id" do
+ hook = find_hook
destroy_conditionally!(hook) do
WebHooks::DestroyService.new(current_user).execute(hook)
end
end
- # rubocop: enable CodeReuse/ActiveRecord
end
end
end