54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module API
 | 
						|
  # Keys API
 | 
						|
  class Keys < ::API::Base
 | 
						|
    before { authenticate! }
 | 
						|
 | 
						|
    feature_category :system_access
 | 
						|
 | 
						|
    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
 |