gitlab-org--gitlab-foss/lib/api/keys.rb

54 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module API
# Keys API
class Keys < ::API::Base
before { authenticate! }
feature_category :authentication_and_authorization
resource :keys do
desc 'Get single ssh key by id. Only available to admin users' do
detail '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'
success Entities::SSHKeyWithUser
end
params do
requires :id, types: [String, Integer], desc: 'The ID of an SSH key', documentation: { example: '2' }
end
get ":id" do
authenticated_as_admin!
key = Key.find(params[:id])
present key, with: Entities::SSHKeyWithUser, current_user: current_user
end
desc 'Get user by fingerprint of SSH key' do
success Entities::UserWithAdmin
detail 'You can search for a user that owns a specific SSH key. Note only administrators can lookup SSH key\
with the fingerprint of an SSH key'
end
params do
requires :fingerprint, type: String, desc: 'The fingerprint of an SSH key',
documentation: { example: 'ba:81:59:68:d7:6c:cd:02:02:bf:6a:9b:55:4e:af:d1' }
end
get do
authenticated_with_can_read_all_resources!
key = KeysFinder.new(params).execute
not_found!('Key') unless key
if key.type == "DeployKey"
present key, with: Entities::DeployKeyWithUser, current_user: current_user
else
present key, with: Entities::SSHKeyWithUser, current_user: current_user
end
rescue KeysFinder::InvalidFingerprint
render_api_error!('Failed to return the key', 400)
end
end
end
end