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!