# frozen_string_literal: true require 'rest-client' require 'json' require 'active_support/core_ext/array/grouping.rb' # Documentation link: # https://access.redhat.com/documentation/en-us/red_hat_security_data_api/1.0/html/red_hat_security_data_api/overview class RhelSecurityApiClient attr_accessor :base_url def initialize @base_url = 'https://access.redhat.com/hydra/rest/securitydata' end # params = {: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 cve_ids(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