diff --git a/.pryrc b/.pryrc index 9ccd7b9..b2b082c 100644 --- a/.pryrc +++ b/.pryrc @@ -1 +1 @@ -irequire 'classes/CVE.rb' +require '/usr/src/app/classes/kenna_api_client.rb' diff --git a/classes/.pryrc b/classes/.pryrc deleted file mode 100644 index e69de29..0000000 diff --git a/classes/kenna_api_client.rb b/classes/kenna_api_client.rb index c441345..2752c6f 100644 --- a/classes/kenna_api_client.rb +++ b/classes/kenna_api_client.rb @@ -1,4 +1,6 @@ require 'net/http' +require 'json' + # Kenna Security API Client # Requests are limited to a maximum of 5 requests per second. # If you exceed this limit, your request will receive a “429: Too Many Requests" status code response. @@ -11,16 +13,49 @@ class APIClient @api_url = 'https://api.kennasecurity.com' end - private + def vuln_id(id) + get("/vulnerabilities/#{id}") + end + + def asset_id(id) + get("/assets/#{id}") + end + + def headers(request) + request['X-Risk-Token'] = api_token + request['Content-type'] = 'application/json' + request + end + + def show_errors(response) + response_errors = lambda do |error| + { + 'response_code': error.code, + 'response_message': error.message, + 'response_class_name': error.class.name + } + end + response_errors.call response + end + + def handle_response(response) + if response.is_a?(Net::HTTPSuccess) + JSON.parse(response.body) + else + show_errors(response) + end + end def get(uri) # pass a relative url: example - /vulnerabilities url = URI("#{api_url}/#{uri}") - request = Net::HTTP::Get.new(uri) - request['X-Risk-Token'] = api_token + request = Net::HTTP::Get.new(url) + request = headers(request) - response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| + response = Net::HTTP.start(url.hostname, url.port, use_ssl: true) do |http| http.request(request) end + + handle_response(response) end end