Skip to content

Commit b58744c

Browse files
committed
Modify authentication check methods in runners API
1 parent 553bac5 commit b58744c

File tree

1 file changed

+22
-24
lines changed

1 file changed

+22
-24
lines changed

lib/api/runners.rb

+22-24
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class Runners < Grape::API
3131
# GET /runners/:id
3232
get ':id' do
3333
runner = get_runner(params[:id])
34-
can_show_runner?(runner) unless current_user.is_admin?
34+
authenticate_show_runner!(runner)
3535

3636
present runner, with: Entities::RunnerDetails, user_is_admin: current_user.is_admin?
3737
end
@@ -47,7 +47,7 @@ class Runners < Grape::API
4747
# PUT /runners/:id
4848
put ':id' do
4949
runner = get_runner(params[:id])
50-
can_update_runner?(runner) unless current_user.is_admin?
50+
authenticate_update_runner!(runner)
5151

5252
attrs = attributes_for_keys [:description, :active, :tag_list]
5353
if runner.update(attrs)
@@ -65,7 +65,7 @@ class Runners < Grape::API
6565
# DELETE /runners/:id
6666
delete ':id' do
6767
runner = get_runner(params[:id])
68-
can_delete_runner?(runner)
68+
authenticate_delete_runner!(runner)
6969
runner.destroy!
7070

7171
present runner, with: Entities::RunnerDetails
@@ -93,7 +93,7 @@ class Runners < Grape::API
9393
# POST /projects/:id/runners/:runner_id
9494
post ':id/runners/:runner_id' do
9595
runner = get_runner(params[:runner_id])
96-
can_enable_runner?(runner)
96+
authenticate_enable_runner!(runner)
9797
Ci::RunnerProject.create(runner: runner, project: user_project)
9898

9999
present runner, with: Entities::Runner
@@ -111,7 +111,7 @@ class Runners < Grape::API
111111
not_found!('Runner') unless runner_project
112112

113113
runner = runner_project.runner
114-
forbidden!("Can't disable runner - only one project associated with it. Please remove runner instead") if runner.projects.count == 1
114+
forbidden!("Only one project associated with the runner. Please remove the runner instead") if runner.projects.count == 1
115115

116116
runner_project.destroy
117117

@@ -137,34 +137,32 @@ def get_runner(id)
137137
runner
138138
end
139139

140-
def can_show_runner?(runner)
141-
return true if runner.is_shared
142-
forbidden!("Can't show runner's details - no access granted") unless user_can_access_runner?(runner)
140+
def authenticate_show_runner!(runner)
141+
return if runner.is_shared || current_user.is_admin?
142+
forbidden!("No access granted") unless user_can_access_runner?(runner)
143143
end
144144

145-
def can_update_runner?(runner)
146-
return true if current_user.is_admin?
147-
forbidden!("Can't update shared runner") if runner.is_shared?
148-
forbidden!("Can't update runner - no access granted") unless user_can_access_runner?(runner)
145+
def authenticate_update_runner!(runner)
146+
return if current_user.is_admin?
147+
forbidden!("Runner is shared") if runner.is_shared?
148+
forbidden!("No access granted") unless user_can_access_runner?(runner)
149149
end
150150

151-
def can_delete_runner?(runner)
152-
return true if current_user.is_admin?
153-
forbidden!("Can't delete shared runner") if runner.is_shared?
154-
forbidden!("Can't delete runner - associated with more than one project") if runner.projects.count > 1
155-
forbidden!("Can't delete runner - no access granted") unless user_can_access_runner?(runner)
151+
def authenticate_delete_runner!(runner)
152+
return if current_user.is_admin?
153+
forbidden!("Runner is shared") if runner.is_shared?
154+
forbidden!("Runner associated with more than one project") if runner.projects.count > 1
155+
forbidden!("No access granted") unless user_can_access_runner?(runner)
156156
end
157157

158-
def can_enable_runner?(runner)
159-
forbidden!("Can't enable shared runner directly") if runner.is_shared?
160-
return true if current_user.is_admin?
161-
forbidden!("Can't update runner - no access granted") unless user_can_access_runner?(runner)
158+
def authenticate_enable_runner!(runner)
159+
forbidden!("Runner is shared") if runner.is_shared?
160+
return if current_user.is_admin?
161+
forbidden!("No access granted") unless user_can_access_runner?(runner)
162162
end
163163

164164
def user_can_access_runner?(runner)
165-
runner.projects.inject(false) do |final, project|
166-
final || abilities.allowed?(current_user, :admin_project, project)
167-
end
165+
current_user.ci_authorized_runners.exists?(runner.id)
168166
end
169167
end
170168
end

0 commit comments

Comments
 (0)