From 50e8d6c0c03b11cc539cca37aea782538ee77262 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 3 Jun 2013 19:49:04 +0300 Subject: [PATCH] Add api to collect owned user projects. Api deploy_key.create: Enable deploy key if it exist in other owned project --- app/controllers/deploy_keys_controller.rb | 2 +- app/models/user.rb | 4 +++ lib/api/entities.rb | 4 +-- lib/api/projects.rb | 30 +++++++++++++++++++++++ 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 -- GitLab