lib/utilities/inspec_util.rb in inspec_tools-2.0.2.pre8 vs lib/utilities/inspec_util.rb in inspec_tools-2.0.2.pre9
- old
+ new
@@ -86,30 +86,37 @@
# Parse for inspec profile results json
json['profiles'].each do |profile|
profile['controls'].each do |control|
c_id = control['id'].to_sym
data[c_id] = {}
+
data[c_id][:vuln_num] = control['id'] unless control['id'].nil?
data[c_id][:rule_title] = control['title'] unless control['title'].nil?
data[c_id][:vuln_discuss] = control['desc'] unless control['desc'].nil?
+
unless control['tags'].nil?
data[c_id][:severity] = control['tags']['severity'] unless control['tags']['severity'].nil?
data[c_id][:gid] = control['tags']['gid'] unless control['tags']['gid'].nil?
data[c_id][:group_title] = control['tags']['gtitle'] unless control['tags']['gtitle'].nil?
data[c_id][:rule_id] = control['tags']['rid'] unless control['tags']['rid'].nil?
data[c_id][:rule_ver] = control['tags']['stig_id'] unless control['tags']['stig_id'].nil?
data[c_id][:cci_ref] = control['tags']['cci'] unless control['tags']['cci'].nil?
data[c_id][:nist] = control['tags']['nist'].join(' ') unless control['tags']['nist'].nil?
- data[c_id][:check_content] = control['tags']['check'] unless control['tags']['check'].nil?
- data[c_id][:fix_text] = control['tags']['fix'] unless control['tags']['fix'].nil?
end
+
+ if control['descriptions'].respond_to?(:find)
+ data[c_id][:check_content] = control['descriptions'].find { |c| c['label'] == 'fix' }&.dig('data')
+ data[c_id][:fix_text] = control['descriptions'].find { |c| c['label'] == 'check' }&.dig('data')
+ end
+
data[c_id][:impact] = control['impact'].to_s unless control['impact'].nil?
data[c_id][:profile_name] = profile['name'].to_s unless profile['name'].nil?
data[c_id][:profile_shasum] = profile['sha256'].to_s unless profile['sha256'].nil?
data[c_id][:status] = []
data[c_id][:message] = []
+
if control.key?('results')
control['results'].each do |result|
if !result['backtrace'].nil?
result['status'] = 'error'
end
@@ -118,10 +125,11 @@
data[c_id][:message].push("FAILED -- Test: #{result['code_desc']}\nMessage: #{result['message']}\n") if result['status'] == 'failed'
data[c_id][:message].push("PASS -- #{result['code_desc']}\n") if result['status'] == 'passed'
data[c_id][:message].push("PROFILE_ERROR -- Test: #{result['code_desc']}\nMessage: #{result['backtrace']}\n") if result['status'] == 'error'
end
end
+
if data[c_id][:impact].to_f.zero?
data[c_id][:message].unshift("NOT_APPLICABLE -- Description: #{control['desc']}\n\n")
end
end
end
@@ -141,18 +149,20 @@
ret[key] = v
end
end
end
- def self.control_status(control)
+ def self.control_status(control, for_summary = false)
status_list = control[:status].uniq
if control[:impact].to_f.zero?
'Not_Applicable'
elsif status_list.include?('failed')
'Open'
elsif status_list.include?('passed')
'NotAFinding'
+ elsif status_list.include?('error') && for_summary
+ 'Profile_Error'
else
# profile skipped or profile error
'Not_Reviewed'
end
end
@@ -372,11 +382,11 @@
if output_format == 'ruby'
controls.each do |control|
file_name = control.id.to_s
myfile = File.new("#{directory}/controls/#{file_name}.rb", 'w')
myfile.puts "# encoding: UTF-8\n\n"
- myfile.puts wrap(control.to_ruby, WIDTH) + "\n"
+ myfile.puts wrap(control.to_ruby.gsub('"', "\'"), WIDTH) + "\n"
myfile.close
end
else
controls.each do |control|
file_name = control.id.to_s
@@ -388,10 +398,10 @@
else
myfile = File.new("#{directory}/controls/controls.rb", 'w')
if output_format == 'ruby'
controls.each do |control|
myfile.puts "# encoding: UTF-8\n\n"
- myfile.puts wrap(control.to_ruby, WIDTH) + "\n"
+ myfile.puts wrap(control.to_ruby.gsub('"', "\'"), WIDTH) + "\n"
end
else
controls.each do |control|
if (defined? control.desc).nil?
control.descriptions[:default].strip!