abide_dev_utils 0.4.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.rubocop.yml +1 -1
  4. data/CODEOWNERS +1 -0
  5. data/README.md +34 -0
  6. data/abide_dev_utils.gemspec +11 -7
  7. data/itests.rb +138 -0
  8. data/lib/abide_dev_utils/cli/abstract.rb +2 -0
  9. data/lib/abide_dev_utils/cli/comply.rb +115 -0
  10. data/lib/abide_dev_utils/cli/jira.rb +2 -2
  11. data/lib/abide_dev_utils/cli/puppet.rb +136 -11
  12. data/lib/abide_dev_utils/cli/xccdf.rb +26 -7
  13. data/lib/abide_dev_utils/cli.rb +2 -0
  14. data/lib/abide_dev_utils/comply.rb +498 -0
  15. data/lib/abide_dev_utils/config.rb +19 -0
  16. data/lib/abide_dev_utils/errors/comply.rb +17 -0
  17. data/lib/abide_dev_utils/errors/gcloud.rb +27 -0
  18. data/lib/abide_dev_utils/errors/general.rb +5 -0
  19. data/lib/abide_dev_utils/errors/ppt.rb +12 -0
  20. data/lib/abide_dev_utils/errors/xccdf.rb +8 -0
  21. data/lib/abide_dev_utils/errors.rb +2 -0
  22. data/lib/abide_dev_utils/gcloud.rb +22 -0
  23. data/lib/abide_dev_utils/jira.rb +15 -0
  24. data/lib/abide_dev_utils/mixins.rb +16 -0
  25. data/lib/abide_dev_utils/output.rb +7 -3
  26. data/lib/abide_dev_utils/ppt/api.rb +219 -0
  27. data/lib/abide_dev_utils/ppt/class_utils.rb +184 -0
  28. data/lib/abide_dev_utils/ppt/coverage.rb +2 -3
  29. data/lib/abide_dev_utils/ppt/score_module.rb +162 -0
  30. data/lib/abide_dev_utils/ppt.rb +138 -49
  31. data/lib/abide_dev_utils/validate.rb +5 -1
  32. data/lib/abide_dev_utils/version.rb +1 -1
  33. data/lib/abide_dev_utils/xccdf.rb +567 -9
  34. data/lib/abide_dev_utils.rb +1 -0
  35. metadata +82 -17
  36. data/lib/abide_dev_utils/utils/general.rb +0 -9
  37. data/lib/abide_dev_utils/xccdf/cis/hiera.rb +0 -161
  38. data/lib/abide_dev_utils/xccdf/cis.rb +0 -3
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abide_dev_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
- - Heston Snodgrass
7
+ - abide-team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-05 00:00:00.000000000 Z
11
+ date: 2021-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '6.19'
47
+ version: '6.23'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '6.19'
54
+ version: '6.23'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: jira-ruby
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,48 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.11'
83
+ - !ruby/object:Gem::Dependency
84
+ name: selenium-webdriver
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 4.0.0.beta4
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 4.0.0.beta4
97
+ - !ruby/object:Gem::Dependency
98
+ name: google-cloud-storage
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.34'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.34'
111
+ - !ruby/object:Gem::Dependency
112
+ name: hashdiff
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: bundler
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +192,20 @@ dependencies:
150
192
  - - ">="
151
193
  - !ruby/object:Gem::Version
152
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: pry
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
153
209
  - !ruby/object:Gem::Dependency
154
210
  name: rspec
155
211
  requirement: !ruby/object:Gem::Requirement
@@ -248,9 +304,10 @@ dependencies:
248
304
  - - "~>"
249
305
  - !ruby/object:Gem::Version
250
306
  version: '1.8'
251
- description: Provides a CLI with helpful utilities for developing Abide
307
+ description: Provides a CLI with helpful utilities for developing compliance Puppet
308
+ code
252
309
  email:
253
- - hsnodgrass3@gmail.com
310
+ - abide-team@puppet.com
254
311
  executables:
255
312
  - abide
256
313
  extensions: []
@@ -262,6 +319,7 @@ files:
262
319
  - ".rubocop.yml"
263
320
  - ".rubocop_todo.yml"
264
321
  - CHANGELOG.md
322
+ - CODEOWNERS
265
323
  - Dockerfile
266
324
  - Gemfile
267
325
  - LICENSE.txt
@@ -272,42 +330,49 @@ files:
272
330
  - bin/console
273
331
  - bin/setup
274
332
  - exe/abide
333
+ - itests.rb
275
334
  - lib/abide_dev_utils.rb
276
335
  - lib/abide_dev_utils/cli.rb
277
336
  - lib/abide_dev_utils/cli/abstract.rb
337
+ - lib/abide_dev_utils/cli/comply.rb
278
338
  - lib/abide_dev_utils/cli/jira.rb
279
339
  - lib/abide_dev_utils/cli/puppet.rb
280
340
  - lib/abide_dev_utils/cli/test.rb
281
341
  - lib/abide_dev_utils/cli/xccdf.rb
342
+ - lib/abide_dev_utils/comply.rb
282
343
  - lib/abide_dev_utils/config.rb
283
344
  - lib/abide_dev_utils/constants.rb
284
345
  - lib/abide_dev_utils/errors.rb
285
346
  - lib/abide_dev_utils/errors/base.rb
347
+ - lib/abide_dev_utils/errors/comply.rb
348
+ - lib/abide_dev_utils/errors/gcloud.rb
286
349
  - lib/abide_dev_utils/errors/general.rb
287
350
  - lib/abide_dev_utils/errors/jira.rb
288
351
  - lib/abide_dev_utils/errors/ppt.rb
289
352
  - lib/abide_dev_utils/errors/xccdf.rb
290
353
  - lib/abide_dev_utils/files.rb
354
+ - lib/abide_dev_utils/gcloud.rb
291
355
  - lib/abide_dev_utils/jira.rb
356
+ - lib/abide_dev_utils/mixins.rb
292
357
  - lib/abide_dev_utils/output.rb
293
358
  - lib/abide_dev_utils/ppt.rb
359
+ - lib/abide_dev_utils/ppt/api.rb
360
+ - lib/abide_dev_utils/ppt/class_utils.rb
294
361
  - lib/abide_dev_utils/ppt/coverage.rb
295
362
  - lib/abide_dev_utils/ppt/new_obj.rb
363
+ - lib/abide_dev_utils/ppt/score_module.rb
296
364
  - lib/abide_dev_utils/prompt.rb
297
365
  - lib/abide_dev_utils/resources/generic_spec.erb
298
- - lib/abide_dev_utils/utils/general.rb
299
366
  - lib/abide_dev_utils/validate.rb
300
367
  - lib/abide_dev_utils/version.rb
301
368
  - lib/abide_dev_utils/xccdf.rb
302
- - lib/abide_dev_utils/xccdf/cis.rb
303
- - lib/abide_dev_utils/xccdf/cis/hiera.rb
304
- homepage: https://github.com/hsnodgrass/abide_dev_utils
369
+ homepage: https://github.com/puppetlabs/abide_dev_utils
305
370
  licenses:
306
371
  - MIT
307
372
  metadata:
308
- homepage_uri: https://github.com/hsnodgrass/abide_dev_utils
309
- source_code_uri: https://github.com/hsnodgrass/abide_dev_utils
310
- changelog_uri: https://github.com/hsnodgrass/abide_dev_utils
373
+ homepage_uri: https://github.com/puppetlabs/abide_dev_utils
374
+ source_code_uri: https://github.com/puppetlabs/abide_dev_utils
375
+ changelog_uri: https://github.com/puppetlabs/abide_dev_utils
311
376
  post_install_message:
312
377
  rdoc_options: []
313
378
  require_paths:
@@ -316,15 +381,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
316
381
  requirements:
317
382
  - - ">="
318
383
  - !ruby/object:Gem::Version
319
- version: 2.5.0
384
+ version: 2.7.0
320
385
  required_rubygems_version: !ruby/object:Gem::Requirement
321
386
  requirements:
322
387
  - - ">="
323
388
  - !ruby/object:Gem::Version
324
389
  version: '0'
325
390
  requirements: []
326
- rubygems_version: 3.0.9
391
+ rubygems_version: 3.1.4
327
392
  signing_key:
328
393
  specification_version: 4
329
- summary: Helper utilities for developing Abide
394
+ summary: Helper utilities for developing compliance Puppet code
330
395
  test_files: []
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module AbideDevUtils
4
- module Utils
5
- def self.deep_copy(hash_obj)
6
- Marshal.load(Marshal.dump(hash_obj))
7
- end
8
- end
9
- end
@@ -1,161 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yaml'
4
- require 'nokogiri'
5
- require 'abide_dev_utils/errors'
6
-
7
- module AbideDevUtils
8
- module XCCDF
9
- module CIS
10
- # Creates a Hiera structure by parsing a CIS XCCDF benchmark
11
- # @!attribute [r] title
12
- # @!attribute [r] version
13
- # @!attribute [r] yaml_title
14
- class Hiera
15
- CONTROL_PREFIX = /^[\d.]+_/.freeze
16
- UNDERSCORED = /(\s|\(|\)|-|\.)/.freeze
17
- XPATHS = {
18
- benchmark: {
19
- all: 'xccdf:Benchmark',
20
- title: 'xccdf:Benchmark/xccdf:title',
21
- version: 'xccdf:Benchmark/xccdf:version'
22
- },
23
- profiles: {
24
- all: 'xccdf:Benchmark/xccdf:Profile',
25
- relative_title: './xccdf:title',
26
- relative_select: './xccdf:select'
27
- }
28
- }.freeze
29
- NEXT_GEN_WINDOWS = /(next_generation_windows_security)/.freeze
30
-
31
- attr_reader :title, :version
32
-
33
- # Creates a new Hiera object
34
- # @param xccdf_file [String] path to an XCCDF file
35
- # @param parent_key_prefix [String] a string to be prepended to the
36
- # top-level key in the Hiera structure. Useful for namespacing
37
- # the top-level key.
38
- def initialize(xccdf_file, parent_key_prefix: nil, num: false)
39
- @doc = parse(xccdf_file)
40
- @title = xpath(XPATHS[:benchmark][:title]).children.to_s
41
- @version = xpath(XPATHS[:benchmark][:version]).children.to_s
42
- @profiles = xpath(XPATHS[:profiles][:all])
43
- @parent_key = make_parent_key(@doc, parent_key_prefix)
44
- @hash = make_hash(@doc, @parent_key, num)
45
- end
46
-
47
- def yaml_title
48
- normalize_str(@title)
49
- end
50
-
51
- # Convert the Hiera object to a hash
52
- # @return [Hash]
53
- def to_h
54
- @hash
55
- end
56
-
57
- # Convert the Hiera object to a string
58
- # @return [String]
59
- def to_s
60
- @hash.inspect
61
- end
62
-
63
- # Convert the Hiera object to YAML string
64
- # @return [String] YAML-formatted string
65
- def to_yaml
66
- yh = @hash[@parent_key.to_sym].transform_keys do |k|
67
- "#{@parent_key}::#{k}"
68
- end
69
- yh.to_yaml
70
- end
71
-
72
- # If a method gets called on the Hiera object which is not defined,
73
- # this sends that method call to hash, then doc, then super.
74
- def method_missing(method, *args, &block)
75
- return true if ['exist?', 'exists?'].include?(method.to_s)
76
-
77
- return @hash.send(method, *args, &block) if @hash.respond_to?(method)
78
-
79
- return @doc.send(method, *args, &block) if @doc.respond_to?(method)
80
-
81
- super(method, *args, &block)
82
- end
83
-
84
- # Checks the respond_to? of hash, doc, or super
85
- def respond_to_missing?(method_name, include_private = false)
86
- return true if ['exist?', 'exists?'].include?(method_name.to_s)
87
-
88
- @hash || @doc || super
89
- end
90
-
91
- private
92
-
93
- attr_accessor :doc, :hash, :parent_key, :profiles
94
-
95
- # Accepts a path to an xccdf xml file and returns a parsed Nokogiri object of the file
96
- # @param xccdf_file [String] path to an xccdf xml file
97
- # @return [Nokogiri::Node] A Nokogiri node object of the XML document
98
- def parse(xccdf_file)
99
- raise AbideDevUtils::Errors::FileNotFoundError, xccdf_file unless File.file?(xccdf_file)
100
-
101
- Nokogiri.XML(File.open(xccdf_file))
102
- end
103
-
104
- def make_hash(doc, parent_key, num)
105
- hash = { parent_key.to_sym => { title: @title, version: @version } }
106
- profiles = doc.xpath('xccdf:Benchmark/xccdf:Profile')
107
- profiles.each do |p|
108
- title = normalize_profile_name(p.xpath('./xccdf:title').children.to_s)
109
- hash[parent_key.to_sym][title.to_sym] = []
110
- selects = p.xpath('./xccdf:select')
111
- selects.each do |s|
112
- hash[parent_key.to_sym][title.to_sym] << normalize_ctrl_name(s['idref'].to_s, num)
113
- end
114
- end
115
- hash
116
- end
117
-
118
- def normalize_str(str)
119
- nstr = str.downcase
120
- nstr.gsub!(/[^a-z0-9]$/, '')
121
- nstr.gsub!(/^[^a-z]/, '')
122
- nstr.gsub!(/^(l1_|l2_|ng_)/, '')
123
- nstr.delete!('(/|\\)')
124
- nstr.gsub!(UNDERSCORED, '_')
125
- nstr
126
- end
127
-
128
- def normalize_profile_name(prof)
129
- prof_name = normalize_str("profile_#{prof}")
130
- prof_name.gsub!(NEXT_GEN_WINDOWS, 'ngws')
131
- prof_name
132
- end
133
-
134
- def normalize_ctrl_name(ctrl, num)
135
- return num_normalize_ctrl(ctrl) if num
136
-
137
- name_normalize_ctrl(ctrl)
138
- end
139
-
140
- def name_normalize_ctrl(ctrl)
141
- new_ctrl = ctrl.split('benchmarks_rule_')[-1].gsub(CONTROL_PREFIX, '')
142
- normalize_str(new_ctrl)
143
- end
144
-
145
- def num_normalize_ctrl(ctrl)
146
- part = ctrl.split('benchmarks_rule_')[-1]
147
- numpart = CONTROL_PREFIX.match(part).to_s.chop.gsub(UNDERSCORED, '_')
148
- "c#{numpart}"
149
- end
150
-
151
- def make_parent_key(doc, prefix)
152
- doc_title = normalize_str(doc.xpath(XPATHS[:benchmark][:title]).children.to_s)
153
- return doc_title if prefix.nil?
154
-
155
- sepped_prefix = prefix.end_with?('::') ? prefix : "#{prefix}::"
156
- "#{sepped_prefix.chomp}#{doc_title}"
157
- end
158
- end
159
- end
160
- end
161
- end
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'abide_dev_utils/xccdf/cis/hiera'