norad_cli 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0d84fbf79a2180fae8bee968dd26f8259c789ae2
4
- data.tar.gz: b5ab5d02cd70e0f491157fd50e63a4af11ac84a0
3
+ metadata.gz: 0ad7646308ba9f6cd0a67827779ec7fd05c6d992
4
+ data.tar.gz: 9a774b2c7fe5e97f1b1090099330af3e9a35f917
5
5
  SHA512:
6
- metadata.gz: a2bb0686835ae130de5203e1a93559c1faf14de75da90a3f20e35de2f381061f1edc205618966598c8011c670afea33f75f3fdbd11912c1115e190e84c18d8ee
7
- data.tar.gz: 378538d34d81e0c664c0b663106be66cf55fc1328e5d2e56fecffe4ec9fa86e305fc326078a717e5d535cb66a6687cb961ef2a7c5518d162a1184ca65971a222
6
+ metadata.gz: b748b7146ec63d642e7299c2224119be7d6cd9878e4498eeaebe10a1ec9fa5181e4dd6943cd9c740dc896225fcfb93194e6d2a2702d8386a024bb80f97ff8d14
7
+ data.tar.gz: 5528ce3dcb526c735ce929bd05db1dc0a57c6a2927bbe66e8cc24509bf26ed0fd061eb1b8b85c16040f9086ece12673aa8138add39a952694b2e55a58759b436
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- norad_cli (0.2.3)
4
+ norad_cli (0.2.4)
5
5
  docker-api
6
6
  git
7
7
  rainbow (~> 2.2.1)
@@ -5,6 +5,7 @@ require 'git'
5
5
  require 'docker'
6
6
  require 'norad_cli/support/api_security_container_seed_script'
7
7
  require 'norad_cli/support/sectest_container'
8
+ require 'norad_cli/support/ui_seed_generator'
8
9
  require 'rspec'
9
10
  require 'json'
10
11
  require 'rainbow'
@@ -280,6 +281,13 @@ class Sectest < Thor
280
281
  SeedGenerator.process_manifests(options[:seedfile], options[:docsite])
281
282
  end
282
283
 
284
+ desc 'seed:private_repo', 'Generate seed to import into UI. '\
285
+ 'Example: `norad sectest seed:private_repo <manifest_path1> <manifest_path2>` '\
286
+ '(for all tests run without args)'
287
+ define_method 'seed:private_repo' do |*manifest_paths|
288
+ NoradCli::UiSeedGenerator.new(manifest_paths).process!
289
+ end
290
+
283
291
  desc 'validate:image SECTESTNAME', 'Validate SECTESTNAME manifest.yml and readme.md'
284
292
  define_method 'validate:image' do |name|
285
293
  run_validations(name)
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+
5
+ module NoradCli
6
+ class UiSeedGenerator
7
+ REQUIRED_ATTRIBUTES = %w[name prog_args test_types].freeze
8
+ OPTIONAL_ATTRIBUTES = %w[category multi_host configurable help_url default_config service].freeze
9
+ ALLOWED_ATTRIBUTES = REQUIRED_ATTRIBUTES | OPTIONAL_ATTRIBUTES
10
+
11
+ def initialize(manifest_paths)
12
+ @manifest_paths = if manifest_paths.empty?
13
+ Dir.glob('./**/manifest.yml')
14
+ else
15
+ manifest_paths
16
+ end
17
+ end
18
+
19
+ def process!
20
+ configurations = []
21
+ @manifest_paths.each { |manifest_path| configurations << configuration_from_manifest(manifest_path) }
22
+ save_seed_file!(configurations)
23
+ rescue ManifestError => e
24
+ puts e.message
25
+ end
26
+
27
+ private
28
+
29
+ def seed_path
30
+ "#{Dir.pwd}/seed.yml"
31
+ end
32
+
33
+ def save_seed_file!(configurations)
34
+ File.open(seed_path, 'w') { |f| f.write YAML.dump(configurations) }
35
+ end
36
+
37
+ def configuration_from_manifest(manifest_path)
38
+ raise ManifestNotFoundError, manifest_path unless File.exist?(manifest_path)
39
+
40
+ seed = YAML.safe_load(File.read(manifest_path))
41
+ validate_seed(manifest_path, seed)
42
+ seed['name'] = seed['version'] ? "#{seed['name']}:#{seed['version']}" : seed['name']
43
+
44
+ sanitize_seed(seed)
45
+ end
46
+
47
+ def sanitize_seed(seed)
48
+ seed.each_key { |key| seed.delete(key) unless ALLOWED_ATTRIBUTES.include?(key) }
49
+ end
50
+
51
+ def validate_seed(manifest_path, seed)
52
+ raise InvalidManifestError, manifest_path unless seed.is_a?(Hash)
53
+ return if REQUIRED_ATTRIBUTES & seed.keys == REQUIRED_ATTRIBUTES
54
+ raise ManifestMissingAttributesError.new(manifest_path, REQUIRED_ATTRIBUTES - seed.keys)
55
+ end
56
+
57
+ class ManifestError < StandardError
58
+ attr_reader :manifest_path
59
+
60
+ def initialize(manifest_path)
61
+ @manifest_path = manifest_path
62
+ end
63
+ end
64
+
65
+ class ManifestNotFoundError < ManifestError
66
+ def message
67
+ "Could not find manifest provided: #{manifest_path}"
68
+ end
69
+ end
70
+
71
+ class ManifestMissingAttributesError < ManifestError
72
+ attr_reader :attributes
73
+
74
+ def initialize(manifest_path, attributes)
75
+ @manifest_path = manifest_path
76
+ @attributes = attributes
77
+ end
78
+
79
+ def message
80
+ "Invalid manifest: #{manifest_path}. Missing attributes: #{attributes.join(', ')}"
81
+ end
82
+ end
83
+
84
+ class InvalidManifestError < ManifestError
85
+ def message
86
+ "Invalid manifest: #{manifest_path}. See Norad security test repositories page for guidelines."
87
+ end
88
+ end
89
+ end
90
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NoradCli
4
- VERSION = '0.2.3'
4
+ VERSION = '0.2.4'
5
5
  end
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.2.3
4
+ version: 0.2.4
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: 2018-01-22 00:00:00.000000000 Z
13
+ date: 2018-01-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: docker-api
@@ -200,6 +200,7 @@ files:
200
200
  - lib/norad_cli/support/readme_spec.rb
201
201
  - lib/norad_cli/support/results_server.rb
202
202
  - lib/norad_cli/support/sectest_container.rb
203
+ - lib/norad_cli/support/ui_seed_generator.rb
203
204
  - lib/norad_cli/templates/.gitignore
204
205
  - lib/norad_cli/templates/.rspec
205
206
  - lib/norad_cli/templates/CONTRIBUTING.md