diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-02-07 09:56:13 +0200 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-02-07 09:56:13 +0200 |
commit | 8ae1d812dc9c8099b691e164e7119ede7eb21c61 (patch) | |
tree | ea4e665dfac5db1da54cb6797c0e5ed9a1e57a78 /lib/api/internal.rb | |
parent | 48628d31d59f007fbf4b6958eb2a48adedaef8e4 (diff) | |
download | gitlab-ce-8ae1d812dc9c8099b691e164e7119ede7eb21c61.tar.gz |
deploy keys support for gitlab-shell api
Diffstat (limited to 'lib/api/internal.rb')
-rw-r--r-- | lib/api/internal.rb | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/api/internal.rb b/lib/api/internal.rb index 0a0f55bc512..3e5e3a478ba 100644 --- a/lib/api/internal.rb +++ b/lib/api/internal.rb @@ -7,22 +7,27 @@ module Gitlab # get "/allowed" do key = Key.find(params[:key_id]) - user = key.user - project = Project.find_with_namespace(params[:project]) - action = case params[:action] - when 'git-upload-pack' - then :download_code - when 'git-receive-pack' - then - if project.protected_branch?(params[:ref]) - :push_code_to_protected_branches - else - :push_code + git_cmd = params[:action] + + if key.is_deploy_key + project == key.project && git_cmd == 'git-upload-pack' + else + user = key.user + action = case git_cmd + when 'git-upload-pack' + then :download_code + when 'git-receive-pack' + then + if project.protected_branch?(params[:ref]) + :push_code_to_protected_branches + else + :push_code + end end - end - user.can?(action, project) + user.can?(action, project) + end end # |