abide_dev_utils 0.4.2 → 0.8.0

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.
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'