abide_dev_utils 0.15.0 → 0.16.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +28 -15
- data/lib/abide_dev_utils/cem/generate/reference.rb +75 -6
- data/lib/abide_dev_utils/cli/cem.rb +6 -0
- data/lib/abide_dev_utils/cli/jira.rb +1 -1
- data/lib/abide_dev_utils/jira.rb +1 -4
- data/lib/abide_dev_utils/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ba88038da5800b45085201557c28a7d4096027230083e0c8d5a811a7fd1de5a
|
4
|
+
data.tar.gz: 78da6fd7887fdb50a7de4505b4dd95b6fa2e24400dc6b5419dcc44aaa1f15d24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e1577583c8fcc597f75e02d3ef5edee126984f8daaea8fc98741c718c0254044767189acf24e0e21ba2b60607f4042c1f0c52be934dbc129d270008042f8bf5
|
7
|
+
data.tar.gz: eb8b1038e223efeec1f7a2b3d0d0ee0f04cba49f385b58c8de5e1dfe8c2d935dac0d760faf65d8ab45f0b539f4729ea9195926d0cce1d4fe294c19f6e426e879
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
abide_dev_utils (0.
|
4
|
+
abide_dev_utils (0.16.1)
|
5
5
|
cmdparse (~> 3.0)
|
6
6
|
facterdb (>= 1.21)
|
7
7
|
google-cloud-storage (~> 1.34)
|
@@ -17,7 +17,7 @@ GEM
|
|
17
17
|
remote: https://rubygems.org/
|
18
18
|
specs:
|
19
19
|
CFPropertyList (2.3.6)
|
20
|
-
activesupport (7.0.
|
20
|
+
activesupport (7.0.7.2)
|
21
21
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
22
22
|
i18n (>= 1.6, < 2)
|
23
23
|
minitest (>= 5.1)
|
@@ -29,15 +29,15 @@ GEM
|
|
29
29
|
console (~> 1.10)
|
30
30
|
nio4r (~> 2.3)
|
31
31
|
timers (~> 4.1)
|
32
|
-
async-http (0.
|
32
|
+
async-http (0.60.2)
|
33
33
|
async (>= 1.25)
|
34
34
|
async-io (>= 1.28)
|
35
35
|
async-pool (>= 0.2)
|
36
|
-
protocol-http (~> 0.
|
37
|
-
protocol-http1 (~> 0.
|
38
|
-
protocol-http2 (~> 0.
|
39
|
-
traces (
|
40
|
-
async-http-faraday (0.
|
36
|
+
protocol-http (~> 0.24.0)
|
37
|
+
protocol-http1 (~> 0.15.0)
|
38
|
+
protocol-http2 (~> 0.15.0)
|
39
|
+
traces (>= 0.10.0)
|
40
|
+
async-http-faraday (0.12.0)
|
41
41
|
async-http (~> 0.42)
|
42
42
|
faraday
|
43
43
|
async-io (1.33.0)
|
@@ -120,7 +120,7 @@ GEM
|
|
120
120
|
hiera (3.12.0)
|
121
121
|
hocon (1.4.0)
|
122
122
|
httpclient (2.8.3)
|
123
|
-
i18n (1.
|
123
|
+
i18n (1.14.1)
|
124
124
|
concurrent-ruby (~> 1.0)
|
125
125
|
jgrep (1.5.4)
|
126
126
|
jira-ruby (2.3.0)
|
@@ -133,12 +133,14 @@ GEM
|
|
133
133
|
memoist (0.16.2)
|
134
134
|
method_source (1.0.0)
|
135
135
|
mini_mime (1.1.2)
|
136
|
-
minitest (5.
|
136
|
+
minitest (5.19.0)
|
137
137
|
multi_json (1.15.0)
|
138
138
|
multipart-post (2.3.0)
|
139
139
|
nio4r (2.5.8)
|
140
140
|
nokogiri (1.15.2-x86_64-darwin)
|
141
141
|
racc (~> 1.4)
|
142
|
+
nokogiri (1.15.2-x86_64-linux)
|
143
|
+
racc (~> 1.4)
|
142
144
|
oauth (0.6.2)
|
143
145
|
snaky_hash (~> 2.0)
|
144
146
|
version_gem (~> 1.1)
|
@@ -150,16 +152,27 @@ GEM
|
|
150
152
|
parser (3.1.2.0)
|
151
153
|
ast (~> 2.4.1)
|
152
154
|
protocol-hpack (1.4.2)
|
153
|
-
protocol-http (0.
|
154
|
-
protocol-http1 (0.
|
155
|
+
protocol-http (0.24.7)
|
156
|
+
protocol-http1 (0.15.1)
|
155
157
|
protocol-http (~> 0.22)
|
156
|
-
protocol-http2 (0.
|
158
|
+
protocol-http2 (0.15.1)
|
157
159
|
protocol-hpack (~> 1.4)
|
158
160
|
protocol-http (~> 0.18)
|
159
161
|
pry (0.14.1)
|
160
162
|
coderay (~> 1.1)
|
161
163
|
method_source (~> 1.0)
|
162
164
|
public_suffix (4.0.7)
|
165
|
+
puppet (7.24.0)
|
166
|
+
concurrent-ruby (~> 1.0, < 1.2.0)
|
167
|
+
deep_merge (~> 1.0)
|
168
|
+
facter (> 2.0.1, < 5)
|
169
|
+
fast_gettext (>= 1.1, < 3)
|
170
|
+
hiera (>= 3.2.1, < 4)
|
171
|
+
locale (~> 2.1)
|
172
|
+
multi_json (~> 1.10)
|
173
|
+
puppet-resource_api (~> 1.5)
|
174
|
+
scanf (~> 1.0)
|
175
|
+
semantic_puppet (~> 1.0)
|
163
176
|
puppet (7.24.0-universal-darwin)
|
164
177
|
CFPropertyList (~> 2.2)
|
165
178
|
concurrent-ruby (~> 1.0, < 1.2.0)
|
@@ -241,7 +254,7 @@ GEM
|
|
241
254
|
version_gem (~> 1.1, >= 1.1.1)
|
242
255
|
thor (1.2.2)
|
243
256
|
timers (4.3.3)
|
244
|
-
traces (0.
|
257
|
+
traces (0.11.1)
|
245
258
|
trailblazer-option (0.1.2)
|
246
259
|
tzinfo (2.0.6)
|
247
260
|
concurrent-ruby (~> 1.0)
|
@@ -273,4 +286,4 @@ DEPENDENCIES
|
|
273
286
|
rubocop-rspec (~> 2.1)
|
274
287
|
|
275
288
|
BUNDLED WITH
|
276
|
-
2.
|
289
|
+
2.4.19
|
@@ -85,7 +85,7 @@ module AbideDevUtils
|
|
85
85
|
next if benchmark.framework == 'stig' && control.id_map_type != 'vulnid'
|
86
86
|
|
87
87
|
control_md = ControlMarkdown.new(control, @md, @strings, @module_name, benchmark.framework, opts: @opts)
|
88
|
-
control_md.generate!
|
88
|
+
control_md.generate! if control_md.verify_profile_and_level_selections
|
89
89
|
progress_bar.increment unless @opts[:quiet]
|
90
90
|
rescue StandardError => e
|
91
91
|
raise "Failed to generate markdown for control #{control.id}. Original message: #{e.message}"
|
@@ -248,6 +248,8 @@ module AbideDevUtils
|
|
248
248
|
@framework = framework
|
249
249
|
@formatter = formatter.nil? ? TypeExprValueFormatter : formatter
|
250
250
|
@opts = opts
|
251
|
+
@valid_level = []
|
252
|
+
@valid_profile = []
|
251
253
|
@control_data = {}
|
252
254
|
end
|
253
255
|
|
@@ -262,6 +264,43 @@ module AbideDevUtils
|
|
262
264
|
resource_reference_builder
|
263
265
|
end
|
264
266
|
|
267
|
+
# This function act as a filter for controls based on the profile and level selections.
|
268
|
+
# There are few scanarios that can happen:
|
269
|
+
# 1. If no selections are made for profile or level, then all profiles and levels of control will be selected.
|
270
|
+
# 2. If selections are made for profile, then only the selected profile and all levels of control will be selected.
|
271
|
+
# 3. If selections are made for level, then only the selected level and all profiles of control will be selected.
|
272
|
+
# This function adds in some runtime overhead because we're checking each control's level and profile which is
|
273
|
+
# what we're going to be doing later when building the level and profile markdown, but this is
|
274
|
+
# necessary to ensure that the reference.md is generated the way we want it to be.
|
275
|
+
def verify_profile_and_level_selections
|
276
|
+
return true if @opts[:select_profile].nil? && @opts[:select_level].nil?
|
277
|
+
|
278
|
+
if @opts[:select_profile].nil? && !@opts[:select_level].nil?
|
279
|
+
@control.levels.each do |level|
|
280
|
+
@valid_level << level if select_control_level(level)
|
281
|
+
end
|
282
|
+
|
283
|
+
return true unless @valid_level.empty?
|
284
|
+
elsif !@opts[:select_profile].nil? && @opts[:select_level].nil?
|
285
|
+
@control.profiles.each do |profile|
|
286
|
+
@valid_profile << profile if select_control_profile(profile)
|
287
|
+
end
|
288
|
+
|
289
|
+
return true unless @valid_profile.empty?
|
290
|
+
elsif !@opts[:select_profile].nil? && !@opts[:select_level].nil?
|
291
|
+
@control.levels.each do |level|
|
292
|
+
@valid_level << level if select_control_level(level)
|
293
|
+
end
|
294
|
+
|
295
|
+
@control.profiles.each do |profile|
|
296
|
+
@valid_profile << profile if select_control_profile(profile)
|
297
|
+
end
|
298
|
+
|
299
|
+
# As long as there are valid profiles and levels for the control at this stage, all is good
|
300
|
+
!@valid_level.empty? && !@valid_profile.empty?
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
265
304
|
private
|
266
305
|
|
267
306
|
def heading_builder
|
@@ -340,18 +379,36 @@ module AbideDevUtils
|
|
340
379
|
def control_levels_builder
|
341
380
|
return unless @control.levels
|
342
381
|
|
382
|
+
# @valid_level is populated in verify_profile_and_level_selections from the fact that we've given
|
383
|
+
# the generator a list of levels we want to use. If we didn't give it a list of levels, then we
|
384
|
+
# want to use all of the levels that the control supports from @control.
|
343
385
|
@md.add_ul('Supported Levels:')
|
344
|
-
@
|
345
|
-
@
|
386
|
+
if @valid_level.empty?
|
387
|
+
@control.levels.each do |l|
|
388
|
+
@md.add_ul(@md.code(l), indent: 1)
|
389
|
+
end
|
390
|
+
else
|
391
|
+
@valid_level.each do |l|
|
392
|
+
@md.add_ul(@md.code(l), indent: 1)
|
393
|
+
end
|
346
394
|
end
|
347
395
|
end
|
348
396
|
|
349
397
|
def control_profiles_builder
|
350
398
|
return unless @control.profiles
|
351
399
|
|
400
|
+
# @valid_profile is populated in verify_profile_and_level_selections from the fact that we've given
|
401
|
+
# the generator a list of profiles we want to use. If we didn't give it a list of profiles, then we
|
402
|
+
# want to use all of the profiles that the control supports from @control.
|
352
403
|
@md.add_ul('Supported Profiles:')
|
353
|
-
@
|
354
|
-
@
|
404
|
+
if @valid_profile.empty?
|
405
|
+
@control.profiles.each do |l|
|
406
|
+
@md.add_ul(@md.code(l), indent: 1)
|
407
|
+
end
|
408
|
+
else
|
409
|
+
@valid_profile.each do |l|
|
410
|
+
@md.add_ul(@md.code(l), indent: 1)
|
411
|
+
end
|
355
412
|
end
|
356
413
|
end
|
357
414
|
|
@@ -364,6 +421,18 @@ module AbideDevUtils
|
|
364
421
|
end
|
365
422
|
end
|
366
423
|
|
424
|
+
# Function that returns true if the profile is in the list of profiles that we want to use.
|
425
|
+
# @param profile [String] the profile to filter
|
426
|
+
def select_control_profile(profile)
|
427
|
+
@opts[:select_profile].include? profile
|
428
|
+
end
|
429
|
+
|
430
|
+
# Function that returns true if the level is in the list of levels that we want to use.
|
431
|
+
# @param level [String] the level to filter
|
432
|
+
def select_control_level(level)
|
433
|
+
@opts[:select_level].include? level
|
434
|
+
end
|
435
|
+
|
367
436
|
def dependent_controls_builder
|
368
437
|
dep_ctrls = @control.resource.dependent_controls
|
369
438
|
return if dep_ctrls.nil? || dep_ctrls.empty?
|
@@ -390,7 +459,7 @@ module AbideDevUtils
|
|
390
459
|
|
391
460
|
@control.title.nil? ? out_str.unshift(" #{@control.id.dump}:") : out_str.unshift(" #{@control.title.dump}:")
|
392
461
|
out_str.unshift(' control_configs:')
|
393
|
-
out_str.unshift("#{@module_name}::config:")
|
462
|
+
out_str.unshift("#{@module_name.split('-').last}::config:")
|
394
463
|
@md.add_ul('Hiera Configuration Example:')
|
395
464
|
@md.add_code_block(out_str.join("\n"), language: 'yaml')
|
396
465
|
rescue StandardError => e
|
@@ -113,6 +113,12 @@ module Abide
|
|
113
113
|
options.on('-s', '--strict', 'Fails if there are any errors') do
|
114
114
|
@data[:strict] = true
|
115
115
|
end
|
116
|
+
options.on('-p [PROFILE]', '--select-profile [PROFILE]', 'The list of profiles that the reference.md will use separated by commas') do |pr|
|
117
|
+
@data[:select_profile] = pr.split(',')
|
118
|
+
end
|
119
|
+
options.on('-l [LEVEL]', '--select-level [LEVEL]', 'The list of level that the reference.md will use separated by commas') do |l|
|
120
|
+
@data[:select_level] = l.split(',')
|
121
|
+
end
|
116
122
|
end
|
117
123
|
|
118
124
|
def execute
|
@@ -40,7 +40,7 @@ module Abide
|
|
40
40
|
def execute
|
41
41
|
client = JIRA.client
|
42
42
|
myself = JIRA.myself(client)
|
43
|
-
return if myself.attrs['
|
43
|
+
return if myself.attrs['displayName'].empty?
|
44
44
|
|
45
45
|
Abide::CLI::OUTPUT.simple("Successfully authenticated user #{myself.attrs['name']}!")
|
46
46
|
end
|
data/lib/abide_dev_utils/jira.rb
CHANGED
@@ -67,9 +67,8 @@ module AbideDevUtils
|
|
67
67
|
fields = {}
|
68
68
|
fields['summary'] = summary
|
69
69
|
fields['project'] = project(client, project)
|
70
|
-
fields['reporter'] = myself(client)
|
71
70
|
fields['issuetype'] = issuetype(client, 'Task')
|
72
|
-
fields['priority'] = priority(client, '
|
71
|
+
fields['priority'] = priority(client, '3')
|
73
72
|
fields['description'] = description if description
|
74
73
|
fields['labels'] = labels
|
75
74
|
epic = issue(client, epic) if epic && !epic.is_a?(JIRA::Resource::Issue)
|
@@ -89,7 +88,6 @@ module AbideDevUtils
|
|
89
88
|
fields = {
|
90
89
|
'summary' => summary,
|
91
90
|
'project' => project(client, project),
|
92
|
-
'reporter' => myself(client),
|
93
91
|
'issuetype' => issuetype(client, 'Epic'),
|
94
92
|
'customfield_10007' => summary, # Epic Name
|
95
93
|
}
|
@@ -114,7 +112,6 @@ module AbideDevUtils
|
|
114
112
|
fields['parent'] = issue
|
115
113
|
fields['summary'] = summary
|
116
114
|
fields['project'] = issue_fields['project']
|
117
|
-
fields['reporter'] = myself(client)
|
118
115
|
fields['issuetype'] = issuetype(client, '5')
|
119
116
|
fields['priority'] = issue_fields['priority']
|
120
117
|
subtask = client.Issue.build
|
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
|
+
version: 0.16.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- abide-team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -463,7 +463,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
463
463
|
- !ruby/object:Gem::Version
|
464
464
|
version: '0'
|
465
465
|
requirements: []
|
466
|
-
rubygems_version: 3.4.
|
466
|
+
rubygems_version: 3.4.19
|
467
467
|
signing_key:
|
468
468
|
specification_version: 4
|
469
469
|
summary: Helper utilities for developing compliance Puppet code
|