Skip to content

Commit 63360ad

Browse files
committed
Add requirements: { id: %r{[^/]+} } for all projects and groups namespaced API routes
Signed-off-by: Rémy Coutable <[email protected]>
1 parent c9abdad commit 63360ad

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+91
-77
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
title: 'Add `requirements: { id: /.+/ }` for all projects and groups namespaced API
3+
routes'
4+
merge_request: 9944
5+
author:

lib/api/access_requests.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class AccessRequests < Grape::API
1010
params do
1111
requires :id, type: String, desc: "The #{source_type} ID"
1212
end
13-
resource source_type.pluralize do
13+
resource source_type.pluralize, requirements: { id: %r{[^/]+} } do
1414
desc "Gets a list of access requests for a #{source_type}." do
1515
detail 'This feature was introduced in GitLab 8.11.'
1616
success Entities::AccessRequester

lib/api/award_emoji.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ class AwardEmoji < Grape::API
99
{ type: 'snippet', find_by: :id }
1010
].freeze
1111

12-
resource :projects do
12+
params do
13+
requires :id, type: String, desc: 'The ID of a project'
14+
end
15+
resource :projects, requirements: { id: %r{[^/]+} } do
1316
AWARDABLES.each do |awardable_params|
1417
awardable_string = awardable_params[:type].pluralize
1518
awardable_id_string = "#{awardable_params[:type]}_#{awardable_params[:find_by]}"
1619

1720
params do
18-
requires :id, type: String, desc: 'The ID of a project'
1921
requires :"#{awardable_id_string}", type: Integer, desc: "The ID of an Issue, Merge Request or Snippet"
2022
end
2123

lib/api/boards.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class Boards < Grape::API
77
params do
88
requires :id, type: String, desc: 'The ID of a project'
99
end
10-
resource :projects do
10+
resource :projects, requirements: { id: %r{[^/]+} } do
1111
desc 'Get all project boards' do
1212
detail 'This feature was introduced in 8.13'
1313
success Entities::Board

lib/api/branches.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class Branches < Grape::API
1010
params do
1111
requires :id, type: String, desc: 'The ID of a project'
1212
end
13-
resource :projects do
13+
resource :projects, requirements: { id: %r{[^/]+} } do
1414
desc 'Get a project repository branches' do
1515
success Entities::RepoBranch
1616
end

lib/api/commit_statuses.rb

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
module API
44
class CommitStatuses < Grape::API
5-
resource :projects do
5+
params do
6+
requires :id, type: String, desc: 'The ID of a project'
7+
end
8+
resource :projects, requirements: { id: %r{[^/]+} } do
69
include PaginationParams
710

811
before { authenticate! }
@@ -11,7 +14,6 @@ class CommitStatuses < Grape::API
1114
success Entities::CommitStatus
1215
end
1316
params do
14-
requires :id, type: String, desc: 'The ID of a project'
1517
requires :sha, type: String, desc: 'The commit hash'
1618
optional :ref, type: String, desc: 'The ref'
1719
optional :stage, type: String, desc: 'The stage'
@@ -37,7 +39,6 @@ class CommitStatuses < Grape::API
3739
success Entities::CommitStatus
3840
end
3941
params do
40-
requires :id, type: String, desc: 'The ID of a project'
4142
requires :sha, type: String, desc: 'The commit hash'
4243
requires :state, type: String, desc: 'The state of the status',
4344
values: %w(pending running success failed canceled)

lib/api/commits.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class Commits < Grape::API
1010
params do
1111
requires :id, type: String, desc: 'The ID of a project'
1212
end
13-
resource :projects, requirements: { id: /.+/ } do
13+
resource :projects, requirements: { id: %r{[^/]+} } do
1414
desc 'Get a project repository commits' do
1515
success Entities::RepoCommit
1616
end

lib/api/deploy_keys.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class DeployKeys < Grape::API
1717
params do
1818
requires :id, type: String, desc: 'The ID of the project'
1919
end
20-
resource :projects do
20+
resource :projects, requirements: { id: %r{[^/]+} } do
2121
before { authorize_admin_project }
2222

2323
desc "Get a specific project's deploy keys" do

lib/api/deployments.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class Deployments < Grape::API
88
params do
99
requires :id, type: String, desc: 'The project ID'
1010
end
11-
resource :projects do
11+
resource :projects, requirements: { id: %r{[^/]+} } do
1212
desc 'Get all deployments of the project' do
1313
detail 'This feature was introduced in GitLab 8.11.'
1414
success Entities::Deployment

lib/api/environments.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class Environments < Grape::API
99
params do
1010
requires :id, type: String, desc: 'The project ID'
1111
end
12-
resource :projects do
12+
resource :projects, requirements: { id: %r{[^/]+} } do
1313
desc 'Get all environments of the project' do
1414
detail 'This feature was introduced in GitLab 8.11.'
1515
success Entities::Environment

lib/api/files.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def commit_response(attrs)
5252
params do
5353
requires :id, type: String, desc: 'The project ID'
5454
end
55-
resource :projects do
55+
resource :projects, requirements: { id: %r{[^/]+} } do
5656
desc 'Get raw file contents from the repository'
5757
params do
5858
requires :file_path, type: String, desc: 'The url encoded path to the file. Ex. lib%2Fclass%2Erb'

lib/api/groups.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def present_groups(groups, options = {})
8484
params do
8585
requires :id, type: String, desc: 'The ID of a group'
8686
end
87-
resource :groups do
87+
resource :groups, requirements: { id: %r{[^/]+} } do
8888
desc 'Update a group. Available only for users who can administrate groups.' do
8989
success Entities::Group
9090
end
@@ -154,7 +154,7 @@ def present_groups(groups, options = {})
154154
params do
155155
requires :project_id, type: String, desc: 'The ID or path of the project'
156156
end
157-
post ":id/projects/:project_id" do
157+
post ":id/projects/:project_id", requirements: { project_id: /.+/ } do
158158
authenticated_as_admin!
159159
group = find_group!(params[:id])
160160
project = find_project!(params[:project_id])

lib/api/issues.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def find_issues(args = {})
5858
params do
5959
requires :id, type: String, desc: 'The ID of a group'
6060
end
61-
resource :groups do
61+
resource :groups, requirements: { id: %r{[^/]+} } do
6262
desc 'Get a list of group issues' do
6363
success Entities::IssueBasic
6464
end
@@ -79,7 +79,7 @@ def find_issues(args = {})
7979
params do
8080
requires :id, type: String, desc: 'The ID of a project'
8181
end
82-
resource :projects do
82+
resource :projects, requirements: { id: %r{[^/]+} } do
8383
include TimeTrackingEndpoints
8484

8585
desc 'Get a list of project issues' do

lib/api/jobs.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class Jobs < Grape::API
77
params do
88
requires :id, type: String, desc: 'The ID of a project'
99
end
10-
resource :projects do
10+
resource :projects, requirements: { id: %r{[^/]+} } do
1111
helpers do
1212
params :optional_scope do
1313
optional :scope, types: [String, Array[String]], desc: 'The scope of builds to show',

lib/api/labels.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class Labels < Grape::API
77
params do
88
requires :id, type: String, desc: 'The ID of a project'
99
end
10-
resource :projects do
10+
resource :projects, requirements: { id: %r{[^/]+} } do
1111
desc 'Get all labels of the project' do
1212
success Entities::Label
1313
end

lib/api/members.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class Members < Grape::API
1010
params do
1111
requires :id, type: String, desc: "The #{source_type} ID"
1212
end
13-
resource source_type.pluralize do
13+
resource source_type.pluralize, requirements: { id: %r{[^/]+} } do
1414
desc 'Gets a list of group or project members viewable by the authenticated user.' do
1515
success Entities::Member
1616
end

lib/api/merge_request_diffs.rb

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ class MergeRequestDiffs < Grape::API
55

66
before { authenticate! }
77

8-
resource :projects do
8+
params do
9+
requires :id, type: String, desc: 'The ID of a project'
10+
end
11+
resource :projects, requirements: { id: %r{[^/]+} } do
912
desc 'Get a list of merge request diff versions' do
1013
detail 'This feature was introduced in GitLab 8.12.'
1114
success Entities::MergeRequestDiff
1215
end
1316

1417
params do
15-
requires :id, type: String, desc: 'The ID of a project'
1618
requires :merge_request_iid, type: Integer, desc: 'The IID of a merge request'
1719
use :pagination
1820
end
@@ -28,7 +30,6 @@ class MergeRequestDiffs < Grape::API
2830
end
2931

3032
params do
31-
requires :id, type: String, desc: 'The ID of a project'
3233
requires :merge_request_iid, type: Integer, desc: 'The IID of a merge request'
3334
requires :version_id, type: Integer, desc: 'The ID of a merge request diff version'
3435
end

lib/api/merge_requests.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class MergeRequests < Grape::API
77
params do
88
requires :id, type: String, desc: 'The ID of a project'
99
end
10-
resource :projects do
10+
resource :projects, requirements: { id: %r{[^/]+} } do
1111
include TimeTrackingEndpoints
1212

1313
helpers do

lib/api/milestones.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def filter_milestones_state(milestones, state)
2323
params do
2424
requires :id, type: String, desc: 'The ID of a project'
2525
end
26-
resource :projects do
26+
resource :projects, requirements: { id: %r{[^/]+} } do
2727
desc 'Get a list of project milestones' do
2828
success Entities::Milestone
2929
end

lib/api/notes.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class Notes < Grape::API
99
params do
1010
requires :id, type: String, desc: 'The ID of a project'
1111
end
12-
resource :projects do
12+
resource :projects, requirements: { id: %r{[^/]+} } do
1313
NOTEABLE_TYPES.each do |noteable_type|
1414
noteables_str = noteable_type.to_s.underscore.pluralize
1515

lib/api/notification_settings.rb

+4-5
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ class NotificationSettings < Grape::API
4848
end
4949

5050
%w[group project].each do |source_type|
51-
resource source_type.pluralize do
51+
params do
52+
requires :id, type: String, desc: "The #{source_type} ID"
53+
end
54+
resource source_type.pluralize, requirements: { id: %r{[^/]+} } do
5255
desc "Get #{source_type} level notification level settings, defaults to Global" do
5356
detail 'This feature was introduced in GitLab 8.12'
5457
success Entities::NotificationSetting
5558
end
56-
params do
57-
requires :id, type: String, desc: 'The group ID or project ID or project NAMESPACE/PROJECT_NAME'
58-
end
5959
get ":id/notification_settings" do
6060
source = find_source(source_type, params[:id])
6161

@@ -69,7 +69,6 @@ class NotificationSettings < Grape::API
6969
success Entities::NotificationSetting
7070
end
7171
params do
72-
requires :id, type: String, desc: 'The group ID or project ID or project NAMESPACE/PROJECT_NAME'
7372
optional :level, type: String, desc: "The #{source_type} notification level"
7473
NotificationSetting::EMAIL_EVENTS.each do |event|
7574
optional event, type: Boolean, desc: 'Enable/disable this notification'

lib/api/pipelines.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class Pipelines < Grape::API
77
params do
88
requires :id, type: String, desc: 'The project ID'
99
end
10-
resource :projects do
10+
resource :projects, requirements: { id: %r{[^/]+} } do
1111
desc 'Get all Pipelines of the project' do
1212
detail 'This feature was introduced in GitLab 8.11.'
1313
success Entities::PipelineBasic

lib/api/project_hooks.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class ProjectHooks < Grape::API
2424
params do
2525
requires :id, type: String, desc: 'The ID of a project'
2626
end
27-
resource :projects do
27+
resource :projects, requirements: { id: %r{[^/]+} } do
2828
desc 'Get project hooks' do
2929
success Entities::ProjectHook
3030
end

lib/api/project_snippets.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class ProjectSnippets < Grape::API
77
params do
88
requires :id, type: String, desc: 'The ID of a project'
99
end
10-
resource :projects do
10+
resource :projects, requirements: { id: %r{[^/]+} } do
1111
helpers do
1212
def handle_project_member_errors(errors)
1313
if errors[:project_access].any?

lib/api/projects.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def present_projects(projects, options = {})
142142
params do
143143
requires :id, type: String, desc: 'The ID of a project'
144144
end
145-
resource :projects, requirements: { id: /[^\/]+/ } do
145+
resource :projects, requirements: { id: %r{[^/]+} } do
146146
desc 'Get a single project' do
147147
success Entities::ProjectWithAccess
148148
end

lib/api/repositories.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class Repositories < Grape::API
99
params do
1010
requires :id, type: String, desc: 'The ID of a project'
1111
end
12-
resource :projects do
12+
resource :projects, requirements: { id: %r{[^/]+} } do
1313
helpers do
1414
def handle_project_member_errors(errors)
1515
if errors[:project_access].any?

lib/api/runners.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class Runners < Grape::API
8686
params do
8787
requires :id, type: String, desc: 'The ID of a project'
8888
end
89-
resource :projects do
89+
resource :projects, requirements: { id: %r{[^/]+} } do
9090
before { authorize_admin_project }
9191

9292
desc 'Get runners available for project' do

lib/api/services.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,10 @@ class Services < Grape::API
604604
]
605605
}.freeze
606606

607-
resource :projects do
607+
params do
608+
requires :id, type: String, desc: 'The ID of a project'
609+
end
610+
resource :projects, requirements: { id: %r{[^/]+} } do
608611
before { authenticate! }
609612
before { authorize_admin_project }
610613

@@ -692,7 +695,7 @@ def chat_command_service(project, service_slug, params)
692695
params do
693696
requires :id, type: String, desc: 'The ID of a project'
694697
end
695-
resource :projects do
698+
resource :projects, requirements: { id: %r{[^/]+} } do
696699
desc "Trigger a slash command for #{service_slug}" do
697700
detail 'Added in GitLab 8.13'
698701
end

lib/api/subscriptions.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class Subscriptions < Grape::API
1212
requires :id, type: String, desc: 'The ID of a project'
1313
requires :subscribable_id, type: String, desc: 'The ID of a resource'
1414
end
15-
resource :projects do
15+
resource :projects, requirements: { id: %r{[^/]+} } do
1616
subscribable_types.each do |type, finder|
1717
type_singularized = type.singularize
1818
entity_class = Entities.const_get(type_singularized.camelcase)

lib/api/tags.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class Tags < Grape::API
77
params do
88
requires :id, type: String, desc: 'The ID of a project'
99
end
10-
resource :projects do
10+
resource :projects, requirements: { id: %r{[^/]+} } do
1111
desc 'Get a project repository tags' do
1212
success Entities::RepoTag
1313
end

lib/api/todos.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class Todos < Grape::API
1212
params do
1313
requires :id, type: String, desc: 'The ID of a project'
1414
end
15-
resource :projects do
15+
resource :projects, requirements: { id: %r{[^/]+} } do
1616
ISSUABLE_TYPES.each do |type, finder|
1717
type_id_str = "#{type.singularize}_iid".to_sym
1818

lib/api/triggers.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class Triggers < Grape::API
55
params do
66
requires :id, type: String, desc: 'The ID of a project'
77
end
8-
resource :projects do
8+
resource :projects, requirements: { id: %r{[^/]+} } do
99
desc 'Trigger a GitLab project pipeline' do
1010
success Entities::Pipeline
1111
end

lib/api/v3/award_emoji.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class AwardEmoji < Grape::API
66
before { authenticate! }
77
AWARDABLES = %w[issue merge_request snippet].freeze
88

9-
resource :projects do
9+
resource :projects, requirements: { id: %r{[^/]+} } do
1010
AWARDABLES.each do |awardable_type|
1111
awardable_string = awardable_type.pluralize
1212
awardable_id_string = "#{awardable_type}_id"

lib/api/v3/boards.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class Boards < Grape::API
66
params do
77
requires :id, type: String, desc: 'The ID of a project'
88
end
9-
resource :projects do
9+
resource :projects, requirements: { id: %r{[^/]+} } do
1010
desc 'Get all project boards' do
1111
detail 'This feature was introduced in 8.13'
1212
success ::API::Entities::Board

0 commit comments

Comments
 (0)