diff --git a/classes/nvd_downloader.rb b/classes/nvd_downloader.rb index 68ce2fe..df3cdfc 100644 --- a/classes/nvd_downloader.rb +++ b/classes/nvd_downloader.rb @@ -1,80 +1,83 @@ require 'rest-client' require 'zlib' require 'json' +require '../modules/nvd_tools' -class NvdDownloader +module NvdTools + class NvdDownloader attr_accessor :version, :base_url, :base_filename, :years, :filenames_json - + MIN_YEAR = '2002' MAX_YEAR = '2019' AVAILABLE_YEARS = (MIN_YEAR..MAX_YEAR).to_a JSON = 'json.gz' - + def initialize - @version = "1.0" - @base_url = "https://nvd.nist.gov/feeds/json/cve/#{version}/" - @base_filename = "nvdcve-#{version}-" - @years = self.years - @filenames_json = self.filenames(JSON) + @version = "1.0" + @base_url = "https://nvd.nist.gov/feeds/json/cve/#{version}/" + @base_filename = "nvdcve-#{version}-" + @years = self.years + @filenames_json = self.filenames(JSON) end - + def years - year = NvdDownloader::AVAILABLE_YEARS.map do |year| - [year.to_i, year] - end.to_h + year = NvdDownloader::AVAILABLE_YEARS.map do |year| + [year.to_i, year] + end.to_h end - + def filenames(extension) - year_filenames = years.map do |k, year| - "#{base_filename}#{year}.#{extension}" - end - - other_filenames = [ - "#{base_filename}recent.#{extension}", - "#{base_filename}modified.#{extension}" - ] - - year_filenames + other_filenames + year_filenames = years.map do |k, year| + "#{base_filename}#{year}.#{extension}" + end + + other_filenames = [ + "#{base_filename}recent.#{extension}", + "#{base_filename}modified.#{extension}" + ] + + year_filenames + other_filenames end - + def get(url) - r = RestClient.get "#{base_url}#{url}" - r.body if r.code == 200 + r = RestClient.get "#{base_url}#{url}" + r.body if r.code == 200 end - + def read_gzip_stream(gzip_stream) - io_stream = StringIO.new(gzip_stream) - gz = Zlib::GzipReader.new(io_stream) - gz.read + io_stream = StringIO.new(gzip_stream) + gz = Zlib::GzipReader.new(io_stream) + gz.read end - + def write_to_file(parsed_json, file_path) - File.write(file_path, parsed_json) + File.write(file_path, parsed_json) end - + def parse_json(json_string) - JSON.parse(json_string) + JSON.parse(json_string) end - + def one_time_import - # this should be a method that does a one-time import - # of all of the json.gz from each year + recent + modified json feeds + # this should be a method that does a one-time import + # of all of the json.gz from each year + recent + modified json feeds end - + def modified_meta - # this should be a method that builds - # the modified filename with the meta file extension included + # this should be a method that builds + # the modified filename with the meta file extension included end - + def check_metafile(metafile) - # open the metafile, build a hash of k/v pairs of the data inside of the file - # check each k/v pair against the file on disk - # return a new hash with the same k as before, but the value being a boolean true or false if the value from the k/v pair + # open the metafile, build a hash of k/v pairs of the data inside of the file + # check each k/v pair against the file on disk + # return a new hash with the same k as before, but the value being a boolean true or false if the value from the k/v pair end - + def detect_changes(metafile) - # this should be a method that detects changes in the metafile. - # run the check_metafile method against the current metafile on disk. - # if there is a change, return true, if not return false + # this should be a method that detects changes in the metafile. + # run the check_metafile method against the current metafile on disk. + # if there is a change, return true, if not return false end + end end \ No newline at end of file diff --git a/modules/nvd_tools.rb b/modules/nvd_tools.rb new file mode 100644 index 0000000..5a22758 --- /dev/null +++ b/modules/nvd_tools.rb @@ -0,0 +1,2 @@ +module NvdTools +end