emasser 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (469) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +11 -0
  3. data/.env-example +10 -0
  4. data/.github/release-drafter.yml +16 -0
  5. data/.github/workflows/codeql-analysis.yml +70 -0
  6. data/.github/workflows/draft-release.yml +16 -0
  7. data/.github/workflows/generate_docs.yml +33 -0
  8. data/.github/workflows/gh-pages.yml +33 -0
  9. data/.github/workflows/release.yml +38 -0
  10. data/.github/workflows/rubocop.yml +23 -0
  11. data/.github/workflows/test-cli.yml +73 -0
  12. data/.gitignore +17 -0
  13. data/.mergify.yml +25 -0
  14. data/.rubocop.yml +80 -0
  15. data/.rubocop_todo.yml +27 -0
  16. data/CHANGELOG.md +16 -0
  17. data/Dockerfile +10 -0
  18. data/Gemfile +8 -0
  19. data/Gemfile.lock +110 -0
  20. data/LICENSE.md +15 -0
  21. data/README.md +108 -0
  22. data/Rakefile +18 -0
  23. data/TAGS +2393 -0
  24. data/_config.yml +2 -0
  25. data/docs/developers.md +115 -0
  26. data/docs/features.md +1193 -0
  27. data/docs/redoc/index.html +1231 -0
  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 +75 -0
  31. data/docs/swagger/dist/swagger-ui-bundle.js +3 -0
  32. data/docs/swagger/dist/swagger-ui-bundle.js.map +1 -0
  33. data/docs/swagger/dist/swagger-ui-es-bundle-core.js +3 -0
  34. data/docs/swagger/dist/swagger-ui-es-bundle-core.js.map +1 -0
  35. data/docs/swagger/dist/swagger-ui-es-bundle.js +3 -0
  36. data/docs/swagger/dist/swagger-ui-es-bundle.js.map +1 -0
  37. data/docs/swagger/dist/swagger-ui-standalone-preset.js +3 -0
  38. data/docs/swagger/dist/swagger-ui-standalone-preset.js.map +1 -0
  39. data/docs/swagger/dist/swagger-ui.css +4 -0
  40. data/docs/swagger/dist/swagger-ui.css.map +1 -0
  41. data/docs/swagger/dist/swagger-ui.js +3 -0
  42. data/docs/swagger/dist/swagger-ui.js.map +1 -0
  43. data/docs/swagger/index.html +60 -0
  44. data/emass_client/eMASSRestOpenApi.yaml +5698 -0
  45. data/emass_client/ruby_client/.gitignore +39 -0
  46. data/emass_client/ruby_client/.rspec +2 -0
  47. data/emass_client/ruby_client/.rubocop.yml +154 -0
  48. data/emass_client/ruby_client/.swagger-codegen/VERSION +1 -0
  49. data/emass_client/ruby_client/.swagger-codegen-ignore +23 -0
  50. data/emass_client/ruby_client/Gemfile +9 -0
  51. data/emass_client/ruby_client/README.md +1284 -0
  52. data/emass_client/ruby_client/Rakefile +8 -0
  53. data/emass_client/ruby_client/docs/ArtifactsApi.md +284 -0
  54. data/emass_client/ruby_client/docs/ArtifactsDelete.md +6 -0
  55. data/emass_client/ruby_client/docs/ArtifactsDeleteInner.md +7 -0
  56. data/emass_client/ruby_client/docs/ArtifactsExportApi.md +76 -0
  57. data/emass_client/ruby_client/docs/ArtifactsGet.md +20 -0
  58. data/emass_client/ruby_client/docs/ArtifactsRequestPutBody.md +16 -0
  59. data/emass_client/ruby_client/docs/ArtifactsResponseDel.md +8 -0
  60. data/emass_client/ruby_client/docs/ArtifactsResponseDelData.md +9 -0
  61. data/emass_client/ruby_client/docs/ArtifactsResponseGet.md +8 -0
  62. data/emass_client/ruby_client/docs/ArtifactsResponsePutPost.md +8 -0
  63. data/emass_client/ruby_client/docs/CACApi.md +140 -0
  64. data/emass_client/ruby_client/docs/CMMCAssessmentsApi.md +71 -0
  65. data/emass_client/ruby_client/docs/CacGet.md +13 -0
  66. data/emass_client/ruby_client/docs/CacRequestPostBody.md +8 -0
  67. data/emass_client/ruby_client/docs/CacResponseGet.md +8 -0
  68. data/emass_client/ruby_client/docs/CacResponsePost.md +8 -0
  69. data/emass_client/ruby_client/docs/CacResponsePostData.md +9 -0
  70. data/emass_client/ruby_client/docs/CmmcGet.md +19 -0
  71. data/emass_client/ruby_client/docs/CmmcResponseGet.md +8 -0
  72. data/emass_client/ruby_client/docs/ConnectivityCcsd.md +8 -0
  73. data/emass_client/ruby_client/docs/ControlsApi.md +140 -0
  74. data/emass_client/ruby_client/docs/ControlsGet.md +36 -0
  75. data/emass_client/ruby_client/docs/ControlsPut.md +9 -0
  76. data/emass_client/ruby_client/docs/ControlsRequestPutBody.md +29 -0
  77. data/emass_client/ruby_client/docs/ControlsResponseGet.md +8 -0
  78. data/emass_client/ruby_client/docs/ControlsResponsePut.md +8 -0
  79. data/emass_client/ruby_client/docs/DefinitionTransitions.md +9 -0
  80. data/emass_client/ruby_client/docs/DeleteMilestone.md +7 -0
  81. data/emass_client/ruby_client/docs/DeletePoam.md +7 -0
  82. data/emass_client/ruby_client/docs/Empty200Response.md +6 -0
  83. data/emass_client/ruby_client/docs/Error.md +8 -0
  84. data/emass_client/ruby_client/docs/InstancesTransitions.md +12 -0
  85. data/emass_client/ruby_client/docs/MilestoneResponseGet.md +8 -0
  86. data/emass_client/ruby_client/docs/MilestoneResponsePost.md +8 -0
  87. data/emass_client/ruby_client/docs/MilestoneResponsePut.md +8 -0
  88. data/emass_client/ruby_client/docs/MilestonesApi.md +350 -0
  89. data/emass_client/ruby_client/docs/MilestonesDelete.md +6 -0
  90. data/emass_client/ruby_client/docs/MilestonesGet.md +12 -0
  91. data/emass_client/ruby_client/docs/MilestonesPost.md +6 -0
  92. data/emass_client/ruby_client/docs/MilestonesPut.md +6 -0
  93. data/emass_client/ruby_client/docs/MilestonesPutPostDelete.md +11 -0
  94. data/emass_client/ruby_client/docs/MilestonesRequestPostBody.md +9 -0
  95. data/emass_client/ruby_client/docs/MilestonesRequestPutBody.md +9 -0
  96. data/emass_client/ruby_client/docs/MilestonesRequiredPost.md +8 -0
  97. data/emass_client/ruby_client/docs/MilestonesRequiredPut.md +9 -0
  98. data/emass_client/ruby_client/docs/Model200.md +7 -0
  99. data/emass_client/ruby_client/docs/Model201.md +7 -0
  100. data/emass_client/ruby_client/docs/Model201Meta.md +8 -0
  101. data/emass_client/ruby_client/docs/Model400.md +7 -0
  102. data/emass_client/ruby_client/docs/Model400Meta.md +8 -0
  103. data/emass_client/ruby_client/docs/Model400Response.md +7 -0
  104. data/emass_client/ruby_client/docs/Model401.md +7 -0
  105. data/emass_client/ruby_client/docs/Model401Meta.md +8 -0
  106. data/emass_client/ruby_client/docs/Model403.md +7 -0
  107. data/emass_client/ruby_client/docs/Model403Meta.md +8 -0
  108. data/emass_client/ruby_client/docs/Model404.md +8 -0
  109. data/emass_client/ruby_client/docs/Model404Response.md +7 -0
  110. data/emass_client/ruby_client/docs/Model405.md +7 -0
  111. data/emass_client/ruby_client/docs/Model405Meta.md +8 -0
  112. data/emass_client/ruby_client/docs/Model411.md +7 -0
  113. data/emass_client/ruby_client/docs/Model411Meta.md +8 -0
  114. data/emass_client/ruby_client/docs/Model490.md +7 -0
  115. data/emass_client/ruby_client/docs/Model490Meta.md +8 -0
  116. data/emass_client/ruby_client/docs/Model500.md +7 -0
  117. data/emass_client/ruby_client/docs/Model500Meta.md +8 -0
  118. data/emass_client/ruby_client/docs/PACApi.md +137 -0
  119. data/emass_client/ruby_client/docs/POAMApi.md +346 -0
  120. data/emass_client/ruby_client/docs/PacGet.md +14 -0
  121. data/emass_client/ruby_client/docs/PacPost.md +9 -0
  122. data/emass_client/ruby_client/docs/PacRequestPostBody.md +9 -0
  123. data/emass_client/ruby_client/docs/PacResponseGet.md +8 -0
  124. data/emass_client/ruby_client/docs/PacResponsePost.md +8 -0
  125. data/emass_client/ruby_client/docs/PoamDelete.md +6 -0
  126. data/emass_client/ruby_client/docs/PoamGet.md +39 -0
  127. data/emass_client/ruby_client/docs/PoamPost.md +6 -0
  128. data/emass_client/ruby_client/docs/PoamPostPutDel.md +10 -0
  129. data/emass_client/ruby_client/docs/PoamPut.md +6 -0
  130. data/emass_client/ruby_client/docs/PoamRequestPostBody.md +6 -0
  131. data/emass_client/ruby_client/docs/PoamRequestPutBody.md +6 -0
  132. data/emass_client/ruby_client/docs/PoamRequiredPost.md +32 -0
  133. data/emass_client/ruby_client/docs/PoamRequiredPut.md +35 -0
  134. data/emass_client/ruby_client/docs/PoamResponseDelete.md +8 -0
  135. data/emass_client/ruby_client/docs/PoamResponseGet.md +8 -0
  136. data/emass_client/ruby_client/docs/PoamResponsePost.md +8 -0
  137. data/emass_client/ruby_client/docs/PoamResponsePut.md +8 -0
  138. data/emass_client/ruby_client/docs/Register.md +8 -0
  139. data/emass_client/ruby_client/docs/RegisterData.md +7 -0
  140. data/emass_client/ruby_client/docs/RegisterUserRequestPostBody.md +7 -0
  141. data/emass_client/ruby_client/docs/RegistrationApi.md +71 -0
  142. data/emass_client/ruby_client/docs/RoleCategory.md +10 -0
  143. data/emass_client/ruby_client/docs/Roles.md +9 -0
  144. data/emass_client/ruby_client/docs/Ssps.md +9 -0
  145. data/emass_client/ruby_client/docs/Stage.md +8 -0
  146. data/emass_client/ruby_client/docs/StaticCodeApplication.md +12 -0
  147. data/emass_client/ruby_client/docs/StaticCodeRequestPostBody.md +6 -0
  148. data/emass_client/ruby_client/docs/StaticCodeRequiredPost.md +8 -0
  149. data/emass_client/ruby_client/docs/StaticCodeRequiredPostApplication.md +8 -0
  150. data/emass_client/ruby_client/docs/StaticCodeScansApi.md +73 -0
  151. data/emass_client/ruby_client/docs/Success200Response.md +8 -0
  152. data/emass_client/ruby_client/docs/SystemIdArtifactsBody.md +10 -0
  153. data/emass_client/ruby_client/docs/SystemResponse.md +8 -0
  154. data/emass_client/ruby_client/docs/SystemRolesApi.md +137 -0
  155. data/emass_client/ruby_client/docs/SystemRolesCategoryResponse.md +8 -0
  156. data/emass_client/ruby_client/docs/SystemRolesResponse.md +8 -0
  157. data/emass_client/ruby_client/docs/SystemRolesResponseData.md +8 -0
  158. data/emass_client/ruby_client/docs/Systems.md +70 -0
  159. data/emass_client/ruby_client/docs/SystemsApi.md +155 -0
  160. data/emass_client/ruby_client/docs/Test.md +8 -0
  161. data/emass_client/ruby_client/docs/TestApi.md +66 -0
  162. data/emass_client/ruby_client/docs/TestData.md +7 -0
  163. data/emass_client/ruby_client/docs/TestResultsApi.md +144 -0
  164. data/emass_client/ruby_client/docs/TestResultsGet.md +15 -0
  165. data/emass_client/ruby_client/docs/TestResultsPost.md +9 -0
  166. data/emass_client/ruby_client/docs/TestResultsRequestPostBody.md +11 -0
  167. data/emass_client/ruby_client/docs/TestResultsResponseGet.md +8 -0
  168. data/emass_client/ruby_client/docs/TestResultsResponsePost.md +8 -0
  169. data/emass_client/ruby_client/docs/Users.md +9 -0
  170. data/emass_client/ruby_client/docs/WorkflowDefinitionGet.md +11 -0
  171. data/emass_client/ruby_client/docs/WorkflowDefinitionResponseGet.md +8 -0
  172. data/emass_client/ruby_client/docs/WorkflowDefinitionsApi.md +74 -0
  173. data/emass_client/ruby_client/docs/WorkflowInstancesApi.md +146 -0
  174. data/emass_client/ruby_client/docs/WorkflowInstancesGet.md +16 -0
  175. data/emass_client/ruby_client/docs/WorkflowInstancesResponseGet.md +8 -0
  176. data/emass_client/ruby_client/git_push.sh +55 -0
  177. data/emass_client/ruby_client/lib/swagger_client/api/artifacts_api.rb +310 -0
  178. data/emass_client/ruby_client/lib/swagger_client/api/artifacts_export_api.rb +86 -0
  179. data/emass_client/ruby_client/lib/swagger_client/api/cac_api.rb +143 -0
  180. data/emass_client/ruby_client/lib/swagger_client/api/cmmc_assessments_api.rb +77 -0
  181. data/emass_client/ruby_client/lib/swagger_client/api/controls_api.rb +143 -0
  182. data/emass_client/ruby_client/lib/swagger_client/api/milestones_api.rb +366 -0
  183. data/emass_client/ruby_client/lib/swagger_client/api/pac_api.rb +140 -0
  184. data/emass_client/ruby_client/lib/swagger_client/api/poam_api.rb +345 -0
  185. data/emass_client/ruby_client/lib/swagger_client/api/registration_api.rb +78 -0
  186. data/emass_client/ruby_client/lib/swagger_client/api/static_code_scans_api.rb +84 -0
  187. data/emass_client/ruby_client/lib/swagger_client/api/system_roles_api.rb +150 -0
  188. data/emass_client/ruby_client/lib/swagger_client/api/systems_api.rb +162 -0
  189. data/emass_client/ruby_client/lib/swagger_client/api/test_api.rb +70 -0
  190. data/emass_client/ruby_client/lib/swagger_client/api/test_results_api.rb +149 -0
  191. data/emass_client/ruby_client/lib/swagger_client/api/workflow_definitions_api.rb +76 -0
  192. data/emass_client/ruby_client/lib/swagger_client/api/workflow_instances_api.rb +153 -0
  193. data/emass_client/ruby_client/lib/swagger_client/api_client.rb +389 -0
  194. data/emass_client/ruby_client/lib/swagger_client/api_error.rb +57 -0
  195. data/emass_client/ruby_client/lib/swagger_client/configuration.rb +224 -0
  196. data/emass_client/ruby_client/lib/swagger_client/models/artifacts_delete.rb +201 -0
  197. data/emass_client/ruby_client/lib/swagger_client/models/artifacts_delete_inner.rb +207 -0
  198. data/emass_client/ruby_client/lib/swagger_client/models/artifacts_get.rb +383 -0
  199. data/emass_client/ruby_client/lib/swagger_client/models/artifacts_request_put_body.rb +363 -0
  200. data/emass_client/ruby_client/lib/swagger_client/models/artifacts_response_del.rb +217 -0
  201. data/emass_client/ruby_client/lib/swagger_client/models/artifacts_response_del_data.rb +225 -0
  202. data/emass_client/ruby_client/lib/swagger_client/models/artifacts_response_get.rb +217 -0
  203. data/emass_client/ruby_client/lib/swagger_client/models/artifacts_response_put_post.rb +217 -0
  204. data/emass_client/ruby_client/lib/swagger_client/models/cac_get.rb +301 -0
  205. data/emass_client/ruby_client/lib/swagger_client/models/cac_request_post_body.rb +217 -0
  206. data/emass_client/ruby_client/lib/swagger_client/models/cac_response_get.rb +217 -0
  207. data/emass_client/ruby_client/lib/swagger_client/models/cac_response_post.rb +217 -0
  208. data/emass_client/ruby_client/lib/swagger_client/models/cac_response_post_data.rb +225 -0
  209. data/emass_client/ruby_client/lib/swagger_client/models/cmmc_get.rb +398 -0
  210. data/emass_client/ruby_client/lib/swagger_client/models/cmmc_response_get.rb +217 -0
  211. data/emass_client/ruby_client/lib/swagger_client/models/connectivity_ccsd.rb +217 -0
  212. data/emass_client/ruby_client/lib/swagger_client/models/controls_get.rb +663 -0
  213. data/emass_client/ruby_client/lib/swagger_client/models/controls_put.rb +227 -0
  214. data/emass_client/ruby_client/lib/swagger_client/models/controls_request_put_body.rb +606 -0
  215. data/emass_client/ruby_client/lib/swagger_client/models/controls_response_get.rb +217 -0
  216. data/emass_client/ruby_client/lib/swagger_client/models/controls_response_put.rb +217 -0
  217. data/emass_client/ruby_client/lib/swagger_client/models/definition_transitions.rb +274 -0
  218. data/emass_client/ruby_client/lib/swagger_client/models/delete_milestone.rb +212 -0
  219. data/emass_client/ruby_client/lib/swagger_client/models/delete_poam.rb +212 -0
  220. data/emass_client/ruby_client/lib/swagger_client/models/empty200_response.rb +197 -0
  221. data/emass_client/ruby_client/lib/swagger_client/models/error.rb +225 -0
  222. data/emass_client/ruby_client/lib/swagger_client/models/instances_transitions.rb +327 -0
  223. data/emass_client/ruby_client/lib/swagger_client/models/milestone_response_get.rb +217 -0
  224. data/emass_client/ruby_client/lib/swagger_client/models/milestone_response_post.rb +217 -0
  225. data/emass_client/ruby_client/lib/swagger_client/models/milestone_response_put.rb +217 -0
  226. data/emass_client/ruby_client/lib/swagger_client/models/milestones_delete.rb +197 -0
  227. data/emass_client/ruby_client/lib/swagger_client/models/milestones_get.rb +291 -0
  228. data/emass_client/ruby_client/lib/swagger_client/models/milestones_post.rb +197 -0
  229. data/emass_client/ruby_client/lib/swagger_client/models/milestones_put.rb +197 -0
  230. data/emass_client/ruby_client/lib/swagger_client/models/milestones_put_post_delete.rb +247 -0
  231. data/emass_client/ruby_client/lib/swagger_client/models/milestones_request_post_body.rb +242 -0
  232. data/emass_client/ruby_client/lib/swagger_client/models/milestones_request_put_body.rb +242 -0
  233. data/emass_client/ruby_client/lib/swagger_client/models/milestones_required_post.rb +227 -0
  234. data/emass_client/ruby_client/lib/swagger_client/models/milestones_required_put.rb +242 -0
  235. data/emass_client/ruby_client/lib/swagger_client/models/model_200.rb +208 -0
  236. data/emass_client/ruby_client/lib/swagger_client/models/model_201.rb +206 -0
  237. data/emass_client/ruby_client/lib/swagger_client/models/model_201_meta.rb +219 -0
  238. data/emass_client/ruby_client/lib/swagger_client/models/model_400.rb +206 -0
  239. data/emass_client/ruby_client/lib/swagger_client/models/model_400_meta.rb +219 -0
  240. data/emass_client/ruby_client/lib/swagger_client/models/model_400_response.rb +206 -0
  241. data/emass_client/ruby_client/lib/swagger_client/models/model_401.rb +206 -0
  242. data/emass_client/ruby_client/lib/swagger_client/models/model_401_meta.rb +219 -0
  243. data/emass_client/ruby_client/lib/swagger_client/models/model_403.rb +206 -0
  244. data/emass_client/ruby_client/lib/swagger_client/models/model_403_meta.rb +219 -0
  245. data/emass_client/ruby_client/lib/swagger_client/models/model_404.rb +219 -0
  246. data/emass_client/ruby_client/lib/swagger_client/models/model_404_response.rb +206 -0
  247. data/emass_client/ruby_client/lib/swagger_client/models/model_405.rb +206 -0
  248. data/emass_client/ruby_client/lib/swagger_client/models/model_405_meta.rb +219 -0
  249. data/emass_client/ruby_client/lib/swagger_client/models/model_411.rb +206 -0
  250. data/emass_client/ruby_client/lib/swagger_client/models/model_411_meta.rb +219 -0
  251. data/emass_client/ruby_client/lib/swagger_client/models/model_490.rb +206 -0
  252. data/emass_client/ruby_client/lib/swagger_client/models/model_490_meta.rb +219 -0
  253. data/emass_client/ruby_client/lib/swagger_client/models/model_500.rb +206 -0
  254. data/emass_client/ruby_client/lib/swagger_client/models/model_500_meta.rb +219 -0
  255. data/emass_client/ruby_client/lib/swagger_client/models/pac_get.rb +311 -0
  256. data/emass_client/ruby_client/lib/swagger_client/models/pac_post.rb +259 -0
  257. data/emass_client/ruby_client/lib/swagger_client/models/pac_request_post_body.rb +261 -0
  258. data/emass_client/ruby_client/lib/swagger_client/models/pac_response_get.rb +217 -0
  259. data/emass_client/ruby_client/lib/swagger_client/models/pac_response_post.rb +217 -0
  260. data/emass_client/ruby_client/lib/swagger_client/models/poam_delete.rb +197 -0
  261. data/emass_client/ruby_client/lib/swagger_client/models/poam_get.rb +646 -0
  262. data/emass_client/ruby_client/lib/swagger_client/models/poam_post.rb +197 -0
  263. data/emass_client/ruby_client/lib/swagger_client/models/poam_post_put_del.rb +237 -0
  264. data/emass_client/ruby_client/lib/swagger_client/models/poam_put.rb +197 -0
  265. data/emass_client/ruby_client/lib/swagger_client/models/poam_request_post_body.rb +197 -0
  266. data/emass_client/ruby_client/lib/swagger_client/models/poam_request_put_body.rb +197 -0
  267. data/emass_client/ruby_client/lib/swagger_client/models/poam_required_post.rb +564 -0
  268. data/emass_client/ruby_client/lib/swagger_client/models/poam_required_put.rb +594 -0
  269. data/emass_client/ruby_client/lib/swagger_client/models/poam_response_delete.rb +217 -0
  270. data/emass_client/ruby_client/lib/swagger_client/models/poam_response_get.rb +217 -0
  271. data/emass_client/ruby_client/lib/swagger_client/models/poam_response_post.rb +217 -0
  272. data/emass_client/ruby_client/lib/swagger_client/models/poam_response_put.rb +217 -0
  273. data/emass_client/ruby_client/lib/swagger_client/models/register.rb +215 -0
  274. data/emass_client/ruby_client/lib/swagger_client/models/register_data.rb +206 -0
  275. data/emass_client/ruby_client/lib/swagger_client/models/register_user_request_post_body.rb +211 -0
  276. data/emass_client/ruby_client/lib/swagger_client/models/role_category.rb +272 -0
  277. data/emass_client/ruby_client/lib/swagger_client/models/roles.rb +274 -0
  278. data/emass_client/ruby_client/lib/swagger_client/models/ssps.rb +227 -0
  279. data/emass_client/ruby_client/lib/swagger_client/models/stage.rb +252 -0
  280. data/emass_client/ruby_client/lib/swagger_client/models/static_code_application.rb +303 -0
  281. data/emass_client/ruby_client/lib/swagger_client/models/static_code_request_post_body.rb +197 -0
  282. data/emass_client/ruby_client/lib/swagger_client/models/static_code_required_post.rb +217 -0
  283. data/emass_client/ruby_client/lib/swagger_client/models/static_code_required_post_application.rb +217 -0
  284. data/emass_client/ruby_client/lib/swagger_client/models/success200_response.rb +217 -0
  285. data/emass_client/ruby_client/lib/swagger_client/models/system_id_artifacts_body.rb +284 -0
  286. data/emass_client/ruby_client/lib/swagger_client/models/system_response.rb +217 -0
  287. data/emass_client/ruby_client/lib/swagger_client/models/system_roles_category_response.rb +217 -0
  288. data/emass_client/ruby_client/lib/swagger_client/models/system_roles_response.rb +217 -0
  289. data/emass_client/ruby_client/lib/swagger_client/models/system_roles_response_data.rb +219 -0
  290. data/emass_client/ruby_client/lib/swagger_client/models/systems.rb +1137 -0
  291. data/emass_client/ruby_client/lib/swagger_client/models/test.rb +215 -0
  292. data/emass_client/ruby_client/lib/swagger_client/models/test_data.rb +206 -0
  293. data/emass_client/ruby_client/lib/swagger_client/models/test_results_get.rb +333 -0
  294. data/emass_client/ruby_client/lib/swagger_client/models/test_results_post.rb +227 -0
  295. data/emass_client/ruby_client/lib/swagger_client/models/test_results_request_post_body.rb +306 -0
  296. data/emass_client/ruby_client/lib/swagger_client/models/test_results_response_get.rb +217 -0
  297. data/emass_client/ruby_client/lib/swagger_client/models/test_results_response_post.rb +217 -0
  298. data/emass_client/ruby_client/lib/swagger_client/models/users.rb +224 -0
  299. data/emass_client/ruby_client/lib/swagger_client/models/workflow_definition_get.rb +282 -0
  300. data/emass_client/ruby_client/lib/swagger_client/models/workflow_definition_response_get.rb +217 -0
  301. data/emass_client/ruby_client/lib/swagger_client/models/workflow_instances_get.rb +368 -0
  302. data/emass_client/ruby_client/lib/swagger_client/models/workflow_instances_response_get.rb +217 -0
  303. data/emass_client/ruby_client/lib/swagger_client/version.rb +14 -0
  304. data/emass_client/ruby_client/lib/swagger_client.rb +161 -0
  305. data/emass_client/ruby_client/spec/api/artifacts_api_spec.rb +92 -0
  306. data/emass_client/ruby_client/spec/api/artifacts_export_api_spec.rb +48 -0
  307. data/emass_client/ruby_client/spec/api/cac_api_spec.rb +60 -0
  308. data/emass_client/ruby_client/spec/api/cmmc_assessments_api_spec.rb +46 -0
  309. data/emass_client/ruby_client/spec/api/controls_api_spec.rb +60 -0
  310. data/emass_client/ruby_client/spec/api/milestones_api_spec.rb +105 -0
  311. data/emass_client/ruby_client/spec/api/pac_api_spec.rb +59 -0
  312. data/emass_client/ruby_client/spec/api/poam_api_spec.rb +103 -0
  313. data/emass_client/ruby_client/spec/api/registration_api_spec.rb +46 -0
  314. data/emass_client/ruby_client/spec/api/static_code_scans_api_spec.rb +47 -0
  315. data/emass_client/ruby_client/spec/api/system_roles_api_spec.rb +60 -0
  316. data/emass_client/ruby_client/spec/api/systems_api_spec.rb +67 -0
  317. data/emass_client/ruby_client/spec/api/test_api_spec.rb +45 -0
  318. data/emass_client/ruby_client/spec/api/test_results_api_spec.rb +62 -0
  319. data/emass_client/ruby_client/spec/api/workflow_definitions_api_spec.rb +47 -0
  320. data/emass_client/ruby_client/spec/api/workflow_instances_api_spec.rb +63 -0
  321. data/emass_client/ruby_client/spec/api_client_spec.rb +225 -0
  322. data/emass_client/ruby_client/spec/base_object_spec.rb +109 -0
  323. data/emass_client/ruby_client/spec/configuration_spec.rb +41 -0
  324. data/emass_client/ruby_client/spec/models/artifacts_delete_inner_spec.rb +40 -0
  325. data/emass_client/ruby_client/spec/models/artifacts_delete_spec.rb +34 -0
  326. data/emass_client/ruby_client/spec/models/artifacts_get_spec.rb +126 -0
  327. data/emass_client/ruby_client/spec/models/artifacts_request_put_body_spec.rb +102 -0
  328. data/emass_client/ruby_client/spec/models/artifacts_response_del_data_spec.rb +52 -0
  329. data/emass_client/ruby_client/spec/models/artifacts_response_del_spec.rb +46 -0
  330. data/emass_client/ruby_client/spec/models/artifacts_response_get_spec.rb +46 -0
  331. data/emass_client/ruby_client/spec/models/artifacts_response_put_post_spec.rb +46 -0
  332. data/emass_client/ruby_client/spec/models/cac_get_spec.rb +80 -0
  333. data/emass_client/ruby_client/spec/models/cac_request_post_body_spec.rb +46 -0
  334. data/emass_client/ruby_client/spec/models/cac_response_get_spec.rb +46 -0
  335. data/emass_client/ruby_client/spec/models/cac_response_post_data_spec.rb +52 -0
  336. data/emass_client/ruby_client/spec/models/cac_response_post_spec.rb +46 -0
  337. data/emass_client/ruby_client/spec/models/cmmc_get_spec.rb +128 -0
  338. data/emass_client/ruby_client/spec/models/cmmc_response_get_spec.rb +46 -0
  339. data/emass_client/ruby_client/spec/models/connectivity_ccsd_spec.rb +46 -0
  340. data/emass_client/ruby_client/spec/models/controls_get_spec.rb +262 -0
  341. data/emass_client/ruby_client/spec/models/controls_put_spec.rb +52 -0
  342. data/emass_client/ruby_client/spec/models/controls_request_put_body_spec.rb +216 -0
  343. data/emass_client/ruby_client/spec/models/controls_response_get_spec.rb +46 -0
  344. data/emass_client/ruby_client/spec/models/controls_response_put_spec.rb +46 -0
  345. data/emass_client/ruby_client/spec/models/definition_transitions_spec.rb +64 -0
  346. data/emass_client/ruby_client/spec/models/delete_milestone_spec.rb +40 -0
  347. data/emass_client/ruby_client/spec/models/delete_poam_spec.rb +40 -0
  348. data/emass_client/ruby_client/spec/models/empty200_response_spec.rb +34 -0
  349. data/emass_client/ruby_client/spec/models/error_spec.rb +46 -0
  350. data/emass_client/ruby_client/spec/models/instances_transitions_spec.rb +86 -0
  351. data/emass_client/ruby_client/spec/models/milestone_response_get_spec.rb +46 -0
  352. data/emass_client/ruby_client/spec/models/milestone_response_post_spec.rb +46 -0
  353. data/emass_client/ruby_client/spec/models/milestone_response_put_spec.rb +46 -0
  354. data/emass_client/ruby_client/spec/models/milestones_delete_spec.rb +34 -0
  355. data/emass_client/ruby_client/spec/models/milestones_get_spec.rb +74 -0
  356. data/emass_client/ruby_client/spec/models/milestones_post_spec.rb +34 -0
  357. data/emass_client/ruby_client/spec/models/milestones_put_post_delete_spec.rb +64 -0
  358. data/emass_client/ruby_client/spec/models/milestones_put_spec.rb +34 -0
  359. data/emass_client/ruby_client/spec/models/milestones_request_post_body_spec.rb +52 -0
  360. data/emass_client/ruby_client/spec/models/milestones_request_put_body_spec.rb +52 -0
  361. data/emass_client/ruby_client/spec/models/milestones_required_post_spec.rb +46 -0
  362. data/emass_client/ruby_client/spec/models/milestones_required_put_spec.rb +52 -0
  363. data/emass_client/ruby_client/spec/models/model_200_spec.rb +40 -0
  364. data/emass_client/ruby_client/spec/models/model_201_meta_spec.rb +46 -0
  365. data/emass_client/ruby_client/spec/models/model_201_spec.rb +40 -0
  366. data/emass_client/ruby_client/spec/models/model_400_meta_spec.rb +46 -0
  367. data/emass_client/ruby_client/spec/models/model_400_response_spec.rb +40 -0
  368. data/emass_client/ruby_client/spec/models/model_400_spec.rb +40 -0
  369. data/emass_client/ruby_client/spec/models/model_401_meta_spec.rb +46 -0
  370. data/emass_client/ruby_client/spec/models/model_401_spec.rb +40 -0
  371. data/emass_client/ruby_client/spec/models/model_403_meta_spec.rb +46 -0
  372. data/emass_client/ruby_client/spec/models/model_403_spec.rb +40 -0
  373. data/emass_client/ruby_client/spec/models/model_404_response_spec.rb +40 -0
  374. data/emass_client/ruby_client/spec/models/model_404_spec.rb +46 -0
  375. data/emass_client/ruby_client/spec/models/model_405_meta_spec.rb +46 -0
  376. data/emass_client/ruby_client/spec/models/model_405_spec.rb +40 -0
  377. data/emass_client/ruby_client/spec/models/model_411_meta_spec.rb +46 -0
  378. data/emass_client/ruby_client/spec/models/model_411_spec.rb +40 -0
  379. data/emass_client/ruby_client/spec/models/model_490_meta_spec.rb +46 -0
  380. data/emass_client/ruby_client/spec/models/model_490_spec.rb +40 -0
  381. data/emass_client/ruby_client/spec/models/model_500_meta_spec.rb +46 -0
  382. data/emass_client/ruby_client/spec/models/model_500_spec.rb +40 -0
  383. data/emass_client/ruby_client/spec/models/pac_get_spec.rb +86 -0
  384. data/emass_client/ruby_client/spec/models/pac_post_spec.rb +56 -0
  385. data/emass_client/ruby_client/spec/models/pac_request_post_body_spec.rb +56 -0
  386. data/emass_client/ruby_client/spec/models/pac_response_get_spec.rb +46 -0
  387. data/emass_client/ruby_client/spec/models/pac_response_post_spec.rb +46 -0
  388. data/emass_client/ruby_client/spec/models/poam_delete_spec.rb +34 -0
  389. data/emass_client/ruby_client/spec/models/poam_get_spec.rb +264 -0
  390. data/emass_client/ruby_client/spec/models/poam_post_put_del_spec.rb +58 -0
  391. data/emass_client/ruby_client/spec/models/poam_post_spec.rb +34 -0
  392. data/emass_client/ruby_client/spec/models/poam_put_spec.rb +34 -0
  393. data/emass_client/ruby_client/spec/models/poam_request_post_body_spec.rb +34 -0
  394. data/emass_client/ruby_client/spec/models/poam_request_put_body_spec.rb +34 -0
  395. data/emass_client/ruby_client/spec/models/poam_required_post_spec.rb +218 -0
  396. data/emass_client/ruby_client/spec/models/poam_required_put_spec.rb +236 -0
  397. data/emass_client/ruby_client/spec/models/poam_response_delete_spec.rb +46 -0
  398. data/emass_client/ruby_client/spec/models/poam_response_get_spec.rb +46 -0
  399. data/emass_client/ruby_client/spec/models/poam_response_post_spec.rb +46 -0
  400. data/emass_client/ruby_client/spec/models/poam_response_put_spec.rb +46 -0
  401. data/emass_client/ruby_client/spec/models/register_data_spec.rb +40 -0
  402. data/emass_client/ruby_client/spec/models/register_spec.rb +46 -0
  403. data/emass_client/ruby_client/spec/models/register_user_request_post_body_spec.rb +40 -0
  404. data/emass_client/ruby_client/spec/models/role_category_spec.rb +62 -0
  405. data/emass_client/ruby_client/spec/models/roles_spec.rb +60 -0
  406. data/emass_client/ruby_client/spec/models/ssps_spec.rb +52 -0
  407. data/emass_client/ruby_client/spec/models/stage_spec.rb +50 -0
  408. data/emass_client/ruby_client/spec/models/static_code_application_spec.rb +78 -0
  409. data/emass_client/ruby_client/spec/models/static_code_request_post_body_spec.rb +34 -0
  410. data/emass_client/ruby_client/spec/models/static_code_required_post_application_spec.rb +46 -0
  411. data/emass_client/ruby_client/spec/models/static_code_required_post_spec.rb +46 -0
  412. data/emass_client/ruby_client/spec/models/success200_response_spec.rb +46 -0
  413. data/emass_client/ruby_client/spec/models/system_id_artifacts_body_spec.rb +66 -0
  414. data/emass_client/ruby_client/spec/models/system_response_spec.rb +46 -0
  415. data/emass_client/ruby_client/spec/models/system_roles_category_response_spec.rb +46 -0
  416. data/emass_client/ruby_client/spec/models/system_roles_response_data_spec.rb +46 -0
  417. data/emass_client/ruby_client/spec/models/system_roles_response_spec.rb +46 -0
  418. data/emass_client/ruby_client/spec/models/systems_spec.rb +510 -0
  419. data/emass_client/ruby_client/spec/models/test_data_spec.rb +40 -0
  420. data/emass_client/ruby_client/spec/models/test_results_get_spec.rb +96 -0
  421. data/emass_client/ruby_client/spec/models/test_results_post_spec.rb +52 -0
  422. data/emass_client/ruby_client/spec/models/test_results_request_post_body_spec.rb +68 -0
  423. data/emass_client/ruby_client/spec/models/test_results_response_get_spec.rb +46 -0
  424. data/emass_client/ruby_client/spec/models/test_results_response_post_spec.rb +46 -0
  425. data/emass_client/ruby_client/spec/models/test_spec.rb +46 -0
  426. data/emass_client/ruby_client/spec/models/users_spec.rb +52 -0
  427. data/emass_client/ruby_client/spec/models/workflow_definition_get_spec.rb +68 -0
  428. data/emass_client/ruby_client/spec/models/workflow_definition_response_get_spec.rb +46 -0
  429. data/emass_client/ruby_client/spec/models/workflow_instances_get_spec.rb +110 -0
  430. data/emass_client/ruby_client/spec/models/workflow_instances_response_get_spec.rb +46 -0
  431. data/emass_client/ruby_client/spec/spec_helper.rb +110 -0
  432. data/emass_client/ruby_client/swagger_client.gemspec +38 -0
  433. data/emass_client/swagger-codegen/ruby_template/api_client.mustache +384 -0
  434. data/emass_client/swagger-codegen/ruby_template/api_info.mustache +12 -0
  435. data/emass_client/swagger-codegen/ruby_template/configuration.mustache +234 -0
  436. data/emass_client/swagger-codegen/ruby_template/gemspec.mustache +37 -0
  437. data/emasser.gemspec +40 -0
  438. data/exe/emasser +5 -0
  439. data/lib/emasser/cli.rb +25 -0
  440. data/lib/emasser/configuration.rb +34 -0
  441. data/lib/emasser/constants.rb +18 -0
  442. data/lib/emasser/delete.rb +146 -0
  443. data/lib/emasser/errors.rb +14 -0
  444. data/lib/emasser/get.rb +675 -0
  445. data/lib/emasser/help/approvalCac_post_mapper.md +20 -0
  446. data/lib/emasser/help/approvalPac_post_mapper.md +20 -0
  447. data/lib/emasser/help/artifacts_del_mapper.md +9 -0
  448. data/lib/emasser/help/artifacts_post_mapper.md +59 -0
  449. data/lib/emasser/help/artifacts_put_mapper.md +34 -0
  450. data/lib/emasser/help/cmmc_get_mapper.md +4 -0
  451. data/lib/emasser/help/controls_put_mapper.md +74 -0
  452. data/lib/emasser/help/milestone_del_mapper.md +11 -0
  453. data/lib/emasser/help/milestone_post_mapper.md +14 -0
  454. data/lib/emasser/help/milestone_put_mapper.md +23 -0
  455. data/lib/emasser/help/poam_del_mapper.md +5 -0
  456. data/lib/emasser/help/poam_post_mapper.md +93 -0
  457. data/lib/emasser/help/poam_put_mapper.md +107 -0
  458. data/lib/emasser/help/staticcode_clear_mapper.md +16 -0
  459. data/lib/emasser/help/staticcode_post_mapper.md +21 -0
  460. data/lib/emasser/help/testresults_post_mapper.md +21 -0
  461. data/lib/emasser/help.rb +11 -0
  462. data/lib/emasser/input_converters.rb +21 -0
  463. data/lib/emasser/options_parser.rb +20 -0
  464. data/lib/emasser/output_converters.rb +14 -0
  465. data/lib/emasser/post.rb +609 -0
  466. data/lib/emasser/put.rb +581 -0
  467. data/lib/emasser/version.rb +5 -0
  468. data/lib/emasser.rb +19 -0
  469. metadata +725 -0
@@ -0,0 +1,609 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Hack class that properly formats the CLI help
4
+ class SubCommandBase < Thor
5
+ include OptionsParser
6
+ include InputConverters
7
+ include OutputConverters
8
+
9
+ # We do not control the method declaration for the banner
10
+
11
+ # rubocop:disable Style/OptionalBooleanParameter
12
+ def self.banner(command, _namespace = nil, subcommand = false)
13
+ # Use the $thor_runner (declared by the Thor CLI framework)
14
+ # to properly format the help text of sub-sub-commands.
15
+
16
+ # rubocop:disable Style/GlobalVars
17
+ if ancestors[0].to_s.include? '::Post'
18
+ "#{basename} #{command.formatted_usage(self, $thor_runner, subcommand)}"
19
+ else
20
+ "#{basename} post #{command.formatted_usage(self, $thor_runner, subcommand)}"
21
+ end
22
+ # rubocop:enable Style/GlobalVars
23
+ end
24
+ # rubocop:enable Style/OptionalBooleanParameter
25
+ end
26
+
27
+ # Override thor's long_desc identation behavior
28
+ class Thor
29
+ module Shell
30
+ class Basic
31
+ def print_wrapped(message, _options = {})
32
+ message = "\n#{message}\n" unless message[0] == "\n"
33
+ stdout.puts message
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ module Emasser
40
+ POAMS_POST_HELP_MESSAGE = "\nInvoke \"bundle exec exe/emasser post poams help add\" for additional help"
41
+ # The Test Results endpoints provide the ability to add test results for a
42
+ # system's Assessment Procedures (CCIs) which determine Security Control compliance.
43
+ #
44
+ # Endpoint:
45
+ # /api/systems/{systemId}/test-results - Add one or many test results for a system
46
+ class TestResults < SubCommandBase
47
+ def self.exit_on_failure?
48
+ true
49
+ end
50
+
51
+ desc 'add', 'Post a test result for a system'
52
+ long_desc Help.text(:testresults_post_mapper)
53
+
54
+ # Required fields
55
+ option :systemId, type: :numeric, required: true,
56
+ desc: 'A numeric value representing the system identification'
57
+ option :cci, type: :string, required: true, desc: 'The system CCI string numerical value'
58
+ option :testedBy, type: :string, required: true, desc: 'The person that conducted the test (Last Name, First)'
59
+ option :testDate, type: :numeric, required: true, desc: 'The date test was conducted, Unix time format.'
60
+ option :description, type: :string, required: true, desc: 'The description of test result. 4000 Characters.'
61
+ option :complianceStatus, type: :string, required: true, enum: ['Compliant', 'Non-Compliant', 'Not Applicable']
62
+
63
+ def add
64
+ body = SwaggerClient::TestResultsRequestPostBody.new
65
+ body.cci = options[:cci]
66
+ body.tested_by = options[:testedBy]
67
+ body.test_date = options[:testDate]
68
+ body.description = options[:description]
69
+ body.compliance_status = options[:complianceStatus]
70
+
71
+ body_array = Array.new(1, body)
72
+
73
+ begin
74
+ result = SwaggerClient::TestResultsApi
75
+ .new.add_test_results_by_system_id(body_array, options[:systemId])
76
+ puts to_output_hash(result).green
77
+ rescue SwaggerClient::ApiError => e
78
+ puts 'Exception when calling TestResultsApi->add_test_results_by_system_id'.red
79
+ puts to_output_hash(e)
80
+ end
81
+ end
82
+ end
83
+
84
+ # The POA&M endpoints provide the ability to add Plan of Action and Milestones (POA&M)
85
+ # items to a system.
86
+ #
87
+ # Endpoint:
88
+ # /api/systems/{systemId}/poams - Add one or many poa&m items in a system
89
+ class Poams < SubCommandBase
90
+ def self.exit_on_failure?
91
+ true
92
+ end
93
+
94
+ # POAM --------------------------------------------------------------------
95
+ #
96
+ # The following fields are required based on the contents of the status field
97
+ # status Required Fields
98
+ # -------------------------------------------------------------------------
99
+ # Risk Accepted comments, resources
100
+ # Ongoing scheduledCompletionDate, resources, milestones (at least 1)
101
+ # Completed scheduledCompletionDate, comments, resources,
102
+ # completionDate, milestones (at least 1)
103
+ # Not Applicable POAM can not be created
104
+ #--------------------------------------------------------------------------
105
+ #
106
+ # If a POC email is supplied, the application will attempt to locate a user
107
+ # already registered within the application and pre-populate any information
108
+ # not explicitly supplied in the request. If no such user is found, these
109
+ # fields are required within the request:
110
+ # pocFirstName, pocLastName, pocPhoneNumber
111
+
112
+ desc 'add', 'Add one or many POA&M items in a system'
113
+ long_desc Help.text(:poam_post_mapper)
114
+
115
+ # Required parameters/fields (the poamId and displayPoamId are generated by the PUT call)
116
+ option :systemId, type: :numeric, required: true, desc: 'A numeric value representing the system identification'
117
+ option :status, type: :string, required: true, enum: ['Ongoing', 'Risk Accepted', 'Completed', 'Not Applicable']
118
+ option :vulnerabilityDescription, type: :string, required: true, desc: 'POA&M vulnerability description'
119
+ option :sourceIdentVuln,
120
+ type: :string, required: true, desc: 'Source that identifies the vulnerability'
121
+ option :pocOrganization, type: :string, required: true, desc: 'Organization/Office represented'
122
+ option :resources, type: :string, required: true, desc: 'List of resources used'
123
+
124
+ # Conditional parameters/fields
125
+ option :milestone, type: :hash, required: false, desc: 'key:values are: description and scheduledCompletionDate'
126
+ option :pocFirstName, type: :string, required: false, desc: 'First name of POC'
127
+ option :pocLastName, type: :string, required: false, desc: 'Last name of POC.'
128
+ option :pocEmail, type: :string, required: false, desc: 'Email address of POC'
129
+ option :pocPhoneNumber, type: :string, required: false, desc: 'Phone number of POC (area code) ***-**** format'
130
+ option :severity, type: :string, required: false, enum: ['Very Low', 'Low', 'Moderate', 'High', 'Very High']
131
+ option :scheduledCompletionDate,
132
+ type: :numeric, required: false, desc: 'The scheduled completion date - Unix time format'
133
+ option :completionDate,
134
+ type: :numeric, required: false, desc: 'The schedule completion date - Unix time format'
135
+ option :comments, type: :string, required: false, desc: 'Comments for completed and risk accepted POA&M items'
136
+
137
+ # Optional parameters/fields
138
+ option :externalUid, type: :string, required: false, desc: 'External ID associated with the POA&M'
139
+ option :controlAcronym, type: :string, required: false, desc: 'The system acronym(s) e.g "AC-1, AC-2"'
140
+ option :cci, type: :string, required: false, desc: 'The system CCIS string numerical value'
141
+ option :securityChecks, type: :string, required: false, desc: 'Security Checks that are associated with the POA&M'
142
+ option :rawSeverity, type: :string, required: false, enum: %w[I II III]
143
+ option :relevanceOfThreat,
144
+ type: :string, required: false, enum: ['Very Low', 'Low', 'Moderate', 'High', 'Very High']
145
+ option :likelihood, type: :string, required: false, enum: ['Very Low', 'Low', 'Moderate', 'High', 'Very High']
146
+ option :impact, type: :string, required: false, desc: 'Description of Security Control’s impact'
147
+ option :impactDescription, type: :string, required: false, desc: 'Description of the security control impact'
148
+ option :residualRiskLevel,
149
+ type: :string, required: false, enum: ['Very Low', 'Low', 'Moderate', 'High', 'Very High']
150
+ option :recommendations, type: :string, required: false, desc: 'Recomendations'
151
+ option :mitigation, type: :string, required: false, desc: 'Mitigation explanation'
152
+
153
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
154
+ def add
155
+ # Required fields
156
+ body = SwaggerClient::PoamRequiredPost.new
157
+ body.status = options[:status]
158
+ body.vulnerability_description = options[:vulnerabilityDescription]
159
+ body.source_ident_vuln = options[:sourceIdentVuln]
160
+ body.poc_organization = options[:pocOrganization]
161
+ body.resources = options[:resources]
162
+
163
+ process_business_logic(body)
164
+
165
+ # Add conditional fields
166
+ body.poc_first_name = options[:pocFirstName] if options[:pocFirstName]
167
+ body.poc_last_name = options[:pocLastName] if options[:pocLastName]
168
+ body.poc_email = options[:pocEmail] if options[:pocEmail]
169
+ body.poc_phone_number = options[:pocPhoneNumber] if options[:pocPhoneNumber]
170
+ body.severity = options[:severity] if options[:severity]
171
+
172
+ # Add optional fields
173
+ body.external_uid = options[:externalUid] if options[:externalUid]
174
+ body.control_acronyms = options[:controlAcronym] if options[:controlAcronym]
175
+ body.cci = options[:cci] if options[:cci]
176
+ body.security_checks = options[:securityChecks] if options[:securityChecks]
177
+ body.raw_severity = options[:rawSeverity] if options[:rawSeverity]
178
+ body.relevance_of_threat = options[:relevanceOfThreat] if options[:relevanceOfThreat]
179
+ body.likelihood = options[:likelihood] if options[:likelihood]
180
+ body.impact = options[:impact] if options[:impact]
181
+ body.impact_description = options[:impactDescription] if options[:impactDescription]
182
+ body.residual_risk_level = options[:residualRiskLevel] if options[:residualRiskLevel]
183
+ body.recommendations = options[:recommendations] if options[:recommendations]
184
+ body.mitigation = options[:mitigation] if options[:mitigation]
185
+
186
+ body_array = Array.new(1, body)
187
+
188
+ begin
189
+ result = SwaggerClient::POAMApi.new.add_poam_by_system_id(body_array, options[:systemId])
190
+ puts to_output_hash(result).green
191
+ rescue SwaggerClient::ApiError => e
192
+ puts 'Exception when calling POAMApi->add_poam_by_system_id'.red
193
+ puts to_output_hash(e)
194
+ end
195
+ end
196
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
197
+
198
+ # rubocop:disable Metrics/BlockLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
199
+ no_commands do
200
+ def process_business_logic(body)
201
+ #-----------------------------------------------------------------------------
202
+ # Conditional fields based on the status field values
203
+ # "Risk Accepted" comments, resources
204
+ # "Ongoing" scheduledCompletionDate, resources, milestones (at least 1)
205
+ # "Completed" scheduledCompletionDate, comments, resources,
206
+ # completionDate, milestones (at least 1)
207
+ # "Not Applicable" POAM can not be created
208
+ #-----------------------------------------------------------------------------
209
+ # rubocop:disable Style/CaseLikeIf, Style/StringLiterals
210
+ if options[:status] == "Risk Accepted"
211
+ if options[:comments].nil?
212
+ puts 'When status = "Risk Accepted" the following parameters/fields are required:'.red
213
+ puts ' comments'.red
214
+ puts POAMS_POST_HELP_MESSAGE.yellow
215
+ exit
216
+ else
217
+ body.comments = options[:comments]
218
+ end
219
+ elsif options[:status] == "Ongoing"
220
+ if options[:scheduledCompletionDate].nil? || options[:milestone].nil?
221
+ puts 'When status = "Ongoing" the following parameters/fields are required:'.red
222
+ puts ' scheduledCompletionDate, or milestone'.red
223
+ print_milestone_help
224
+ puts POAMS_POST_HELP_MESSAGE.yellow
225
+ exit
226
+ elsif options[:milestone]["description"].nil? || options[:milestone]["scheduledCompletionDate"].nil?
227
+ puts 'Missing milstone parameters/fields'.red
228
+ print_milestone_help
229
+ exit
230
+ else
231
+ body.scheduled_completion_date = options[:scheduledCompletionDate]
232
+
233
+ milestone = SwaggerClient::MilestonesRequiredPost.new
234
+ milestone.description = options[:milestone]["description"]
235
+ milestone.scheduled_completion_date = options[:milestone]["scheduledCompletionDate"]
236
+ milestone_array = Array.new(1, milestone)
237
+ body.milestones = milestone_array
238
+ end
239
+ elsif options[:status] == "Completed"
240
+ if options[:scheduledCompletionDate].nil? || options[:comments].nil? ||
241
+ options[:completionDate].nil? || options[:milestone].nil?
242
+ puts 'When status = "Completed" the following parameters/fields are required:'.red
243
+ puts ' scheduledCompletionDate, comments, completionDate, or milestone'.red
244
+ print_milestone_help
245
+ puts POAMS_POST_HELP_MESSAGE.yellow
246
+ exit
247
+ else
248
+ body.scheduled_completion_date = options[:scheduledCompletionDate]
249
+ body.comments = options[:comments]
250
+ body.completion_date = options[:completionDate]
251
+
252
+ milestone = SwaggerClient::MilestonesRequiredPost.new
253
+ milestone.description = options[:milestone]["description"]
254
+ milestone.scheduled_completion_date = options[:milestone]["scheduledCompletionDate"]
255
+ milestone_array = Array.new(1, milestone)
256
+ body.milestones = milestone_array
257
+ end
258
+ end
259
+
260
+ # POC checks: If any poc information is provided all POC fields are required
261
+ if options[:pocFirstName]
262
+ if options[:pocLastName].nil? || options[:pocEmail].nil? || options[:pocPhoneNumber].nil?
263
+ puts 'If a POC first name is given, then all POC information must be entered:'.red
264
+ puts ' pocLastName, pocEmail, pocPhoneNumber'.red
265
+ puts POAMS_POST_HELP_MESSAGE.yellow
266
+ exit
267
+ end
268
+ elsif options[:pocLastName]
269
+ if options[:pocFirstName].nil? || options[:pocEmail].nil? || options[:pocPhoneNumber].nil?
270
+ puts 'If a POC last name is given, then all POC information must be entered:'.red
271
+ puts ' pocFirstName, pocEmail, pocPhoneNumber'.red
272
+ puts POAMS_POST_HELP_MESSAGE.yellow
273
+ exit
274
+ end
275
+ elsif options[:pocEmail]
276
+ if options[:pocFirstName].nil? || options[:pocLastName].nil? || options[:pocPhoneNumber].nil?
277
+ puts 'If a POC email is given, then all POC information must be entered:'.red
278
+ puts ' pocFirstName, pocLastName, pocPhoneNumber'.red
279
+ puts POAMS_POST_HELP_MESSAGE.yellow
280
+ exit
281
+ end
282
+ elsif options[:pocPhoneNumber]
283
+ if options[:pocFirstName].nil? || options[:pocLastName].nil? || options[:pocEmail].nil?
284
+ puts 'If a POC phone number is given, then all POC information must be entered:'.red
285
+ puts ' pocFirstName, pocLastName, pocEmail'.red
286
+ puts POAMS_POST_HELP_MESSAGE.yellow
287
+ exit
288
+ end
289
+ end
290
+ # rubocop:enable Style/CaseLikeIf, Style/StringLiterals
291
+ end
292
+
293
+ def print_milestone_help
294
+ puts 'Milestone format is:'.yellow
295
+ puts ' --milestone description:"[value]" scheduledCompletionDate:"[value]"'.yellow
296
+ end
297
+ end
298
+ # rubocop:enable Metrics/BlockLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
299
+ end
300
+
301
+ # The Milestones endpoints provide the ability add milestones that are associated with
302
+ # Plan of Action and Milestones (POA&M) items for a system.
303
+ #
304
+ # Endpoint:
305
+ # /api/systems/{systemId}/poams/{poamId}/milestones - Add milestones in one or many poa&m items in a system
306
+ class Milestones < SubCommandBase
307
+ def self.exit_on_failure?
308
+ true
309
+ end
310
+
311
+ desc 'add', 'Add milestones to one or many POA&M items in a system'
312
+ long_desc Help.text(:milestone_post_mapper)
313
+
314
+ # Required parameters/fields
315
+ option :systemId, type: :numeric, required: true, desc: 'A numeric value representing the system identification'
316
+ option :poamId, type: :numeric, required: true, desc: 'A numeric value representing the poam identification'
317
+ option :description, type: :string, required: true, desc: 'The milestone description'
318
+ option :scheduledCompletionDate,
319
+ type: :numeric, required: false, desc: 'The scheduled completion date - Unix time format'
320
+
321
+ def add
322
+ body = SwaggerClient::MilestonesRequestPostBody.new
323
+ body.poam_id = options[:poamId]
324
+ body.description = options[:description]
325
+ body.scheduled_completion_date = options[:scheduledCompletionDate]
326
+ body_array = Array.new(1, body)
327
+
328
+ begin
329
+ result = SwaggerClient::MilestonesApi
330
+ .new.add_milestone_by_system_id_and_poam_id(body_array, options[:systemId], options[:poamId])
331
+ puts to_output_hash(result).green
332
+ rescue SwaggerClient::ApiError => e
333
+ puts 'Exception when calling MilestonesApi->add_milestone_by_system_id_and_poam_id'.red
334
+ puts to_output_hash(e)
335
+ end
336
+ end
337
+ end
338
+
339
+ # Add one or many artifacts for a system (delivery method must be a zip file)
340
+ #
341
+ # Endpoints:
342
+ # /api/systems/{systemId}/artifacts - Post one or many artifacts to a system
343
+ class Artifacts < SubCommandBase
344
+ def self.exit_on_failure?
345
+ true
346
+ end
347
+
348
+ desc 'upload SYSTEM_ID FILE [FILE ...]', 'Uploads [FILES] to the given [SYSTEM_ID] as artifacts'
349
+ long_desc Help.text(:artifacts_post_mapper)
350
+
351
+ # Required parameters/fields
352
+ option :systemId, type: :numeric, required: true, desc: 'A numeric value representing the system identification'
353
+ option :files, type: :array, required: true, desc: 'Artifact file(s) to post to the given system'
354
+ option :type,
355
+ type: :string, required: true,
356
+ enum: ['Procedure', 'Diagram', 'Policy', 'Labor', 'Document',
357
+ 'Image', 'Other', 'Scan Result', 'Auditor Report']
358
+ option :category, type: :string, required: true, enum: ['Implementation Guidance', 'Evidence']
359
+ option :isTemplate, type: :boolean, required: false, default: false, desc: 'BOOLEAN - true or false.'
360
+ # NOTE: compress is a required parameter, however Thor does not allow a boolean type to be required because it
361
+ # automatically creates a --no-isTemplate option for isTemplate=false
362
+
363
+ # Optional parameters/fields
364
+ option :description, type: :string, required: false, desc: 'Artifact description'
365
+ option :refPageNumber, type: :string, required: false, desc: 'Artifact reference page number'
366
+ option :ccis, type: :string, required: false, desc: 'The system CCIs string numerical value'
367
+ option :controls,
368
+ type: :string, required: false,
369
+ desc: 'Control acronym associated with the artifact. NIST SP 800-53 Revision 4 defined'
370
+ option :artifactExpirationDate,
371
+ type: :numeric, required: false, desc: 'Date Artifact expires and requires review - Unix time format'
372
+ option :lastReviewedDate,
373
+ type: :numeric, required: false, desc: 'Date Artifact was last reviewed - Unix time format'
374
+
375
+ def upload
376
+ optional_options_keys = optional_options(@_initializer).keys
377
+ optional_options = to_input_hash(optional_options_keys, options)
378
+ # Remove the isTemplate as we can't use the required = true.
379
+ optional_options.delete(:is_template)
380
+
381
+ opts = {}
382
+ opts[:form_params] = optional_options
383
+
384
+ tempfile = Tempfile.create(['artifacts', '.zip'])
385
+
386
+ Zip::OutputStream.open(tempfile.path) do |z|
387
+ options[:files].each do |file|
388
+ # Add file name to the archive: Don't use the full path
389
+ z.put_next_entry(File.basename(file))
390
+ # Add the file to the archive
391
+ z.print File.read(file)
392
+ end
393
+ end
394
+
395
+ begin
396
+ result = SwaggerClient::ArtifactsApi
397
+ .new
398
+ .add_artifacts_by_system_id(options[:isTemplate], options[:type],
399
+ options[:category], tempfile, options[:systemId], opts)
400
+ puts to_output_hash(result).green
401
+ rescue SwaggerClient::ApiError => e
402
+ puts 'Exception when calling ArtifactsApi->add_artifacts_by_system_id'.red
403
+ puts to_output_hash(e)
404
+ ensure
405
+ # Delete the temp file
406
+ unless File.exist? tempfile
407
+ tempfile.close
408
+ FileUtils.remove_file(tempfile, true)
409
+ end
410
+ end
411
+ end
412
+ end
413
+
414
+ # Add a Control Approval Chain (CAC)
415
+ #
416
+ # Endpoints:
417
+ # /api/systems/{systemId}/approval/cac - Submit control to second stage of CAC
418
+ class CAC < SubCommandBase
419
+ def self.exit_on_failure?
420
+ true
421
+ end
422
+
423
+ desc 'add', 'Submit control to second stage of CAC'
424
+ long_desc Help.text(:approvalCac_post_mapper)
425
+
426
+ # Required parameters/fields
427
+ option :systemId, type: :numeric, required: true, desc: 'A numeric value representing the system identification'
428
+ option :controlAcronym, type: :string, required: true, desc: 'The system acronym "AC-1, AC-2"'
429
+
430
+ # Conditional parameters/fields
431
+ option :comments, type: :string, required: false, desc: 'The control approval chain comments'
432
+
433
+ def add
434
+ body = SwaggerClient::CacRequestPostBody.new
435
+ body.control_acronym = options[:controlAcronym]
436
+ body.comments = options[:comments]
437
+
438
+ body_array = Array.new(1, body)
439
+
440
+ begin
441
+ # Get location of one or many controls in CAC
442
+ result = SwaggerClient::CacApi.new.add_s_ystem_c_ac(body_array, options[:systemId])
443
+ puts to_output_hash(result).green
444
+ rescue SwaggerClient::ApiError => e
445
+ puts 'Exception when calling ApprovalChainApi->add_s_ystem_c_ac'.red
446
+ puts to_output_hash(e)
447
+ end
448
+ end
449
+ end
450
+
451
+ # Add a Package Approval Chain (PAC)
452
+ #
453
+ # Endpoints:
454
+ # /api/systems/{systemId}/approval/pac - Initiate system workflow for review
455
+ class PAC < SubCommandBase
456
+ def self.exit_on_failure?
457
+ true
458
+ end
459
+
460
+ desc 'add', 'Initiate system workflow for review'
461
+ long_desc Help.text(:approvalPac_post_mapper)
462
+
463
+ # Required parameters/fields
464
+ option :systemId, type: :numeric, required: true,
465
+ desc: 'A numeric value representing the system identification'
466
+ option :workflow, type: :string, required: true,
467
+ enum: ['Assess and Authorize', 'Assess Only', 'Security Plan Approval']
468
+ option :name, type: :string, required: true, desc: 'The control package name'
469
+ option :comments, type: :string, required: true,
470
+ desc: 'Comments submitted upon initiation of the indicated workflow'
471
+
472
+ def add
473
+ body = SwaggerClient::PacRequestBodyPost.new
474
+ body.name = options[:name]
475
+ body.type = options[:type]
476
+ body.comments = options[:comments]
477
+
478
+ body_array = Array.new(1, body)
479
+
480
+ result = SwaggerClient::PacApi.new.add_s_ystem_p_ac(body_array, options[:systemId])
481
+ puts to_output_hash(result).green
482
+ rescue SwaggerClient::ApiError => e
483
+ puts 'Exception when calling ApprovalChainApi->add_s_ystem_c_ac'.red
484
+ puts to_output_hash(e)
485
+ end
486
+ end
487
+
488
+ # TThe Static Code Scans endpoint provides the ability to upload application
489
+ # scan findings into a system's assets module.
490
+ #
491
+ # Application findings can also be cleared from the system.
492
+ #
493
+ # Endpoint:
494
+ # /api/systems/{systemId}/static-code-scans - Upload static code scans
495
+ class ScanFindings < SubCommandBase
496
+ def self.exit_on_failure?
497
+ true
498
+ end
499
+
500
+ desc 'add', 'Upload static code scans'
501
+ long_desc Help.text(:staticcode_post_mapper)
502
+
503
+ # Required parameters/fields
504
+ option :systemId, type: :numeric, required: true, desc: 'A numeric value representing the system identification'
505
+ option :applicationName, type: :string, required: true, desc: 'Name of the software application that was assessed'
506
+ option :version, type: :string, required: true, desc: 'The version of the application'
507
+ option :codeCheckName, type: :string, required: true, desc: 'Name of the software vulnerability or weakness'
508
+ option :scanDate, type: :numeric, required: false, desc: 'The findings scan date - Unix time format'
509
+ option :cweId, type: :string, required: true, desc: 'The Common Weakness Enumerator (CWE) identifier'
510
+
511
+ # Optional parameter/fields
512
+ option :rawSeverity, type: :string, required: false, enum: %w[Low Medium Moderate High Critical]
513
+ option :count, type: :numeric, required: false, desc: 'Number of instances observed for a specified finding'
514
+
515
+ def add
516
+ application = SwaggerClient::StaticCodeRequiredPostApplication.new
517
+ application.application_name = options[:applicationName]
518
+ application.version = options[:version]
519
+
520
+ application_findings = SwaggerClient::StaticCodeApplication.new
521
+ application_findings.code_check_name = options[:codeCheckName]
522
+ application_findings.scan_date = options[:scanDate]
523
+ application_findings.cwe_id = options[:cweId]
524
+
525
+ application_findings.raw_severity = options[:rawSeverity] if options[:rawSeverity]
526
+ application_findings.count = options[:count] if options[:count]
527
+
528
+ body = SwaggerClient::StaticCodeRequiredPost.new
529
+ body.application = application
530
+ body.application_findings = application_findings
531
+
532
+ body_array = Array.new(1, body)
533
+
534
+ begin
535
+ result = SwaggerClient::StaticCodeScansApi
536
+ .new.add_static_code_scans_by_system_id(body_array, options[:systemId])
537
+ puts to_output_hash(result).green
538
+ rescue SwaggerClient::ApiError => e
539
+ puts 'Exception when calling StaticCodeScansApi->add_static_code_scans_by_system_id'.red
540
+ puts to_output_hash(e)
541
+ end
542
+ end
543
+
544
+ # CLEAR ------------------------------------------------------------------------------------
545
+ desc 'clear', 'Clear an application findings'
546
+ long_desc Help.text(:staticcode_clear_mapper)
547
+
548
+ # Required parameters/fields
549
+ option :systemId, type: :numeric, required: true, desc: 'A numeric value representing the system identification'
550
+ option :applicationName, type: :string, required: true, desc: 'Name of the software application that was assessed'
551
+ option :version, type: :string, required: true, desc: 'The version of the application'
552
+ option :clearFindings, type: :boolean, required: false, default: false, desc: 'BOOLEAN - true or false'
553
+ # NOTE: clearFindings is a required parameter to clear an application's findings, however Thor does not allow
554
+ # a boolean type to be required because it automatically creates a --no-clearFindings option for clearFindings=false
555
+
556
+ def clear
557
+ unless options[:clearFindings]
558
+ puts 'To clear an application findings, the field clearFindings (--clearFindings) is required'.red
559
+ puts NEW_LINE + 'Invoke "bundle exec exe/emasser post scan_findings help clear" for additional help'.yellow
560
+ exit
561
+ end
562
+
563
+ application = SwaggerClient::StaticCodeRequiredPostApplication.new
564
+ application.application_name = options[:applicationName]
565
+ application.version = options[:version]
566
+
567
+ application_findings = SwaggerClient::StaticCodeApplication.new
568
+ application_findings.clear_findings = options[:clearFindings]
569
+
570
+ body = SwaggerClient::StaticCodeRequiredPost.new
571
+ body.application = application
572
+ body.application_findings = application_findings
573
+
574
+ body_array = Array.new(1, body)
575
+
576
+ begin
577
+ result = SwaggerClient::StaticCodeScansApi
578
+ .new.add_static_code_scans_by_system_id(body_array, options[:systemId])
579
+ puts to_output_hash(result).green
580
+ rescue SwaggerClient::ApiError => e
581
+ puts 'Exception when calling StaticCodeScansApi->add_static_code_scans_by_system_id'.red
582
+ puts to_output_hash(e)
583
+ end
584
+ end
585
+ end
586
+
587
+ class Post < SubCommandBase
588
+ desc 'test_results', 'Add system Test Results'
589
+ subcommand 'test_results', TestResults
590
+
591
+ desc 'poams', 'Add Plan of Action and Milestones (POA&M) items to a system'
592
+ subcommand 'poams', Poams
593
+
594
+ desc 'milestones', 'Add milestone(s) to one or many POA&M items in a system'
595
+ subcommand 'milestones', Milestones
596
+
597
+ desc 'artifacts', 'Add system Artifacts'
598
+ subcommand 'artifacts', Artifacts
599
+
600
+ desc 'cac', 'Add Control Approval Chain (CAC) security content'
601
+ subcommand 'cac', CAC
602
+
603
+ desc 'pac', 'Add Package Approval Chain (PAC) security content'
604
+ subcommand 'pac', PAC
605
+
606
+ desc 'scan_findings', 'Upload static code scans'
607
+ subcommand 'scan_findings', ScanFindings
608
+ end
609
+ end