1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
# frozen_string_literal: true
module API
class SystemHooks < ::API::Base
include PaginationParams
system_hooks_tags = %w[system_hooks]
feature_category :integrations
before do
authenticate!
authenticated_as_admin!
end
helpers ::API::Helpers::WebHooksHelpers
helpers do
def hook_scope
SystemHook
end
params :hook_parameters do
optional :token, type: String,
desc: "Secret token to validate received payloads; this isn't returned in the response"
optional :push_events, type: Boolean, desc: 'When true, the hook fires on push events'
optional :tag_push_events, type: Boolean, desc: 'When true, the hook fires on new tags being pushed'
optional :merge_requests_events, type: Boolean, desc: 'Trigger hook on merge requests 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 'List system hooks' do
detail 'Get a list of all system hooks'
success Entities::Hook
is_array true
tags system_hooks_tags
end
params do
use :pagination
end
get do
present paginate(SystemHook.all), with: Entities::Hook
end
desc 'Get system hook' do
detail 'Get a system hook by its ID. Introduced in GitLab 14.9.'
success Entities::Hook
failure [
{ code: 404, message: 'Not found' }
]
tags system_hooks_tags
end
params do
requires :hook_id, type: Integer, desc: 'The ID of the system hook'
end
get ":hook_id" do
present find_hook, with: Entities::Hook
end
desc 'Add new system hook' do
detail 'Add a new system hook'
success Entities::Hook
failure [
{ code: 400, message: 'Validation error' },
{ code: 404, message: 'Not found' },
{ code: 422, message: 'Unprocessable entity' }
]
tags system_hooks_tags
end
params do
use :requires_url
use :hook_parameters
end
post do
hook_params = create_hook_params
hook = SystemHook.new(hook_params)
save_hook(hook, Entities::Hook)
end
desc 'Edit system hook' do
detail 'Edits a system hook'
success Entities::Hook
failure [
{ code: 400, message: 'Validation error' },
{ code: 404, message: 'Not found' },
{ code: 422, message: 'Unprocessable entity' }
]
tags system_hooks_tags
end
params do
requires :hook_id, type: Integer, desc: 'The ID of the system hook'
use :optional_url
use :hook_parameters
end
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"
},
kind: 'system_hooks'
}
desc 'Delete system hook' do
detail 'Deletes a system hook'
success Entities::Hook
failure [
{ code: 404, message: 'Not found' }
]
tags system_hooks_tags
end
params do
requires :hook_id, type: Integer, desc: 'The ID of the system hook'
end
delete ":hook_id" do
hook = find_hook
destroy_conditionally!(hook) do
WebHooks::DestroyService.new(current_user).execute(hook)
end
end
end
end
end
|