inspec_tools 1.4.2 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []