abide_dev_utils 0.5.0 → 0.8.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.
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.5.0
4
+ version: 0.8.1
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-06-16 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
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
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'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: bundler
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +192,20 @@ dependencies:
164
192
  - - ">="
165
193
  - !ruby/object:Gem::Version
166
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'
167
209
  - !ruby/object:Gem::Dependency
168
210
  name: rspec
169
211
  requirement: !ruby/object:Gem::Requirement
@@ -262,9 +304,10 @@ dependencies:
262
304
  - - "~>"
263
305
  - !ruby/object:Gem::Version
264
306
  version: '1.8'
265
- description: Provides a CLI with helpful utilities for developing Abide
307
+ description: Provides a CLI with helpful utilities for developing compliance Puppet
308
+ code
266
309
  email:
267
- - hsnodgrass3@gmail.com
310
+ - abide-team@puppet.com
268
311
  executables:
269
312
  - abide
270
313
  extensions: []
@@ -276,6 +319,7 @@ files:
276
319
  - ".rubocop.yml"
277
320
  - ".rubocop_todo.yml"
278
321
  - CHANGELOG.md
322
+ - CODEOWNERS
279
323
  - Dockerfile
280
324
  - Gemfile
281
325
  - LICENSE.txt
@@ -286,6 +330,7 @@ files:
286
330
  - bin/console
287
331
  - bin/setup
288
332
  - exe/abide
333
+ - itests.rb
289
334
  - lib/abide_dev_utils.rb
290
335
  - lib/abide_dev_utils/cli.rb
291
336
  - lib/abide_dev_utils/cli/abstract.rb
@@ -299,31 +344,35 @@ files:
299
344
  - lib/abide_dev_utils/constants.rb
300
345
  - lib/abide_dev_utils/errors.rb
301
346
  - lib/abide_dev_utils/errors/base.rb
347
+ - lib/abide_dev_utils/errors/comply.rb
348
+ - lib/abide_dev_utils/errors/gcloud.rb
302
349
  - lib/abide_dev_utils/errors/general.rb
303
350
  - lib/abide_dev_utils/errors/jira.rb
304
351
  - lib/abide_dev_utils/errors/ppt.rb
305
352
  - lib/abide_dev_utils/errors/xccdf.rb
306
353
  - lib/abide_dev_utils/files.rb
354
+ - lib/abide_dev_utils/gcloud.rb
307
355
  - lib/abide_dev_utils/jira.rb
356
+ - lib/abide_dev_utils/mixins.rb
308
357
  - lib/abide_dev_utils/output.rb
309
358
  - lib/abide_dev_utils/ppt.rb
359
+ - lib/abide_dev_utils/ppt/api.rb
360
+ - lib/abide_dev_utils/ppt/class_utils.rb
310
361
  - lib/abide_dev_utils/ppt/coverage.rb
311
362
  - lib/abide_dev_utils/ppt/new_obj.rb
363
+ - lib/abide_dev_utils/ppt/score_module.rb
312
364
  - lib/abide_dev_utils/prompt.rb
313
365
  - lib/abide_dev_utils/resources/generic_spec.erb
314
- - lib/abide_dev_utils/utils/general.rb
315
366
  - lib/abide_dev_utils/validate.rb
316
367
  - lib/abide_dev_utils/version.rb
317
368
  - lib/abide_dev_utils/xccdf.rb
318
- - lib/abide_dev_utils/xccdf/cis.rb
319
- - lib/abide_dev_utils/xccdf/cis/hiera.rb
320
- homepage: https://github.com/hsnodgrass/abide_dev_utils
369
+ homepage: https://github.com/puppetlabs/abide_dev_utils
321
370
  licenses:
322
371
  - MIT
323
372
  metadata:
324
- homepage_uri: https://github.com/hsnodgrass/abide_dev_utils
325
- source_code_uri: https://github.com/hsnodgrass/abide_dev_utils
326
- 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
327
376
  post_install_message:
328
377
  rdoc_options: []
329
378
  require_paths:
@@ -332,15 +381,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
332
381
  requirements:
333
382
  - - ">="
334
383
  - !ruby/object:Gem::Version
335
- version: 2.5.0
384
+ version: 2.7.0
336
385
  required_rubygems_version: !ruby/object:Gem::Requirement
337
386
  requirements:
338
387
  - - ">="
339
388
  - !ruby/object:Gem::Version
340
389
  version: '0'
341
390
  requirements: []
342
- rubygems_version: 3.0.9
391
+ rubygems_version: 3.1.4
343
392
  signing_key:
344
393
  specification_version: 4
345
- summary: Helper utilities for developing Abide
394
+ summary: Helper utilities for developing compliance Puppet code
346
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'