misc_rbtools/kenna_kdi_importer/cve_report.rb

60 lines
1.3 KiB
Ruby

class CveReport
attr_accessor :filename, :file
def initialize(filename)
@filename = filename
@file = from_file
end
def cve_ids
# return a list of cve data from the given filename in an array.
file["CVE_Items"].map do |item|
item["cve"]["CVE_data_meta"]["ID"]
end
end
def cve_id?(cve_id)
cve_ids.include?(cve_id)
end
def cve(cve_id)
find(cve_id)
end
def cves
file["CVE_Items"].map do |cve|
cve
end
end
def from_file
Zlib::GzipReader.open(filename) do |gz|
JSON.parse(gz.read)
end
end
def find(cve_id)
result = cves.select do |cve|
cve["cve"]["CVE_data_meta"]["ID"] == cve_id
end
if result.count == 1
result.first
else
"Could not find valid CVE for: #{cve}"
end
end
def description(cve_id)
cve = find(cve_id)
cve['cve']['description']['description_data'].first['value']
end
def description_hash(cve_id)
description_value = description(cve_id)
{ :cve_id => cve_id, :description => description_value }
end
def reference_data(cve_id)
cve = find(cve_id)
cve['cve']['references']['reference_data']
end
end