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