#!/usr/bin/env ruby require '../cvrf/microsoft_cvrf_client.rb' require 'optparse' require 'json' def export_to_json(bulletin_vulns, filepath) File.write(filepath, bulletin_vulns) end def do_export(bulletin_vulns, bulletin_id) filename = "./data/exploited_cves_for_msft_#{bulletin_id}.json" export_to_json(bulletin_vulns, filename) puts "----" * 12 puts "Succesfully Exported to #{filename}:" puts "----" * 12 puts bulletin_vulns puts "----" * 12 end @options = {} OptionParser.new do |opts| opts.on("-id", "--id", "Bulletin ID") do |id| @options[:id] = id end opts.on("--export") do |export| @options[:export] = export end opts.on("--export-all") do |export_all| @options[:export_all] = export_all end end.parse! api_client = MicrosoftCvrfClient.new if (@options[:id] && !@options[:export] && !@options[:export_all]) exploited_vulns_for_bulletin = api_client.exploited_vulns_only(@options[:id]) pretty_vulns = JSON.pretty_generate(exploited_vulns_for_bulletin) puts "----" * 12 puts pretty_vulns puts "----" * 12 elsif (@options[:id] && @options[:export]) exploited_vulns_for_bulletin = api_client.exploited_vulns_only(@options[:id]) pretty_vulns = JSON.pretty_generate(exploited_vulns_for_bulletin) do_export(pretty_vulns, @options[:id]) elsif (@options[:export_all] && !@options[:id] && !@options[:export]) puts "Exporting All Bulletin Data:" api_client.ids.each do |bulletin_id| puts "----" * 12 puts "Now exporting #{bulletin_id}" puts "----" * 12 # remove these in the next 3 months or put in something that acts based on # Date.today.year case bulletin_id when '2022-Oct' next when '2022-Nov' next when '2022-Dec' next end vulns = api_client.exploited_vulns_only(bulletin_id) pretty_vulns = JSON.pretty_generate(vulns) do_export(pretty_vulns, bulletin_id) end end puts @options