made initial kenna api client
This commit is contained in:
parent
30e66c06f8
commit
8c0b16244f
3 changed files with 40 additions and 5 deletions
2
.pryrc
2
.pryrc
|
@ -1 +1 @@
|
||||||
irequire 'classes/CVE.rb'
|
require '/usr/src/app/classes/kenna_api_client.rb'
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
require 'net/http'
|
require 'net/http'
|
||||||
|
require 'json'
|
||||||
|
|
||||||
# Kenna Security API Client
|
# Kenna Security API Client
|
||||||
# Requests are limited to a maximum of 5 requests per second.
|
# 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.
|
# 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'
|
@api_url = 'https://api.kennasecurity.com'
|
||||||
end
|
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)
|
def get(uri)
|
||||||
# pass a relative url: example - /vulnerabilities
|
# pass a relative url: example - /vulnerabilities
|
||||||
url = URI("#{api_url}/#{uri}")
|
url = URI("#{api_url}/#{uri}")
|
||||||
request = Net::HTTP::Get.new(uri)
|
request = Net::HTTP::Get.new(url)
|
||||||
request['X-Risk-Token'] = api_token
|
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)
|
http.request(request)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
handle_response(response)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue