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!