OSDN Git Service

API: SSH keys belong to user entity
authorNihad Abbasov <narkoz.2008@gmail.com>
Fri, 21 Sep 2012 11:49:28 +0000 (04:49 -0700)
committerNihad Abbasov <narkoz.2008@gmail.com>
Fri, 21 Sep 2012 11:49:28 +0000 (04:49 -0700)
doc/api/keys.md [deleted file]
doc/api/users.md
lib/api.rb
lib/api/entities.rb
lib/api/keys.rb [deleted file]
lib/api/users.rb
spec/requests/api/ssh_keys_spec.rb [deleted file]
spec/requests/api/users_spec.rb

diff --git a/doc/api/keys.md b/doc/api/keys.md
deleted file mode 100644 (file)
index d22b22e..0000000
+++ /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.
-
-
index b9b04dc..4f806b1 100644 (file)
@@ -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.
index 3b62f31..2890a8c 100644 (file)
@@ -17,7 +17,6 @@ module Gitlab
     mount Projects
     mount Issues
     mount Milestones
-    mount Keys
     mount Session
   end
 end
index ee6f15f..ee693de 100644 (file)
@@ -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 (file)
index 4c30272..0000000
+++ /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
-
index 98ced6f..0ca8fb2 100644 (file)
@@ -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 (file)
index 7fb8c92..0000000
+++ /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
-
index e25fe13..5d7ef99 100644 (file)
@@ -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