OSDN Git Service

Add api to collect owned user projects. Api deploy_key.create: Enable deploy key...
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 3 Jun 2013 16:49:04 +0000 (19:49 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 3 Jun 2013 16:49:04 +0000 (19:49 +0300)
app/controllers/deploy_keys_controller.rb
app/models/user.rb
lib/api/entities.rb
lib/api/projects.rb

index c413c2f..1c7e4c1 100644 (file)
@@ -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
index c6dd086..82a49c8 100644 (file)
@@ -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
index 025f44f..9c4a53b 100644 (file)
@@ -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
index ddc403c..13aa42b 100644 (file)
@@ -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