summaryrefslogtreecommitdiff
path: root/lib/api/internal.rb
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-07 08:26:39 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-07 08:26:39 +0000
commit4e1757bfda0530238e3ab4208b47789e196d5602 (patch)
treee63d4cf8b97ada54d4be1d99a02b68df7c04a099 /lib/api/internal.rb
parent4bfb98ddc90bcc6076e2819619fec7607e74358b (diff)
parentd09d87e3b022f6b7cba0988c4377e44196e35939 (diff)
downloadgitlab-ce-4e1757bfda0530238e3ab4208b47789e196d5602.tar.gz
Merge branch 'gitlab-shell' of dev.gitlabhq.com:gitlab/gitlabhq
Diffstat (limited to 'lib/api/internal.rb')
-rw-r--r--lib/api/internal.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/api/internal.rb b/lib/api/internal.rb
new file mode 100644
index 00000000000..3e5e3a478ba
--- /dev/null
+++ b/lib/api/internal.rb
@@ -0,0 +1,49 @@
+module Gitlab
+ # Internal access API
+ class Internal < Grape::API
+ namespace 'internal' do
+ #
+ # Check if ssh key has access to project code
+ #
+ get "/allowed" do
+ key = Key.find(params[:key_id])
+ project = Project.find_with_namespace(params[:project])
+ 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
+
+ user.can?(action, project)
+ end
+ end
+
+ #
+ # Discover user by ssh key
+ #
+ get "/discover" do
+ key = Key.find(params[:key_id])
+ present key.user, with: Entities::User
+ end
+
+ get "/check" do
+ {
+ api_version: '3'
+ }
+ end
+ end
+ end
+end
+