norad_cli 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +10 -1
- data/lib/norad_cli/cli/sectest.rb +21 -0
- data/lib/norad_cli/support/manifest_spec.rb +118 -0
- data/lib/norad_cli/support/readme_spec.rb +28 -0
- data/lib/norad_cli/version.rb +1 -1
- metadata +4 -4
- data/lib/norad_cli/support/manifest.rb +0 -16
- data/lib/norad_cli/support/readme.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d7d5fad53b4b887fda38b20367eaaf423b10da0
|
4
|
+
data.tar.gz: f15052a70f7c23692472cc0e028447833995a1f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6cd71926c664c17e150b3dd14119210d9511adb20295a32def87e31d45d94d07f0c376128817d67e17ff6ede01a023dfa2562aec9c972e2e9229443a7de4033
|
7
|
+
data.tar.gz: d4a7170d6be6020b59ce6ff241a3dbb2ed76778ad0c7223bfc268149329d4ec7cfd2502c7a4cadb1aedc8b03b08905d79563efa0cae113df20eb5c23ad13fa87
|
data/.rubocop.yml
CHANGED
@@ -18,10 +18,12 @@ Metrics/AbcSize:
|
|
18
18
|
Exclude:
|
19
19
|
- 'lib/norad_cli/support/api_security_container_seed_script.rb'
|
20
20
|
- 'lib/norad_cli/cli/sectest.rb'
|
21
|
+
- 'lib/norad_cli/support/manifest_spec.rb'
|
21
22
|
Metrics/BlockLength:
|
22
23
|
Exclude:
|
23
24
|
- 'spec/**/*'
|
24
25
|
- 'lib/norad_cli/cli/sectest.rb'
|
26
|
+
- 'lib/norad_cli/support/manifest_spec.rb'
|
25
27
|
Metrics/ClassLength:
|
26
28
|
Exclude:
|
27
29
|
- 'lib/norad_cli/cli/sectest.rb'
|
@@ -30,8 +32,15 @@ Style/NegatedIf:
|
|
30
32
|
- 'lib/norad_cli/cli/sectest.rb'
|
31
33
|
Security/YAMLLoad:
|
32
34
|
Exclude:
|
33
|
-
- 'lib/norad_cli/support/manifest.rb'
|
35
|
+
- 'lib/norad_cli/support/manifest.rb'
|
34
36
|
- 'lib/norad_cli/support/api_security_container_seed_script.rb'
|
37
|
+
- 'lib/norad_cli/support/manifest_spec.rb'
|
35
38
|
Performance/RegexpMatch:
|
36
39
|
Exclude:
|
37
40
|
- 'lib/norad_cli/cli/sectest.rb'
|
41
|
+
Style/RegexpLiteral:
|
42
|
+
Exclude:
|
43
|
+
- 'lib/norad_cli/support/manifest_spec.rb'
|
44
|
+
Style/Next:
|
45
|
+
Exclude:
|
46
|
+
- 'lib/norad_cli/support/manifest_spec.rb'
|
@@ -191,6 +191,27 @@ class Sectest < Thor
|
|
191
191
|
SeedGenerator.process_manifests(options[:seedfile], options[:docsite])
|
192
192
|
end
|
193
193
|
|
194
|
+
desc 'validate:image SECTESTNAME', 'Validate SECTESTNAME manifest.yml and readme.md'
|
195
|
+
define_method 'validate:image' do |name|
|
196
|
+
# Validate the readme file
|
197
|
+
ENV['sectest_name'] = name
|
198
|
+
RSpec::Core::Runner.run(["#{File.dirname(File.expand_path(__FILE__))}/../support/readme_spec.rb"], $stderr, $stdout)
|
199
|
+
|
200
|
+
# Validate the manifest file
|
201
|
+
RSpec::Core::Runner.run(["#{File.dirname(File.expand_path(__FILE__))}/../support/manifest_spec.rb"], $stderr, $stdout)
|
202
|
+
end
|
203
|
+
|
204
|
+
desc 'validate', 'Validate all manifest.yml and readme.md'
|
205
|
+
def validate
|
206
|
+
# Error check to ensure this is a plugin directory
|
207
|
+
Dir.glob('sectests/*').select do |f|
|
208
|
+
if File.directory? f
|
209
|
+
# Build all for the sectest
|
210
|
+
send('validate:image', f.split('/')[-1])
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
194
215
|
no_tasks do
|
195
216
|
def dockerfile?(img_dir)
|
196
217
|
# Ensure the Dockerfile exists for the new tool
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'safe_yaml'
|
3
|
+
SafeYAML::OPTIONS[:default_mode] = :safe
|
4
|
+
|
5
|
+
class Manifest
|
6
|
+
attr_accessor :values
|
7
|
+
|
8
|
+
def initialize(manifest_file)
|
9
|
+
f = File.new manifest_file, 'r'
|
10
|
+
@values = YAML.load f.read
|
11
|
+
end
|
12
|
+
|
13
|
+
def name
|
14
|
+
"#{@values['registry']}/#{@values['name']}:#{@values['version']}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe Manifest do
|
19
|
+
def testing_for(s)
|
20
|
+
puts "Testing for #{s}..."
|
21
|
+
end
|
22
|
+
|
23
|
+
def ok
|
24
|
+
puts 'OK'
|
25
|
+
end
|
26
|
+
|
27
|
+
def symbolize(h)
|
28
|
+
h.each_with_object({}) do |p, obj|
|
29
|
+
obj[p.first.to_sym] = p.last
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def manifest_name_check(manifest)
|
34
|
+
testing_for 'valid name'
|
35
|
+
expect(manifest.values['name']).to_not eq(nil)
|
36
|
+
expect(manifest.values['name'] =~ %r{\A[A-Za-z][A-Za-z0-9_-]+\z}).to_not eq(nil)
|
37
|
+
end
|
38
|
+
|
39
|
+
def manifest_version_check(manifest)
|
40
|
+
testing_for 'existence of version'
|
41
|
+
expect(manifest.values['version']).to_not eq(nil)
|
42
|
+
expect(manifest.values['version'].is_a?(String)).to eq(true)
|
43
|
+
expect(manifest.values['version']).to match(/\A[a-zA-Z0-9:._-]+\z/)
|
44
|
+
end
|
45
|
+
|
46
|
+
def manifest_registry_check(manifest)
|
47
|
+
testing_for 'existence of registry'
|
48
|
+
expect(manifest.values['registry']).to_not eq(nil)
|
49
|
+
expect(manifest.values['registry'].is_a?(String)).to eq(true)
|
50
|
+
end
|
51
|
+
|
52
|
+
def manifest_test_types_check(manifest)
|
53
|
+
testing_for 'test types'
|
54
|
+
expect(manifest.values['test_types']).to_not eq(nil)
|
55
|
+
expect(manifest.values['test_types'].empty?).to eq(false)
|
56
|
+
end
|
57
|
+
|
58
|
+
def manifest_configurable_check(manifest)
|
59
|
+
testing_for 'configurability'
|
60
|
+
if manifest.values['configurable']
|
61
|
+
expect(manifest.values['default_config']).to_not be(nil)
|
62
|
+
else
|
63
|
+
expect(manifest.values['default_config']).to be(nil)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
CONFIG_SHIM = { ssh_user: '', ssh_key: '', target: '' }.freeze
|
67
|
+
it 'validates the manifest file of all containers' do
|
68
|
+
next if File.exist?("sectests/#{ENV['sectest_name']}/.parent_only")
|
69
|
+
puts "Looking for valid manifest in: #{p}..."
|
70
|
+
manifest = Manifest.new "sectests/#{ENV['sectest_name']}/manifest.yml"
|
71
|
+
ok
|
72
|
+
manifest_name_check(manifest)
|
73
|
+
ok
|
74
|
+
manifest_version_check manifest
|
75
|
+
ok
|
76
|
+
manifest_registry_check manifest
|
77
|
+
ok
|
78
|
+
testing_for 'valid prog args'
|
79
|
+
expect(manifest.values['prog_args']).to_not eq(nil)
|
80
|
+
expect(manifest.values['prog_args'].scan('%{target}').length).to eq(1)
|
81
|
+
category = manifest.values['category']
|
82
|
+
assert false unless category == 'blackbox' || category == 'whitebox'
|
83
|
+
if category == 'blackbox'
|
84
|
+
expect(manifest.values['prog_args'].scan('%{ssh_user}').length).to eq(0)
|
85
|
+
expect(manifest.values['prog_args'].scan('%{ssh_key}').length).to eq(0)
|
86
|
+
else
|
87
|
+
expect(manifest.values['prog_args'].scan('%{ssh_user}').length).to eq(1)
|
88
|
+
expect(manifest.values['prog_args'].scan('%{ssh_key}').length).to eq(1)
|
89
|
+
end
|
90
|
+
ok
|
91
|
+
manifest_test_types_check manifest
|
92
|
+
ok
|
93
|
+
manifest_configurable_check manifest
|
94
|
+
ok
|
95
|
+
testing_for 'variants'
|
96
|
+
puts 'No variants for this repo' unless Dir.exist?("sectests/#{ENV['sectest_name']}/variants")
|
97
|
+
ok
|
98
|
+
Dir.glob("sectests/#{ENV['sectest_name']}/variants/*").each do |variant|
|
99
|
+
v_manifest = Manifest.new "#{variant}/manifest.yml"
|
100
|
+
manifest_name_check v_manifest
|
101
|
+
ok
|
102
|
+
manifest_registry_check v_manifest
|
103
|
+
ok
|
104
|
+
manifest_version_check v_manifest
|
105
|
+
ok
|
106
|
+
manifest_test_types_check v_manifest
|
107
|
+
ok
|
108
|
+
manifest_configurable_check v_manifest
|
109
|
+
ok
|
110
|
+
if v_manifest.values['default_config'] && manifest.values['default_config']
|
111
|
+
testing_for 'default config keys match base config keys'
|
112
|
+
expect(v_manifest.values['default_config'].keys).to match_array(manifest.values['default_config'].keys)
|
113
|
+
ok
|
114
|
+
end
|
115
|
+
end
|
116
|
+
puts
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Readme
|
3
|
+
end
|
4
|
+
|
5
|
+
describe Readme do
|
6
|
+
def testing_for(s)
|
7
|
+
puts "Testing for #{s}..."
|
8
|
+
end
|
9
|
+
|
10
|
+
def ok
|
11
|
+
puts 'OK'
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'requires each tool to have a README' do
|
15
|
+
next if File.exist?("sectests/#{ENV['sectest_name']}/.parent_only")
|
16
|
+
puts "Looking for README.md in: sectests/#{ENV['sectest_name']}..."
|
17
|
+
readme = File.read "sectests/#{ENV['sectest_name']}/README.md"
|
18
|
+
ok
|
19
|
+
|
20
|
+
testing_for 'variant READMEs'
|
21
|
+
puts 'No variants for this tool' unless Dir.exist?("sectests/#{ENV['sectest_name']}/variants")
|
22
|
+
ok
|
23
|
+
Dir.glob("sectests/#{ENV['sectest_name']}/variants/*").each do |variant|
|
24
|
+
readme = File.read "#{variant}/README.md"
|
25
|
+
ok
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/norad_cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: norad_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Hitchcock
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-03-
|
13
|
+
date: 2017-03-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: git
|
@@ -194,8 +194,8 @@ files:
|
|
194
194
|
- lib/norad_cli/cli/secrepo.rb
|
195
195
|
- lib/norad_cli/cli/sectest.rb
|
196
196
|
- lib/norad_cli/support/api_security_container_seed_script.rb
|
197
|
-
- lib/norad_cli/support/
|
198
|
-
- lib/norad_cli/support/
|
197
|
+
- lib/norad_cli/support/manifest_spec.rb
|
198
|
+
- lib/norad_cli/support/readme_spec.rb
|
199
199
|
- lib/norad_cli/templates/.gitignore
|
200
200
|
- lib/norad_cli/templates/.rspec
|
201
201
|
- lib/norad_cli/templates/CONTRIBUTING.md
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'safe_yaml'
|
3
|
-
SafeYAML::OPTIONS[:default_mode] = :safe
|
4
|
-
|
5
|
-
class Manifest
|
6
|
-
attr_accessor :values
|
7
|
-
|
8
|
-
def initialize(manifest_file)
|
9
|
-
f = File.new manifest_file, 'r'
|
10
|
-
@values = YAML.load f.read
|
11
|
-
end
|
12
|
-
|
13
|
-
def name
|
14
|
-
"#{@values['registry']}/#{@values['name']}:#{@values['version']}"
|
15
|
-
end
|
16
|
-
end
|