emasser 1.0.3 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.env-example +2 -0
  3. data/.github/workflows/gh-pages.yml +4 -5
  4. data/.github/workflows/release.yml +9 -9
  5. data/Dockerfile +6 -4
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +23 -30
  8. data/README.md +87 -78
  9. data/docs/features.md +343 -207
  10. data/docs/images/emasser_architecture.jpg +0 -0
  11. data/emasser.gemspec +5 -3
  12. data/images/emasser_architecture.jpg +0 -0
  13. data/images/emasser_diagram-Page-3.jpg +0 -0
  14. data/lib/emasser/cli.rb +2 -2
  15. data/lib/emasser/configuration.rb +1 -0
  16. data/lib/emasser/constants.rb +11 -3
  17. data/lib/emasser/delete.rb +9 -7
  18. data/lib/emasser/get.rb +43 -48
  19. data/lib/emasser/help/cloudresource_post_mapper.md +62 -0
  20. data/lib/emasser/help/container_post_mapper.md +44 -0
  21. data/lib/emasser/output_converters.rb +101 -4
  22. data/lib/emasser/post.rb +231 -38
  23. data/lib/emasser/put.rb +23 -16
  24. data/lib/emasser/version.rb +1 -1
  25. metadata +19 -25
  26. data/.github/workflows/generate_docs.yml +0 -33
  27. data/docs/developers.md +0 -115
  28. data/docs/swagger/dist/favicon-16x16.png +0 -0
  29. data/docs/swagger/dist/favicon-32x32.png +0 -0
  30. data/docs/swagger/dist/oauth2-redirect.html +0 -75
  31. data/docs/swagger/dist/swagger-ui-bundle.js +0 -3
  32. data/docs/swagger/dist/swagger-ui-bundle.js.map +0 -1
  33. data/docs/swagger/dist/swagger-ui-es-bundle-core.js +0 -3
  34. data/docs/swagger/dist/swagger-ui-es-bundle-core.js.map +0 -1
  35. data/docs/swagger/dist/swagger-ui-es-bundle.js +0 -3
  36. data/docs/swagger/dist/swagger-ui-es-bundle.js.map +0 -1
  37. data/docs/swagger/dist/swagger-ui-standalone-preset.js +0 -3
  38. data/docs/swagger/dist/swagger-ui-standalone-preset.js.map +0 -1
  39. data/docs/swagger/dist/swagger-ui.css +0 -4
  40. data/docs/swagger/dist/swagger-ui.css.map +0 -1
  41. data/docs/swagger/dist/swagger-ui.js +0 -3
  42. data/docs/swagger/dist/swagger-ui.js.map +0 -1
  43. data/docs/swagger/index.html +0 -60
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18e0147d78cbeb98b610045c09b4ce03c5a941379e803bac7a3ecffdff566566
4
- data.tar.gz: fa0c7a1c0b0864dc727eb358839c7825c219e5ace076c1df88ea7e03912ac9e7
3
+ metadata.gz: 04d5fabb5cd03ea2303313f9556bb0ab4758642acce449e545c06385db62e995
4
+ data.tar.gz: 8de5b75a59d1cf87539accfb26fef79fc6ab3633753726ab13a8db176d063286
5
5
  SHA512:
6
- metadata.gz: ae4215cf7639312137b9418dd0af7c75164a0db000cefe91bbb17c61849d72058a1932d6a4b87234455506bc3353cdf385028aebb5e822e813a684b92a8f6536
7
- data.tar.gz: 639dfe19211d633dfed0ba1d66c1180d5efaac0c999226ff1fb6d5444cbd4885fde4a71ffc982bcd858e1a104c3ed6089b4bf69589e27d7831585a88182d9871
6
+ metadata.gz: d76892c176a01f532bc1fc3025a400bc31a09217aac8622bb96c71aac92be66abbee84115c6a88dd1244890182a68bab75500d7b3138cdc4ba3a59088059313a
7
+ data.tar.gz: 76af52e24772b720e3a5fd6f45af2acd4356c6eb808c50b309b95a079ad854988797a576ff05dd1a9e029c53dce40c2f5fc1a31fe4b05eb7221a020ec75ccb43
data/.env-example CHANGED
@@ -8,3 +8,5 @@ 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>
10
10
  export EMASSER_DEBUGGING=<set debugging - true or false>
11
+ export EMASSER_CLI_DISPLAY_NULL=<display null value fields - true or false>
12
+ export EMASSER_EPOCH_TO_DATETIME=<convert epoch to data/time value - true or false>
@@ -2,8 +2,8 @@ name: Deploy to GitHub Pages
2
2
  on:
3
3
  push:
4
4
  branches: [ main ]
5
- # pull_request:
6
- # branches: [ main ]
5
+ pull_request:
6
+ branches: [ main ]
7
7
 
8
8
  jobs:
9
9
  build-deploy:
@@ -17,11 +17,10 @@ jobs:
17
17
  run: |
18
18
  sudo mkdir -p /publish
19
19
  sudo mkdir -p /publish/docs
20
+ sudo mkdir -p /publish/images
21
+ sudo cp -R ./images /publish
20
22
  sudo cp README.md /publish
21
23
  sudo cp _config.yml /publish/_config.yml
22
- sudo cp -R ./docs/redoc /publish/docs/redoc
23
- sudo cp -R ./docs/swagger /publish/docs/swagger
24
- sudo cp ./docs/developers.md /publish/docs/developers.md
25
24
  sudo cp ./docs/features.md /publish/docs/features.md
26
25
 
27
26
  - name: Deploy Markdown Files 🚀
@@ -28,15 +28,15 @@ jobs:
28
28
  GPR_API_KEY: ${{secrets.GITHUB_TOKEN}}
29
29
  - name: Build emasser
30
30
  run: gem build *.gemspec
31
- - name: Build emass_client
32
- run: gem build -C emass_client/ruby_client/ emass_client.gemspec
31
+ # - name: Build emass_client
32
+ # run: gem build -C emass_client/ruby_client/ emass_client.gemspec
33
33
  - name: Publish to RubyGems
34
34
  run: |
35
35
  gem push --KEY rubygems --host https://rubygems.org *.gem
36
- gem push --KEY rubygems --host https://rubygems.org emass_client/ruby_client/*.gem
37
- # - name: Publish to GPR
38
- # run: |
39
- # gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
40
- # gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} emass_client/ruby_client/*.gem
41
- # env:
42
- # OWNER: mitre
36
+ # gem push --KEY rubygems --host https://rubygems.org emass_client/ruby_client/*.gem
37
+ - name: Publish to GPR
38
+ run: |
39
+ gem push --KEY github --host https://rubygems.pkg.github.com/mitre *.gem
40
+ # gem push --KEY github --host https://rubygems.pkg.github.com/mitre emass_client/ruby_client/*.gem
41
+ env:
42
+ OWNER: mitre
data/Dockerfile CHANGED
@@ -18,21 +18,23 @@ RUN gem install bundler -v '2.3.5'
18
18
  RUN apt update && apt install -y build-essential
19
19
  COPY . .
20
20
  RUN bundle install
21
- WORKDIR /emasser/emass_client/ruby_client
22
- RUN gem build emass_client.gemspec
21
+ # WORKDIR /emasser/emass_client/ruby_client
22
+ # RUN gem build emass_client.gemspec
23
23
  WORKDIR /emasser
24
24
  RUN gem build emasser.gemspec
25
25
  RUN mkdir gems
26
- RUN mv emass_client/ruby_client/emass_client*.gem gems/emass_client.gem
26
+ # RUN mv emass_client/ruby_client/emass_client*.gem gems/emass_client.gem
27
27
  RUN mv emasser*.gem gems/emasser.gem
28
28
 
29
+
29
30
  FROM ruby:2-alpine
30
31
 
31
32
  # Use the line below when testing creating the container locally
32
33
  # RUN sed -i 's/https/http/g' /etc/apk/repositories
33
34
  COPY --from=build /emasser/gems /emass-gems
34
35
 
35
- RUN apk add build-base libcurl && gem install /emass-gems/emass_client.gem && gem install /emass-gems/emasser.gem
36
+ # RUN apk add build-base libcurl && gem install /emass-gems/emass_client.gem && gem install /emass-gems/emasser.gem
37
+ RUN apk add build-base libcurl && gem install /emass-gems/emasser.gem
36
38
 
37
39
  VOLUME [ "/data" ]
38
40
  WORKDIR /data
data/Gemfile CHANGED
@@ -5,4 +5,4 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in emasser.gemspec
6
6
  gemspec
7
7
 
8
- gem 'emass_client', path: './emass_client/ruby_client/'
8
+ #gem 'emass_client', path: './emass_client/ruby_client/'
data/Gemfile.lock CHANGED
@@ -1,80 +1,74 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- emasser (1.0.3)
4
+ emasser (1.0.6)
5
5
  activesupport (~> 6.1.4)
6
6
  colorize (~> 0.8.1)
7
7
  dotenv (~> 2.7.6)
8
- emass_client (~> 1.0)
8
+ emass_client (~> 1.0, != 1.0.3)
9
9
  rubyzip (~> 2.3.2)
10
10
  thor (~> 1.1.0)
11
11
 
12
- PATH
13
- remote: emass_client/ruby_client
14
- specs:
15
- emass_client (1.0.3)
16
- json (~> 2.1, >= 2.1.0)
17
- typhoeus (~> 1.0, >= 1.0.1)
18
-
19
12
  GEM
20
13
  remote: https://rubygems.org/
21
14
  specs:
22
- activesupport (6.1.4.4)
15
+ activesupport (6.1.6)
23
16
  concurrent-ruby (~> 1.0, >= 1.0.2)
24
17
  i18n (>= 1.6, < 2)
25
18
  minitest (>= 5.1)
26
19
  tzinfo (~> 2.0)
27
20
  zeitwerk (~> 2.3)
28
21
  ast (2.4.2)
29
- bundler-audit (0.9.0.1)
22
+ bundler-audit (0.9.1)
30
23
  bundler (>= 1.2.0, < 3)
31
24
  thor (~> 1.0)
32
25
  byebug (11.1.3)
33
26
  colorize (0.8.1)
34
- concurrent-ruby (1.1.9)
27
+ concurrent-ruby (1.1.10)
35
28
  diff-lcs (1.5.0)
36
29
  dotenv (2.7.6)
30
+ emass_client (1.0.6)
31
+ typhoeus (~> 1.0, >= 1.0.1)
37
32
  ethon (0.15.0)
38
33
  ffi (>= 1.15.0)
39
34
  ffi (1.15.5-x64-mingw32)
40
- i18n (1.8.11)
35
+ i18n (1.10.0)
41
36
  concurrent-ruby (~> 1.0)
42
- json (2.6.1)
43
37
  minitest (5.15.0)
44
- parallel (1.21.0)
45
- parser (3.1.0.0)
38
+ parallel (1.22.1)
39
+ parser (3.1.2.0)
46
40
  ast (~> 2.4.1)
47
41
  rainbow (3.1.1)
48
42
  rake (13.0.6)
49
- regexp_parser (2.2.0)
43
+ regexp_parser (2.5.0)
50
44
  rexml (3.2.5)
51
45
  rspec (3.10.0)
52
46
  rspec-core (~> 3.10.0)
53
47
  rspec-expectations (~> 3.10.0)
54
48
  rspec-mocks (~> 3.10.0)
55
- rspec-core (3.10.1)
49
+ rspec-core (3.10.2)
56
50
  rspec-support (~> 3.10.0)
57
- rspec-expectations (3.10.1)
51
+ rspec-expectations (3.10.2)
58
52
  diff-lcs (>= 1.2.0, < 2.0)
59
53
  rspec-support (~> 3.10.0)
60
- rspec-mocks (3.10.2)
54
+ rspec-mocks (3.10.3)
61
55
  diff-lcs (>= 1.2.0, < 2.0)
62
56
  rspec-support (~> 3.10.0)
63
57
  rspec-support (3.10.3)
64
- rubocop (1.24.1)
58
+ rubocop (1.30.0)
65
59
  parallel (~> 1.10)
66
- parser (>= 3.0.0.0)
60
+ parser (>= 3.1.0.0)
67
61
  rainbow (>= 2.2.2, < 4.0)
68
62
  regexp_parser (>= 1.8, < 3.0)
69
- rexml
70
- rubocop-ast (>= 1.15.1, < 2.0)
63
+ rexml (>= 3.2.5, < 4.0)
64
+ rubocop-ast (>= 1.18.0, < 2.0)
71
65
  ruby-progressbar (~> 1.7)
72
66
  unicode-display_width (>= 1.4.0, < 3.0)
73
- rubocop-ast (1.15.1)
74
- parser (>= 3.0.1.1)
75
- rubocop-minitest (0.17.0)
67
+ rubocop-ast (1.18.0)
68
+ parser (>= 3.1.1.0)
69
+ rubocop-minitest (0.20.0)
76
70
  rubocop (>= 0.90, < 2.0)
77
- rubocop-performance (1.13.1)
71
+ rubocop-performance (1.14.0)
78
72
  rubocop (>= 1.7.0, < 2.0)
79
73
  rubocop-ast (>= 0.4.0)
80
74
  rubocop-rake (0.6.0)
@@ -88,7 +82,7 @@ GEM
88
82
  concurrent-ruby (~> 1.0)
89
83
  unicode-display_width (2.1.0)
90
84
  yaml (0.2.0)
91
- zeitwerk (2.5.3)
85
+ zeitwerk (2.5.4)
92
86
 
93
87
  PLATFORMS
94
88
  x64-mingw32
@@ -97,7 +91,6 @@ DEPENDENCIES
97
91
  bundler (~> 2.3)
98
92
  bundler-audit (~> 0.7)
99
93
  byebug (~> 11.1.3)
100
- emass_client!
101
94
  emasser!
102
95
  rake (~> 13.0)
103
96
  rspec (~> 3.10.0)
data/README.md CHANGED
@@ -1,56 +1,36 @@
1
1
  # emasser
2
- ![GitHub Release Date](https://img.shields.io/github/release-date/mitre/emasser?label=Release%20Date)
3
- ![GitHub release (latest by date)](https://img.shields.io/github/v/release/mitre/emasser?label=Release%20Version)
4
- [![Gem Version](https://badge.fury.io/rb/emasser.svg)](https://badge.fury.io/rb/emasser)
5
-
2
+ ![GitHub Release Date](https://img.shields.io/github/release-date/mitre/emasser?label=Release%20Date&logo=github&color=blue)
3
+ ![GitHub release (latest by date)](https://img.shields.io/github/v/release/mitre/emasser?label=Release%20Version&logo=github) ![Gem](https://img.shields.io/gem/v/emasser?label=gem%20version&logo=ruby&logoColor=red) ![Docker Version](https://img.shields.io/docker/v/mitre/emasser?label=docker%20version&logo=docker&sort=semver)
6
4
 
7
5
  ![emasser Testing](https://github.com/mitre/emasser/actions/workflows/test-cli.yml/badge.svg)
8
6
  ![CodeQL Vulnerabilities and Errors](https://github.com/mitre/emasser/actions/workflows/codeql-analysis.yml/badge.svg)
9
- ![Docs Generation](https://github.com/mitre/emasser/actions/workflows/generate_docs.yml/badge.svg)
7
+ [![GitHub Pages](https://github.com/mitre/emasser/actions/workflows/gh-pages.yml/badge.svg)](https://github.com/mitre/emasser/actions/workflows/gh-pages.yml)
10
8
  ![Code Linter](https://github.com/mitre/emasser/actions/workflows/rubocop.yml/badge.svg)
11
- ## About
12
-
13
- `emasser` is a command line interface (CLI) that aims to automate routine business use-cases and provide utility surrounding the Enterprise Mission Assurance Support Service (eMASS) by leveraging its representational state transfer (REST) application programming interface (API) v3.2.
14
-
15
- ## Documentation
16
- emasser provides users with the following documentation:
17
-
18
- [**eMASS API Documentation**](https://mitre.github.io/emasser/docs/redoc/) | [**eMASS Swagger UI**](https://mitre.github.io/emasser/docs/swagger/)
19
-
20
- ## Current Features
21
-
22
- The following eMASS API HTTP methods are implemented:
23
- * `GET` view eMASS resources
24
- * `POST` add eMASS resources
25
- * `PUT` update eMASS resources
26
- * `DELETE` remove eMASS resources
27
-
28
-
29
- [**emasser CLI Features**](docs/features.md) | [**emasser Developers Instructions**](docs/developers.md)
30
9
 
31
- ## In Development
10
+ ## About
32
11
 
33
- This project is actively looking for user stories, features to build, and interactions with eMASS. See Roadmap for more information.
12
+ `emasser` is a Command Line Interface (CLI) that aims to automate routine business use-cases and provide utility surrounding the Enterprise Mission Assurance Support Service (eMASS) by leveraging its Representational State Transfer (REST) Application Programming Interface (API).
34
13
 
35
- * Support raw JSON upload
14
+ ***NOTE***: The `emasser` CLI utilizes the [emass_client](https://github.com/mitre/emass_client) RubyGem executable package to access the eMASS API endpoints.
36
15
 
37
- ## Roadmap
16
+ ---
17
+ ## Documentation
18
+ For detail content information about the `eMASS` API references the [**eMASS API Specification**](https://mitre.github.io/emass_client/docs/redoc/) page.
38
19
 
39
- Emasser is currently in MVP development and we are targeting all the features listed in Current and In Development for version 1.0.X. The Road Map are things that the team and community have talked about as possible great additions but feedback on which should come first, second, and third are what we would love feedback on from you.
20
+ For detail features provided by the `emasser` CLI references the [**emasser CLI Features**](docs/features.md) page.
40
21
 
41
- * Update a system's record with met/not met NIST 800-53 Security and Privacy controls and/or common control indicators (CCI) based on scan results expressed in [Heimdall Data Format (HDF)](https://saf.mitre.org/#/normalize).
42
- * Resolve a particular plan of action and milestone (POA&M) based on scan results or git-ops workflow.
43
- * PKCS11 support to run in an attended mode.
22
+ The `emasser` CLI [**Architecture**](#emasser-cli-architecture) depicts the `emasser` structure, and provides an explanation of how it behaves.
44
23
 
45
- ## Installation
24
+ ---
25
+ ## Installation Options
46
26
 
47
- `emasser` is a Ruby CLI that is distributed via git only. You must request the source from saf@groups.mitre.org
27
+ `emasser` is a Ruby CLI distributed via GitHub (this repository), [RubyGems](https://rubygems.org/gems/emass_client/versions/), or [Docker](https://hub.docker.com/r/mitre/emasser/tags).
48
28
 
49
- Installation Dependencies:
29
+ ### Installation Dependencies
50
30
  * git
51
- * Ruby version 2.7 or greater.
31
+ * Ruby version 2.7 or greater
52
32
 
53
- Runtime Dependencies:
33
+ ### Runtime Dependencies
54
34
  * Ruby version 2.7 or greater.
55
35
  * `rubyzip (latest version)`
56
36
  * `emass_client (latest version)`
@@ -63,52 +43,74 @@ Runtime Dependencies:
63
43
  - Install [cURL for windows](https://community.chocolatey.org/packages/curl) and add the installation directory to the PATH.
64
44
 
65
45
 
66
- To install (via github):
67
- ```bash
68
- git clone <path to emasser git> emasser
69
- cd emasser
70
- ```
71
- - Build the emasser gem
72
- ```bash
73
- gem build *.gemspec
74
- gem install *.gem
75
- ```
76
- - Build the emass_client gem
77
- ```bash
78
- cd emass_client/ruby_client
79
- gem build *.gemspec
80
- gem install *.gem
81
- ```
46
+ ## Install via GitHub
47
+ - [Clone](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) the repository
48
+ ```bash
49
+ git clone <path to emasser repository> emasser
50
+ cd emasser
51
+ ```
52
+ - Build the emasser gem*
53
+ ```bash
54
+ gem build *.gemspec
55
+ gem install *.gem
56
+ ```
82
57
 
83
- To install (via published RubyGems):
84
- ```bash
85
- gem install emasser
86
- ```
58
+ ***Note:** To run in development mode there isn't a need to build the gem, simply clone from the emasser repository and use:
87
59
 
88
- **Note:** To run in development mode there isn't a need to build the gem, simply clone from the emasser repository and use:
89
60
  ```
61
+ bundle install
62
+
90
63
  bundle exec exe/emasser [command]
91
64
  ```
92
65
 
66
+ ## Install via published RubyGems
67
+ - Install the `emasser` gem from the [RubyGems](https://rubygems.org/gems/emass_client/versions/) registry
68
+ ```bash
69
+ gem install emasser
70
+ ```
71
+ - Update the `emasser` gem to the latest version
72
+ ```bash
73
+ gem update emasser
74
+ ```
75
+
76
+ - To run (execute a command) create a `.env*` file in the directory where you want to invoke the `emmaser` and use:
77
+
78
+ ```
79
+ emasser [command]
80
+ ```
81
+ ***Note:** See [Setting Environment Variables Configuration](https://github.com/mitre/emasser/wiki/Editing-Environment-Variables-Configuration) for detailed information on required and optional variables.
82
+
93
83
  ## Using Docker
94
- ### Run the emasser Docker Container
95
- - To run the emasser container use:
84
+ Ensure that docker engine is running and start the emasser Docker Container.
85
+ ### Install
86
+ - On Linux or Mac:
96
87
  ```
97
88
  docker run --rm -v $PWD/path-to-secrets:/data mitre/emasser:latest
98
89
  ```
99
- - To run the emasser container in a `Windows terminal (cmd)` use:
90
+ - On Windows:
91
+ ```
92
+ docker run --rm -v %cd%/path-to-secrets:/data mitre/emasser:latest
100
93
  ```
101
- docker run --rm -v %cd%/path-to-secrets:/data mitre/emasser:latest
94
+ - Update via Docker
95
+ ```bash
96
+ docker pull mitre/emasser:latest
102
97
  ```
103
- **Notes:**
98
+
99
+ **Docker Notes:**
104
100
  - Docker Options
105
101
  - `--rm` Automatically remove the container when it exits
106
102
  - `-v` Bind mount a volume
107
103
  - path-to-secrets
108
- - Path to the `.env` file and the appropriate eMASS certificates (key. pem and client.pem). See [Editing Environment Variables Configuration](https://github.com/mitre/emasser/wiki/Editing-Environment-Variables-Configuration)
104
+ - Is the path to the `.env` file and the appropriate eMASS certificates (key.pem and client.pem).
105
+ - For example, if the `.env` is located in the same directory where the `docker run` is executed, running the command in a Windows platform would look like this:
106
+
107
+ ```
108
+ docker run --rm -v %cd%/.:/data mitre/emasser:latest
109
+ ```
110
+ - See [Editing Environment Variables Configuration](https://github.com/mitre/emasser/wiki/Editing-Environment-Variables-Configuration)
109
111
 
110
112
  ### Run emasser API client commands
111
- - To list all GET, POST, PUT, or DELETE commands use:
113
+ - To list all available GET, POST, PUT, or DELETE commands use:
112
114
  ```
113
115
  docker run --rm -v $PWD/path-to-secrets:/data mitre/emasser:latest get help
114
116
  ```
@@ -121,34 +123,41 @@ bundle exec exe/emasser [command]
121
123
  ```
122
124
  docker run --rm -v $PWD/path-to-secrets:/data mitre/emasser:latest delete help
123
125
  ```
126
+ Example commands are for Linux or Mac, replace the `$PWD` with `%cd%` for Windows
124
127
 
125
128
  ### Delete (remove) the Docker Container
126
129
  ```
127
130
  docker rmi -f mitre/emasser
128
131
  ```
132
+ ---
133
+ ## Roadmap
129
134
 
130
- ## Use
135
+ The `emasser` implements all endpoints provided by the `eMASS` API, there is, all of the functions available from the `eMASS GUI` that are exposed by the API. If additional functions are useful (accessible via the CLI), please submit a request to [eMass Tier III Support](mailto:disa.meade.id.mbx.emass-tier-iii-support@mail.mil) for possible inclusion into the API.
131
136
 
132
- **Requirement 1 & 2: Authentication and Authorization:**
133
- `emasser` requires authentication to eMASS as well as authorization to use the eMASS API. This authentication and authorization is **not** a function of `emasser` and needs to be handled directly with discussions with [eMASS](https://www.dcsa.mil/is/emass/). `emasser` will accept credentials that are created based on those discussions.
137
+ The Road Map seeks to add any useful features that facilitates organization that utilizes `eMASS` instances and have a need to automate their cybersecurity management process.
134
138
 
135
- **Approve API Client for Actionable Requests**
136
- Users are required to log-in to eMASS and grant permissions for a client to update data within eMASS on their behalf. This is only required for actionable requests (PUT, POST, DELETE). The Registration Endpoint and all GET requests can be accessed without completing this process with the correct permissions.
139
+ For additional capability create an [issue](https://github.com/mitre/emasser/issues), and email it to the [SAF Team](mailto:saf@groups.mitre.org) citing the issue link so we can help.
137
140
 
138
- To establish an account with eMASS and/or acquire an api-key/user-uid, contact one of the listed POC:
139
- * [eMASS Tier III support - Website](https://www.dcsa.mil/is/emass/)
140
- * [Send email to eMASS Tier III support](disa.meade.id.mbx.emass-tier-iii-support@mail.mil)
141
- * [eMASS New User Registration (CAC required)](https://nisp.emass.apps.mil/Content/Help/jobaids/eMASS_OT_NewUser_Job_Aid.pdf)
141
+ Some proposed capabilities (looking for a sponsor) are:
142
+ * Update a system's record with met/not met NIST 800-53 Security and Privacy controls and/or common control indicators (CCI) based on scan results expressed in [Heimdall Data Format (HDF)](https://saf.mitre.org/#/normalize).
143
+ * Resolve a particular plan of action and milestone (POA&M) based on scan results or git-ops workflow.
144
+ * PKCS11 support to run in an attended mode.
142
145
 
143
146
 
144
147
  ## Design
145
148
 
146
- **Interactions with eMASS API:**
147
- `emasser` leverages a MITRE dependency, `emass_client`, which provides a REST API client based on a MITRE-created [OpenAPI](https://www.openapis.org/) version 3 specification for the official eMASS version 3.2 API documentation. This design enables REST API clients to be generated in [any supported programming language](https://swagger.io/tools/swagger-codegen/). This design decision enables `emass_client` to generate a Ruby client for `emasser` and a TypeScript client that is included with [Heimdall Enterprise Server](https://github.com/mitre/heimdall2).
149
+ ### Interactions with eMASS API
150
+ The `emasser` CLI leverages the [emass_client](https://github.com/mitre/emass_client), which provides a REST API client developed by MITRE based on the [OpenAPI V3](https://www.openapis.org/) standards for the official [eMASS API specification](https://mitre.github.io/emass_client/docs/redoc). This design enables REST API clients to be generated in [any supported programming language](https://openapi-generator.tech/docs/generators/). The design enables the `emass_client` to be generated independently of the emasser CLI. Currently, a Ruby and a Typescript eMASS client API are provided. The TypeScript client is used with the [Security Automation Framework CLI (SAF) CLI](https://github.com/mitre/saf).
151
+
152
+ ### Business Logic
153
+ Because interactions with the API are handled by a dependency, the bulk of `emasser` business logic is for accepting user input/output, reading data from eMASS or from input, transforming data, and routing data to the appropriate eMASS API endpoint. This business logic is organized into Ruby Classes and Modules based on the command or subcommand requested by the user.
148
154
 
149
- **Business Logic:**
150
- Because interactions with the API are handled by a dependency, the bulk of `emasser` is business logic for accepting user input/output, reading data from eMASS or from input, transforming data, and routing data to the appropriate eMASS API endpoint. This business logic is organized into Ruby Classes and Modules based on the command or subcommand requested by the user.
155
+ ## Emasser CLI Architecture
156
+ The `emasser` CLI makes use of the `emass_client` ruby gem to communicate with an `eMASS` instance via the `eMASS API` as depicted in the diagram below:
151
157
 
158
+ <div align="center">
159
+ <img src="images/emasser_architecture.jpg" alt="emasser CLI Architecture" title="emasser CLI Architecture">
160
+ </div>
152
161
 
153
162
  ### NOTICE
154
163