Commit 50e8d6c0c03b11cc539cca37aea782538ee77262
1 parent
0447c731
Exists in
master
and in
4 other branches
Add api to collect owned user projects. Api deploy_key.create: Enable deploy key…
… if it exist in other owned project
Showing
4 changed files
with
37 additions
and
3 deletions
Show diff stats
app/controllers/deploy_keys_controller.rb
| @@ -54,6 +54,6 @@ class DeployKeysController < ProjectResourceController | @@ -54,6 +54,6 @@ class DeployKeysController < ProjectResourceController | ||
| 54 | protected | 54 | protected |
| 55 | 55 | ||
| 56 | def available_keys | 56 | def available_keys |
| 57 | - @available_keys ||= DeployKey.in_projects(current_user.owned_projects).uniq | 57 | + @available_keys ||= current_user.owned_deploy_keys |
| 58 | end | 58 | end |
| 59 | end | 59 | end |
app/models/user.rb
| @@ -352,4 +352,8 @@ class User < ActiveRecord::Base | @@ -352,4 +352,8 @@ class User < ActiveRecord::Base | ||
| 352 | def ldap_user? | 352 | def ldap_user? |
| 353 | extern_uid && provider == 'ldap' | 353 | extern_uid && provider == 'ldap' |
| 354 | end | 354 | end |
| 355 | + | ||
| 356 | + def owned_deploy_keys | ||
| 357 | + DeployKey.in_projects(self.owned_projects).uniq | ||
| 358 | + end | ||
| 355 | end | 359 | end |
lib/api/entities.rb
| @@ -26,9 +26,9 @@ module API | @@ -26,9 +26,9 @@ module API | ||
| 26 | end | 26 | end |
| 27 | 27 | ||
| 28 | class Project < Grape::Entity | 28 | class Project < Grape::Entity |
| 29 | - expose :id, :name, :description, :default_branch | 29 | + expose :id, :description, :default_branch, :public, :ssh_url_to_repo, :http_url_to_repo, :web_url |
| 30 | expose :owner, using: Entities::UserBasic | 30 | expose :owner, using: Entities::UserBasic |
| 31 | - expose :public | 31 | + expose :name, :name_with_namespace |
| 32 | expose :path, :path_with_namespace | 32 | expose :path, :path_with_namespace |
| 33 | expose :issues_enabled, :merge_requests_enabled, :wall_enabled, :wiki_enabled, :created_at | 33 | expose :issues_enabled, :merge_requests_enabled, :wall_enabled, :wiki_enabled, :created_at |
| 34 | expose :namespace | 34 | expose :namespace |
lib/api/projects.rb
| @@ -22,6 +22,15 @@ module API | @@ -22,6 +22,15 @@ module API | ||
| 22 | present @projects, with: Entities::Project | 22 | present @projects, with: Entities::Project |
| 23 | end | 23 | end |
| 24 | 24 | ||
| 25 | + # Get an owned projects list for authenticated user | ||
| 26 | + # | ||
| 27 | + # Example Request: | ||
| 28 | + # GET /projects/owned | ||
| 29 | + get '/owned' do | ||
| 30 | + @projects = paginate current_user.owned_projects | ||
| 31 | + present @projects, with: Entities::Project | ||
| 32 | + end | ||
| 33 | + | ||
| 25 | # Get a single project | 34 | # Get a single project |
| 26 | # | 35 | # |
| 27 | # Parameters: | 36 | # Parameters: |
| @@ -408,6 +417,8 @@ module API | @@ -408,6 +417,8 @@ module API | ||
| 408 | end | 417 | end |
| 409 | 418 | ||
| 410 | # Add new ssh key to currently authenticated user | 419 | # Add new ssh key to currently authenticated user |
| 420 | + # If deploy key already exists - it will be joined to project | ||
| 421 | + # but only if original one was owned by same user | ||
| 411 | # | 422 | # |
| 412 | # Parameters: | 423 | # Parameters: |
| 413 | # key (required) - New SSH Key | 424 | # key (required) - New SSH Key |
| @@ -416,7 +427,26 @@ module API | @@ -416,7 +427,26 @@ module API | ||
| 416 | # POST /projects/:id/keys | 427 | # POST /projects/:id/keys |
| 417 | post ":id/keys" do | 428 | post ":id/keys" do |
| 418 | attrs = attributes_for_keys [:title, :key] | 429 | attrs = attributes_for_keys [:title, :key] |
| 430 | + | ||
| 431 | + attrs[:key].strip! | ||
| 432 | + | ||
| 433 | + # check if key already exist in project | ||
| 434 | + key = user_project.deploy_keys.find_by_key(attrs[:key]) | ||
| 435 | + if key | ||
| 436 | + present key, with: Entities::SSHKey | ||
| 437 | + return | ||
| 438 | + end | ||
| 439 | + | ||
| 440 | + # Check for available deploy keys in other projects | ||
| 441 | + key = current_user.owned_deploy_keys.find_by_key(attrs[:key]) | ||
| 442 | + if key | ||
| 443 | + user_project.deploy_keys << key | ||
| 444 | + present key, with: Entities::SSHKey | ||
| 445 | + return | ||
| 446 | + end | ||
| 447 | + | ||
| 419 | key = DeployKey.new attrs | 448 | key = DeployKey.new attrs |
| 449 | + | ||
| 420 | if key.valid? && user_project.deploy_keys << key | 450 | if key.valid? && user_project.deploy_keys << key |
| 421 | present key, with: Entities::SSHKey | 451 | present key, with: Entities::SSHKey |
| 422 | else | 452 | else |