norad_cli 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +1 -1
- data/.rubocop.yml +4 -1
- data/.ruby-version +1 -1
- data/lib/norad_cli/cli/secrepo.rb +1 -1
- data/lib/norad_cli/cli/sectest.rb +59 -33
- data/lib/norad_cli/templates/spec/spec_helper.rb +1 -1
- data/lib/norad_cli/templates/tool/manifest.yml.erb +16 -8
- data/lib/norad_cli/templates/tool/tool_spec.rb.erb +4 -3
- data/lib/norad_cli/version.rb +1 -1
- data/norad_cli.gemspec +1 -1
- metadata +2 -6
- data/bin/console +0 -15
- data/bin/setup +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f317f6169f280d37dcf3f342361e7c4254f5599
|
4
|
+
data.tar.gz: 942032c69b1630bebd3107617799abda9e1a713f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba8692954a43ba7fb99e902e8f8d6351f696f3f448d988aecf58a857f4c3b8f4c6ee807670dd5dd9bf12dfcf4b20523baa690659c45ed5cad278519584fe65a4
|
7
|
+
data.tar.gz: dce51da0d3e7daffe7e306885fb19b4d5f565ff46884f309bc92ca1b48b0c18fe4d0430a99e430ee31414bedf56206f847d0bdad2b5d975049b446f553218f1b
|
data/.gitlab-ci.yml
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
AllCops:
|
2
|
-
TargetRubyVersion: 2.
|
2
|
+
TargetRubyVersion: 2.4
|
3
3
|
DisplayCopNames: true
|
4
4
|
Exclude:
|
5
5
|
- 'lib/norad_cli/templates/spec/**/*'
|
@@ -32,3 +32,6 @@ Security/YAMLLoad:
|
|
32
32
|
Exclude:
|
33
33
|
- 'lib/norad_cli/support/manifest.rb'
|
34
34
|
- 'lib/norad_cli/support/api_security_container_seed_script.rb'
|
35
|
+
Performance/RegexpMatch:
|
36
|
+
Exclude:
|
37
|
+
- 'lib/norad_cli/cli/sectest.rb'
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.4.0
|
@@ -13,16 +13,16 @@ class Sectest < Thor
|
|
13
13
|
end
|
14
14
|
|
15
15
|
desc 'scaffold TESTNAME', 'Create a new security test with standard files + testing'
|
16
|
-
option :test_type, default: 'whole_host', desc: 'The security test type, Options: [authenticated|web_application|brute_force|ssl_crypto|ssh_crypto|whole_host]'
|
17
|
-
option :registry, default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry to store docker images'
|
18
|
-
option :version, default: 'latest', desc: 'The version of the security test'
|
19
|
-
option :base_image, default: 'norad-registry.cisco.com:5000/norad:0.0.1', desc: 'Base Docker image to use (i.e. FROM field in the
|
20
|
-
option :
|
21
|
-
option :configurable, type: :boolean, default: false, desc: 'Is the security test configurable (e.g. Qualys username and password)'
|
16
|
+
option :test_type, aliases: '-t', default: 'whole_host', desc: 'The security test type, Options: [authenticated|web_application|brute_force|ssl_crypto|ssh_crypto|whole_host]'
|
17
|
+
option :registry, aliases: '-r', default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry to store docker images'
|
18
|
+
option :version, aliases: '-v', default: 'latest', desc: 'The version of the security test'
|
19
|
+
option :base_image, aliases: '-b', default: 'norad-registry.cisco.com:5000/norad:0.0.1', desc: 'Base Docker image to use (i.e. FROM field in the Dockerfile)'
|
20
|
+
option :configurable, type: :boolean, aliases: '-c', desc: 'Is the security test configurable (e.g. Qualys username and password)'
|
22
21
|
def scaffold(sectest_name)
|
23
22
|
# Grab the current directory
|
24
23
|
repo_dir = Dir.pwd
|
25
24
|
|
25
|
+
puts options[:configurable]
|
26
26
|
# Set options for templates
|
27
27
|
options[:name] = sectest_name
|
28
28
|
options[:spec_class_name] = sectest_name.split('-').map { |t| t =~ /\d+/ ? t : t.capitalize! }.join
|
@@ -30,16 +30,16 @@ class Sectest < Thor
|
|
30
30
|
# Error check to ensure this is a norad security test repository
|
31
31
|
|
32
32
|
# Create the security tests standard files
|
33
|
-
template('tool/Dockerfile.erb', "#{repo_dir}/#{sectest_name}/Dockerfile")
|
34
|
-
template('tool/README.md.erb', "#{repo_dir}/#{sectest_name}/README.md")
|
35
|
-
template('tool/manifest.yml.erb', "#{repo_dir}/#{sectest_name}/manifest.yml")
|
33
|
+
template('tool/Dockerfile.erb', "#{repo_dir}/sectests/#{sectest_name}/Dockerfile")
|
34
|
+
template('tool/README.md.erb', "#{repo_dir}/sectests/#{sectest_name}/README.md")
|
35
|
+
template('tool/manifest.yml.erb', "#{repo_dir}/sectests/#{sectest_name}/manifest.yml")
|
36
36
|
|
37
37
|
# Create a starter wrapper script
|
38
|
-
template('tool/wrapper.rb.erb', "#{repo_dir}/#{sectest_name}/#{sectest_name}-wrapper.rb")
|
38
|
+
template('tool/wrapper.rb.erb', "#{repo_dir}/sectests/#{sectest_name}/#{sectest_name}-wrapper.rb")
|
39
39
|
|
40
40
|
# Create the spec files
|
41
41
|
template('tool/tool_spec.rb.erb', "#{repo_dir}/spec/#{sectest_name}/#{sectest_name}_spec.rb")
|
42
|
-
if options[:authenticated
|
42
|
+
if options[:test_type] == 'authenticated'
|
43
43
|
template('tool/Dockerfile.auth.target.erb', "#{repo_dir}/spec/#{sectest_name}/targets/Dockerfile.secure")
|
44
44
|
template('tool/Dockerfile.auth.target.erb', "#{repo_dir}/spec/#{sectest_name}/targets/Dockerfile.vulnerable")
|
45
45
|
else
|
@@ -48,13 +48,26 @@ class Sectest < Thor
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
desc 'build', 'Build all sectest images and specs for the entire repository'
|
52
|
+
option :registry, aliases: '-r', default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
53
|
+
option :version, aliases: '-v', default: 'latest', desc: 'The version of the sectest container to build'
|
54
|
+
def build
|
55
|
+
# Error check to ensure this is a plugin directory
|
56
|
+
Dir.glob('sectests/*').select do |f|
|
57
|
+
if File.directory? f
|
58
|
+
# Build all for the sectest
|
59
|
+
send('build:all', f.split('/')[-1])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
51
64
|
# Define arguments and options
|
52
|
-
desc 'build SECTESTNAME', '
|
53
|
-
option :registry, default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
54
|
-
option :version, default: 'latest', desc: 'The version of the sectest container to build'
|
55
|
-
|
65
|
+
desc 'build:image SECTESTNAME', 'Build the docker image for the security test SECTESTNAME'
|
66
|
+
option :registry, aliases: '-r', default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
67
|
+
option :version, aliases: '-v', default: 'latest', desc: 'The version of the sectest container to build'
|
68
|
+
define_method 'build:image' do |name|
|
56
69
|
imgs_to_build = {}
|
57
|
-
imgs_to_build[name
|
70
|
+
imgs_to_build["sectests/#{name}"] = "#{options[:registry]}/#{name}:#{options[:version]}"
|
58
71
|
|
59
72
|
# Check for the Dockerfile
|
60
73
|
if !dockerfile?(imgs_to_build.keys[0])
|
@@ -80,9 +93,9 @@ class Sectest < Thor
|
|
80
93
|
end
|
81
94
|
|
82
95
|
# Define arguments and options
|
83
|
-
desc 'build:specs SECTESTNAME', '
|
84
|
-
option :registry, default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
85
|
-
option :version, default: 'latest', desc: 'The version of the sectest container to build'
|
96
|
+
desc 'build:specs SECTESTNAME', 'Build the spec images (test images) for the security test SECTESTNAME'
|
97
|
+
option :registry, aliases: '-r', default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
98
|
+
option :version, aliases: '-v', default: 'latest', desc: 'The version of the sectest container to build'
|
86
99
|
define_method 'build:specs' do |name|
|
87
100
|
imgs_to_build = {}
|
88
101
|
imgs_to_build["#{File.expand_path(File.dirname(__FILE__))}/../templates/spec/support/Dockerfile.testserver"] = 'docker-images-test-results-server:latest'
|
@@ -109,21 +122,21 @@ class Sectest < Thor
|
|
109
122
|
end
|
110
123
|
|
111
124
|
# Define arguments and options
|
112
|
-
desc 'build:all SECTESTNAME', '
|
113
|
-
option :registry, default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
114
|
-
option :version, default: 'latest', desc: 'The version of the sectest container to build'
|
125
|
+
desc 'build:all SECTESTNAME', 'Build sectest images for SECTESTNAME and all testing images for SECTESTNAME'
|
126
|
+
option :registry, aliases: '-r', default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
127
|
+
option :version, aliases: '-v', default: 'latest', desc: 'The version of the sectest container to build'
|
115
128
|
define_method 'build:all' do |name|
|
116
|
-
# Build the
|
117
|
-
build
|
129
|
+
# Build the sectest image
|
130
|
+
send('build:image', name)
|
118
131
|
|
119
|
-
# Build the specs for testing
|
132
|
+
# Build the specs for testing the sectest
|
120
133
|
send('build:specs', name)
|
121
134
|
end
|
122
135
|
|
123
136
|
# Define arguments and options
|
124
137
|
desc 'execute SECTESTNAME ARGUMENTS', 'Executes the specified security test SECTESTNAME w/ ARGUMENTS'
|
125
|
-
option :registry, default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
126
|
-
option :version, default: 'latest', desc: 'The version of the tools docker container to build'
|
138
|
+
option :registry, aliases: '-r', default: 'norad-registry.cisco.com:5000', desc: 'The Docker registry for Docker images'
|
139
|
+
option :version, aliases: '-v', default: 'latest', desc: 'The version of the tools docker container to build'
|
127
140
|
def execute(name, arguments)
|
128
141
|
# Ensure container exists
|
129
142
|
if !Docker::Image.exist?("#{options[:registry]}/#{name}:#{options[:version]}")
|
@@ -141,10 +154,10 @@ class Sectest < Thor
|
|
141
154
|
container.tap(&:start).attach { |stream, chunk| puts "#{stream}: #{chunk}" }
|
142
155
|
end
|
143
156
|
|
144
|
-
desc 'spec SECTESTNAME', 'Run the rspec tests for SECTESTNAME'
|
145
|
-
option :verbose, type: :boolean, default: false, desc: 'Turn on verbose logging'
|
146
|
-
option :scan_assessment, type: :boolean, default: true, desc: 'Fix me'
|
147
|
-
define_method 'spec' do |name|
|
157
|
+
desc 'spec:image SECTESTNAME', 'Run the rspec tests for SECTESTNAME'
|
158
|
+
option :verbose, aliases: '-v', type: :boolean, default: false, desc: 'Turn on verbose logging'
|
159
|
+
option :scan_assessment, aliases: '-s', type: :boolean, default: true, desc: 'Fix me'
|
160
|
+
define_method 'spec:image' do |name|
|
148
161
|
# Set environment variables
|
149
162
|
ENV['ENABLE_LOGS'] = options[:verbose] ? 'true' : 'false'
|
150
163
|
ENV['SCAN_ASSESSMENT'] = options[:scan_assessment] ? 'true' : 'false'
|
@@ -155,9 +168,22 @@ class Sectest < Thor
|
|
155
168
|
RSpec::Core::Runner.run(["spec/#{name}/#{name}_spec.rb"], $stderr, $stdout)
|
156
169
|
end
|
157
170
|
|
171
|
+
desc 'spec', 'Run all rspec tests for the entire repo (all sectests)'
|
172
|
+
option :verbose, aliases: '-v', type: :boolean, default: false, desc: 'Turn on verbose logging'
|
173
|
+
option :scan_assessment, aliases: '-s', type: :boolean, default: true, desc: 'Fix me'
|
174
|
+
def spec
|
175
|
+
# Error check to ensure this is a plugin directory
|
176
|
+
Dir.glob('sectests/*').select do |f|
|
177
|
+
if File.directory? f
|
178
|
+
# Build all for the sectest
|
179
|
+
send('spec:image', f.split('/')[-1])
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
158
184
|
desc 'seed', 'Create the containers.rb seed to import into the api'
|
159
|
-
option :seedfile, type: :string, default: './containers.rb', desc: 'The name of the seed file to generate'
|
160
|
-
option :docsite, type: :string, default: 'https://norad.gitlab.io/docs/', desc: 'Set the documentation site'
|
185
|
+
option :seedfile, aliases: '-s', type: :string, default: './containers.rb', desc: 'The name of the seed file to generate'
|
186
|
+
option :docsite, aliases: '-d', type: :string, default: 'https://norad.gitlab.io/docs/', desc: 'Set the documentation site'
|
161
187
|
def seed
|
162
188
|
# Error check to ensure this is a plugin directory
|
163
189
|
|
@@ -107,7 +107,7 @@ if ENV['SCAN_ASSESSMENT']
|
|
107
107
|
|
108
108
|
define_method :manifest_file do
|
109
109
|
assessment_path = @parent.nil? ? assessment_name : "#{@parent}/variants/#{assessment_name}"
|
110
|
-
"
|
110
|
+
"./sectests/#{assessment_path}/manifest.yml"
|
111
111
|
end
|
112
112
|
|
113
113
|
define_method :options do
|
@@ -1,19 +1,27 @@
|
|
1
1
|
registry: <%= options[:registry] %>
|
2
2
|
name: <%= options[:name] %>
|
3
3
|
version: <%= options[:version] %>
|
4
|
-
<% if options[:
|
4
|
+
<% if options[:test_type] == 'authenticated' -%>
|
5
5
|
prog_args: '%{target} %{ssh_user} %{ssh_port} %{ssh_key}'
|
6
6
|
default_config:
|
7
7
|
ssh_port: 22
|
8
|
+
test_types:
|
9
|
+
- <%= options[:test_type] %>
|
8
10
|
category: whitebox
|
9
|
-
|
11
|
+
configurable: true
|
12
|
+
<% elsif options[:configurable] -%>
|
10
13
|
prog_args: '%{target} %{fixme_custom_option}'
|
11
|
-
|
12
|
-
|
14
|
+
default_config:
|
15
|
+
fixme_custom_option: some_default_value
|
13
16
|
test_types:
|
14
|
-
- <%= options[:test_type] %>
|
15
|
-
|
17
|
+
- <%= options[:test_type] %>
|
18
|
+
category: blackbox
|
16
19
|
configurable: true
|
17
|
-
<% else
|
20
|
+
<% else -%>
|
21
|
+
prog_args: '%{target}'
|
22
|
+
test_types:
|
23
|
+
- <%= options[:test_type] %>
|
24
|
+
category: blackbox
|
18
25
|
configurable: false
|
19
|
-
<% end
|
26
|
+
<% end -%>
|
27
|
+
|
@@ -2,9 +2,10 @@ require_relative '../spec_helper.rb'
|
|
2
2
|
|
3
3
|
class <%= options[:spec_class_name] %>
|
4
4
|
extend AssessmentHelpers
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
# Uncomment and use to set default config values for testing purporse
|
6
|
+
# def self.default_test_config
|
7
|
+
# { }
|
8
|
+
# end
|
8
9
|
end
|
9
10
|
|
10
11
|
describe <%= options[:spec_class_name] %>, scan_assessment: true do
|
data/lib/norad_cli/version.rb
CHANGED
data/norad_cli.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.description = 'Command line interface for norad.'
|
15
15
|
spec.homepage = 'https://gitlab.com/norad/cli'
|
16
16
|
spec.license = 'Apache-2.0'
|
17
|
-
spec.required_ruby_version = '~> 2.
|
17
|
+
spec.required_ruby_version = '~> 2.4.0'
|
18
18
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
20
|
spec.bindir = 'bin'
|
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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Hitchcock
|
@@ -172,9 +172,7 @@ email:
|
|
172
172
|
- 'bmanifold@gmail.com '
|
173
173
|
- roger.seagle@gmail.com
|
174
174
|
executables:
|
175
|
-
- console
|
176
175
|
- norad
|
177
|
-
- setup
|
178
176
|
extensions: []
|
179
177
|
extra_rdoc_files: []
|
180
178
|
files:
|
@@ -190,9 +188,7 @@ files:
|
|
190
188
|
- LICENSE
|
191
189
|
- README.md
|
192
190
|
- Rakefile
|
193
|
-
- bin/console
|
194
191
|
- bin/norad
|
195
|
-
- bin/setup
|
196
192
|
- lib/norad_cli.rb
|
197
193
|
- lib/norad_cli/cli/main.rb
|
198
194
|
- lib/norad_cli/cli/secrepo.rb
|
@@ -270,7 +266,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
270
266
|
requirements:
|
271
267
|
- - "~>"
|
272
268
|
- !ruby/object:Gem::Version
|
273
|
-
version: 2.
|
269
|
+
version: 2.4.0
|
274
270
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
275
271
|
requirements:
|
276
272
|
- - ">="
|
data/bin/console
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'norad'
|
6
|
-
|
7
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
-
# with your gem easier. You can also use a different console, if you like.
|
9
|
-
|
10
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
-
# require 'pry'
|
12
|
-
# Pry.start
|
13
|
-
|
14
|
-
require 'irb'
|
15
|
-
IRB.start
|