60 lines
1.3 KiB
Ruby
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
|