inspec_tools 1.4.2 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -48,7 +48,7 @@ module InspecTools
48
48
  @summary[:buckets][:passed] = select_by_status(@data, 'NotAFinding')
49
49
  @summary[:buckets][:no_impact] = select_by_status(@data, 'Not_Applicable')
50
50
  @summary[:buckets][:skipped] = select_by_status(@data, 'Not_Reviewed')
51
- @summary[:buckets][:error] = select_by_status(@data, 'Not_Tested')
51
+ @summary[:buckets][:error] = select_by_status(@data, 'Profile_Error')
52
52
 
53
53
  @summary[:status] = {}
54
54
  @summary[:status][:failed] = tally_by_impact(@summary[:buckets][:failed])
@@ -1,3 +1,3 @@
1
1
  module InspecTools
2
- VERSION = '1.4.2'.freeze
2
+ VERSION = '1.7.1'.freeze
3
3
  end
@@ -4,7 +4,6 @@ require_relative '../utilities/inspec_util'
4
4
 
5
5
  require 'digest'
6
6
  require 'json'
7
- require 'inspec'
8
7
 
9
8
  module InspecTools
10
9
  # rubocop:disable Metrics/ClassLength
@@ -109,8 +108,8 @@ module InspecTools
109
108
  @profile['supports'] = []
110
109
  @profile['attributes'] = []
111
110
  @profile['generator'] = {
112
- 'name': 'inspec',
113
- 'version': Gem.loaded_specs['inspec'].version
111
+ 'name': 'inspec_tools',
112
+ 'version': VERSION
114
113
  }
115
114
  @profile['plaintext'] = @benchmark.plaintext.plaintext
116
115
  @profile['status'] = "#{@benchmark.status} on #{@benchmark.release_date.release_date}"
@@ -0,0 +1,117 @@
1
+ require 'nokogiri'
2
+ require 'inspec/objects'
3
+ require 'word_wrap'
4
+ require 'yaml'
5
+ require 'digest'
6
+
7
+ require_relative '../utilities/inspec_util'
8
+
9
+ # rubocop:disable Metrics/AbcSize
10
+ # rubocop:disable Metrics/PerceivedComplexity
11
+ # rubocop:disable Metrics/CyclomaticComplexity
12
+
13
+ module InspecTools
14
+ # Methods for converting from XLS to various formats
15
+ class XLSXTool
16
+ def initialize(xlsx, mapping, name, verbose = false)
17
+ @name = name
18
+ @xlsx = xlsx
19
+ @mapping = mapping
20
+ @verbose = verbose
21
+ end
22
+
23
+ def to_ckl
24
+ # TODO
25
+ end
26
+
27
+ def to_xccdf
28
+ # TODO
29
+ end
30
+
31
+ def to_inspec(control_prefix)
32
+ @controls = []
33
+ @cci_xml = nil
34
+ @profile = {}
35
+ insert_json_metadata
36
+ parse_cis_controls(control_prefix)
37
+ @profile['controls'] = @controls
38
+ @profile['sha256'] = Digest::SHA256.hexdigest @profile.to_s
39
+ @profile
40
+ end
41
+
42
+ private
43
+
44
+ def insert_json_metadata
45
+ @profile['name'] = @name
46
+ @profile['title'] = 'InSpec Profile'
47
+ @profile['maintainer'] = 'The Authors'
48
+ @profile['copyright'] = 'The Authors'
49
+ @profile['copyright_email'] = 'you@example.com'
50
+ @profile['license'] = 'Apache-2.0'
51
+ @profile['summary'] = 'An InSpec Compliance Profile'
52
+ @profile['version'] = '0.1.0'
53
+ @profile['supports'] = []
54
+ @profile['attributes'] = []
55
+ @profile['generator'] = {
56
+ 'name': 'inspec_tools',
57
+ 'version': VERSION
58
+ }
59
+ end
60
+
61
+ def parse_cis_controls(control_prefix)
62
+ cis2NistXls = Roo::Spreadsheet.open(File.join(File.dirname(__FILE__), "../data/NIST_Map_02052020_CIS_Controls_Version_7.1_Implementation_Groups_1.2.xlsx"))
63
+ cis2Nist = {}
64
+ cis2NistXls.sheet(3).each do |row|
65
+ if row[3].is_a? Numeric
66
+ cis2Nist[row[3].to_s] = row[0]
67
+ else
68
+ cis2Nist[row[2].to_s] = row[0] unless (row[2] == "") || (row[2].to_i.nil?)
69
+ end
70
+ end
71
+ [ 1, 2 ].each do |level|
72
+ @xlsx.sheet(level).each_row_streaming do |row|
73
+ if row[@mapping['control.id']].nil? || !/^\d+\.?\d*$/.match(row[@mapping['control.id']].formatted_value)
74
+ next
75
+ end
76
+ tag_pos = @mapping['control.tags']
77
+ control = {}
78
+ control['tags'] = {}
79
+ control['id'] = control_prefix + '-' + row[@mapping['control.id']].formatted_value unless @mapping['control.id'].nil? || row[@mapping['control.id']].nil?
80
+ control['title'] = row[@mapping['control.title']].formatted_value unless @mapping['control.title'].nil? || row[@mapping['control.title']].nil?
81
+ control['desc'] = ""
82
+ control['desc'] = row[@mapping['control.desc']].formatted_value unless row[@mapping['control.desc']].nil?
83
+ control['tags']['rationale'] = row[tag_pos['rationale']].formatted_value unless row[tag_pos['rationale']].nil?
84
+
85
+ control['tags']['severity'] = level == 1 ? 'medium' : 'high'
86
+ control['impact'] = Utils::InspecUtil.get_impact(control['tags']['severity'])
87
+ control['tags']['ref'] = row[@mapping['control.ref']].formatted_value unless @mapping['control.ref'].nil? || row[@mapping['control.ref']].nil?
88
+ control['tags']['cis_level'] = level unless level.nil?
89
+
90
+ # cis_control must be extracted from CIS control column via regex
91
+ cis_tags = row[tag_pos['cis_controls']].formatted_value.scan(/CONTROL:v(\d) (\d+)\.?(\d*)/)
92
+ control['tags']['cis_controls'] = []
93
+ control['tags']['nist'] = []
94
+ cis_tags.each do |cis_tag|
95
+ if cis_tag[2].nil? || cis_tag[2] == ""
96
+ control['tags']['cis_controls'] << cis_tag[1].to_s
97
+ control['tags']['nist'] << cis2Nist[cis_tag[1]]
98
+ else
99
+ control['tags']['cis_controls'] << cis_tag[1].to_s + "." + cis_tag[2].to_s
100
+ control['tags']['nist'] << cis2Nist[cis_tag[1].to_s + "." + cis_tag[2].to_s]
101
+ end
102
+ end
103
+ if not control['tags']['nist'].nil?
104
+ control['tags']['nist'] << "Rev_4"
105
+ end
106
+ control['tags']['cis_controls'] << "Rev_" + cis_tags.first[0] unless cis_tags[0].nil?
107
+
108
+ control['tags']['cis_rid'] = row[@mapping['control.id']].formatted_value unless @mapping['control.id'].nil? || row[@mapping['control.id']].nil?
109
+ control['tags']['check'] = row[tag_pos['check']].formatted_value unless tag_pos['check'].nil? || row[tag_pos['check']].nil?
110
+ control['tags']['fix'] = row[tag_pos['fix']].formatted_value unless tag_pos['fix'].nil? || row[tag_pos['fix']].nil?
111
+
112
+ @controls << control
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ libdir = File.dirname(__FILE__)
4
+ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
5
+
6
+ require 'inspec_tools/version'
7
+ require 'inspec_tools/plugin'
@@ -1,11 +1,41 @@
1
1
  require 'inspec/objects'
2
- require 'inspec/impact'
3
2
  require 'word_wrap'
4
3
  require 'pp'
5
4
  require 'uri'
6
5
  require 'net/http'
7
6
  require 'fileutils'
8
7
 
8
+ # Add rails style blank? method to all classes
9
+ class NilClass
10
+ def blank?
11
+ true
12
+ end
13
+ end
14
+
15
+ class String
16
+ def blank?
17
+ self.strip.empty?
18
+ end
19
+ end
20
+
21
+ class FalseClass
22
+ def blank?
23
+ true
24
+ end
25
+ end
26
+
27
+ class TrueClass
28
+ def blank?
29
+ false
30
+ end
31
+ end
32
+
33
+ class Object
34
+ def blank?
35
+ respond_to?(:empty?) ? empty? : !self
36
+ end
37
+ end
38
+
9
39
  # rubocop:disable Metrics/ClassLength
10
40
  # rubocop:disable Metrics/AbcSize
11
41
  # rubocop:disable Metrics/PerceivedComplexity
@@ -17,6 +47,15 @@ module Utils
17
47
  class InspecUtil
18
48
  DATA_NOT_FOUND_MESSAGE = 'N/A'.freeze
19
49
  WIDTH = 80
50
+ IMPACT_SCORES = {
51
+ "none" => 0.0,
52
+ "low" => 0.1,
53
+ "medium" => 0.4,
54
+ "high" => 0.7,
55
+ "critical" => 0.9,
56
+ }.freeze
57
+
58
+ class ImpactError; end
20
59
 
21
60
  def self.parse_data_for_xccdf(json)
22
61
  data = {}
@@ -97,10 +136,14 @@ module Utils
97
136
  data[c_id][:message] = []
98
137
  if control.key?('results')
99
138
  control['results'].each do |result|
139
+ if !result['backtrace'].nil?
140
+ result['status'] = 'error'
141
+ end
100
142
  data[c_id][:status].push(result['status'])
101
143
  data[c_id][:message].push("SKIPPED -- Test: #{result['code_desc']}\nMessage: #{result['skip_message']}\n") if result['status'] == 'skipped'
102
144
  data[c_id][:message].push("FAILED -- Test: #{result['code_desc']}\nMessage: #{result['message']}\n") if result['status'] == 'failed'
103
145
  data[c_id][:message].push("PASS -- #{result['code_desc']}\n") if result['status'] == 'passed'
146
+ data[c_id][:message].push("PROFILE_ERROR -- Test: #{result['code_desc']}\nMessage: #{result['backtrace']}\n") if result['status'] == 'error'
104
147
  end
105
148
  end
106
149
  if data[c_id][:impact].to_f.zero?
@@ -128,18 +171,18 @@ module Utils
128
171
 
129
172
  def self.control_status(control)
130
173
  status_list = control[:status].uniq
131
- if status_list.include?('failed')
174
+ if status_list.include?('error')
175
+ result = 'Profile_Error'
176
+ elsif control[:impact].to_f.zero?
177
+ result = 'Not_Applicable'
178
+ elsif status_list.include?('failed')
132
179
  result = 'Open'
133
- elsif status_list.include?('skipped')
134
- result = 'Not_Reviewed'
135
180
  elsif status_list.include?('passed')
136
181
  result = 'NotAFinding'
137
- else
138
- # result = 'Not_Tested' ## STIGViewer does not allow Not_Tested as a possible status.
182
+ elsif status_list.include?('skipped')
139
183
  result = 'Not_Reviewed'
140
- end
141
- if control[:impact].to_f.zero?
142
- result = 'Not_Applicable'
184
+ else
185
+ result = 'Profile_Error'
143
186
  end
144
187
  result
145
188
  end
@@ -149,7 +192,7 @@ module Utils
149
192
  result = "All Automated tests passed for the control \n\n #{control[:message].join}" if control_clk_status == 'NotAFinding'
150
193
  result = "Automated test skipped due to known accepted condition in the control : \n\n#{control[:message].join}" if control_clk_status == 'Not_Reviewed'
151
194
  result = "Justification: \n #{control[:message].join}" if control_clk_status == 'Not_Applicable'
152
- result = 'No test available for this control' if control_clk_status == 'Not_Tested'
195
+ result = 'No test available or some test errors occurred for this control' if control_clk_status == 'Profile_Error'
153
196
  result
154
197
  end
155
198
 
@@ -179,7 +222,13 @@ module Utils
179
222
  end
180
223
 
181
224
  def self.get_impact_string(impact)
182
- Inspec::Impact.string_from_impact(impact) unless impact.nil?
225
+ return if impact.nil?
226
+ value = impact.to_f
227
+ raise ImpactError, "'#{value}' is not a valid impact score. Valid impact scores: [0.0 - 1.0]." if value < 0 || value > 1
228
+
229
+ IMPACT_SCORES.reverse_each do |name, impact|
230
+ return name if value >= impact
231
+ end
183
232
  end
184
233
 
185
234
  def self.unpack_inspec_json(directory, inspec_json, separated, output_format)
@@ -204,36 +253,46 @@ module Utils
204
253
  private_class_method def self.generate_controls(inspec_json)
205
254
  controls = []
206
255
  inspec_json['controls'].each do |json_control|
207
- control = Inspec::Control.new
256
+ control = ::Inspec::Object::Control.new
208
257
  if (defined? control.desc).nil?
209
258
  control.descriptions[:default] = json_control['desc']
259
+ control.descriptions[:rationale] = json_control['tags']['rationale']
260
+ control.descriptions[:check] = json_control['tags']['check']
261
+ control.descriptions[:fix] = json_control['tags']['fix']
210
262
  else
211
263
  control.desc = json_control['desc']
212
264
  end
213
265
  control.id = json_control['id']
214
266
  control.title = json_control['title']
215
267
  control.impact = get_impact(json_control['impact'])
216
- control.add_tag(Inspec::Tag.new('severity', json_control['tags']['severity']))
217
- control.add_tag(Inspec::Tag.new('gtitle', json_control['tags']['gtitle']))
218
- control.add_tag(Inspec::Tag.new('satisfies', json_control['tags']['satisfies'])) if json_control['tags']['satisfies']
219
- control.add_tag(Inspec::Tag.new('gid', json_control['tags']['gid']))
220
- control.add_tag(Inspec::Tag.new('rid', json_control['tags']['rid']))
221
- control.add_tag(Inspec::Tag.new('stig_id', json_control['tags']['stig_id']))
222
- control.add_tag(Inspec::Tag.new('fix_id', json_control['tags']['fix_id']))
223
- control.add_tag(Inspec::Tag.new('cci', json_control['tags']['cci']))
224
- control.add_tag(Inspec::Tag.new('nist', json_control['tags']['nist']))
225
- control.add_tag(Inspec::Tag.new('false_negatives', json_control['tags']['false_negatives'])) if json_control['tags']['false_positives'] != ''
226
- control.add_tag(Inspec::Tag.new('false_positives', json_control['tags']['false_positives'])) if json_control['tags']['false_positives'] != ''
227
- control.add_tag(Inspec::Tag.new('documentable', json_control['tags']['documentable'])) if json_control['tags']['documentable'] != ''
228
- control.add_tag(Inspec::Tag.new('mitigations', json_control['tags']['mitigations'])) if json_control['tags']['mitigations'] != ''
229
- control.add_tag(Inspec::Tag.new('severity_override_guidance', json_control['tags']['documentable'])) if json_control['tags']['severity_override_guidance'] != ''
230
- control.add_tag(Inspec::Tag.new('potential_impacts', json_control['tags']['potential_impacts'])) if json_control['tags']['potential_impacts'] != ''
231
- control.add_tag(Inspec::Tag.new('third_party_tools', json_control['tags']['third_party_tools'])) if json_control['tags']['third_party_tools'] != ''
232
- control.add_tag(Inspec::Tag.new('mitigation_controls', json_control['tags']['mitigation_controls'])) if json_control['tags']['mitigation_controls'] != ''
233
- control.add_tag(Inspec::Tag.new('responsibility', json_control['tags']['responsibility'])) if json_control['tags']['responsibility'] != ''
234
- control.add_tag(Inspec::Tag.new('ia_controls', json_control['tags']['ia_controls'])) if json_control['tags']['ia_controls'] != ''
235
- control.add_tag(Inspec::Tag.new('check', json_control['tags']['check']))
236
- control.add_tag(Inspec::Tag.new('fix', json_control['tags']['fix']))
268
+
269
+ #json_control['tags'].each do |tag|
270
+ # control.add_tag(Inspec::Object::Tag.new(tag.key, tag.value)
271
+ #end
272
+
273
+ control.add_tag(::Inspec::Object::Tag.new('severity', json_control['tags']['severity']))
274
+ control.add_tag(::Inspec::Object::Tag.new('gtitle', json_control['tags']['gtitle']))
275
+ control.add_tag(::Inspec::Object::Tag.new('satisfies', json_control['tags']['satisfies'])) if json_control['tags']['satisfies']
276
+ control.add_tag(::Inspec::Object::Tag.new('gid', json_control['tags']['gid']))
277
+ control.add_tag(::Inspec::Object::Tag.new('rid', json_control['tags']['rid']))
278
+ control.add_tag(::Inspec::Object::Tag.new('stig_id', json_control['tags']['stig_id']))
279
+ control.add_tag(::Inspec::Object::Tag.new('fix_id', json_control['tags']['fix_id']))
280
+ control.add_tag(::Inspec::Object::Tag.new('cci', json_control['tags']['cci']))
281
+ control.add_tag(::Inspec::Object::Tag.new('nist', json_control['tags']['nist']))
282
+ control.add_tag(::Inspec::Object::Tag.new('cis_level', json_control['tags']['cis_level'])) unless json_control['tags']['cis_level'].blank?
283
+ control.add_tag(::Inspec::Object::Tag.new('cis_controls', json_control['tags']['cis_controls'])) unless json_control['tags']['cis_controls'].blank?
284
+ control.add_tag(::Inspec::Object::Tag.new('cis_rid', json_control['tags']['cis_rid'])) unless json_control['tags']['cis_rid'].blank?
285
+ control.add_tag(::Inspec::Object::Tag.new('ref', json_control['tags']['ref'])) unless json_control['tags']['ref'].blank?
286
+ control.add_tag(::Inspec::Object::Tag.new('false_negatives', json_control['tags']['false_negatives'])) unless json_control['tags']['false_positives'].blank?
287
+ control.add_tag(::Inspec::Object::Tag.new('false_positives', json_control['tags']['false_positives'])) unless json_control['tags']['false_positives'].blank?
288
+ control.add_tag(::Inspec::Object::Tag.new('documentable', json_control['tags']['documentable'])) unless json_control['tags']['documentable'].blank?
289
+ control.add_tag(::Inspec::Object::Tag.new('mitigations', json_control['tags']['mitigations'])) unless json_control['tags']['mitigations'].blank?
290
+ control.add_tag(::Inspec::Object::Tag.new('severity_override_guidance', json_control['tags']['documentable'])) unless json_control['tags']['severity_override_guidance'].blank?
291
+ control.add_tag(::Inspec::Object::Tag.new('potential_impacts', json_control['tags']['potential_impacts'])) unless json_control['tags']['potential_impacts'].blank?
292
+ control.add_tag(::Inspec::Object::Tag.new('third_party_tools', json_control['tags']['third_party_tools'])) unless json_control['tags']['third_party_tools'].blank?
293
+ control.add_tag(::Inspec::Object::Tag.new('mitigation_controls', json_control['tags']['mitigation_controls'])) unless json_control['tags']['mitigation_controls'].blank?
294
+ control.add_tag(::Inspec::Object::Tag.new('responsibility', json_control['tags']['responsibility'])) unless json_control['tags']['responsibility'].blank?
295
+ control.add_tag(::Inspec::Object::Tag.new('ia_controls', json_control['tags']['ia_controls'])) unless json_control['tags']['ia_controls'].blank?
237
296
 
238
297
  controls << control
239
298
  end
@@ -268,7 +327,7 @@ module Utils
268
327
  else
269
328
  license_content = inspec_json['license']
270
329
  end
271
- rescue StandardError => e
330
+ rescue StandardError => _e
272
331
  license_content = inspec_json['license']
273
332
  end
274
333
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inspec_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Thew
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2019-07-30 00:00:00.000000000 Z
14
+ date: 2020-03-23 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: colorize
@@ -28,25 +28,19 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: inspec
31
+ name: inspec-objects
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: '3.0'
37
- - - "<"
38
- - !ruby/object:Gem::Version
39
- version: '5.0'
36
+ version: '0'
40
37
  type: :runtime
41
38
  prerelease: false
42
39
  version_requirements: !ruby/object:Gem::Requirement
43
40
  requirements:
44
41
  - - ">="
45
42
  - !ruby/object:Gem::Version
46
- version: '3.0'
47
- - - "<"
48
- - !ruby/object:Gem::Version
49
- version: '5.0'
43
+ version: '0'
50
44
  - !ruby/object:Gem::Dependency
51
45
  name: nokogiri
52
46
  requirement: !ruby/object:Gem::Requirement
@@ -115,14 +109,14 @@ dependencies:
115
109
  requirements:
116
110
  - - "~>"
117
111
  - !ruby/object:Gem::Version
118
- version: '2.7'
112
+ version: '2.8'
119
113
  type: :runtime
120
114
  prerelease: false
121
115
  version_requirements: !ruby/object:Gem::Requirement
122
116
  requirements:
123
117
  - - "~>"
124
118
  - !ruby/object:Gem::Version
125
- version: '2.7'
119
+ version: '2.8'
126
120
  - !ruby/object:Gem::Dependency
127
121
  name: thor
128
122
  requirement: !ruby/object:Gem::Requirement
@@ -144,9 +138,6 @@ dependencies:
144
138
  - - "~>"
145
139
  - !ruby/object:Gem::Version
146
140
  version: '1.0'
147
- - - "~>"
148
- - !ruby/object:Gem::Version
149
- version: 1.0.0
150
141
  type: :runtime
151
142
  prerelease: false
152
143
  version_requirements: !ruby/object:Gem::Requirement
@@ -154,49 +145,46 @@ dependencies:
154
145
  - - "~>"
155
146
  - !ruby/object:Gem::Version
156
147
  version: '1.0'
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: 1.0.0
160
148
  - !ruby/object:Gem::Dependency
161
149
  name: bundler
162
150
  requirement: !ruby/object:Gem::Requirement
163
151
  requirements:
164
- - - "~>"
152
+ - - ">="
165
153
  - !ruby/object:Gem::Version
166
- version: '2.0'
154
+ version: '0'
167
155
  type: :development
168
156
  prerelease: false
169
157
  version_requirements: !ruby/object:Gem::Requirement
170
158
  requirements:
171
- - - "~>"
159
+ - - ">="
172
160
  - !ruby/object:Gem::Version
173
- version: '2.0'
161
+ version: '0'
174
162
  - !ruby/object:Gem::Dependency
175
163
  name: minitest
176
164
  requirement: !ruby/object:Gem::Requirement
177
165
  requirements:
178
- - - "~>"
166
+ - - ">="
179
167
  - !ruby/object:Gem::Version
180
- version: '5.0'
168
+ version: '0'
181
169
  type: :development
182
170
  prerelease: false
183
171
  version_requirements: !ruby/object:Gem::Requirement
184
172
  requirements:
185
- - - "~>"
173
+ - - ">="
186
174
  - !ruby/object:Gem::Version
187
- version: '5.0'
175
+ version: '0'
188
176
  - !ruby/object:Gem::Dependency
189
177
  name: pry
190
178
  requirement: !ruby/object:Gem::Requirement
191
179
  requirements:
192
- - - "~>"
180
+ - - ">="
193
181
  - !ruby/object:Gem::Version
194
182
  version: '0'
195
183
  type: :development
196
184
  prerelease: false
197
185
  version_requirements: !ruby/object:Gem::Requirement
198
186
  requirements:
199
- - - "~>"
187
+ - - ">="
200
188
  - !ruby/object:Gem::Version
201
189
  version: '0'
202
190
  - !ruby/object:Gem::Dependency
@@ -205,14 +193,42 @@ dependencies:
205
193
  requirements:
206
194
  - - ">="
207
195
  - !ruby/object:Gem::Version
208
- version: '11.1'
209
- type: :runtime
196
+ version: '0'
197
+ type: :development
198
+ prerelease: false
199
+ version_requirements: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ - !ruby/object:Gem::Dependency
205
+ name: codeclimate-test-reporter
206
+ requirement: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
211
+ type: :development
212
+ prerelease: false
213
+ version_requirements: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ - !ruby/object:Gem::Dependency
219
+ name: simplecov
220
+ requirement: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
225
+ type: :development
210
226
  prerelease: false
211
227
  version_requirements: !ruby/object:Gem::Requirement
212
228
  requirements:
213
229
  - - ">="
214
230
  - !ruby/object:Gem::Version
215
- version: '11.1'
231
+ version: '0'
216
232
  description: Converter utils for Inspec that can be included as a gem or used from
217
233
  the command line
218
234
  email:
@@ -228,12 +244,12 @@ files:
228
244
  - README.md
229
245
  - Rakefile
230
246
  - exe/inspec_tools
247
+ - lib/data/NIST_Map_02052020_CIS_Controls_Version_7.1_Implementation_Groups_1.2.xlsx
231
248
  - lib/data/NIST_Map_09212017B_CSC-CIS_Critical_Security_Controls_VER_6.1_Excel_9.1.2016.xlsx
232
249
  - lib/data/README.TXT
233
250
  - lib/data/U_CCI_List.xml
234
251
  - lib/data/attributes.yml
235
252
  - lib/data/cci2html.xsl
236
- - lib/data/debug_text
237
253
  - lib/data/mapping.yml
238
254
  - lib/data/stig.csv
239
255
  - lib/data/threshold.yaml
@@ -244,7 +260,6 @@ files:
244
260
  - lib/inspec_tools.rb
245
261
  - lib/inspec_tools/ckl.rb
246
262
  - lib/inspec_tools/cli.rb
247
- - lib/inspec_tools/command.rb
248
263
  - lib/inspec_tools/csv.rb
249
264
  - lib/inspec_tools/help.rb
250
265
  - lib/inspec_tools/help/compliance.md
@@ -257,23 +272,19 @@ files:
257
272
  - lib/inspec_tools/help/xccdf2inspec.md
258
273
  - lib/inspec_tools/inspec.rb
259
274
  - lib/inspec_tools/pdf.rb
275
+ - lib/inspec_tools/plugin.rb
276
+ - lib/inspec_tools/plugin_cli.rb
260
277
  - lib/inspec_tools/summary.rb
261
278
  - lib/inspec_tools/version.rb
262
279
  - lib/inspec_tools/xccdf.rb
280
+ - lib/inspec_tools/xlsx.rb
281
+ - lib/inspec_tools_plugin.rb
263
282
  - lib/utilities/csv_util.rb
264
283
  - lib/utilities/extract_nist_cis_mapping.rb
265
284
  - lib/utilities/extract_pdf_text.rb
266
285
  - lib/utilities/inspec_util.rb
267
286
  - lib/utilities/parser.rb
268
287
  - lib/utilities/text_cleaner.rb
269
- - test/unit/inspec_tools/csv_test.rb
270
- - test/unit/inspec_tools/inspec_test.rb
271
- - test/unit/inspec_tools/pdf_test.rb
272
- - test/unit/inspec_tools/summary_test.rb
273
- - test/unit/inspec_tools/xccdf_test.rb
274
- - test/unit/inspec_tools_test.rb
275
- - test/unit/test_helper.rb
276
- - test/unit/utils/inspec_util_test.rb
277
288
  homepage: https://github.com/mitre/inspec_tools
278
289
  licenses:
279
290
  - Apache-2.0
@@ -285,9 +296,9 @@ require_paths:
285
296
  - lib
286
297
  required_ruby_version: !ruby/object:Gem::Requirement
287
298
  requirements:
288
- - - ">="
299
+ - - "~>"
289
300
  - !ruby/object:Gem::Version
290
- version: '0'
301
+ version: '2.3'
291
302
  required_rubygems_version: !ruby/object:Gem::Requirement
292
303
  requirements:
293
304
  - - ">="
@@ -298,12 +309,4 @@ rubygems_version: 3.0.3
298
309
  signing_key:
299
310
  specification_version: 4
300
311
  summary: Converter utils for Inspec
301
- test_files:
302
- - test/unit/inspec_tools/csv_test.rb
303
- - test/unit/inspec_tools/inspec_test.rb
304
- - test/unit/inspec_tools/pdf_test.rb
305
- - test/unit/inspec_tools/summary_test.rb
306
- - test/unit/inspec_tools/xccdf_test.rb
307
- - test/unit/inspec_tools_test.rb
308
- - test/unit/test_helper.rb
309
- - test/unit/utils/inspec_util_test.rb
312
+ test_files: []