misc_rbtools/security_tools/redhat_tools/rhel_security_api_client.rb

60 lines
1.3 KiB
Ruby

# Documentation link:
# https://access.redhat.com/documentation/en-us/red_hat_security_data_api/1.0/html/red_hat_security_data_api/overview
# frozen_string_literal: true
require 'rest-client'
require 'json'
require 'active_support/core_ext/array/grouping.rb'
class RhelSecurityApiClient
attr_accessor :base_url
def initialize
@base_url = 'https://access.redhat.com/hydra/rest/securitydata'
end
# params is a hash that looks like
# {:params => {:key => value}}
def request(path, params)
r = RestClient::Request.execute(
method: :get,
url: "#{base_url}#{path}",
headers: params
)
if r.code == 200
parse_response(r)
else
"Error HTTP Code: #{r.code}"
end
end
def parse_response(response)
JSON.parse(response.body)
end
def cve_pkg_adv(array_of_json_cves)
array_of_json_cves.map do |json|
{
cve_id: json['CVE'],
advisories: json['advisories'],
affected_packages: json['affected_packages']
}
end
end
def cve_id(cve_id)
params = {}
request("/cve/#{cve_id}.json", params)
end
def cves(cve_ids)
params = {}
responses = []
cve_ids.in_groups_of(500, false) do |cve_id_batch|
csv_cve_url_str = cve_id_batch.join(',')
responses << request('/cve.json?ids=' + csv_cve_url_str, params)
end
responses.flatten
end
end