lib/inspec_tools/xlsx.rb in inspec_tools-1.8.3 vs lib/inspec_tools/xlsx.rb in inspec_tools-2.0.0
- old
+ new
@@ -68,50 +68,58 @@
cis2Nist[row[2].to_s] = row[0] unless (row[2] == "") || (row[2].to_i.nil?)
end
end
[ 1, 2 ].each do |level|
@xlsx.sheet(level).each_row_streaming do |row|
- if row[@mapping['control.id']].nil? || !/^\d+\.?\d*$/.match(row[@mapping['control.id']].formatted_value)
+ if row[@mapping['control.id']].nil? || !/^\d+(\.?\d)*$/.match(row[@mapping['control.id']].formatted_value)
next
end
tag_pos = @mapping['control.tags']
control = {}
control['tags'] = {}
control['id'] = control_prefix + '-' + row[@mapping['control.id']].formatted_value unless @mapping['control.id'].nil? || row[@mapping['control.id']].nil?
control['title'] = row[@mapping['control.title']].formatted_value unless @mapping['control.title'].nil? || row[@mapping['control.title']].nil?
control['desc'] = ""
control['desc'] = row[@mapping['control.desc']].formatted_value unless row[@mapping['control.desc']].nil?
- control['tags']['rationale'] = row[tag_pos['rationale']].formatted_value unless row[tag_pos['rationale']].nil?
+ control['tags']['rationale'] = row[tag_pos['rationale']].formatted_value unless row[tag_pos['rationale']].empty?
control['tags']['severity'] = level == 1 ? 'medium' : 'high'
control['impact'] = Utils::InspecUtil.get_impact(control['tags']['severity'])
control['tags']['ref'] = row[@mapping['control.ref']].formatted_value unless @mapping['control.ref'].nil? || row[@mapping['control.ref']].nil?
control['tags']['cis_level'] = level unless level.nil?
- # cis_control must be extracted from CIS control column via regex
- cis_tags = row[tag_pos['cis_controls']].formatted_value.scan(/CONTROL:v(\d) (\d+)\.?(\d*)/)
- control['tags']['cis_controls'] = []
- control['tags']['nist'] = []
- cis_tags.each do |cis_tag|
- if cis_tag[2].nil? || cis_tag[2] == ""
- control['tags']['cis_controls'] << cis_tag[1].to_s
- control['tags']['nist'] << cis2Nist[cis_tag[1]]
- else
- control['tags']['cis_controls'] << cis_tag[1].to_s + "." + cis_tag[2].to_s
- control['tags']['nist'] << cis2Nist[cis_tag[1].to_s + "." + cis_tag[2].to_s]
- end
+ unless row[tag_pos['cis_controls']].empty?
+ # cis_control must be extracted from CIS control column via regex
+ control = handle_cis_tags(control, row[tag_pos['cis_controls']].formatted_value.scan(/CONTROL:v(\d) (\d+)\.?(\d*)/))
end
- if not control['tags']['nist'].nil?
- control['tags']['nist'] << "Rev_4"
- end
- control['tags']['cis_controls'] << "Rev_" + cis_tags.first[0] unless cis_tags[0].nil?
control['tags']['cis_rid'] = row[@mapping['control.id']].formatted_value unless @mapping['control.id'].nil? || row[@mapping['control.id']].nil?
- control['tags']['check'] = row[tag_pos['check']].formatted_value unless tag_pos['check'].nil? || row[tag_pos['check']].nil?
- control['tags']['fix'] = row[tag_pos['fix']].formatted_value unless tag_pos['fix'].nil? || row[tag_pos['fix']].nil?
+ control['tags']['check'] = row[tag_pos['check']].formatted_value unless tag_pos['check'].nil? || row[tag_pos['check']].empty?
+ control['tags']['fix'] = row[tag_pos['fix']].formatted_value unless tag_pos['fix'].nil? || row[tag_pos['fix']].empty?
@controls << control
end
end
+ end
+
+ def handle_cis_tags(control, cis_tags)
+ control['tags']['cis_controls'] = []
+ control['tags']['nist'] = []
+
+ cis_tags.each do |cis_tag|
+ if cis_tag[2].nil? || cis_tag[2] == ""
+ control['tags']['cis_controls'] << cis_tag[1].to_s
+ control['tags']['nist'] << cis2Nist[cis_tag[1]]
+ else
+ control['tags']['cis_controls'] << cis_tag[1].to_s + "." + cis_tag[2].to_s
+ control['tags']['nist'] << cis2Nist[cis_tag[1].to_s + "." + cis_tag[2].to_s]
+ end
+ end
+
+ if not control['tags']['nist'].nil?
+ control['tags']['nist'] << "Rev_4"
+ end
+ control['tags']['cis_controls'] << "Rev_" + cis_tags.first[0] unless cis_tags[0].nil?
+ control
end
end
end