Commit 8ae1d812dc9c8099b691e164e7119ede7eb21c61
1 parent
48628d31
Exists in
master
and in
4 other branches
deploy keys support for gitlab-shell api
Showing
1 changed file
with
18 additions
and
13 deletions
Show diff stats
lib/api/internal.rb
| @@ -7,22 +7,27 @@ module Gitlab | @@ -7,22 +7,27 @@ module Gitlab | ||
| 7 | # | 7 | # |
| 8 | get "/allowed" do | 8 | get "/allowed" do |
| 9 | key = Key.find(params[:key_id]) | 9 | key = Key.find(params[:key_id]) |
| 10 | - user = key.user | ||
| 11 | - | ||
| 12 | project = Project.find_with_namespace(params[:project]) | 10 | project = Project.find_with_namespace(params[:project]) |
| 13 | - action = case params[:action] | ||
| 14 | - when 'git-upload-pack' | ||
| 15 | - then :download_code | ||
| 16 | - when 'git-receive-pack' | ||
| 17 | - then | ||
| 18 | - if project.protected_branch?(params[:ref]) | ||
| 19 | - :push_code_to_protected_branches | ||
| 20 | - else | ||
| 21 | - :push_code | 11 | + git_cmd = params[:action] |
| 12 | + | ||
| 13 | + if key.is_deploy_key | ||
| 14 | + project == key.project && git_cmd == 'git-upload-pack' | ||
| 15 | + else | ||
| 16 | + user = key.user | ||
| 17 | + action = case git_cmd | ||
| 18 | + when 'git-upload-pack' | ||
| 19 | + then :download_code | ||
| 20 | + when 'git-receive-pack' | ||
| 21 | + then | ||
| 22 | + if project.protected_branch?(params[:ref]) | ||
| 23 | + :push_code_to_protected_branches | ||
| 24 | + else | ||
| 25 | + :push_code | ||
| 26 | + end | ||
| 22 | end | 27 | end |
| 23 | - end | ||
| 24 | 28 | ||
| 25 | - user.can?(action, project) | 29 | + user.can?(action, project) |
| 30 | + end | ||
| 26 | end | 31 | end |
| 27 | 32 | ||
| 28 | # | 33 | # |