summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNihad Abbasov <narkoz.2008@gmail.com>2012-09-21 04:49:28 -0700
committerNihad Abbasov <narkoz.2008@gmail.com>2012-09-21 04:49:28 -0700
commitb62445813dffec92e85540ed081e4d6e12d58dc0 (patch)
tree6417cd7e74ded09612892d963c1423c9c82a8de2
parent4a072be2d775d5ce59573cfb447ddab940854d54 (diff)
downloadgitlab-ce-b62445813dffec92e85540ed081e4d6e12d58dc0.tar.gz
API: SSH keys belong to user entity
-rw-r--r--doc/api/keys.md79
-rw-r--r--doc/api/users.md78
-rw-r--r--lib/api.rb1
-rw-r--r--lib/api/entities.rb4
-rw-r--r--lib/api/keys.rb50
-rw-r--r--lib/api/users.rb59
-rw-r--r--spec/requests/api/ssh_keys_spec.rb73
-rw-r--r--spec/requests/api/users_spec.rb63
8 files changed, 195 insertions, 212 deletions
diff --git a/doc/api/keys.md b/doc/api/keys.md
deleted file mode 100644
index d22b22e20b8..00000000000
--- a/doc/api/keys.md
+++ /dev/null
@@ -1,79 +0,0 @@
-## List keys
-
-Get a list of currently authenticated user's keys.
-
-```
-GET /keys
-```
-
-```json
-[
- {
- "id": 1,
- "title" : "Public key"
- "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4
- 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4
- soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
- },
- {
- "id": 3,
- "title" : "Another Public key"
- "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4
- 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4
- soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0="
- }
-]
-```
-
-## Single key
-
-Get a single key.
-
-```
-GET /keys/:id
-```
-
-Parameters:
-
-+ `id` (required) - The ID of a key
-
-```json
-{
- "id": 1,
- "title" : "Public key"
- "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4
- 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4
- soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0="
-}
-```
-## Add key
-
-Create new key owned by currently authenticated user
-
-```
-POST /keys
-```
-
-Parameters:
-
-+ `title` (required) - new SSH Key's title
-+ `key` (required) - new SSH key
-
-Will return created key with status `201 Created` on success, or `404 Not
-found` on fail.
-
-## Delete key
-
-Delete key owned by currently authenticated user
-
-```
-DELETE /keys/:id
-```
-
-Parameters:
-
-+ `id` (required) - key ID
-
-Will return `200 OK` on success, or `404 Not Found` on fail.
-
-
diff --git a/doc/api/users.md b/doc/api/users.md
index b9b04dc5399..4f806b145d1 100644
--- a/doc/api/users.md
+++ b/doc/api/users.md
@@ -88,3 +88,81 @@ GET /user
"theme_id": 1
}
```
+
+## List SSH keys
+
+Get a list of currently authenticated user's SSH keys.
+
+```
+GET /user/keys
+```
+
+```json
+[
+ {
+ "id": 1,
+ "title" : "Public key"
+ "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4
+ 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4
+ soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
+ },
+ {
+ "id": 3,
+ "title" : "Another Public key"
+ "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4
+ 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4
+ soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0="
+ }
+]
+```
+
+## Single SSH key
+
+Get a single key.
+
+```
+GET /user/keys/:id
+```
+
+Parameters:
+
++ `id` (required) - The ID of an SSH key
+
+```json
+{
+ "id": 1,
+ "title" : "Public key"
+ "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4
+ 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4
+ soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0="
+}
+```
+## Add SSH key
+
+Create new key owned by currently authenticated user
+
+```
+POST /user/keys
+```
+
+Parameters:
+
++ `title` (required) - new SSH Key's title
++ `key` (required) - new SSH key
+
+Will return created key with status `201 Created` on success, or `404 Not
+found` on fail.
+
+## Delete SSH key
+
+Delete key owned by currently authenticated user
+
+```
+DELETE /user/keys/:id
+```
+
+Parameters:
+
++ `id` (required) - SSH key ID
+
+Will return `200 OK` on success, or `404 Not Found` on fail.
diff --git a/lib/api.rb b/lib/api.rb
index 3b62f31bf32..2890a8cc9e8 100644
--- a/lib/api.rb
+++ b/lib/api.rb
@@ -17,7 +17,6 @@ module Gitlab
mount Projects
mount Issues
mount Milestones
- mount Keys
mount Session
end
end
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index ee6f15f1218..ee693de699e 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -60,8 +60,8 @@ module Gitlab
expose :closed, :updated_at, :created_at
end
- class Key < Grape::Entity
- expose :id, :title, :key
+ class SSHKey < Grape::Entity
+ expose :id, :title, :key
end
end
end
diff --git a/lib/api/keys.rb b/lib/api/keys.rb
deleted file mode 100644
index 4c302727c4f..00000000000
--- a/lib/api/keys.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-module Gitlab
- # Keys API
- class Keys < Grape::API
- before { authenticate! }
- resource :keys do
- # Get currently authenticated user's keys
- #
- # Example Request:
- # GET /keys
- get do
- present current_user.keys, with: Entities::Key
- end
- # Get single key owned by currently authenticated user
- #
- # Example Request:
- # GET /keys/:id
- get "/:id" do
- key = current_user.keys.find params[:id]
- present key, with: Entities::Key
- end
- # Add new ssh key to currently authenticated user
- #
- # Parameters:
- # key (required) - New SSH Key
- # title (required) - New SSH Key's title
- # Example Request:
- # POST /keys
- post do
- attrs = attributes_for_keys [:title, :key]
- key = current_user.keys.new attrs
- if key.save
- present key, with: Entities::Key
- else
- not_found!
- end
- end
- # Delete existed ssh key of currently authenticated user
- #
- # Parameters:
- # id (required) - SSH Key ID
- # Example Request:
- # DELETE /keys/:id
- delete "/:id" do
- key = current_user.keys.find params[:id]
- key.delete
- end
- end
- end
-end
-
diff --git a/lib/api/users.rb b/lib/api/users.rb
index 98ced6f8e5b..0ca8fb2a1ae 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -25,12 +25,59 @@ module Gitlab
end
end
- # Get currently authenticated user
- #
- # Example Request:
- # GET /user
- get "/user" do
- present @current_user, with: Entities::User
+ resource :user do
+ # Get currently authenticated user
+ #
+ # Example Request:
+ # GET /user
+ get do
+ present @current_user, with: Entities::User
+ end
+
+ # Get currently authenticated user's keys
+ #
+ # Example Request:
+ # GET /user/keys
+ get "keys" do
+ present current_user.keys, with: Entities::SSHKey
+ end
+
+ # Get single key owned by currently authenticated user
+ #
+ # Example Request:
+ # GET /user/keys/:id
+ get "keys/:id" do
+ key = current_user.keys.find params[:id]
+ present key, with: Entities::SSHKey
+ end
+
+ # Add new ssh key to currently authenticated user
+ #
+ # Parameters:
+ # key (required) - New SSH Key
+ # title (required) - New SSH Key's title
+ # Example Request:
+ # POST /user/keys
+ post "keys" do
+ attrs = attributes_for_keys [:title, :key]
+ key = current_user.keys.new attrs
+ if key.save
+ present key, with: Entities::SSHKey
+ else
+ not_found!
+ end
+ end
+
+ # Delete existed ssh key of currently authenticated user
+ #
+ # Parameters:
+ # id (required) - SSH Key ID
+ # Example Request:
+ # DELETE /user/keys/:id
+ delete "keys/:id" do
+ key = current_user.keys.find params[:id]
+ key.delete
+ end
end
end
end
diff --git a/spec/requests/api/ssh_keys_spec.rb b/spec/requests/api/ssh_keys_spec.rb
deleted file mode 100644
index 7fb8c920fb1..00000000000
--- a/spec/requests/api/ssh_keys_spec.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Keys do
- include ApiHelpers
- let(:user) {
- user = Factory.create :user
- user.reset_authentication_token!
- user
- }
- let(:key) { Factory.create :key, { user: user}}
-
- describe "GET /keys" do
- context "when unauthenticated" do
- it "should return authentication error" do
- get api("/keys")
- response.status.should == 401
- end
- end
- context "when authenticated" do
- it "should return array of ssh keys" do
- user.keys << key
- user.save
- get api("/keys", user)
- response.status.should == 200
- json_response.should be_an Array
- json_response.first["title"].should == key.title
- end
- end
- end
-
- describe "GET /keys/:id" do
- it "should returm single key" do
- user.keys << key
- user.save
- get api("/keys/#{key.id}", user)
- response.status.should == 200
- json_response["title"].should == key.title
- end
- it "should return 404 Not Found within invalid ID" do
- get api("/keys/42", user)
- response.status.should == 404
- end
- end
-
- describe "POST /keys" do
- it "should not create invalid ssh key" do
- post api("/keys", user), { title: "invalid key" }
- response.status.should == 404
- end
- it "should create ssh key" do
- key_attrs = Factory.attributes :key
- expect {
- post api("/keys", user), key_attrs
- }.to change{ user.keys.count }.by(1)
- end
- end
-
- describe "DELETE /keys/:id" do
- it "should delete existed key" do
- user.keys << key
- user.save
- expect {
- delete api("/keys/#{key.id}", user)
- }.to change{user.keys.count}.by(-1)
- end
- it "should return 404 Not Found within invalid ID" do
- delete api("/keys/42", user)
- response.status.should == 404
- end
- end
-
-end
-
diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb
index e25fe1341d5..5d7ef99c481 100644
--- a/spec/requests/api/users_spec.rb
+++ b/spec/requests/api/users_spec.rb
@@ -3,7 +3,8 @@ require 'spec_helper'
describe Gitlab::API do
include ApiHelpers
- let(:user) { Factory :user }
+ let(:user) { Factory :user }
+ let(:key) { Factory :key, user: user }
describe "GET /users" do
context "when unauthenticated" do
@@ -38,4 +39,64 @@ describe Gitlab::API do
json_response['email'].should == user.email
end
end
+
+ describe "GET /user/keys" do
+ context "when unauthenticated" do
+ it "should return authentication error" do
+ get api("/user/keys")
+ response.status.should == 401
+ end
+ end
+ context "when authenticated" do
+ it "should return array of ssh keys" do
+ user.keys << key
+ user.save
+ get api("/user/keys", user)
+ response.status.should == 200
+ json_response.should be_an Array
+ json_response.first["title"].should == key.title
+ end
+ end
+ end
+
+ describe "GET /user/keys/:id" do
+ it "should returm single key" do
+ user.keys << key
+ user.save
+ get api("/user/keys/#{key.id}", user)
+ response.status.should == 200
+ json_response["title"].should == key.title
+ end
+ it "should return 404 Not Found within invalid ID" do
+ get api("/user/keys/42", user)
+ response.status.should == 404
+ end
+ end
+
+ describe "POST /user/keys" do
+ it "should not create invalid ssh key" do
+ post api("/user/keys", user), { title: "invalid key" }
+ response.status.should == 404
+ end
+ it "should create ssh key" do
+ key_attrs = Factory.attributes :key
+ expect {
+ post api("/user/keys", user), key_attrs
+ }.to change{ user.keys.count }.by(1)
+ end
+ end
+
+ describe "DELETE /user/keys/:id" do
+ it "should delete existed key" do
+ user.keys << key
+ user.save
+ expect {
+ delete api("/user/keys/#{key.id}", user)
+ }.to change{user.keys.count}.by(-1)
+ end
+ it "should return 404 Not Found within invalid ID" do
+ delete api("/user/keys/42", user)
+ response.status.should == 404
+ end
+ end
end