lib/utilities/inspec_util.rb in inspec_tools-2.3.5 vs lib/utilities/inspec_util.rb in inspec_tools-2.3.6

- old
+ new

@@ -12,21 +12,21 @@ require 'overrides/object' require 'overrides/string' require 'rubocop' module Utils - class InspecUtil # rubocop:disable Metrics/ClassLength + class InspecUtil WIDTH = 80 IMPACT_SCORES = { 'none' => 0.0, 'low' => 0.1, 'medium' => 0.4, 'high' => 0.7, 'critical' => 0.9 }.freeze - def self.parse_data_for_ckl(json) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity + def self.parse_data_for_ckl(json) data = {} # Parse for inspec profile results json json['profiles'].each do |profile| profile['controls'].each do |control| @@ -86,11 +86,11 @@ def self.to_dotted_hash(hash, recursive_key = '') hash.each_with_object({}) do |(k, v), ret| key = recursive_key + k.to_s if v.is_a? Hash - ret.merge! to_dotted_hash(v, key + '.') + ret.merge! to_dotted_hash(v, "#{key}.") else ret[key] = v end end end @@ -163,19 +163,20 @@ 1.0 # Critical Controls end end private_class_method def self.string_to_impact(severity, use_cvss_terms) - if %r{none|na|n/a|not[_|(\s*)]?applicable}i.match?(severity) + case severity + when %r{none|na|n/a|not[_|(\s*)]?applicable}i impact = 0.0 # Informative - elsif /low|cat(egory)?\s*(iii|3)/i.match?(severity) + when /low|cat(egory)?\s*(iii|3)/i impact = 0.3 # Low Impact - elsif /med(ium)?|cat(egory)?\s*(ii|2)/i.match?(severity) + when /med(ium)?|cat(egory)?\s*(ii|2)/i impact = 0.5 # Medium Impact - elsif /high|cat(egory)?\s*(i|1)/i.match?(severity) + when /high|cat(egory)?\s*(i|1)/i impact = 0.7 # High Impact - elsif /crit(ical)?|severe/i.match?(severity) + when /crit(ical)?|severe/i impact = 1.0 # Critical Controls else raise SeverityInputError, "'#{severity}' is not a valid severity value. It should be a Float between 0.0 and " \ '1.0 or one of the approved keywords.' end @@ -216,11 +217,11 @@ str.gsub!(/\\n/, "\n") WordWrap.ww(str.to_s, width) end - private_class_method def self.generate_controls(inspec_json) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity + private_class_method def self.generate_controls(inspec_json) controls = [] inspec_json['controls'].each do |json_control| control = ::Inspec::Object::Control.new if (defined? control.desc).nil? control.descriptions[:default] = json_control['desc'] @@ -244,11 +245,11 @@ control.add_tag(::Inspec::Object::Tag.new('gid', json_control['tags']['gid'])) control.add_tag(::Inspec::Object::Tag.new('rid', json_control['tags']['rid'])) control.add_tag(::Inspec::Object::Tag.new('stig_id', json_control['tags']['stig_id'])) control.add_tag(::Inspec::Object::Tag.new('fix_id', json_control['tags']['fix_id'])) control.add_tag(::Inspec::Object::Tag.new('cci', json_control['tags']['cci'])) - control.add_tag(::Inspec::Object::Tag.new('legacy', json_control['tags']['legacy'])) + control.add_tag(::Inspec::Object::Tag.new('legacy', json_control['tags']['legacy'])) unless json_control['tags']['legacy'].blank? control.add_tag(::Inspec::Object::Tag.new('nist', json_control['tags']['nist'])) control.add_tag(::Inspec::Object::Tag.new('cis_level', json_control['tags']['cis_level'])) unless json_control['tags']['cis_level'].blank? control.add_tag(::Inspec::Object::Tag.new('cis_controls', json_control['tags']['cis_controls'])) unless json_control['tags']['cis_controls'].blank? control.add_tag(::Inspec::Object::Tag.new('cis_rid', json_control['tags']['cis_rid'])) unless json_control['tags']['cis_rid'].blank? control.add_tag(::Inspec::Object::Tag.new('ref', json_control['tags']['ref'])) unless json_control['tags']['ref'].blank? @@ -324,22 +325,22 @@ myfile = File.new("#{directory}/README.md", 'w') myfile.puts readme_contents end - private_class_method def self.unpack_profile(directory, controls, separated, output_format) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity + private_class_method def self.unpack_profile(directory, controls, separated, output_format) FileUtils.rm_rf(directory) if Dir.exist?(directory) Dir.mkdir directory unless Dir.exist?(directory) Dir.mkdir "#{directory}/controls" unless Dir.exist?("#{directory}/controls") Dir.mkdir "#{directory}/libraries" unless Dir.exist?("#{directory}/libraries") if separated 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, WIDTH)}\n" myfile.close end else controls.each do |control| file_name = control.id.to_s @@ -351,10 +352,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.gsub('"', "\'"), 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!