summaryrefslogtreecommitdiff
path: root/lib/api/internal.rb
diff options
context:
space:
mode:
authorSebastian Ziebell <sebastian.ziebell@asquera.de>2013-02-08 10:32:42 +0100
committerSebastian Ziebell <sebastian.ziebell@asquera.de>2013-02-08 10:32:42 +0100
commit8045a81bcf5822f1992442750e1484a93c368229 (patch)
tree94ce2b257f3ba002ac1a0fde70b69b622304810d /lib/api/internal.rb
parent5d8a99f10429168e6471fdd1843f5045a10a84b3 (diff)
parent2f0a75ab77af430f682d67aa9bb865007d832795 (diff)
downloadgitlab-ce-8045a81bcf5822f1992442750e1484a93c368229.tar.gz
Merge branch 'master' into fixes/api
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
+