Commit 4528fa9817f2f9ba9ccf330ea2c9f6575b6a3c4b

Authored by Dmitriy Zaporozhets
1 parent 1882baa1

modify api to work with new deploy keys

lib/api/internal.rb
@@ -25,8 +25,8 @@ module Gitlab @@ -25,8 +25,8 @@ module Gitlab
25 return false unless project 25 return false unless project
26 26
27 27
28 - if key.is_deploy_key  
29 - project == key.project && git_cmd == 'git-upload-pack' 28 + if key.is_a? DeployKey
  29 + key.projects.include?(project) && git_cmd == 'git-upload-pack'
30 else 30 else
31 user = key.user 31 user = key.user
32 32
lib/api/projects.rb
@@ -531,8 +531,8 @@ module Gitlab @@ -531,8 +531,8 @@ module Gitlab
531 # POST /projects/:id/keys 531 # POST /projects/:id/keys
532 post ":id/keys" do 532 post ":id/keys" do
533 attrs = attributes_for_keys [:title, :key] 533 attrs = attributes_for_keys [:title, :key]
534 - key = user_project.deploy_keys.new attrs  
535 - if key.save 534 + key = DeployKey.new attrs
  535 + if key.valid? && user_project.deploy_keys << key
536 present key, with: Entities::SSHKey 536 present key, with: Entities::SSHKey
537 else 537 else
538 not_found! 538 not_found!
@@ -545,9 +545,8 @@ module Gitlab @@ -545,9 +545,8 @@ module Gitlab
545 # DELETE /projects/:id/keys/:id 545 # DELETE /projects/:id/keys/:id
546 delete ":id/keys/:key_id" do 546 delete ":id/keys/:key_id" do
547 key = user_project.deploy_keys.find params[:key_id] 547 key = user_project.deploy_keys.find params[:key_id]
548 - key.delete 548 + key.destroy
549 end 549 end
550 -  
551 end 550 end
552 end 551 end
553 end 552 end
lib/api/users.rb
@@ -174,7 +174,7 @@ module Gitlab @@ -174,7 +174,7 @@ module Gitlab
174 delete "keys/:id" do 174 delete "keys/:id" do
175 begin 175 begin
176 key = current_user.keys.find params[:id] 176 key = current_user.keys.find params[:id]
177 - key.delete 177 + key.destroy
178 rescue 178 rescue
179 end 179 end
180 end 180 end
spec/models/project_spec.rb
@@ -37,7 +37,8 @@ describe Project do @@ -37,7 +37,8 @@ describe Project do
37 it { should have_many(:users_projects).dependent(:destroy) } 37 it { should have_many(:users_projects).dependent(:destroy) }
38 it { should have_many(:notes).dependent(:destroy) } 38 it { should have_many(:notes).dependent(:destroy) }
39 it { should have_many(:snippets).dependent(:destroy) } 39 it { should have_many(:snippets).dependent(:destroy) }
40 - it { should have_many(:deploy_keys).dependent(:destroy) } 40 + it { should have_many(:deploy_keys_projects).dependent(:destroy) }
  41 + it { should have_many(:deploy_keys) }
41 it { should have_many(:hooks).dependent(:destroy) } 42 it { should have_many(:hooks).dependent(:destroy) }
42 it { should have_many(:protected_branches).dependent(:destroy) } 43 it { should have_many(:protected_branches).dependent(:destroy) }
43 it { should have_one(:forked_project_link).dependent(:destroy) } 44 it { should have_one(:forked_project_link).dependent(:destroy) }
spec/requests/api/projects_spec.rb
@@ -13,7 +13,6 @@ describe Gitlab::API do @@ -13,7 +13,6 @@ describe Gitlab::API do
13 let!(:snippet) { create(:snippet, author: user, project: project, title: 'example') } 13 let!(:snippet) { create(:snippet, author: user, project: project, title: 'example') }
14 let!(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) } 14 let!(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) }
15 let!(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) } 15 let!(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) }
16 - let(:key) { create(:key, project: project) }  
17 16
18 before { project.team << [user, :reporter] } 17 before { project.team << [user, :reporter] }
19 18
@@ -636,58 +635,61 @@ describe Gitlab::API do @@ -636,58 +635,61 @@ describe Gitlab::API do
636 end 635 end
637 end 636 end
638 637
639 - describe "GET /projects/:id/keys" do  
640 - it "should return array of ssh keys" do  
641 - project.deploy_keys << key  
642 - project.save  
643 - get api("/projects/#{project.id}/keys", user)  
644 - response.status.should == 200  
645 - json_response.should be_an Array  
646 - json_response.first['title'].should == key.title  
647 - end  
648 - end 638 + describe :deploy_keys do
  639 + let(:deploy_keys_project) { create(:deploy_keys_project, project: project) }
  640 + let(:deploy_key) { deploy_keys_project.deploy_key }
649 641
650 - describe "GET /projects/:id/keys/:key_id" do  
651 - it "should return a single key" do  
652 - project.deploy_keys << key  
653 - project.save  
654 - get api("/projects/#{project.id}/keys/#{key.id}", user)  
655 - response.status.should == 200  
656 - json_response['title'].should == key.title  
657 - end 642 + describe "GET /projects/:id/keys" do
  643 + before { deploy_key }
658 644
659 - it "should return 404 Not Found with invalid ID" do  
660 - get api("/projects/#{project.id}/keys/404", user)  
661 - response.status.should == 404 645 + it "should return array of ssh keys" do
  646 + get api("/projects/#{project.id}/keys", user)
  647 + response.status.should == 200
  648 + json_response.should be_an Array
  649 + json_response.first['title'].should == deploy_key.title
  650 + end
662 end 651 end
663 - end  
664 652
665 - describe "POST /projects/:id/keys" do  
666 - it "should not create an invalid ssh key" do  
667 - post api("/projects/#{project.id}/keys", user), { title: "invalid key" }  
668 - response.status.should == 404  
669 - end 653 + describe "GET /projects/:id/keys/:key_id" do
  654 + it "should return a single key" do
  655 + get api("/projects/#{project.id}/keys/#{deploy_key.id}", user)
  656 + response.status.should == 200
  657 + json_response['title'].should == deploy_key.title
  658 + end
670 659
671 - it "should create new ssh key" do  
672 - key_attrs = attributes_for :key  
673 - expect {  
674 - post api("/projects/#{project.id}/keys", user), key_attrs  
675 - }.to change{ project.deploy_keys.count }.by(1) 660 + it "should return 404 Not Found with invalid ID" do
  661 + get api("/projects/#{project.id}/keys/404", user)
  662 + response.status.should == 404
  663 + end
676 end 664 end
677 - end  
678 665
679 - describe "DELETE /projects/:id/keys/:key_id" do  
680 - it "should delete existing key" do  
681 - project.deploy_keys << key  
682 - project.save  
683 - expect {  
684 - delete api("/projects/#{project.id}/keys/#{key.id}", user)  
685 - }.to change{ project.deploy_keys.count }.by(-1) 666 + describe "POST /projects/:id/keys" do
  667 + it "should not create an invalid ssh key" do
  668 + post api("/projects/#{project.id}/keys", user), { title: "invalid key" }
  669 + response.status.should == 404
  670 + end
  671 +
  672 + it "should create new ssh key" do
  673 + key_attrs = attributes_for :key
  674 + expect {
  675 + post api("/projects/#{project.id}/keys", user), key_attrs
  676 + }.to change{ project.deploy_keys.count }.by(1)
  677 + end
686 end 678 end
687 679
688 - it "should return 404 Not Found with invalid ID" do  
689 - delete api("/projects/#{project.id}/keys/404", user)  
690 - response.status.should == 404 680 + describe "DELETE /projects/:id/keys/:key_id" do
  681 + before { deploy_key }
  682 +
  683 + it "should delete existing key" do
  684 + expect {
  685 + delete api("/projects/#{project.id}/keys/#{deploy_key.id}", user)
  686 + }.to change{ project.deploy_keys.count }.by(-1)
  687 + end
  688 +
  689 + it "should return 404 Not Found with invalid ID" do
  690 + delete api("/projects/#{project.id}/keys/404", user)
  691 + response.status.should == 404
  692 + end
691 end 693 end
692 end 694 end
693 end 695 end