class Proxy::OpenSCAP::OvalReportParser

Public Instance Methods

parse_cves(report_data) click to toggle source
# File lib/smart_proxy_openscap/oval_report_parser.rb, line 8
def parse_cves(report_data)
  report = oval_report report_data
  results = report.definition_results.reduce({}) do |memo, result|
    memo.tap { |acc| acc[result.definition_id] = parse_cve_res result }
  end

  report.definitions.map do |definition|
    results[definition.id].merge(parse_cve_def definition)
  end
end

Private Instance Methods

decompress(report_data) click to toggle source
# File lib/smart_proxy_openscap/oval_report_parser.rb, line 38
def decompress(report_data)
  begin
    file = Tempfile.new
    file.write report_data
    file.rewind
    decompressed = `bunzip2 -dc #{file.path}`
  rescue => e
    logger.error e
    raise Proxy::OpenSCAP::ReportDecompressError, "Failed to decompress received report bzip, cause: #{e.message}"
  ensure
    file.close
    file.unlink
  end
  decompressed
end
oval_report(report_data) click to toggle source
# File lib/smart_proxy_openscap/oval_report_parser.rb, line 33
def oval_report(report_data)
  decompressed = decompress report_data
  ::OpenscapParser::OvalReport.new(decompressed)
end
parse_cve_def(definition) click to toggle source
# File lib/smart_proxy_openscap/oval_report_parser.rb, line 21
def parse_cve_def(definition)
  refs = definition.references.reduce([]) do |memo, ref|
    memo.tap { |acc| acc << { :ref_id => ref.ref_id, :ref_url => ref.ref_url } }
  end

  { :references => refs, :definition_id => definition.id }
end
parse_cve_res(result) click to toggle source
# File lib/smart_proxy_openscap/oval_report_parser.rb, line 29
def parse_cve_res(result)
  { :result => result.result }
end