summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-07 09:56:13 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-07 09:56:13 +0200
commit8ae1d812dc9c8099b691e164e7119ede7eb21c61 (patch)
treeea4e665dfac5db1da54cb6797c0e5ed9a1e57a78 /lib
parent48628d31d59f007fbf4b6958eb2a48adedaef8e4 (diff)
downloadgitlab-ce-8ae1d812dc9c8099b691e164e7119ede7eb21c61.tar.gz
deploy keys support for gitlab-shell api
Diffstat (limited to 'lib')
-rw-r--r--lib/api/internal.rb31
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
#