OSDN Git Service

deploy keys support for gitlab-shell api
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 7 Feb 2013 07:56:13 +0000 (09:56 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 7 Feb 2013 07:56:13 +0000 (09:56 +0200)
lib/api/internal.rb

index 0a0f55b..3e5e3a4 100644 (file)
@@ -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
 
       #