Skip to content

Commit

Permalink
Merge pull request #9591 from bozaro/user-by-key
Browse files Browse the repository at this point in the history
Add API method for get user by ID of an SSH key
  • Loading branch information
DouweM committed Sep 3, 2015
2 parents 6630a06 + 1be79e8 commit aaef30a
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Expand Up @@ -35,6 +35,7 @@ v 8.0.0 (unreleased)
- Added Drone CI integration (Kirill Zaitsev)
- Refactored service API and added automatically service docs generator (Kirill Zaitsev)
- Added web_url key project hook_attrs (Kirill Zaitsev)
- Add ability to get user information by ID of an SSH key via the API

v 7.14.1
- Improve abuse reports management from admin area
Expand Down
1 change: 1 addition & 0 deletions doc/api/README.md
Expand Up @@ -21,6 +21,7 @@
- [Groups](groups.md)
- [Namespaces](namespaces.md)
- [Settings](settings.md)
- [Keys](keys.md)

## Clients

Expand Down
46 changes: 46 additions & 0 deletions doc/api/keys.md
@@ -0,0 +1,46 @@
# Keys

## Get SSH key with user by ID of an SSH key

Get SSH key with user by ID of an SSH key. Note only administrators can lookup SSH key with user by ID of an SSH key.

```
GET /keys/:id
```

Parameters:

- `id` (required) - The ID of an SSH key

```json
{
"id": 1,
"title": "Sample key 25",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt1256k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
"created_at": "2015-09-03T07:24:44.627Z",
"user": {
"name": "John Smith",
"username": "john_smith",
"id": 25,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/cfa35b8cd2ec278026357769582fa563?s=40\u0026d=identicon",
"web_url": "http://localhost:3000/u/john_smith",
"created_at": "2015-09-03T07:24:01.670Z",
"is_admin": false,
"bio": null,
"skype": "",
"linkedin": "",
"twitter": "",
"website_url": "",
"email": "john@example.com",
"theme_id": 2,
"color_scheme_id": 1,
"projects_limit": 10,
"current_sign_in_at": null,
"identities": [],
"can_create_group": true,
"can_create_project": true,
"two_factor_enabled": false
}
}
```
1 change: 1 addition & 0 deletions lib/api/api.rb
Expand Up @@ -50,5 +50,6 @@ class API < Grape::API
mount Branches
mount Labels
mount Settings
mount Keys
end
end
4 changes: 4 additions & 0 deletions lib/api/entities.rb
Expand Up @@ -199,6 +199,10 @@ class SSHKey < Grape::Entity
expose :id, :title, :key, :created_at
end

class SSHKeyWithUser < SSHKey
expose :user, using: Entities::UserFull
end

class Note < Grape::Entity
expose :id
expose :note, as: :body
Expand Down
20 changes: 20 additions & 0 deletions lib/api/keys.rb
@@ -0,0 +1,20 @@
module API
# Keys API
class Keys < Grape::API
before { authenticate! }

resource :keys do
# Get single ssh key by id. Only available to admin users.
#
# Example Request:
# GET /keys/:id
get ":id" do
authenticated_as_admin!

key = Key.find(params[:id])

present key, with: Entities::SSHKeyWithUser
end
end
end
end
39 changes: 39 additions & 0 deletions spec/requests/api/keys_spec.rb
@@ -0,0 +1,39 @@
require 'spec_helper'

describe API::API, api: true do
include ApiHelpers

let(:user) { create(:user) }
let(:admin) { create(:admin) }
let(:key) { create(:key, user: user) }
let(:email) { create(:email, user: user) }

describe 'GET /keys/:uid' do
before { admin }

context 'when unauthenticated' do
it 'should return authentication error' do
get api("/keys/#{key.id}")
expect(response.status).to eq(401)
end
end

context 'when authenticated' do
it 'should return 404 for non-existing key' do
get api('/keys/999999', admin)
expect(response.status).to eq(404)
expect(json_response['message']).to eq('404 Not found')
end

it 'should return single ssh key with user information' do
user.keys << key
user.save
get api("/keys/#{key.id}", admin)
expect(response.status).to eq(200)
expect(json_response['title']).to eq(key.title)
expect(json_response['user']['id']).to eq(user.id)
expect(json_response['user']['username']).to eq(user.username)
end
end
end
end

0 comments on commit aaef30a

Please sign in to comment.