Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
5368b9f2
Commit
5368b9f2
authored
Nov 04, 2016
by
Rémy Coutable
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'zj-grapify-project-hooks' into 'master'
GrapeDSL for project hooks See merge request !6963
parents
b2bbac88
64f41179
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
69 additions
and
84 deletions
+69
-84
lib/api/project_hooks.rb
lib/api/project_hooks.rb
+69
-84
No files found.
lib/api/project_hooks.rb
View file @
5368b9f2
module
API
module
API
# Projects API
# Projects API
class
ProjectHooks
<
Grape
::
API
class
ProjectHooks
<
Grape
::
API
helpers
do
params
:project_hook_properties
do
requires
:url
,
type:
String
,
desc:
"The URL to send the request to"
optional
:push_events
,
type:
Boolean
,
desc:
"Trigger hook on push events"
optional
:issues_events
,
type:
Boolean
,
desc:
"Trigger hook on issues events"
optional
:merge_requests_events
,
type:
Boolean
,
desc:
"Trigger hook on merge request events"
optional
:tag_push_events
,
type:
Boolean
,
desc:
"Trigger hook on tag push events"
optional
:note_events
,
type:
Boolean
,
desc:
"Trigger hook on note(comment) events"
optional
:build_events
,
type:
Boolean
,
desc:
"Trigger hook on build events"
optional
:pipeline_events
,
type:
Boolean
,
desc:
"Trigger hook on pipeline events"
optional
:wiki_events
,
type:
Boolean
,
desc:
"Trigger hook on wiki events"
optional
:enable_ssl_verification
,
type:
Boolean
,
desc:
"Do SSL verification when triggering the hook"
optional
:token
,
type:
String
,
desc:
"Secret token to validate received payloads; this will not be returned in the response"
end
end
before
{
authenticate!
}
before
{
authenticate!
}
before
{
authorize_admin_project
}
before
{
authorize_admin_project
}
params
do
requires
:id
,
type:
String
,
desc:
'The ID of a project'
end
resource
:projects
do
resource
:projects
do
# Get project hooks
desc
'Get project hooks'
do
#
success
Entities
::
ProjectHook
# Parameters:
end
# id (required) - The ID of a project
# Example Request:
# GET /projects/:id/hooks
get
":id/hooks"
do
get
":id/hooks"
do
@hooks
=
paginate
user_project
.
hooks
hooks
=
paginate
user_project
.
hooks
present
@hooks
,
with:
Entities
::
ProjectHook
present
hooks
,
with:
Entities
::
ProjectHook
end
end
# Get a project hook
desc
'Get a project hook'
do
#
success
Entities
::
ProjectHook
# Parameters:
end
# id (required) - The ID of a project
params
do
# hook_id (required) - The ID of a project hook
requires
:hook_id
,
type:
Integer
,
desc:
'The ID of a project hook'
# Example Request:
end
# GET /projects/:id/hooks/:hook_id
get
":id/hooks/:hook_id"
do
get
":id/hooks/:hook_id"
do
@
hook
=
user_project
.
hooks
.
find
(
params
[
:hook_id
])
hook
=
user_project
.
hooks
.
find
(
params
[
:hook_id
])
present
@
hook
,
with:
Entities
::
ProjectHook
present
hook
,
with:
Entities
::
ProjectHook
end
end
# Add hook to project
desc
'Add hook to project'
do
#
success
Entities
::
ProjectHook
# Parameters:
end
# id (required) - The ID of a project
params
do
# url (required) - The hook URL
use
:project_hook_properties
# Example Request:
end
# POST /projects/:id/hooks
post
":id/hooks"
do
post
":id/hooks"
do
required_attributes!
[
:url
]
new_hook_params
=
declared
(
params
,
include_missing:
false
,
include_parent_namespaces:
false
).
to_h
attrs
=
attributes_for_keys
[
hook
=
user_project
.
hooks
.
new
(
new_hook_params
)
:url
,
:push_events
,
:issues_events
,
:merge_requests_events
,
:tag_push_events
,
:note_events
,
:build_events
,
:pipeline_events
,
:wiki_page_events
,
:enable_ssl_verification
,
:token
]
@hook
=
user_project
.
hooks
.
new
(
attrs
)
if
@
hook
.
save
if
hook
.
save
present
@
hook
,
with:
Entities
::
ProjectHook
present
hook
,
with:
Entities
::
ProjectHook
else
else
if
@hook
.
errors
[
:url
].
present?
error!
(
"Invalid url given"
,
422
)
if
hook
.
errors
[
:url
].
present?
error!
(
"Invalid url given"
,
422
)
end
not_found!
(
"Project hook
#{
hook
.
errors
.
messages
}
"
)
not_found!
(
"Project hook
#{
@hook
.
errors
.
messages
}
"
)
end
end
end
end
# Update an existing project hook
desc
'Update an existing project hook'
do
#
success
Entities
::
ProjectHook
# Parameters:
end
# id (required) - The ID of a project
params
do
# hook_id (required) - The ID of a project hook
requires
:hook_id
,
type:
Integer
,
desc:
"The ID of the hook to update"
# url (required) - The hook URL
use
:project_hook_properties
# Example Request:
end
# PUT /projects/:id/hooks/:hook_id
put
":id/hooks/:hook_id"
do
put
":id/hooks/:hook_id"
do
@hook
=
user_project
.
hooks
.
find
(
params
[
:hook_id
])
hook
=
user_project
.
hooks
.
find
(
params
[
:hook_id
])
required_attributes!
[
:url
]
attrs
=
attributes_for_keys
[
new_params
=
declared
(
params
,
include_missing:
false
,
include_parent_namespaces:
false
).
to_h
:url
,
new_params
.
delete
(
'hook_id'
)
:push_events
,
:issues_events
,
:merge_requests_events
,
:tag_push_events
,
:note_events
,
:build_events
,
:pipeline_events
,
:wiki_page_events
,
:enable_ssl_verification
,
:token
]
if
@hook
.
update_attributes
attrs
if
hook
.
update_attributes
(
new_params
)
present
@
hook
,
with:
Entities
::
ProjectHook
present
hook
,
with:
Entities
::
ProjectHook
else
else
if
@hook
.
errors
[
:url
].
present?
error!
(
"Invalid url given"
,
422
)
if
hook
.
errors
[
:url
].
present?
error!
(
"Invalid url given"
,
422
)
end
not_found!
(
"Project hook
#{
hook
.
errors
.
messages
}
"
)
not_found!
(
"Project hook
#{
@hook
.
errors
.
messages
}
"
)
end
end
end
end
# Deletes project hook. This is an idempotent function.
desc
'Deletes project hook'
do
#
success
Entities
::
ProjectHook
# Parameters:
end
# id (required) - The ID of a project
params
do
# hook_id (required) - The ID of hook to delete
requires
:hook_id
,
type:
Integer
,
desc:
'The ID of the hook to delete'
# Example Request:
end
# DELETE /projects/:id/hooks/:hook_id
delete
":id/hooks/:hook_id"
do
delete
":id/hooks/:hook_id"
do
required_attributes!
[
:hook_id
]
begin
begin
@hook
=
user_project
.
hooks
.
destroy
(
params
[
:hook_id
])
present
user_project
.
hooks
.
destroy
(
params
[
:hook_id
]),
with:
Entities
::
ProjectHook
rescue
rescue
# ProjectHook can raise Error if hook_id not found
# ProjectHook can raise Error if hook_id not found
not_found!
(
"Error deleting hook
#{
params
[
:hook_id
]
}
"
)
not_found!
(
"Error deleting hook
#{
params
[
:hook_id
]
}
"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment