made initial kenna api client

This commit is contained in:
booboy 2019-04-28 04:16:17 -05:00
parent 30e66c06f8
commit 8c0b16244f
3 changed files with 40 additions and 5 deletions

2
.pryrc
View file

@ -1 +1 @@
irequire 'classes/CVE.rb'
require '/usr/src/app/classes/kenna_api_client.rb'

View file

View file

@ -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