misc_rbtools/security_tools/redhat_tools/rpm_pkg_audit.rb
kenna-bmcdevitt 335831687c adjust tools
2020-10-29 00:14:31 -05:00

54 lines
1.5 KiB
Ruby
Executable file

#!/usr/bin/env ruby
# frozen_string_literal: true
require 'optparse'
require 'json'
require './rhel_rpm_to_cve'
require './rhel_security_api_client'
ARGV << '-h' if ARGV.empty?
data_file = './rpm-to-cve.xml'
options = {}
parser = OptionParser.new do |parser|
parser.banner = 'Usage: rpm_pkg_audit.rb [options]'
parser.on('-p', '--pkg PKGNAME', 'Takes a base pkg name and returns cves from redhats security API.') do |pkg|
options[:pkg] = pkg
end
parser.on('-l', '--list', 'List packages in the XML datafile.') do |list|
options[:list] = list
end
parser.on('-x', '--xmlpkg PKGNAME', 'The pkg name you want to audit from xml file rpm-to-cve.xml') do |xmlpkg|
options[:xmlpkg] = xmlpkg
end
parser.on('-r', '--refresh', 'Refresh rpm-to-cve.xml file with latest pkgs and cves') do |_refresh|
options[:refresh] = true
end
end
parser.parse!
if options[:pkg]
pkg_name = options[:pkg]
elsif options[:xmlpkg]
xmlpkg_name = options[:xmlpkg]
end
rpm_auditer = RhelRpmToCve.new(filepath: data_file)
rhel_api_client = RhelSecurityApiClient.new
if xmlpkg_name
json = rpm_auditer.cves_per_pkg_name(pkg_name).to_json
puts JSON.pretty_generate(JSON.parse(json))
elsif pkg_name
params = { params: { package: pkg_name } }
json_response = rhel_api_client.request('/cve.json', params)
cve_pkgs_and_adv = rhel_api_client.cve_pkg_adv(json_response)
puts JSON.pretty_generate(cve_pkgs_and_adv)
elsif options[:refresh]
rpm_auditer.refresh_rpm_to_cve_file('./rpm-to-cve.xml')
else options.key?(:list)
puts rpm_auditer.list_pkg_names.sort
end