emasser 3.4.0 → 3.10.0
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/.env-example +4 -4
- data/.github/workflows/codeql-analysis.yml +1 -1
- data/.github/workflows/gh-pages.yml +1 -1
- data/.github/workflows/push-to-docker-mail.yml +1 -1
- data/.github/workflows/push-to-docker.yml +1 -1
- data/.github/workflows/release.yml +1 -1
- data/.github/workflows/rubocop.yml +1 -1
- data/.github/workflows/test-cli.yml +1 -34
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +32 -28
- data/docs/features.md +94 -29
- data/emasser.gemspec +3 -3
- data/lib/emasser/configuration.rb +8 -8
- data/lib/emasser/get.rb +288 -43
- data/lib/emasser/options_parser.rb +1 -1
- data/lib/emasser/output_converters.rb +6 -2
- data/lib/emasser/post.rb +28 -0
- data/lib/emasser/version.rb +1 -1
- metadata +15 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b801c869f720266c6eb50587b0161d99c0dc9f09286b05bbf824f191e7597b0d
|
|
4
|
+
data.tar.gz: bc7f9812817629588ad35f7f69ad8f5b9085071e81e8a12d0667fd028908f576
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4fe5358059359a22e0c64fa13d0d06fcdacd8f7476ed835f6062490fc07077647a51b1fab4d60da86dc28766a4a60cf80d80adc92db04de23c2c519e1efae12e
|
|
7
|
+
data.tar.gz: e871dab42805165c845ba2c89375d32ae9d12c09c4311ed248c31bdd5ac2af9d3785eeb362782a693c6cfb1a5ab683efa18f5c5120a108b264c87b2696c27779
|
data/.env-example
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export EMASSER_API_KEY=<API key>
|
|
2
|
+
export EMASSER_USER_UID=<unique identifier of the eMASS user EMASSER_API_KEY belongs to>
|
|
3
|
+
export EMASSER_HOST_URL=<FQDN of the eMASS server>
|
|
4
4
|
export EMASSER_KEY_FILE_PATH=<path to your emass key in PEM format>
|
|
5
5
|
export EMASSER_CERT_FILE_PATH=<path to your emass certificate in PEM format>
|
|
6
|
-
export
|
|
6
|
+
export EMASSER_KEY_FILE_PASSWORD=<password for the key given in EMASSER_KEY_FILE_PATH>
|
|
7
7
|
export EMASSER_CLIENT_SIDE_VALIDATION=<client side validation - true or false>
|
|
8
8
|
export EMASSER_VERIFY_SSL=<verify SSL - true or false>
|
|
9
9
|
export EMASSER_VERIFY_SSL_HOST=<verify host SSL - true or false>
|
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
18
18
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
19
19
|
- name: Checkout the emasser Repository
|
|
20
|
-
uses: actions/checkout@
|
|
20
|
+
uses: actions/checkout@v3
|
|
21
21
|
- name: Build and push
|
|
22
22
|
id: docker_build
|
|
23
23
|
uses: docker/build-push-action@v2
|
|
@@ -1,36 +1,3 @@
|
|
|
1
|
-
# name: Test emasser CLI
|
|
2
|
-
|
|
3
|
-
# on:
|
|
4
|
-
# push:
|
|
5
|
-
# branches: [ main ]
|
|
6
|
-
# pull_request:
|
|
7
|
-
# branches: [ main ]
|
|
8
|
-
|
|
9
|
-
# jobs:
|
|
10
|
-
# test:
|
|
11
|
-
# strategy:
|
|
12
|
-
# fail-fast: false
|
|
13
|
-
# matrix:
|
|
14
|
-
# platform: [ ubuntu-latest, macos-latest, windows-latest ]
|
|
15
|
-
# ruby-version: ['2.6', '2.7']
|
|
16
|
-
# runs-on: ${{ matrix.platform }}
|
|
17
|
-
# steps:
|
|
18
|
-
# - name: Setup Ruby ${{matrix.ruby}}
|
|
19
|
-
# uses: ruby/setup-ruby@v1
|
|
20
|
-
# with:
|
|
21
|
-
# ruby-version: ${{ matrix.ruby-version }}
|
|
22
|
-
# - uses: actions/checkout@v2
|
|
23
|
-
# - name: Testing on ${{ matrix.platform }} for Ruby ${{ matrix.ruby }}
|
|
24
|
-
# if: matrix.platform == 'windows-latest'
|
|
25
|
-
# run: |
|
|
26
|
-
# echo "need to install libcurl.dll"
|
|
27
|
-
# - name: Testing on ${{ matrix.platform }} for Ruby ${{ matrix.ruby }}
|
|
28
|
-
# if: matrix.platform == 'ubuntu-latest' || matrix.platform == 'macos-latest'
|
|
29
|
-
# run: |
|
|
30
|
-
# bundle install
|
|
31
|
-
# bundle info swagger_client
|
|
32
|
-
# rspec spec --format documentation
|
|
33
|
-
|
|
34
1
|
name: Test emasser CLI
|
|
35
2
|
|
|
36
3
|
on:
|
|
@@ -52,7 +19,7 @@ jobs:
|
|
|
52
19
|
uses: ruby/setup-ruby@v1
|
|
53
20
|
with:
|
|
54
21
|
ruby-version: ${{ matrix.ruby-version }}
|
|
55
|
-
- uses: actions/checkout@
|
|
22
|
+
- uses: actions/checkout@v3
|
|
56
23
|
- uses: crazy-max/ghaction-chocolatey@v1
|
|
57
24
|
with:
|
|
58
25
|
args: install curl -y
|
data/.rubocop.yml
CHANGED
|
@@ -15,6 +15,7 @@ AllCops:
|
|
|
15
15
|
- Rakefile
|
|
16
16
|
- 'test/**/*'
|
|
17
17
|
- '*.gemspec'
|
|
18
|
+
- '.env'
|
|
18
19
|
|
|
19
20
|
#Cops in Metrics might need to be adjusted to past their defaults depending on how restrictive the requirements feel
|
|
20
21
|
Style/Documentation:
|
|
@@ -78,3 +79,5 @@ Style/FrozenStringLiteralComment:
|
|
|
78
79
|
Enabled: false
|
|
79
80
|
Style/SignalException:
|
|
80
81
|
Enabled: false
|
|
82
|
+
Layout/EndOfLine:
|
|
83
|
+
EnforcedStyle: lf
|
data/Gemfile.lock
CHANGED
|
@@ -1,46 +1,49 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
emasser (3.4.
|
|
5
|
-
activesupport (
|
|
4
|
+
emasser (3.4.1)
|
|
5
|
+
activesupport (>= 6.1.4, < 7.1.0)
|
|
6
6
|
colorize (~> 0.8.1)
|
|
7
7
|
dotenv (~> 2.7.6)
|
|
8
|
-
emass_client (~> 3.
|
|
8
|
+
emass_client (~> 3.10)
|
|
9
9
|
rubyzip (~> 2.3.2)
|
|
10
10
|
thor (~> 1.1.0)
|
|
11
11
|
|
|
12
12
|
GEM
|
|
13
13
|
remote: https://rubygems.org/
|
|
14
14
|
specs:
|
|
15
|
-
activesupport (
|
|
15
|
+
activesupport (7.0.5)
|
|
16
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
17
17
|
i18n (>= 1.6, < 2)
|
|
18
18
|
minitest (>= 5.1)
|
|
19
19
|
tzinfo (~> 2.0)
|
|
20
|
-
zeitwerk (~> 2.3)
|
|
21
20
|
ast (2.4.2)
|
|
22
21
|
bundler-audit (0.9.1)
|
|
23
22
|
bundler (>= 1.2.0, < 3)
|
|
24
23
|
thor (~> 1.0)
|
|
25
24
|
byebug (11.1.3)
|
|
26
25
|
colorize (0.8.1)
|
|
27
|
-
concurrent-ruby (1.
|
|
26
|
+
concurrent-ruby (1.2.2)
|
|
28
27
|
diff-lcs (1.5.0)
|
|
29
28
|
dotenv (2.7.6)
|
|
30
|
-
emass_client (3.
|
|
29
|
+
emass_client (3.10.1)
|
|
31
30
|
typhoeus (~> 1.0, >= 1.0.1)
|
|
32
|
-
ethon (0.
|
|
31
|
+
ethon (0.16.0)
|
|
33
32
|
ffi (>= 1.15.0)
|
|
33
|
+
ffi (1.15.5)
|
|
34
34
|
ffi (1.15.5-x64-mingw32)
|
|
35
|
-
i18n (1.
|
|
35
|
+
i18n (1.14.1)
|
|
36
36
|
concurrent-ruby (~> 1.0)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
json (2.6.3)
|
|
38
|
+
minitest (5.18.1)
|
|
39
|
+
parallel (1.23.0)
|
|
40
|
+
parser (3.2.2.3)
|
|
40
41
|
ast (~> 2.4.1)
|
|
42
|
+
racc
|
|
43
|
+
racc (1.7.1)
|
|
41
44
|
rainbow (3.1.1)
|
|
42
45
|
rake (13.0.6)
|
|
43
|
-
regexp_parser (2.
|
|
46
|
+
regexp_parser (2.8.1)
|
|
44
47
|
rexml (3.2.5)
|
|
45
48
|
rspec (3.10.0)
|
|
46
49
|
rspec-core (~> 3.10.0)
|
|
@@ -55,37 +58,38 @@ GEM
|
|
|
55
58
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
56
59
|
rspec-support (~> 3.10.0)
|
|
57
60
|
rspec-support (3.10.3)
|
|
58
|
-
rubocop (1.
|
|
61
|
+
rubocop (1.52.1)
|
|
62
|
+
json (~> 2.3)
|
|
59
63
|
parallel (~> 1.10)
|
|
60
|
-
parser (>= 3.
|
|
64
|
+
parser (>= 3.2.2.3)
|
|
61
65
|
rainbow (>= 2.2.2, < 4.0)
|
|
62
66
|
regexp_parser (>= 1.8, < 3.0)
|
|
63
67
|
rexml (>= 3.2.5, < 4.0)
|
|
64
|
-
rubocop-ast (>= 1.
|
|
68
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
|
65
69
|
ruby-progressbar (~> 1.7)
|
|
66
|
-
unicode-display_width (>=
|
|
67
|
-
rubocop-ast (1.
|
|
68
|
-
parser (>= 3.
|
|
69
|
-
rubocop-minitest (0.
|
|
70
|
-
rubocop (>=
|
|
71
|
-
rubocop-performance (1.
|
|
70
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
71
|
+
rubocop-ast (1.29.0)
|
|
72
|
+
parser (>= 3.2.1.0)
|
|
73
|
+
rubocop-minitest (0.31.0)
|
|
74
|
+
rubocop (>= 1.39, < 2.0)
|
|
75
|
+
rubocop-performance (1.18.0)
|
|
72
76
|
rubocop (>= 1.7.0, < 2.0)
|
|
73
77
|
rubocop-ast (>= 0.4.0)
|
|
74
78
|
rubocop-rake (0.6.0)
|
|
75
79
|
rubocop (~> 1.0)
|
|
76
|
-
ruby-progressbar (1.
|
|
80
|
+
ruby-progressbar (1.13.0)
|
|
77
81
|
rubyzip (2.3.2)
|
|
78
82
|
thor (1.1.0)
|
|
79
83
|
typhoeus (1.4.0)
|
|
80
84
|
ethon (>= 0.9.0)
|
|
81
|
-
tzinfo (2.0.
|
|
85
|
+
tzinfo (2.0.6)
|
|
82
86
|
concurrent-ruby (~> 1.0)
|
|
83
|
-
unicode-display_width (2.
|
|
84
|
-
yaml (0.2.
|
|
85
|
-
zeitwerk (2.6.0)
|
|
87
|
+
unicode-display_width (2.4.2)
|
|
88
|
+
yaml (0.2.1)
|
|
86
89
|
|
|
87
90
|
PLATFORMS
|
|
88
91
|
x64-mingw32
|
|
92
|
+
x86_64-linux
|
|
89
93
|
|
|
90
94
|
DEPENDENCIES
|
|
91
95
|
bundler (~> 2.3)
|
|
@@ -101,4 +105,4 @@ DEPENDENCIES
|
|
|
101
105
|
yaml (~> 0.2.0)
|
|
102
106
|
|
|
103
107
|
BUNDLED WITH
|
|
104
|
-
2.3.
|
|
108
|
+
2.3.22
|
data/docs/features.md
CHANGED
|
@@ -12,14 +12,14 @@ Place the file on the path where the `emasser` command is executed.
|
|
|
12
12
|
|
|
13
13
|
### Required and Optional Environment Variables
|
|
14
14
|
The following environment variables are required:
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* EMASSER_API_KEY=`<API key>`
|
|
16
|
+
* EMASSER_USER_UID=`<unique identifier for the API Key (EMASSER_API_KEY)`
|
|
17
|
+
* EMASSER_HOST_URL=`<FQDN of the eMASS server>`
|
|
18
18
|
* EMASSER_KEY_FILE_PATH=`<path to your eMASS key in PEM format>`
|
|
19
19
|
* EMASSER_CERT_FILE_PATH=`<path to your eMASS certificate in PEM format>`
|
|
20
|
-
*
|
|
20
|
+
* EMASSER_KEY_FILE_PASSWORD=`<password for the key given in EMASSER_KEY_FILE_PATH>`
|
|
21
21
|
|
|
22
|
-
The following environment variables are
|
|
22
|
+
The following environment variables are optional*:
|
|
23
23
|
* EMASSER_CLIENT_SIDE_VALIDATION=`<client side validation - true or false (default true)>`
|
|
24
24
|
* EMASSER_VERIFY_SSL=`<verify SSL - true or false (default true)>`
|
|
25
25
|
* EMASSER_VERIFY_SSL_HOST=`<verify host SSL - true or false (default true)>`
|
|
@@ -73,8 +73,17 @@ The CLI invoke commands listed in this document shows them when executing from t
|
|
|
73
73
|
* [/api/dashboards/system-assessment-procedures-details](#get-dashboards)
|
|
74
74
|
* [/api/dashboards/system-poam-summary](#get-dashboards)
|
|
75
75
|
* [/api/dashboards/system-poam-details](#get-dashboards)
|
|
76
|
+
* [/api/dashboards/system-artifacts-summary](#get-dashboards)
|
|
77
|
+
* [/api/dashboards/system-artifacts-details](#get-dashboards)
|
|
76
78
|
* [/api/dashboards/system-hardware-summary](#get-dashboards)
|
|
77
79
|
* [/api/dashboards/system-hardware-details](#get-dashboards)
|
|
80
|
+
* [/api/dashboards/system-sensor-hardware-summary](#get-dashboards)
|
|
81
|
+
* [/api/dashboards/system-sensor-hardware-details](#get-dashboards)
|
|
82
|
+
* [/api/dashboards/system-software-summary](#get-dashboards)
|
|
83
|
+
* [/api/dashboards/system-software-details](#get-dashboards)
|
|
84
|
+
* [/api/dashboards/system-ports-protocols-summary](#get-dashboards)
|
|
85
|
+
* [/api/dashboards/system-ports-protocols-details](#get-dashboards)
|
|
86
|
+
* [/api/dashboards/system-conmon-integration-status-summary](#get-dashboards)
|
|
78
87
|
* [/api/dashboards/system-associations-details](#get-dashboards)
|
|
79
88
|
* [/api/dashboards/user-system-assignments-details](#get-dashboards)
|
|
80
89
|
* [/api/dashboards/system-privacy-summary](#get-dashboards)
|
|
@@ -83,7 +92,11 @@ The CLI invoke commands listed in this document shows them when executing from t
|
|
|
83
92
|
* [/api/dashboards/va-system-a2-summary](#get-dashboards)
|
|
84
93
|
* [/api/dashboards/va-system-pl-109-reporting-summary](#get-dashboards)
|
|
85
94
|
* [/api/dashboards/va-system-fisma-inventory-summary](#get-dashboards)
|
|
86
|
-
|
|
95
|
+
* [/api/dashboards/va-system-fisma-inventory-crypto-summary](#get-dashboards)
|
|
96
|
+
* [/api/dashboards/va-system-threat-risks-summary](#get-dashboards)
|
|
97
|
+
* [/api/dashboards/va-system-threat-sources-details](#get-dashboards)
|
|
98
|
+
* [/api/dashboards/va-system-threat-architecture-details](#get-dashboards)
|
|
99
|
+
|
|
87
100
|
### POST
|
|
88
101
|
* [/api/systems/{systemId}/test-results](#post-test_results)
|
|
89
102
|
* [/api/systems/{systemId}/poam](#post-poams)
|
|
@@ -92,7 +105,7 @@ The CLI invoke commands listed in this document shows them when executing from t
|
|
|
92
105
|
* [/api/systems/{systemId}/approval/cac](#post-cac)
|
|
93
106
|
* [/api/systems/{systemId}/approval/pac](#post-pac)
|
|
94
107
|
* [/api/systems/{systemId}/static-code-scans](#post-static_code_scan)
|
|
95
|
-
* [/api/systems/{systemId}/cloud-resource-results](#post-
|
|
108
|
+
* [/api/systems/{systemId}/cloud-resource-results](#post-cloud_resource)
|
|
96
109
|
* [/api/systems/{systemId}/container-scan-results](#post-container)
|
|
97
110
|
|
|
98
111
|
### PUT
|
|
@@ -522,79 +535,131 @@ All endpoint calls utilize the same parameter values, they are:
|
|
|
522
535
|
|--------------|:------------------------------------------------|
|
|
523
536
|
|--orgId |Integer - The organization identification number |
|
|
524
537
|
|
|
525
|
-
- Optional parameters are:
|
|
538
|
+
- Optional flags (parameters) are:
|
|
526
539
|
|
|
527
|
-
|parameter
|
|
528
|
-
|
|
529
|
-
|--
|
|
530
|
-
|--
|
|
540
|
+
|parameter | type or values |
|
|
541
|
+
|-------------------|:--------------------------------------------------------------|
|
|
542
|
+
|--excludeInherited |BOOLEAN - If no value is specified, includes inherited data |
|
|
543
|
+
|--pageIndex |Integer - The index of the starting page (default first page 0)|
|
|
544
|
+
|--pageSize |Integer - The number of entries per page (default 20000) |
|
|
531
545
|
|
|
532
546
|
Available commands are:
|
|
533
547
|
- Get systems status detail dashboard information
|
|
534
548
|
```
|
|
535
|
-
$ bundle exec exe/emasser get status_details --orgId
|
|
549
|
+
$ bundle exec exe/emasser get dashboards status_details [-o, --orgId] <value> [options]
|
|
536
550
|
```
|
|
537
551
|
- Get systems control compliance summary dashboard information
|
|
538
552
|
```
|
|
539
|
-
$ bundle exec exe/emasser get control_compliance_summary --orgId
|
|
553
|
+
$ bundle exec exe/emasser get dashboards control_compliance_summary [-o, --orgId] <value> [options]
|
|
540
554
|
```
|
|
541
555
|
- Get systems security control details dashboard information
|
|
542
556
|
```
|
|
543
|
-
$ bundle exec exe/emasser get security_control_details --orgId
|
|
557
|
+
$ bundle exec exe/emasser get dashboards security_control_details [-o, --orgId] <value> [options]
|
|
544
558
|
```
|
|
545
559
|
- Get systems assessment procedures details dashboard information
|
|
546
560
|
```
|
|
547
|
-
$ bundle exec exe/emasser get assessment_procedures_details --orgId
|
|
561
|
+
$ bundle exec exe/emasser get dashboards assessment_procedures_details [-o, --orgId] <value> [options]
|
|
548
562
|
```
|
|
549
563
|
- Get systems POA&Ms summary dashboard information
|
|
550
564
|
```
|
|
551
|
-
$ bundle exec exe/emasser get poam_summary --orgId
|
|
565
|
+
$ bundle exec exe/emasser get dashboards poam_summary [-o, --orgId] <value> [options]
|
|
552
566
|
```
|
|
553
567
|
- Get system POA&Ms details dashboard information
|
|
554
568
|
```
|
|
555
|
-
$ bundle exec exe/emasser get poam_details --orgId
|
|
569
|
+
$ bundle exec exe/emasser get dashboards poam_details [-o, --orgId] <value> [options]
|
|
570
|
+
```
|
|
571
|
+
- Get artifacts summary dashboard information
|
|
572
|
+
```
|
|
573
|
+
$ bundle exec exe/emasser get dashboards artifacts_summary [-o, --orgId] <value> [options]
|
|
574
|
+
```
|
|
575
|
+
- Get artifacts details dashboard information
|
|
576
|
+
```
|
|
577
|
+
$ bundle exec exe/emasser get dashboards artifacts_details [-o, --orgId] <value> [options]
|
|
556
578
|
```
|
|
557
579
|
- Get system hardware summary dashboard information
|
|
558
580
|
```
|
|
559
|
-
$ bundle exec exe/emasser get hardware_summary --orgId
|
|
581
|
+
$ bundle exec exe/emasser get dashboards hardware_summary [-o, --orgId] <value> [options]
|
|
560
582
|
```
|
|
561
583
|
- Get system hardware details dashboard information
|
|
562
584
|
```
|
|
563
|
-
$ bundle exec exe/emasser get hardware_details --orgId
|
|
585
|
+
$ bundle exec exe/emasser get dashboards hardware_details [-o, --orgId] <value> [options]
|
|
586
|
+
```
|
|
587
|
+
- Get sensor hardware summary dashboard information
|
|
588
|
+
```
|
|
589
|
+
$ bundle exec exe/emasser get dashboards sensor_hardware_summary [-o, --orgId] <value> [options]
|
|
590
|
+
```
|
|
591
|
+
- Get sensor hardware details dashboard information
|
|
592
|
+
```
|
|
593
|
+
$ bundle exec exe/emasser get dashboards sensor_hardware_details [-o, --orgId] <value> [options]
|
|
594
|
+
```
|
|
595
|
+
- Get software baseline summary dashboard information
|
|
596
|
+
```
|
|
597
|
+
$ bundle exec exe/emasser get dashboards software_summary [-o, --orgId] <value> [options]
|
|
598
|
+
```
|
|
599
|
+
- Get software baseline details dashboard information
|
|
600
|
+
```
|
|
601
|
+
$ bundle exec exe/emasser get dashboards software_details [-o, --orgId] <value> [options]
|
|
602
|
+
```
|
|
603
|
+
- Get ports and protocols summary dashboard information
|
|
604
|
+
```
|
|
605
|
+
$ bundle exec exe/emasser get dashboards ports_protocols_summary [-o, --orgId] <value> [options]
|
|
606
|
+
```
|
|
607
|
+
- Get ports and protocols details dashboard information
|
|
608
|
+
```
|
|
609
|
+
$ bundle exec exe/emasser get dashboards ports_protocols_details [-o, --orgId] <value> [options]
|
|
610
|
+
```
|
|
611
|
+
- Get CONMON integration status summary dashboard information
|
|
612
|
+
```
|
|
613
|
+
$ bundle exec exe/emasser get dashboards integration_status_summary [-o, --orgId] <value> [options]
|
|
564
614
|
```
|
|
565
615
|
- Get system associations details dashboard information
|
|
566
616
|
```
|
|
567
|
-
$ bundle exec exe/emasser get associations_details --orgId
|
|
617
|
+
$ bundle exec exe/emasser get dashboards associations_details [-o, --orgId] <value> [options]
|
|
568
618
|
```
|
|
569
619
|
- Get user system assignments details dashboard information
|
|
570
620
|
```
|
|
571
|
-
$ bundle exec exe/emasser get assignments_details --orgId
|
|
621
|
+
$ bundle exec exe/emasser get dashboards assignments_details [-o, --orgId] <value> [options]
|
|
572
622
|
```
|
|
573
623
|
- Get user system privacy summary dashboard information
|
|
574
624
|
```
|
|
575
|
-
$ bundle exec exe/emasser get privacy_summary --orgId
|
|
625
|
+
$ bundle exec exe/emasser get dashboards privacy_summary [-o, --orgId] <value> [options]
|
|
576
626
|
```
|
|
577
627
|
- Get VA OMB-FISMA SAOP summary dashboard information
|
|
578
628
|
```
|
|
579
|
-
$ bundle exec exe/emasser get fisma_saop_summary --orgId
|
|
629
|
+
$ bundle exec exe/emasser get dashboards fisma_saop_summary [-o, --orgId] <value> [options]
|
|
580
630
|
```
|
|
581
631
|
- Get VA system A&A summary dashboard information
|
|
582
632
|
```
|
|
583
|
-
$ bundle exec exe/emasser get va_aa_summary --orgId
|
|
633
|
+
$ bundle exec exe/emasser get dashboards va_aa_summary [-o, --orgId] <value> [options]
|
|
584
634
|
```
|
|
585
635
|
- Get VA system A2.0 summary dashboard information
|
|
586
636
|
```
|
|
587
|
-
$ bundle exec exe/emasser get va_a2_summary --orgId
|
|
637
|
+
$ bundle exec exe/emasser get dashboards va_a2_summary [-o, --orgId] <value> [options]
|
|
588
638
|
```
|
|
589
639
|
- Get VA System P.L. 109 reporting summary dashboard information
|
|
590
640
|
```
|
|
591
|
-
$ bundle exec exe/emasser get va_pl_109_summary --orgId
|
|
641
|
+
$ bundle exec exe/emasser get dashboards va_pl_109_summary [-o, --orgId] <value> [options]
|
|
592
642
|
```
|
|
593
643
|
- Get VA system FISMA inventory summary dashboard information
|
|
594
644
|
```
|
|
595
|
-
$ bundle exec exe/emasser get fisma_inventory_summary --orgId
|
|
645
|
+
$ bundle exec exe/emasser get dashboards fisma_inventory_summary [-o, --orgId] <value> [options]
|
|
646
|
+
```
|
|
647
|
+
- Get VA system FISMA inventory summary dashboard information
|
|
648
|
+
```
|
|
649
|
+
$ bundle exec exe/emasser get dashboards fisma_inventory_crypto_summary [-o, --orgId] <value> [options]
|
|
650
|
+
```
|
|
651
|
+
- Get VA threat risk summary dashboard information
|
|
652
|
+
```
|
|
653
|
+
$ bundle exec exe/emasser get dashboards va_threat_risk_summary [-o, --orgId] <value> [options]
|
|
654
|
+
```
|
|
655
|
+
- Get VA threat source details dashboard information
|
|
656
|
+
```
|
|
657
|
+
$ bundle exec exe/emasser get dashboards va_threat_source_details [-o, --orgId] <value> [options]
|
|
658
|
+
```
|
|
659
|
+
- Get VA threat architecture details dashboard information
|
|
660
|
+
```
|
|
661
|
+
$ bundle exec exe/emasser get dashboards va_threat_architecture_details [-o, --orgId] <value> [options]
|
|
596
662
|
```
|
|
597
|
-
|
|
598
663
|
[top](#api-endpoints-provided)
|
|
599
664
|
|
|
600
665
|
## Usage - POST
|
data/emasser.gemspec
CHANGED
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
|
10
10
|
spec.licenses = ['Apache-2.0']
|
|
11
11
|
|
|
12
12
|
spec.summary = 'Provide an automated capability for invoving eMASS API endpoints'
|
|
13
|
-
spec.description = 'emasser can be used as a gem or used from the command line (CL) to access eMASS endpoints via their API.'
|
|
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
14
|
spec.homepage = 'https://saf.mitre.org'
|
|
15
15
|
spec.required_ruby_version = Gem::Requirement.new('~> 2.5')
|
|
16
16
|
|
|
@@ -24,12 +24,12 @@ Gem::Specification.new do |spec|
|
|
|
24
24
|
# References: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry
|
|
25
25
|
spec.metadata = { "github_repo" => "ssh://github.com/mitre/emasser" }
|
|
26
26
|
|
|
27
|
-
spec.add_runtime_dependency 'activesupport', '
|
|
27
|
+
spec.add_runtime_dependency 'activesupport', '>= 6.1.4', '< 7.1.0'
|
|
28
28
|
spec.add_runtime_dependency 'colorize', '~> 0.8.1'
|
|
29
29
|
spec.add_runtime_dependency 'dotenv', '~> 2.7.6'
|
|
30
30
|
spec.add_runtime_dependency 'rubyzip', '~> 2.3.2'
|
|
31
31
|
spec.add_runtime_dependency 'thor', '~> 1.1.0'
|
|
32
|
-
spec.add_runtime_dependency 'emass_client', '~> 3.
|
|
32
|
+
spec.add_runtime_dependency 'emass_client', '~> 3.10'
|
|
33
33
|
|
|
34
34
|
spec.add_development_dependency 'bundler', '~> 2.3'
|
|
35
35
|
spec.add_development_dependency 'bundler-audit', '~> 0.7'
|
|
@@ -14,12 +14,12 @@ module Emasser
|
|
|
14
14
|
puts "\n", e.message.red
|
|
15
15
|
puts 'Create a .env file containing required variables, place it in the root directory where the emasser command is executed'.yellow
|
|
16
16
|
puts 'Required environment variables are:'.yellow
|
|
17
|
-
puts ' export
|
|
18
|
-
puts ' export
|
|
19
|
-
puts ' export
|
|
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
20
|
puts ' export EMASSER_KEY_FILE_PATH=<path to your emass key in PEM format>'.green
|
|
21
21
|
puts ' export EMASSER_CERT_FILE_PATH=<path to your emass certficate in PEM format>'.green
|
|
22
|
-
puts ' export
|
|
22
|
+
puts ' export EMASSER_KEY_FILE_PASSWORD=<password for the key given in EMASSER_KEY_FILE_PATH>'.green, "\n"
|
|
23
23
|
puts 'See emasser environment variables requirements in emasser CLI Features for more information (https://mitre.github.io/emasser/docs/features.html).', "\n"
|
|
24
24
|
end
|
|
25
25
|
exit
|
|
@@ -29,15 +29,15 @@ module Emasser
|
|
|
29
29
|
# rubocop: disable Style/TernaryParentheses, Style/IfWithBooleanLiteralBranches
|
|
30
30
|
EmassClient.configure do |config|
|
|
31
31
|
# Required env variables
|
|
32
|
-
config.api_key['api-key'] = raise_unless_present('
|
|
33
|
-
config.api_key['user-uid'] = raise_unless_present('
|
|
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
34
|
config.scheme = 'https'
|
|
35
35
|
config.base_path = '/'
|
|
36
36
|
config.server_index = nil
|
|
37
|
-
config.host = raise_unless_present('
|
|
37
|
+
config.host = raise_unless_present('EMASSER_HOST_URL')
|
|
38
38
|
config.key_file = raise_unless_present('EMASSER_KEY_FILE_PATH')
|
|
39
39
|
config.cert_file = raise_unless_present('EMASSER_CERT_FILE_PATH')
|
|
40
|
-
config.key_password = raise_unless_present('
|
|
40
|
+
config.key_password = raise_unless_present('EMASSER_KEY_FILE_PASSWORD')
|
|
41
41
|
# Optional env variables
|
|
42
42
|
config.client_side_validation = (ENV.fetch('EMASSER_CLIENT_SIDE_VALIDATION', 'true').eql? 'true') ? true : false
|
|
43
43
|
config.verify_ssl = (ENV.fetch('EMASSER_VERIFY_SSL', 'true').eql? 'true') ? true : false
|
data/lib/emasser/get.rb
CHANGED
|
@@ -96,7 +96,7 @@ module Emasser
|
|
|
96
96
|
end
|
|
97
97
|
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
98
98
|
|
|
99
|
-
desc
|
|
99
|
+
desc 'byId [options]', 'Retrieve a system - filtered by [options] params'
|
|
100
100
|
option :systemId, type: :numeric, required: true,
|
|
101
101
|
desc: 'A numeric value representing the system identification'
|
|
102
102
|
option :includePackage, type: :boolean, required: false, desc: 'BOOLEAN - true or false.'
|
|
@@ -123,7 +123,7 @@ module Emasser
|
|
|
123
123
|
true
|
|
124
124
|
end
|
|
125
125
|
|
|
126
|
-
desc
|
|
126
|
+
desc 'all [options]', 'Retrieves all available system(s) - filtered by [options] params'
|
|
127
127
|
# Optional parameters/fields
|
|
128
128
|
option :registrationType,
|
|
129
129
|
type: :string, required: false,
|
|
@@ -179,7 +179,7 @@ module Emasser
|
|
|
179
179
|
puts to_output_hash(e).yellow
|
|
180
180
|
end
|
|
181
181
|
|
|
182
|
-
desc
|
|
182
|
+
desc 'byCategory [options]', 'Retrieves role(s) - filtered by [options] params'
|
|
183
183
|
# Required parameters/fields
|
|
184
184
|
option :roleCategory, type: :string, required: true, enum: %w[PAC CAC Other]
|
|
185
185
|
option :role, type: :string, required: true,
|
|
@@ -220,8 +220,7 @@ module Emasser
|
|
|
220
220
|
desc: 'A numeric value representing the system identification'
|
|
221
221
|
# Optional parameters/fields
|
|
222
222
|
option :acronyms, type: :string, required: false,
|
|
223
|
-
|
|
224
|
-
' returned'
|
|
223
|
+
desc: 'The system acronym(s) e.g "AC-1, AC-2" - if not provided all controls for systemId are returned'
|
|
225
224
|
|
|
226
225
|
def forSystem
|
|
227
226
|
optional_options_keys = optional_options(@_initializer).keys
|
|
@@ -472,8 +471,7 @@ module Emasser
|
|
|
472
471
|
desc: 'A numeric value representing the system identification'
|
|
473
472
|
# Optional parameters/fields
|
|
474
473
|
option :controlAcronyms, type: :string, required: false,
|
|
475
|
-
|
|
476
|
-
' are returned'
|
|
474
|
+
desc: 'The system acronym(s) e.g "AC-1, AC-2" - if not provided all CACs for systemId are returned'
|
|
477
475
|
|
|
478
476
|
def controls
|
|
479
477
|
optional_options_keys = optional_options(@_initializer).keys
|
|
@@ -629,35 +627,55 @@ module Emasser
|
|
|
629
627
|
# configuration of the dashboard and the instance of eMASS as the dashboard changes.
|
|
630
628
|
#
|
|
631
629
|
# Endpoints:
|
|
632
|
-
#
|
|
633
|
-
#
|
|
634
|
-
#
|
|
635
|
-
#
|
|
636
|
-
#
|
|
637
|
-
#
|
|
638
|
-
#
|
|
639
|
-
#
|
|
640
|
-
#
|
|
641
|
-
#
|
|
642
|
-
#
|
|
643
|
-
#
|
|
644
|
-
#
|
|
645
|
-
#
|
|
646
|
-
#
|
|
647
|
-
#
|
|
630
|
+
# /api/dashboards/system-status-details - Get systems status detail dashboard information
|
|
631
|
+
# /api/dashboards/system-control-compliance-summary - Get systems control compliance summary dashboard information
|
|
632
|
+
# /api/dashboards/system-security-controls-details - Get systems security control details dashboard information
|
|
633
|
+
# /api/dashboards/system-assessment-procedures-details - Get systems assessement procdures details dashboard information
|
|
634
|
+
# /api/dashboards/system-poam-summary - Get systems POA&Ms summary dashboard information
|
|
635
|
+
# /api/dashboards/system-poam-details - Get system POA&Ms details dashboard information
|
|
636
|
+
# /api/dashboards/system-artifacts-summary - Get system Artifacts summary information.
|
|
637
|
+
# /api/dashboards/system-artifacts-details - Get system Artifacts details information.
|
|
638
|
+
# /api/dashboards/system-hardware-summary - Get system hardware summary dashboard information
|
|
639
|
+
# /api/dashboards/system-hardware-details - Get system hardware details dashboard information
|
|
640
|
+
# /api/dashboards/system-sensor-hardware-summary - Get system sensor hardware summary dashboard information
|
|
641
|
+
# /api/dashboards/system-sensor-hardware-details - Get system sensor hardware details dashboard information
|
|
642
|
+
# /api/dashboards/system-software-summary - Get system software summary dashboard information
|
|
643
|
+
# /api/dashboards/system-software-details - Get system ssoftware details dashboard information
|
|
644
|
+
# /api/dashboards/system-ports-protocols-summary - Get system ports and protocols summary dashboard information
|
|
645
|
+
# /api/dashboards/system-ports-protocols-details - Get system ports and protocols details dashboard information
|
|
646
|
+
# /api/dashboards/system-conmon-integration-status-summary - Get system conmon integration status summary dashboard information
|
|
647
|
+
# /api/dashboards/system-associations-details - Get system associations details dashboard information
|
|
648
|
+
# /api/dashboards/user-system-assignments-details - Get user system assignments details dashboard information
|
|
649
|
+
# /api/dashboards/system-privacy-summary - Get user system privacy summary dashboard information
|
|
650
|
+
# /api/dashboards/va-omb-fisma-saop-summary - Get VA OMB-FISMA SAOP summary dashboard information
|
|
651
|
+
# /api/dashboards/va-system-aa-summary - Get VA system A&A summary dashboard information
|
|
652
|
+
# /api/dashboards/va-system-a2-summary - Get VA system A2.0 summary dashboard information
|
|
653
|
+
# /api/dashboards/va-system-pl-109-reporting-summary - Get workflow instance by ID in a system
|
|
654
|
+
# /api/dashboards/va-system-fisma-inventory-summary - Get VA system FISMA inventory summary dashboard information
|
|
655
|
+
# /api/dashboards/va-system-fisma-inventory-crypto-summary - Get VA system FISMA inventory crypto summary dashboard information
|
|
656
|
+
# /api/dashboards/va-system-threat-risks-summary - Get VA System Threat Risks Summary dashboard information
|
|
657
|
+
# /api/dashboards/va-system-threat-sources-details - Get VA System Threat Sources Details dashboard information
|
|
658
|
+
# /api/dashboards/va-system-threat-architecture-details - Get VA System Threat Architecture Details dashboard information
|
|
659
|
+
|
|
648
660
|
class Dashboards < SubCommandBase
|
|
649
661
|
def self.exit_on_failure?
|
|
650
662
|
true
|
|
651
663
|
end
|
|
652
664
|
|
|
653
665
|
# Required parameters/fields
|
|
654
|
-
class_option :orgId,
|
|
655
|
-
|
|
666
|
+
class_option :orgId, aliases: '-o', type: :numeric,
|
|
667
|
+
desc: 'A numeric value representing the system identification'
|
|
656
668
|
|
|
657
669
|
# Optional parameters/fields
|
|
658
|
-
class_option :
|
|
659
|
-
|
|
660
|
-
|
|
670
|
+
class_option :excludeinherited, aliases: '-I', type: :boolean, required: false, default: false,
|
|
671
|
+
desc: 'BOOLEAN - true or false, default false.'
|
|
672
|
+
class_option :pageIndex, aliases: '-i', type: :numeric, required: false,
|
|
673
|
+
desc: 'The page number to be returned, if not specified starts at page 0'
|
|
674
|
+
class_option :pageSize, aliases: '-s', type: :numeric, required: false,
|
|
675
|
+
desc: 'The total entries per page, default is 20,000'
|
|
676
|
+
|
|
677
|
+
#--------------------------------------------------------------------------
|
|
678
|
+
# System Status Dashboard
|
|
661
679
|
# /api/dashboards/system-status-details
|
|
662
680
|
desc 'status_details', 'Get systems status detail dashboard information'
|
|
663
681
|
def status_details
|
|
@@ -670,9 +688,11 @@ module Emasser
|
|
|
670
688
|
puts to_output_hash(result).green
|
|
671
689
|
rescue EmassClient::ApiError => e
|
|
672
690
|
puts 'Exception when calling DashboardsApi->get_system_status_details'.red
|
|
673
|
-
puts to_output_hash(e)
|
|
691
|
+
puts to_output_hash(e)
|
|
674
692
|
end
|
|
675
693
|
|
|
694
|
+
#--------------------------------------------------------------------------
|
|
695
|
+
# Enterprise Security Controls Dashboard
|
|
676
696
|
# /api/dashboards/system-control-compliance-summary
|
|
677
697
|
desc 'control_compliance_summary', 'Get systems control compliance summary dashboard information'
|
|
678
698
|
def control_compliance_summary
|
|
@@ -685,7 +705,7 @@ module Emasser
|
|
|
685
705
|
puts to_output_hash(result).green
|
|
686
706
|
rescue EmassClient::ApiError => e
|
|
687
707
|
puts 'Exception when calling DashboardsApi->get_system_control_compliance_summary'.red
|
|
688
|
-
puts to_output_hash(e)
|
|
708
|
+
puts to_output_hash(e)
|
|
689
709
|
end
|
|
690
710
|
|
|
691
711
|
# /api/dashboards/system-security-controls-details
|
|
@@ -700,11 +720,11 @@ module Emasser
|
|
|
700
720
|
puts to_output_hash(result).green
|
|
701
721
|
rescue EmassClient::ApiError => e
|
|
702
722
|
puts 'Exception when calling DashboardsApi->get_system_security_control_details'.red
|
|
703
|
-
puts to_output_hash(e)
|
|
723
|
+
puts to_output_hash(e)
|
|
704
724
|
end
|
|
705
725
|
|
|
706
|
-
# /api/dashboards/system-
|
|
707
|
-
desc 'assessment_procedures_details', 'Get systems
|
|
726
|
+
# /api/dashboards/system-assessment-procedures-details
|
|
727
|
+
desc 'assessment_procedures_details', 'Get systems assessement procdures details dashboard information'
|
|
708
728
|
def assessment_procedures_details
|
|
709
729
|
optional_options_keys = optional_options(@_initializer).keys
|
|
710
730
|
optional_options = to_input_hash(optional_options_keys, options)
|
|
@@ -715,9 +735,11 @@ module Emasser
|
|
|
715
735
|
puts to_output_hash(result).green
|
|
716
736
|
rescue EmassClient::ApiError => e
|
|
717
737
|
puts 'Exception when calling DashboardsApi->get_system_assessment_procedures_details'.red
|
|
718
|
-
puts to_output_hash(e)
|
|
738
|
+
puts to_output_hash(e)
|
|
719
739
|
end
|
|
720
740
|
|
|
741
|
+
#--------------------------------------------------------------------------
|
|
742
|
+
# Enterprise POA&M Dashboard
|
|
721
743
|
# /api/dashboards/system-poam-summary
|
|
722
744
|
desc 'poam_summary', 'Get systems POA&Ms summary dashboard information'
|
|
723
745
|
def poam_summary
|
|
@@ -730,7 +752,7 @@ module Emasser
|
|
|
730
752
|
puts to_output_hash(result).green
|
|
731
753
|
rescue EmassClient::ApiError => e
|
|
732
754
|
puts 'Exception when calling DashboardsApi->get_system_poam_summary'.red
|
|
733
|
-
puts to_output_hash(e)
|
|
755
|
+
puts to_output_hash(e)
|
|
734
756
|
end
|
|
735
757
|
|
|
736
758
|
# /api/dashboards/system-poam-details
|
|
@@ -745,9 +767,43 @@ module Emasser
|
|
|
745
767
|
puts to_output_hash(result).green
|
|
746
768
|
rescue EmassClient::ApiError => e
|
|
747
769
|
puts 'Exception when calling DashboardsApi->get_system_poam_details'.red
|
|
748
|
-
puts to_output_hash(e)
|
|
770
|
+
puts to_output_hash(e)
|
|
749
771
|
end
|
|
750
772
|
|
|
773
|
+
#--------------------------------------------------------------------------
|
|
774
|
+
# Enterprise Artifacts Dashboard
|
|
775
|
+
# /api/dashboards/system-artifacts-summary
|
|
776
|
+
desc 'artifacts_summary', 'Get systems artifacts summary dashboard information'
|
|
777
|
+
def artifacts_summary
|
|
778
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
779
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
780
|
+
|
|
781
|
+
result = EmassClient::DashboardsApi.new.get_system_artifacts_summary(
|
|
782
|
+
options[:orgId], optional_options
|
|
783
|
+
)
|
|
784
|
+
puts to_output_hash(result).green
|
|
785
|
+
rescue EmassClient::ApiError => e
|
|
786
|
+
puts 'Exception when calling DashboardsApi->get_system_artifacts_summary'.red
|
|
787
|
+
puts to_output_hash(e)
|
|
788
|
+
end
|
|
789
|
+
|
|
790
|
+
# /api/dashboards/system-artifacts-details
|
|
791
|
+
desc 'artifacts_details', 'Get systems artifacts summary dashboard information'
|
|
792
|
+
def artifacts_details
|
|
793
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
794
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
795
|
+
|
|
796
|
+
result = EmassClient::DashboardsApi.new.get_system_artifacts_details(
|
|
797
|
+
options[:orgId], optional_options
|
|
798
|
+
)
|
|
799
|
+
puts to_output_hash(result).green
|
|
800
|
+
rescue EmassClient::ApiError => e
|
|
801
|
+
puts 'Exception when calling DashboardsApi->get_system_artifacts_details'.red
|
|
802
|
+
puts to_output_hash(e)
|
|
803
|
+
end
|
|
804
|
+
|
|
805
|
+
#--------------------------------------------------------------------------
|
|
806
|
+
# Hardware Baseline Dashboard
|
|
751
807
|
# /api/dashboards/system-hardware-summary
|
|
752
808
|
desc 'hardware_summary', 'Get system hardware summary dashboard information'
|
|
753
809
|
def hardware_summary
|
|
@@ -760,7 +816,7 @@ module Emasser
|
|
|
760
816
|
puts to_output_hash(result).green
|
|
761
817
|
rescue EmassClient::ApiError => e
|
|
762
818
|
puts 'Exception when calling DashboardsApi->get_system_hardware_summary'.red
|
|
763
|
-
puts to_output_hash(e)
|
|
819
|
+
puts to_output_hash(e)
|
|
764
820
|
end
|
|
765
821
|
|
|
766
822
|
# /api/dashboards/system-hardware-details
|
|
@@ -775,9 +831,124 @@ module Emasser
|
|
|
775
831
|
puts to_output_hash(result).green
|
|
776
832
|
rescue EmassClient::ApiError => e
|
|
777
833
|
puts 'Exception when calling DashboardsApi->get_system_hardware_details'.red
|
|
778
|
-
puts to_output_hash(e)
|
|
834
|
+
puts to_output_hash(e)
|
|
835
|
+
end
|
|
836
|
+
|
|
837
|
+
#--------------------------------------------------------------------------
|
|
838
|
+
# Enterprise Sensor-based Hardware Resources Dashboard
|
|
839
|
+
# /api/dashboards/system-sensor-hardware-summary
|
|
840
|
+
desc 'sensor_hardware_summary', 'Get system sensor hardware summary dashboard information'
|
|
841
|
+
def sensor_hardware_summary
|
|
842
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
843
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
844
|
+
|
|
845
|
+
result = EmassClient::DashboardsApi.new.get_system_sensor_hardware_summary(
|
|
846
|
+
options[:orgId], optional_options
|
|
847
|
+
)
|
|
848
|
+
puts to_output_hash(result).green
|
|
849
|
+
rescue EmassClient::ApiError => e
|
|
850
|
+
puts 'Exception when calling DashboardsApi->get_system_sensor_hardware_summary'.red
|
|
851
|
+
puts to_output_hash(e)
|
|
852
|
+
end
|
|
853
|
+
|
|
854
|
+
# /api/dashboards/system-sensor-hardware-details
|
|
855
|
+
desc 'sensor_hardware_details', 'Get system sensor hardware details dashboard information'
|
|
856
|
+
def sensor_hardware_details
|
|
857
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
858
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
859
|
+
|
|
860
|
+
result = EmassClient::DashboardsApi.new.get_system_sensor_hardware_details(
|
|
861
|
+
options[:orgId], optional_options
|
|
862
|
+
)
|
|
863
|
+
puts to_output_hash(result).green
|
|
864
|
+
rescue EmassClient::ApiError => e
|
|
865
|
+
puts 'Exception when calling DashboardsApi->get_system_sensor_hardware_details'.red
|
|
866
|
+
puts to_output_hash(e)
|
|
867
|
+
end
|
|
868
|
+
|
|
869
|
+
#--------------------------------------------------------------------------
|
|
870
|
+
# Software Baseline Dashboards
|
|
871
|
+
# /api/dashboards/system-software-summary
|
|
872
|
+
desc 'software_summary', 'Get system software summary dashboard information'
|
|
873
|
+
def software_summary
|
|
874
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
875
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
876
|
+
|
|
877
|
+
result = EmassClient::DashboardsApi.new.get_system_software_summary(
|
|
878
|
+
options[:orgId], optional_options
|
|
879
|
+
)
|
|
880
|
+
puts to_output_hash(result).green
|
|
881
|
+
rescue EmassClient::ApiError => e
|
|
882
|
+
puts 'Exception when calling DashboardsApi->get_system_software_summary'.red
|
|
883
|
+
puts to_output_hash(e)
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
# /api/dashboards/system-software-details
|
|
887
|
+
desc 'software_details', 'Get system software details dashboard information'
|
|
888
|
+
def software_details
|
|
889
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
890
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
891
|
+
|
|
892
|
+
result = EmassClient::DashboardsApi.new.get_system_software_details(
|
|
893
|
+
options[:orgId], optional_options
|
|
894
|
+
)
|
|
895
|
+
puts to_output_hash(result).green
|
|
896
|
+
rescue EmassClient::ApiError => e
|
|
897
|
+
puts 'Exception when calling DashboardsApi->get_system_software_details'.red
|
|
898
|
+
puts to_output_hash(e)
|
|
899
|
+
end
|
|
900
|
+
|
|
901
|
+
#--------------------------------------------------------------------------
|
|
902
|
+
# Ports and Protocols Dashboard
|
|
903
|
+
# /api/dashboards/system-ports-protocols-summary
|
|
904
|
+
desc 'ports_protocols_summary', 'Get system ports & portocols summary dashboard information'
|
|
905
|
+
def ports_protocols_summary
|
|
906
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
907
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
908
|
+
|
|
909
|
+
result = EmassClient::DashboardsApi.new.get_system_ports_protocols_summary(
|
|
910
|
+
options[:orgId], optional_options
|
|
911
|
+
)
|
|
912
|
+
puts to_output_hash(result).green
|
|
913
|
+
rescue EmassClient::ApiError => e
|
|
914
|
+
puts 'Exception when calling DashboardsApi->get_system_ports_protocols_summary'.red
|
|
915
|
+
puts to_output_hash(e)
|
|
916
|
+
end
|
|
917
|
+
|
|
918
|
+
# /api/dashboards/system-ports-protocols-details
|
|
919
|
+
desc 'ports_protocols_details', 'Get system ports & portocols details dashboard information'
|
|
920
|
+
def ports_protocols_details
|
|
921
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
922
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
923
|
+
|
|
924
|
+
result = EmassClient::DashboardsApi.new.get_system_ports_protocols_details(
|
|
925
|
+
options[:orgId], optional_options
|
|
926
|
+
)
|
|
927
|
+
puts to_output_hash(result).green
|
|
928
|
+
rescue EmassClient::ApiError => e
|
|
929
|
+
puts 'Exception when calling DashboardsApi->get_system_ports_protocols_details'.red
|
|
930
|
+
puts to_output_hash(e)
|
|
779
931
|
end
|
|
780
932
|
|
|
933
|
+
#--------------------------------------------------------------------------
|
|
934
|
+
# System CONMON Integration Status Dashboard
|
|
935
|
+
# /api/dashboards/system-conmon-integration-status-summary
|
|
936
|
+
desc 'common_integration_status_summary', 'Get system conmon integration status summary dashboard information'
|
|
937
|
+
def common_integration_status_summary
|
|
938
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
939
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
940
|
+
|
|
941
|
+
result = EmassClient::DashboardsApi.new.get_system_common_integration_status_summary(
|
|
942
|
+
options[:orgId], optional_options
|
|
943
|
+
)
|
|
944
|
+
puts to_output_hash(result).green
|
|
945
|
+
rescue EmassClient::ApiError => e
|
|
946
|
+
puts 'Exception when calling DashboardsApi->get_system_common_integration_status_summary'.red
|
|
947
|
+
puts to_output_hash(e)
|
|
948
|
+
end
|
|
949
|
+
|
|
950
|
+
#--------------------------------------------------------------------------
|
|
951
|
+
# System Associations Dashboard
|
|
781
952
|
# /api/dashboards/system-associations-details
|
|
782
953
|
desc 'associations_details', 'Get system associations details dashboard information'
|
|
783
954
|
def associations_details
|
|
@@ -790,9 +961,11 @@ module Emasser
|
|
|
790
961
|
puts to_output_hash(result).green
|
|
791
962
|
rescue EmassClient::ApiError => e
|
|
792
963
|
puts 'Exception when calling DashboardsApi->get_system_associations_details'.red
|
|
793
|
-
puts to_output_hash(e)
|
|
964
|
+
puts to_output_hash(e)
|
|
794
965
|
end
|
|
795
966
|
|
|
967
|
+
#--------------------------------------------------------------------------
|
|
968
|
+
# Users Dashboard
|
|
796
969
|
# /api/dashboards/user-system-assignments-details
|
|
797
970
|
desc 'assignments_details', 'Get user system assignments details dashboard information'
|
|
798
971
|
def assignments_details
|
|
@@ -805,9 +978,11 @@ module Emasser
|
|
|
805
978
|
puts to_output_hash(result).green
|
|
806
979
|
rescue EmassClient::ApiError => e
|
|
807
980
|
puts 'Exception when calling DashboardsApi->get_user_system_assignments_details'.red
|
|
808
|
-
puts to_output_hash(e)
|
|
981
|
+
puts to_output_hash(e)
|
|
809
982
|
end
|
|
810
983
|
|
|
984
|
+
#--------------------------------------------------------------------------
|
|
985
|
+
# Privacy Compliance Dashboard
|
|
811
986
|
# /api/dashboards/system-privacy-summary
|
|
812
987
|
desc 'privacy_summary', 'Get user system privacy summary dashboard information'
|
|
813
988
|
def privacy_summary
|
|
@@ -820,7 +995,7 @@ module Emasser
|
|
|
820
995
|
puts to_output_hash(result).green
|
|
821
996
|
rescue EmassClient::ApiError => e
|
|
822
997
|
puts 'Exception when calling DashboardsApi->get_system_privacy_summary'.red
|
|
823
|
-
puts to_output_hash(e)
|
|
998
|
+
puts to_output_hash(e)
|
|
824
999
|
end
|
|
825
1000
|
|
|
826
1001
|
# /api/dashboards/va-omb-fisma-saop-summary
|
|
@@ -838,6 +1013,8 @@ module Emasser
|
|
|
838
1013
|
puts to_output_hash(e).yellow
|
|
839
1014
|
end
|
|
840
1015
|
|
|
1016
|
+
#--------------------------------------------------------------------------
|
|
1017
|
+
# System A&A Summary Dashboard
|
|
841
1018
|
# /api/dashboards/va-system-aa-summary
|
|
842
1019
|
desc 'va_aa_summary', 'Get VA system A&A summary dashboard information'
|
|
843
1020
|
def va_aa_summary
|
|
@@ -853,6 +1030,8 @@ module Emasser
|
|
|
853
1030
|
puts to_output_hash(e).yellow
|
|
854
1031
|
end
|
|
855
1032
|
|
|
1033
|
+
#--------------------------------------------------------------------------
|
|
1034
|
+
# System A2.0 Summary Dashboard
|
|
856
1035
|
# /api/dashboards/va-system-a2-summary
|
|
857
1036
|
desc 'va_a2_summary', 'Get VA system A2.0 summary dashboard information'
|
|
858
1037
|
def va_a2_summary
|
|
@@ -868,11 +1047,13 @@ module Emasser
|
|
|
868
1047
|
puts to_output_hash(e).yellow
|
|
869
1048
|
end
|
|
870
1049
|
|
|
1050
|
+
#--------------------------------------------------------------------------
|
|
1051
|
+
# System P.L. 109 Reporting Summary Dashboard
|
|
871
1052
|
# /api/dashboards/va-system-pl-109-reporting-summary
|
|
872
1053
|
desc 'va_pl_109_summary', 'Get VA System P.L. 109 reporting summary dashboard information'
|
|
873
1054
|
def va_pl_109_summary
|
|
874
|
-
|
|
875
|
-
optional_options
|
|
1055
|
+
optional_options = options.clone
|
|
1056
|
+
optional_options.delete('orgId')
|
|
876
1057
|
|
|
877
1058
|
result = EmassClient::DashboardsApi.new.get_va_system_pl109_reporting_summary(
|
|
878
1059
|
options[:orgId], optional_options
|
|
@@ -883,6 +1064,8 @@ module Emasser
|
|
|
883
1064
|
puts to_output_hash(e).yellow
|
|
884
1065
|
end
|
|
885
1066
|
|
|
1067
|
+
#--------------------------------------------------------------------------
|
|
1068
|
+
# FISMA Inventory Summary Dashboard
|
|
886
1069
|
# /api/dashboards/va-system-fisma-inventory-summary
|
|
887
1070
|
desc 'fisma_inventory_summary', 'Get VA system FISMA inventory summary dashboard information'
|
|
888
1071
|
def fisma_inventory_summary
|
|
@@ -897,6 +1080,68 @@ module Emasser
|
|
|
897
1080
|
puts 'Exception when calling DashboardsApi->get_va_system_fisma_invetory_summary'.red
|
|
898
1081
|
puts to_output_hash(e).yellow
|
|
899
1082
|
end
|
|
1083
|
+
|
|
1084
|
+
# /api/dashboards/va-system-fisma-inventory-crypto-summary
|
|
1085
|
+
desc 'fisma_inventory_crypto_summary', 'Get VA system FISMA inventory crypto summary dashboard information'
|
|
1086
|
+
def fisma_inventory_crypto_summary
|
|
1087
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
1088
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
1089
|
+
|
|
1090
|
+
result = EmassClient::DashboardsApi.new.get_va_system_fisma_invetory_crypto_summary(
|
|
1091
|
+
options[:orgId], optional_options
|
|
1092
|
+
)
|
|
1093
|
+
puts to_output_hash(result).green
|
|
1094
|
+
rescue EmassClient::ApiError => e
|
|
1095
|
+
puts 'Exception when calling DashboardsApi->get_va_system_fisma_invetory_crypto_summary'.red
|
|
1096
|
+
puts to_output_hash(e).yellow
|
|
1097
|
+
end
|
|
1098
|
+
|
|
1099
|
+
#--------------------------------------------------------------------------
|
|
1100
|
+
# Threat Risks Dashboard
|
|
1101
|
+
# /api/dashboards/va-system-threat-risks-summary
|
|
1102
|
+
desc 'threat_risk_summary', 'Get VA System Threat Risks Summary dashboard information'
|
|
1103
|
+
def threat_risk_summary
|
|
1104
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
1105
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
1106
|
+
|
|
1107
|
+
result = EmassClient::DashboardsApi.new.get_va_system_threat_risk_summary(
|
|
1108
|
+
options[:orgId], optional_options
|
|
1109
|
+
)
|
|
1110
|
+
puts to_output_hash(result).green
|
|
1111
|
+
rescue EmassClient::ApiError => e
|
|
1112
|
+
puts 'Exception when calling DashboardsApi->get_va_system_threat_risk_summary'.red
|
|
1113
|
+
puts to_output_hash(e).yellow
|
|
1114
|
+
end
|
|
1115
|
+
|
|
1116
|
+
# /api/dashboards/va-system-threat-sources-details
|
|
1117
|
+
desc 'threat_risk_details', 'Get VA System Threat Sources Details dashboard information'
|
|
1118
|
+
def threat_risk_details
|
|
1119
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
1120
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
1121
|
+
|
|
1122
|
+
result = EmassClient::DashboardsApi.new.get_va_system_threat_source_details(
|
|
1123
|
+
options[:orgId], optional_options
|
|
1124
|
+
)
|
|
1125
|
+
puts to_output_hash(result).green
|
|
1126
|
+
rescue EmassClient::ApiError => e
|
|
1127
|
+
puts 'Exception when calling DashboardsApi->get_va_system_threat_source_details'.red
|
|
1128
|
+
puts to_output_hash(e).yellow
|
|
1129
|
+
end
|
|
1130
|
+
|
|
1131
|
+
# /api/dashboards/va-system-threat-architecture-details
|
|
1132
|
+
desc 'threat_architecture_details', 'Get VA System Threat Architecture Detail dashboard information'
|
|
1133
|
+
def threat_architecture_details
|
|
1134
|
+
optional_options_keys = optional_options(@_initializer).keys
|
|
1135
|
+
optional_options = to_input_hash(optional_options_keys, options)
|
|
1136
|
+
|
|
1137
|
+
result = EmassClient::DashboardsApi.new.get_va_system_threat_architecture_details(
|
|
1138
|
+
options[:orgId], optional_options
|
|
1139
|
+
)
|
|
1140
|
+
puts to_output_hash(result).green
|
|
1141
|
+
rescue EmassClient::ApiError => e
|
|
1142
|
+
puts 'Exception when calling DashboardsApi->get_va_system_threat_architecture_details'.red
|
|
1143
|
+
puts to_output_hash(e).yellow
|
|
1144
|
+
end
|
|
900
1145
|
end
|
|
901
1146
|
|
|
902
1147
|
class Get < SubCommandBase
|
|
@@ -12,7 +12,7 @@ module OptionsParser
|
|
|
12
12
|
private
|
|
13
13
|
|
|
14
14
|
def options_that_are(initializer, constraint)
|
|
15
|
-
raise(ArgumentError, 'constraint must be required or optional') unless %i[required optional].include?(constraint)
|
|
15
|
+
raise(ArgumentError, 'constraint must be, required or optional') unless %i[required optional].include?(constraint)
|
|
16
16
|
|
|
17
17
|
method = constraint.eql?(:required) ? :select : :reject
|
|
18
18
|
initializer[2][:current_command].options.send(method) { |_k, v| v.required }
|
|
@@ -80,8 +80,10 @@ module OutputConverters
|
|
|
80
80
|
# rubocop:enable Style/IfWithBooleanLiteralBranches, Style/RescueStandardError, Metrics/BlockNesting
|
|
81
81
|
|
|
82
82
|
# rubocop:disable Style/IdenticalConditionalBranches
|
|
83
|
+
# rubocop:disable Performance/RedundantMatch, Performance/RegexpMatch
|
|
84
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
83
85
|
def change_to_datetime(obj)
|
|
84
|
-
if obj.nil?
|
|
86
|
+
if obj.nil? || obj.is_a?(String)
|
|
85
87
|
return obj
|
|
86
88
|
end
|
|
87
89
|
|
|
@@ -96,7 +98,7 @@ module OutputConverters
|
|
|
96
98
|
obj_entry[key] = hash_array
|
|
97
99
|
data_obj.merge!(obj_entry)
|
|
98
100
|
else
|
|
99
|
-
if /(
|
|
101
|
+
if /(DATE|TIMESTAMP|LASTSEEN|TIME|ATD)/.match(key.to_s.upcase)
|
|
100
102
|
value = value.nil? ? value : Time.at(value.to_i)
|
|
101
103
|
end
|
|
102
104
|
obj_entry[key] = value
|
|
@@ -108,4 +110,6 @@ module OutputConverters
|
|
|
108
110
|
# rubocop:enable Style/RedundantReturn
|
|
109
111
|
end
|
|
110
112
|
# rubocop:enable Style/IdenticalConditionalBranches
|
|
113
|
+
# rubocop:enable Performance/RedundantMatch, Performance/RegexpMatch
|
|
114
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
111
115
|
end
|
data/lib/emasser/post.rb
CHANGED
|
@@ -37,8 +37,33 @@ class Thor
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
module Emasser
|
|
40
|
+
# Common static messages
|
|
40
41
|
POAMS_POST_HELP_MESSAGE = "\nInvoke \"emasser post poams help add\" for additional help"
|
|
41
42
|
SCAN_POST_HELP_MESSAGE = "\nInvoke \"emasser post scan_findings help clear\" for additional help"
|
|
43
|
+
|
|
44
|
+
# The Registration endpoint provides the ability to register a certificate & obtain an API-key.
|
|
45
|
+
#
|
|
46
|
+
# Endpoint:
|
|
47
|
+
# /api/api-key - Register certificate and obtain API key
|
|
48
|
+
class Register < SubCommandBase
|
|
49
|
+
def self.exit_on_failure?
|
|
50
|
+
true
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
desc 'cert', 'Register a certificate & obtain an API-key'
|
|
54
|
+
# rubocop:disable Style/RedundantBegin
|
|
55
|
+
def cert
|
|
56
|
+
begin
|
|
57
|
+
result = EmassClient::RegistrationApi.new.register_user({})
|
|
58
|
+
puts to_output_hash(result).green
|
|
59
|
+
rescue EmassClient::ApiError => e
|
|
60
|
+
puts 'Exception when calling RegistrationApi->register_user'.red
|
|
61
|
+
puts to_output_hash(e)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
# rubocop:enable Style/RedundantBegin
|
|
65
|
+
end
|
|
66
|
+
|
|
42
67
|
# The Test Results endpoints provide the ability to add test results for a
|
|
43
68
|
# system's Assessment Procedures (CCIs) which determine Security Control compliance.
|
|
44
69
|
#
|
|
@@ -772,6 +797,9 @@ module Emasser
|
|
|
772
797
|
end
|
|
773
798
|
|
|
774
799
|
class Post < SubCommandBase
|
|
800
|
+
desc 'register', 'Register a certificate & obtain an API-key'
|
|
801
|
+
subcommand 'register', Register
|
|
802
|
+
|
|
775
803
|
desc 'test_results', 'Add system Test Results'
|
|
776
804
|
subcommand 'test_results', TestResults
|
|
777
805
|
|
data/lib/emasser/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: emasser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Amndeep Singh Mann
|
|
@@ -12,22 +12,28 @@ authors:
|
|
|
12
12
|
autorequire:
|
|
13
13
|
bindir: exe
|
|
14
14
|
cert_chain: []
|
|
15
|
-
date:
|
|
15
|
+
date: 2023-06-27 00:00:00.000000000 Z
|
|
16
16
|
dependencies:
|
|
17
17
|
- !ruby/object:Gem::Dependency
|
|
18
18
|
name: activesupport
|
|
19
19
|
requirement: !ruby/object:Gem::Requirement
|
|
20
20
|
requirements:
|
|
21
|
-
- - "
|
|
21
|
+
- - ">="
|
|
22
22
|
- !ruby/object:Gem::Version
|
|
23
23
|
version: 6.1.4
|
|
24
|
+
- - "<"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 7.1.0
|
|
24
27
|
type: :runtime
|
|
25
28
|
prerelease: false
|
|
26
29
|
version_requirements: !ruby/object:Gem::Requirement
|
|
27
30
|
requirements:
|
|
28
|
-
- - "
|
|
31
|
+
- - ">="
|
|
29
32
|
- !ruby/object:Gem::Version
|
|
30
33
|
version: 6.1.4
|
|
34
|
+
- - "<"
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: 7.1.0
|
|
31
37
|
- !ruby/object:Gem::Dependency
|
|
32
38
|
name: colorize
|
|
33
39
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -90,14 +96,14 @@ dependencies:
|
|
|
90
96
|
requirements:
|
|
91
97
|
- - "~>"
|
|
92
98
|
- !ruby/object:Gem::Version
|
|
93
|
-
version: '3.
|
|
99
|
+
version: '3.10'
|
|
94
100
|
type: :runtime
|
|
95
101
|
prerelease: false
|
|
96
102
|
version_requirements: !ruby/object:Gem::Requirement
|
|
97
103
|
requirements:
|
|
98
104
|
- - "~>"
|
|
99
105
|
- !ruby/object:Gem::Version
|
|
100
|
-
version: '3.
|
|
106
|
+
version: '3.10'
|
|
101
107
|
- !ruby/object:Gem::Dependency
|
|
102
108
|
name: bundler
|
|
103
109
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -238,8 +244,8 @@ dependencies:
|
|
|
238
244
|
- - "~>"
|
|
239
245
|
- !ruby/object:Gem::Version
|
|
240
246
|
version: '0.5'
|
|
241
|
-
description: emasser can be used as a gem or used from the command line (CL) to
|
|
242
|
-
eMASS endpoints via their API.
|
|
247
|
+
description: The emasser can be used as a gem or used from the command line (CL) to
|
|
248
|
+
access eMASS endpoints via their API.
|
|
243
249
|
email:
|
|
244
250
|
- saf@groups.mitre.org
|
|
245
251
|
executables:
|
|
@@ -329,7 +335,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
329
335
|
- !ruby/object:Gem::Version
|
|
330
336
|
version: '0'
|
|
331
337
|
requirements: []
|
|
332
|
-
rubygems_version: 3.3.
|
|
338
|
+
rubygems_version: 3.3.26
|
|
333
339
|
signing_key:
|
|
334
340
|
specification_version: 4
|
|
335
341
|
summary: Provide an automated capability for invoving eMASS API endpoints
|