emasser 3.4.1 → 3.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +8 -8
  3. data/.env-example +12 -12
  4. data/.github/release-drafter.yml +15 -15
  5. data/.github/workflows/codeql-analysis.yml +70 -70
  6. data/.github/workflows/draft-release.yml +15 -15
  7. data/.github/workflows/gh-pages.yml +32 -32
  8. data/.github/workflows/push-to-docker-mail.yml +28 -28
  9. data/.github/workflows/push-to-docker.yml +35 -35
  10. data/.github/workflows/release.yml +42 -42
  11. data/.github/workflows/rubocop.yml +23 -23
  12. data/.github/workflows/test-cli.yml +39 -72
  13. data/.gitignore +19 -19
  14. data/.mergify.yml +25 -25
  15. data/.rubocop.yml +83 -80
  16. data/.rubocop_todo.yml +27 -27
  17. data/CHANGELOG.md +66 -16
  18. data/Dockerfile +44 -44
  19. data/Gemfile +8 -8
  20. data/Gemfile.lock +108 -104
  21. data/LICENSE.md +15 -15
  22. data/README.md +179 -178
  23. data/Rakefile +18 -18
  24. data/_config.yml +1 -1
  25. data/docs/features.md +1677 -1437
  26. data/docs/redoc/index.html +1230 -1230
  27. data/emasser.gemspec +44 -44
  28. data/exe/emasser +5 -5
  29. data/lib/emasser/cli.rb +37 -37
  30. data/lib/emasser/configuration.rb +49 -49
  31. data/lib/emasser/constants.rb +22 -26
  32. data/lib/emasser/delete.rb +210 -148
  33. data/lib/emasser/errors.rb +14 -14
  34. data/lib/emasser/get.rb +1401 -949
  35. data/lib/emasser/help/approvalCac_post_mapper.md +20 -20
  36. data/lib/emasser/help/approvalPac_post_mapper.md +20 -20
  37. data/lib/emasser/help/artifacts_del_mapper.md +9 -9
  38. data/lib/emasser/help/artifacts_post_mapper.md +59 -59
  39. data/lib/emasser/help/artifacts_put_mapper.md +34 -34
  40. data/lib/emasser/help/cloudresource_post_mapper.md +62 -62
  41. data/lib/emasser/help/cmmc_get_mapper.md +4 -4
  42. data/lib/emasser/help/container_post_mapper.md +44 -44
  43. data/lib/emasser/help/controls_put_mapper.md +74 -74
  44. data/lib/emasser/help/milestone_del_mapper.md +11 -11
  45. data/lib/emasser/help/milestone_post_mapper.md +14 -14
  46. data/lib/emasser/help/milestone_put_mapper.md +23 -23
  47. data/lib/emasser/help/poam_del_mapper.md +5 -5
  48. data/lib/emasser/help/poam_post_mapper.md +93 -93
  49. data/lib/emasser/help/poam_put_mapper.md +107 -107
  50. data/lib/emasser/help/staticcode_clear_mapper.md +16 -16
  51. data/lib/emasser/help/staticcode_post_mapper.md +21 -21
  52. data/lib/emasser/help/testresults_post_mapper.md +21 -21
  53. data/lib/emasser/help.rb +11 -11
  54. data/lib/emasser/input_converters.rb +21 -21
  55. data/lib/emasser/options_parser.rb +20 -20
  56. data/lib/emasser/output_converters.rb +125 -111
  57. data/lib/emasser/post.rb +830 -830
  58. data/lib/emasser/put.rb +588 -588
  59. data/lib/emasser/version.rb +5 -5
  60. data/lib/emasser.rb +19 -19
  61. metadata +16 -10
data/emasser.gemspec CHANGED
@@ -1,44 +1,44 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'lib/emasser/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = 'emasser'
7
- spec.version = Emasser::VERSION
8
- spec.authors = ['Amndeep Singh Mann', 'George Dias', 'Kyle Fagan', 'Robert Clark', 'Aaron Lippold']
9
- spec.email = ['saf@groups.mitre.org']
10
- spec.licenses = ['Apache-2.0']
11
-
12
- spec.summary = 'Provide an automated capability for invoving eMASS API endpoints'
13
- spec.description = 'The emasser can be used as a gem or used from the command line (CL) to access eMASS endpoints via their API.'
14
- spec.homepage = 'https://saf.mitre.org'
15
- spec.required_ruby_version = Gem::Requirement.new('~> 2.5')
16
-
17
- # Specify which files should be added to the gem when it is released.
18
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(emass_client|test|spec|features)/}) }
21
- end
22
- spec.bindir = 'exe'
23
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
- # References: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry
25
- spec.metadata = { "github_repo" => "ssh://github.com/mitre/emasser" }
26
-
27
- spec.add_runtime_dependency 'activesupport', '~> 6.1.4'
28
- spec.add_runtime_dependency 'colorize', '~> 0.8.1'
29
- spec.add_runtime_dependency 'dotenv', '~> 2.7.6'
30
- spec.add_runtime_dependency 'rubyzip', '~> 2.3.2'
31
- spec.add_runtime_dependency 'thor', '~> 1.1.0'
32
- spec.add_runtime_dependency 'emass_client', '~> 3.0'
33
-
34
- spec.add_development_dependency 'bundler', '~> 2.3'
35
- spec.add_development_dependency 'bundler-audit', '~> 0.7'
36
- spec.add_development_dependency 'byebug', '~> 11.1.3'
37
- spec.add_development_dependency 'rspec', '~> 3.10.0'
38
- spec.add_development_dependency 'yaml', '~> 0.2.0'
39
- spec.add_development_dependency 'rake', '~> 13.0'
40
- spec.add_development_dependency 'rubocop', '~> 1.7'
41
- spec.add_development_dependency 'rubocop-minitest', '~> 0.10'
42
- spec.add_development_dependency 'rubocop-performance', '~> 1.11'
43
- spec.add_development_dependency 'rubocop-rake', '~> 0.5'
44
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/emasser/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'emasser'
7
+ spec.version = Emasser::VERSION
8
+ spec.authors = ['Amndeep Singh Mann', 'George Dias', 'Kyle Fagan', 'Robert Clark', 'Aaron Lippold']
9
+ spec.email = ['saf@groups.mitre.org']
10
+ spec.licenses = ['Apache-2.0']
11
+
12
+ spec.summary = 'Provide an automated capability for invoving eMASS API endpoints'
13
+ spec.description = 'The emasser can be used as a gem or used from the command line (CL) to access eMASS endpoints via their API.'
14
+ spec.homepage = 'https://saf.mitre.org'
15
+ spec.required_ruby_version = Gem::Requirement.new('~> 2.5')
16
+
17
+ # Specify which files should be added to the gem when it is released.
18
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(emass_client|test|spec|features)/}) }
21
+ end
22
+ spec.bindir = 'exe'
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ # References: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry
25
+ spec.metadata = { "github_repo" => "ssh://github.com/mitre/emasser" }
26
+
27
+ spec.add_runtime_dependency 'activesupport', '>= 6.1.4', '< 7.1.0'
28
+ spec.add_runtime_dependency 'colorize', '~> 0.8.1'
29
+ spec.add_runtime_dependency 'dotenv', '~> 2.7.6'
30
+ spec.add_runtime_dependency 'rubyzip', '~> 2.3.2'
31
+ spec.add_runtime_dependency 'thor', '~> 1.1.0'
32
+ spec.add_runtime_dependency 'emass_client', '~> 3.12'
33
+
34
+ spec.add_development_dependency 'bundler', '~> 2.3'
35
+ spec.add_development_dependency 'bundler-audit', '~> 0.7'
36
+ spec.add_development_dependency 'byebug', '~> 11.1.3'
37
+ spec.add_development_dependency 'rspec', '~> 3.10.0'
38
+ spec.add_development_dependency 'yaml', '~> 0.2.0'
39
+ spec.add_development_dependency 'rake', '~> 13.0'
40
+ spec.add_development_dependency 'rubocop', '~> 1.7'
41
+ spec.add_development_dependency 'rubocop-minitest', '~> 0.10'
42
+ spec.add_development_dependency 'rubocop-performance', '~> 1.11'
43
+ spec.add_development_dependency 'rubocop-rake', '~> 0.5'
44
+ end
data/exe/emasser CHANGED
@@ -1,5 +1,5 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'dotenv/load'
5
- require 'emasser'
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'dotenv/load'
5
+ require 'emasser'
data/lib/emasser/cli.rb CHANGED
@@ -1,37 +1,37 @@
1
- # frozen_string_literal: true
2
-
3
- module Emasser
4
- class CLI < Thor
5
- package_name 'Emasser'
6
-
7
- if ARGV[0].to_s.include? 'get'
8
- require 'emasser/get'
9
- register(Emasser::Get, 'get', 'get [RESOURCE]', 'Gets a resource')
10
- elsif ARGV[0].to_s.include? 'post'
11
- require 'emasser/post'
12
- register(Emasser::Post, 'post', 'post [RESOURCE]', 'Posts resources')
13
- elsif ARGV[0].to_s.include? 'put'
14
- require 'emasser/put'
15
- register(Emasser::Put, 'put', 'put [RESOURCE]', 'Puts resources')
16
- elsif ARGV[0].to_s.include? 'del'
17
- require 'emasser/delete'
18
- register(Emasser::Delete, 'delete', 'delete [RESOURCE]', 'Deletes resources')
19
- elsif (ARGV[0].to_s.include? '-v') || (ARGV[0].to_s.include? '-V')
20
- puts "emasser version: #{Emasser::VERSION}".green
21
- exit
22
- elsif ARGV[0].to_s.include? 'hello'
23
- user_name = ENV.fetch('USERNAME', 'rookie')
24
- puts "Hello #{user_name} - enjoy using emasser version #{Emasser::VERSION}!".cyan
25
- exit
26
- end
27
-
28
- def help
29
- puts 'Emasser commands:'.yellow
30
- puts ' emasser [get, put, post, delete, -v, or -V]'.yellow
31
- end
32
-
33
- def self.exit_on_failure?
34
- true
35
- end
36
- end
37
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Emasser
4
+ class CLI < Thor
5
+ package_name 'Emasser'
6
+
7
+ if ARGV[0].to_s.include? 'get'
8
+ require 'emasser/get'
9
+ register(Emasser::Get, 'get', 'get [RESOURCE]', 'Gets a resource')
10
+ elsif ARGV[0].to_s.include? 'post'
11
+ require 'emasser/post'
12
+ register(Emasser::Post, 'post', 'post [RESOURCE]', 'Posts resources')
13
+ elsif ARGV[0].to_s.include? 'put'
14
+ require 'emasser/put'
15
+ register(Emasser::Put, 'put', 'put [RESOURCE]', 'Puts resources')
16
+ elsif ARGV[0].to_s.include? 'del'
17
+ require 'emasser/delete'
18
+ register(Emasser::Delete, 'delete', 'delete [RESOURCE]', 'Deletes resources')
19
+ elsif (ARGV[0].to_s.include? '-v') || (ARGV[0].to_s.include? '-V')
20
+ puts "emasser version: #{Emasser::VERSION}".green
21
+ exit
22
+ elsif ARGV[0].to_s.include? 'hello'
23
+ user_name = ENV.fetch('USERNAME', 'rookie')
24
+ puts "Hello #{user_name} - enjoy using emasser version #{Emasser::VERSION}!".cyan
25
+ exit
26
+ end
27
+
28
+ def help
29
+ puts 'Emasser commands:'.yellow
30
+ puts ' emasser [get, put, post, delete, -v, or -V]'.yellow
31
+ end
32
+
33
+ def self.exit_on_failure?
34
+ true
35
+ end
36
+ end
37
+ end
@@ -1,49 +1,49 @@
1
- # frozen_string_literal: true
2
-
3
- module Emasser
4
- require 'emasser/errors'
5
-
6
- class Configuration
7
- # rubocop: disable Style/RaiseArgs
8
- def self.raise_unless_present(env)
9
- ENV.fetch(env) { raise Emasser::ConfigurationMissingError.new(env) }
10
- rescue Emasser::ConfigurationMissingError => e
11
- if (ARGV[0].to_s.include? '-v') || (ARGV[0].to_s.include? '-V')
12
- puts "emasser version: #{Emasser::VERSION}".green
13
- else
14
- puts "\n", e.message.red
15
- puts 'Create a .env file containing required variables, place it in the root directory where the emasser command is executed'.yellow
16
- puts 'Required environment variables are:'.yellow
17
- puts ' export EMASSER_API_KEY_API_KEY=<API key>'.green
18
- puts ' export EMASSER_API_KEY_USER_UID=<unique identifier of the eMASS user EMASSER_API_KEY_API_KEY belongs to>'.green
19
- puts ' export EMASSER_HOST=<FQDN of the eMASS server>'.green
20
- puts ' export EMASSER_KEY_FILE_PATH=<path to your emass key in PEM format>'.green
21
- puts ' export EMASSER_CERT_FILE_PATH=<path to your emass certficate in PEM format>'.green
22
- puts ' export EMASSER_KEY_PASSWORD=<password for the key given in EMASSER_KEY_FILE_PATH>'.green, "\n"
23
- puts 'See emasser environment variables requirements in emasser CLI Features for more information (https://mitre.github.io/emasser/docs/features.html).', "\n"
24
- end
25
- exit
26
- end
27
- # rubocop: enable Style/RaiseArgs
28
-
29
- # rubocop: disable Style/TernaryParentheses, Style/IfWithBooleanLiteralBranches
30
- EmassClient.configure do |config|
31
- # Required env variables
32
- config.api_key['api-key'] = raise_unless_present('EMASSER_API_KEY_API_KEY')
33
- config.api_key['user-uid'] = raise_unless_present('EMASSER_API_KEY_USER_UID')
34
- config.scheme = 'https'
35
- config.base_path = '/'
36
- config.server_index = nil
37
- config.host = raise_unless_present('EMASSER_HOST')
38
- config.key_file = raise_unless_present('EMASSER_KEY_FILE_PATH')
39
- config.cert_file = raise_unless_present('EMASSER_CERT_FILE_PATH')
40
- config.key_password = raise_unless_present('EMASSER_KEY_PASSWORD')
41
- # Optional env variables
42
- config.client_side_validation = (ENV.fetch('EMASSER_CLIENT_SIDE_VALIDATION', 'true').eql? 'true') ? true : false
43
- config.verify_ssl = (ENV.fetch('EMASSER_VERIFY_SSL', 'true').eql? 'true') ? true : false
44
- config.verify_ssl_host = (ENV.fetch('EMASSER_VERIFY_SSL_HOST', 'true').eql? 'true') ? true : false
45
- config.debugging = (ENV.fetch('EMASSER_DEBUGGING', 'false') == 'false') ? false : true
46
- end
47
- # rubocop: enable Style/TernaryParentheses, Style/IfWithBooleanLiteralBranches
48
- end
49
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Emasser
4
+ require 'emasser/errors'
5
+
6
+ class Configuration
7
+ # rubocop: disable Style/RaiseArgs
8
+ def self.raise_unless_present(env)
9
+ ENV.fetch(env) { raise Emasser::ConfigurationMissingError.new(env) }
10
+ rescue Emasser::ConfigurationMissingError => e
11
+ if (ARGV[0].to_s.include? '-v') || (ARGV[0].to_s.include? '-V')
12
+ puts "eMASSer version: #{Emasser::VERSION}".green
13
+ else
14
+ puts "\n", e.message.red
15
+ puts 'Create a .env file containing required variables, place it in the root directory where the emasser command is executed'.yellow
16
+ puts 'Required environment variables are:'.yellow
17
+ puts ' export EMASSER_API_KEY=<API key>'.green
18
+ puts ' export EMASSER_USER_UID=<unique identifier of the eMASS user EMASSER_API_KEY belongs to>'.green
19
+ puts ' export EMASSER_HOST_URL=<FQDN of the eMASS server>'.green
20
+ puts ' export EMASSER_KEY_FILE_PATH=<path to your eMASS key in PEM format>'.green
21
+ puts ' export EMASSER_CERT_FILE_PATH=<path to your eMASS certficate in PEM format>'.green
22
+ puts ' export EMASSER_KEY_FILE_PASSWORD=<password for the key given in EMASSER_KEY_FILE_PATH>'.green, "\n"
23
+ puts 'See eMASSer environment variables requirements in eMASSer CLI Features for more information (https://mitre.github.io/emasser/docs/features.html).', "\n"
24
+ end
25
+ exit
26
+ end
27
+ # rubocop: enable Style/RaiseArgs
28
+
29
+ # rubocop: disable Style/TernaryParentheses, Style/IfWithBooleanLiteralBranches
30
+ EmassClient.configure do |config|
31
+ # Required env variables
32
+ config.api_key['api-key'] = raise_unless_present('EMASSER_API_KEY')
33
+ config.api_key['user-uid'] = raise_unless_present('EMASSER_USER_UID')
34
+ config.scheme = 'https'
35
+ config.base_path = '/'
36
+ config.server_index = nil
37
+ config.host = raise_unless_present('EMASSER_HOST_URL')
38
+ config.key_file = raise_unless_present('EMASSER_KEY_FILE_PATH')
39
+ config.cert_file = raise_unless_present('EMASSER_CERT_FILE_PATH')
40
+ config.key_password = raise_unless_present('EMASSER_KEY_FILE_PASSWORD')
41
+ # Optional env variables
42
+ config.client_side_validation = (ENV.fetch('EMASSER_CLIENT_SIDE_VALIDATION', 'true').eql? 'true') ? true : false
43
+ config.verify_ssl = (ENV.fetch('EMASSER_VERIFY_SSL', 'true').eql? 'true') ? true : false
44
+ config.verify_ssl_host = (ENV.fetch('EMASSER_VERIFY_SSL_HOST', 'true').eql? 'true') ? true : false
45
+ config.debugging = (ENV.fetch('EMASSER_DEBUGGING', 'false') == 'false') ? false : true
46
+ end
47
+ # rubocop: enable Style/TernaryParentheses, Style/IfWithBooleanLiteralBranches
48
+ end
49
+ end
@@ -1,26 +1,22 @@
1
- # frozen_string_literal: true
2
-
3
- module Emasser
4
- GET_SYSTEM_ID_QUERY_PARAMS = {
5
- include_package: false,
6
- include_ditpr_metrics: false,
7
- include_decommissioned: false,
8
- debug_return_type: 'SystemResponse' # This is used by swagger client only to format output
9
- }.freeze
10
-
11
- GET_SYSTEM_RETURN_TYPE = {
12
- debug_return_type: 'SystemResponse'
13
- }.freeze
14
-
15
- GET_ARTIFACTS_RETURN_TYPE = {
16
- debug_return_type: 'String'
17
- }.freeze
18
-
19
- GET_WORKFLOWINSTANCES_RETURN_TYPE = {
20
- debug_return_type: 'Object'
21
- }.freeze
22
-
23
- DEL_MILESTONES_RETURN_TYPE = {
24
- debug_return_type: 'Object'
25
- }.freeze
26
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Emasser
4
+ GET_SYSTEM_ID_QUERY_PARAMS = {
5
+ include_package: false,
6
+ include_ditpr_metrics: false,
7
+ include_decommissioned: false,
8
+ debug_return_type: 'SystemResponse' # This is used by swagger client only to format output
9
+ }.freeze
10
+
11
+ GET_SYSTEM_RETURN_TYPE = {
12
+ debug_return_type: 'SystemResponse'
13
+ }.freeze
14
+
15
+ GET_ARTIFACTS_RETURN_TYPE = {
16
+ debug_return_type: 'String'
17
+ }.freeze
18
+
19
+ GET_WORKFLOWINSTANCES_RETURN_TYPE = {
20
+ debug_return_type: 'Object'
21
+ }.freeze
22
+ end