misc_rbtools/classes/cve_info.rb

69 lines
1.6 KiB
Ruby
Raw Permalink Normal View History

class CveReport
attr_accessor :filename, :file
# 1st way:
# expects a hash with the following key:values # {:filename => "nvdcve-1.0-2002.json.gz",
# :json => {"CVE_data_type"=>"CVE",
# "CVE_Items"= etc...etc...etc...}
# 2nd way:
# a json gz compressed file of cve metadata downloaded from nvd
# TO ADD: 1st way.
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)
2019-06-12 21:54:14 -05:00
result = cves.select do |cve|
cve["cve"]["CVE_data_meta"]["ID"] == cve_id
end
2019-06-12 21:54:14 -05:00
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