summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/deploy_keys_controller.rb2
-rw-r--r--app/models/user.rb4
-rw-r--r--lib/api/entities.rb4
-rw-r--r--lib/api/projects.rb30
4 files changed, 37 insertions, 3 deletions
diff --git a/app/controllers/deploy_keys_controller.rb b/app/controllers/deploy_keys_controller.rb
index c413c2fd1d9..1c7e4c1b37a 100644
--- a/app/controllers/deploy_keys_controller.rb
+++ b/app/controllers/deploy_keys_controller.rb
@@ -54,6 +54,6 @@ class DeployKeysController < ProjectResourceController
protected
def available_keys
- @available_keys ||= DeployKey.in_projects(current_user.owned_projects).uniq
+ @available_keys ||= current_user.owned_deploy_keys
end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index c6dd0868ba7..82a49c8dcca 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -352,4 +352,8 @@ class User < ActiveRecord::Base
def ldap_user?
extern_uid && provider == 'ldap'
end
+
+ def owned_deploy_keys
+ DeployKey.in_projects(self.owned_projects).uniq
+ end
end
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 025f44fb319..9c4a53bf342 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -26,9 +26,9 @@ module API
end
class Project < Grape::Entity
- expose :id, :name, :description, :default_branch
+ expose :id, :description, :default_branch, :public, :ssh_url_to_repo, :http_url_to_repo, :web_url
expose :owner, using: Entities::UserBasic
- expose :public
+ expose :name, :name_with_namespace
expose :path, :path_with_namespace
expose :issues_enabled, :merge_requests_enabled, :wall_enabled, :wiki_enabled, :created_at
expose :namespace
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index ddc403c12db..13aa42b755d 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -22,6 +22,15 @@ module API
present @projects, with: Entities::Project
end
+ # Get an owned projects list for authenticated user
+ #
+ # Example Request:
+ # GET /projects/owned
+ get '/owned' do
+ @projects = paginate current_user.owned_projects
+ present @projects, with: Entities::Project
+ end
+
# Get a single project
#
# Parameters:
@@ -408,6 +417,8 @@ module API
end
# Add new ssh key to currently authenticated user
+ # If deploy key already exists - it will be joined to project
+ # but only if original one was owned by same user
#
# Parameters:
# key (required) - New SSH Key
@@ -416,7 +427,26 @@ module API
# POST /projects/:id/keys
post ":id/keys" do
attrs = attributes_for_keys [:title, :key]
+
+ attrs[:key].strip!
+
+ # check if key already exist in project
+ key = user_project.deploy_keys.find_by_key(attrs[:key])
+ if key
+ present key, with: Entities::SSHKey
+ return
+ end
+
+ # Check for available deploy keys in other projects
+ key = current_user.owned_deploy_keys.find_by_key(attrs[:key])
+ if key
+ user_project.deploy_keys << key
+ present key, with: Entities::SSHKey
+ return
+ end
+
key = DeployKey.new attrs
+
if key.valid? && user_project.deploy_keys << key
present key, with: Entities::SSHKey
else