@rockcarver/frodo-cli 0.18.2-7 → 0.18.2-9

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.
Files changed (334) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/esm/app.js +2 -2
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/_template/something-delete.js +7 -4
  5. package/esm/cli/_template/something-delete.js.map +1 -1
  6. package/esm/cli/_template/something-describe.js +7 -4
  7. package/esm/cli/_template/something-describe.js.map +1 -1
  8. package/esm/cli/_template/something-else-delete.js +7 -4
  9. package/esm/cli/_template/something-else-delete.js.map +1 -1
  10. package/esm/cli/_template/something-else-describe.js +7 -4
  11. package/esm/cli/_template/something-else-describe.js.map +1 -1
  12. package/esm/cli/_template/something-else-export.js +7 -4
  13. package/esm/cli/_template/something-else-export.js.map +1 -1
  14. package/esm/cli/_template/something-else-import.js +7 -4
  15. package/esm/cli/_template/something-else-import.js.map +1 -1
  16. package/esm/cli/_template/something-else-list.js +7 -4
  17. package/esm/cli/_template/something-else-list.js.map +1 -1
  18. package/esm/cli/_template/something-else.js.map +1 -1
  19. package/esm/cli/_template/something-export.js +7 -4
  20. package/esm/cli/_template/something-export.js.map +1 -1
  21. package/esm/cli/_template/something-import.js +7 -4
  22. package/esm/cli/_template/something-import.js.map +1 -1
  23. package/esm/cli/_template/something-list.js +7 -4
  24. package/esm/cli/_template/something-list.js.map +1 -1
  25. package/esm/cli/_template/something-other-delete.js +7 -4
  26. package/esm/cli/_template/something-other-delete.js.map +1 -1
  27. package/esm/cli/_template/something-other-describe.js +7 -4
  28. package/esm/cli/_template/something-other-describe.js.map +1 -1
  29. package/esm/cli/_template/something-other-export.js +7 -4
  30. package/esm/cli/_template/something-other-export.js.map +1 -1
  31. package/esm/cli/_template/something-other-import.js +7 -4
  32. package/esm/cli/_template/something-other-import.js.map +1 -1
  33. package/esm/cli/_template/something-other-list.js +7 -4
  34. package/esm/cli/_template/something-other-list.js.map +1 -1
  35. package/esm/cli/_template/something-other.js.map +1 -1
  36. package/esm/cli/_template/something.js +0 -2
  37. package/esm/cli/_template/something.js.map +1 -1
  38. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +5 -3
  39. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  40. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +7 -11
  41. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  42. package/esm/cli/admin/admin-get-access-token.js +5 -3
  43. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  44. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +5 -3
  45. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  46. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +5 -3
  47. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  48. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +5 -3
  49. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  50. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +5 -3
  51. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  52. package/esm/cli/admin/admin-list-static-user-mappings.js +5 -3
  53. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  54. package/esm/cli/admin/admin-remove-static-user-mapping.js +5 -3
  55. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  56. package/esm/cli/admin/admin-repair-org-model.js +5 -3
  57. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  58. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +5 -3
  59. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  60. package/esm/cli/admin/admin-show-generic-extension-attributes.js +5 -3
  61. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  62. package/esm/cli/admin/admin.js +0 -2
  63. package/esm/cli/admin/admin.js.map +1 -1
  64. package/esm/cli/agent/agent-delete.js +9 -7
  65. package/esm/cli/agent/agent-delete.js.map +1 -1
  66. package/esm/cli/agent/agent-describe.js +7 -4
  67. package/esm/cli/agent/agent-describe.js.map +1 -1
  68. package/esm/cli/agent/agent-export.js +11 -6
  69. package/esm/cli/agent/agent-export.js.map +1 -1
  70. package/esm/cli/agent/agent-gateway-delete.js +9 -7
  71. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  72. package/esm/cli/agent/agent-gateway-describe.js +7 -4
  73. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  74. package/esm/cli/agent/agent-gateway-export.js +11 -6
  75. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  76. package/esm/cli/agent/agent-gateway-import.js +13 -7
  77. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  78. package/esm/cli/agent/agent-gateway-list.js +5 -3
  79. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  80. package/esm/cli/agent/agent-gateway.js.map +1 -1
  81. package/esm/cli/agent/agent-import.js +13 -7
  82. package/esm/cli/agent/agent-import.js.map +1 -1
  83. package/esm/cli/agent/agent-java-delete.js +9 -7
  84. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  85. package/esm/cli/agent/agent-java-describe.js +7 -4
  86. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  87. package/esm/cli/agent/agent-java-export.js +11 -6
  88. package/esm/cli/agent/agent-java-export.js.map +1 -1
  89. package/esm/cli/agent/agent-java-import.js +13 -7
  90. package/esm/cli/agent/agent-java-import.js.map +1 -1
  91. package/esm/cli/agent/agent-java-list.js +5 -3
  92. package/esm/cli/agent/agent-java-list.js.map +1 -1
  93. package/esm/cli/agent/agent-java.js.map +1 -1
  94. package/esm/cli/agent/agent-list.js +5 -3
  95. package/esm/cli/agent/agent-list.js.map +1 -1
  96. package/esm/cli/agent/agent-web-delete.js +9 -7
  97. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  98. package/esm/cli/agent/agent-web-describe.js +7 -4
  99. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  100. package/esm/cli/agent/agent-web-export.js +11 -6
  101. package/esm/cli/agent/agent-web-export.js.map +1 -1
  102. package/esm/cli/agent/agent-web-import.js +13 -7
  103. package/esm/cli/agent/agent-web-import.js.map +1 -1
  104. package/esm/cli/agent/agent-web-list.js +5 -3
  105. package/esm/cli/agent/agent-web-list.js.map +1 -1
  106. package/esm/cli/agent/agent-web.js.map +1 -1
  107. package/esm/cli/agent/agent.js +0 -2
  108. package/esm/cli/agent/agent.js.map +1 -1
  109. package/esm/cli/app/app-delete.js +7 -4
  110. package/esm/cli/app/app-delete.js.map +1 -1
  111. package/esm/cli/app/app-describe.js +7 -4
  112. package/esm/cli/app/app-describe.js.map +1 -1
  113. package/esm/cli/app/app-export.js +11 -6
  114. package/esm/cli/app/app-export.js.map +1 -1
  115. package/esm/cli/app/app-import.js +9 -5
  116. package/esm/cli/app/app-import.js.map +1 -1
  117. package/esm/cli/app/app-list.js +5 -3
  118. package/esm/cli/app/app-list.js.map +1 -1
  119. package/esm/cli/app/app.js +8 -5
  120. package/esm/cli/app/app.js.map +1 -1
  121. package/esm/cli/cmd_common.js +2 -1
  122. package/esm/cli/cmd_common.js.map +1 -1
  123. package/esm/cli/conn/conn-add.js +5 -5
  124. package/esm/cli/conn/conn-add.js.map +1 -1
  125. package/esm/cli/conn/conn-delete.js +5 -2
  126. package/esm/cli/conn/conn-delete.js.map +1 -1
  127. package/esm/cli/conn/conn-describe.js +5 -2
  128. package/esm/cli/conn/conn-describe.js.map +1 -1
  129. package/esm/cli/conn/conn-list.js +7 -3
  130. package/esm/cli/conn/conn-list.js.map +1 -1
  131. package/esm/cli/conn/conn.js +2 -3
  132. package/esm/cli/conn/conn.js.map +1 -1
  133. package/esm/cli/email/email-template-export.js +13 -12
  134. package/esm/cli/email/email-template-export.js.map +1 -1
  135. package/esm/cli/email/email-template-import.js +15 -14
  136. package/esm/cli/email/email-template-import.js.map +1 -1
  137. package/esm/cli/email/email-template-list.js +7 -7
  138. package/esm/cli/email/email-template-list.js.map +1 -1
  139. package/esm/cli/email/email-template.js.map +1 -1
  140. package/esm/cli/email/email.js +0 -2
  141. package/esm/cli/email/email.js.map +1 -1
  142. package/esm/cli/esv/esv-apply.js +9 -11
  143. package/esm/cli/esv/esv-apply.js.map +1 -1
  144. package/esm/cli/esv/esv-secret-create.js +5 -3
  145. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  146. package/esm/cli/esv/esv-secret-delete.js +9 -5
  147. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  148. package/esm/cli/esv/esv-secret-describe.js +5 -3
  149. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  150. package/esm/cli/esv/esv-secret-export.js +7 -4
  151. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  152. package/esm/cli/esv/esv-secret-import.js +7 -4
  153. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  154. package/esm/cli/esv/esv-secret-list.js +5 -3
  155. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  156. package/esm/cli/esv/esv-secret-set.js +5 -3
  157. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  158. package/esm/cli/esv/esv-secret-version-activate.js +7 -4
  159. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  160. package/esm/cli/esv/esv-secret-version-create.js +5 -3
  161. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  162. package/esm/cli/esv/esv-secret-version-deactivate.js +7 -4
  163. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  164. package/esm/cli/esv/esv-secret-version-delete.js +7 -4
  165. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  166. package/esm/cli/esv/esv-secret-version-list.js +5 -3
  167. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  168. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  169. package/esm/cli/esv/esv-secret.js +4 -1
  170. package/esm/cli/esv/esv-secret.js.map +1 -1
  171. package/esm/cli/esv/esv-variable-create.js +5 -3
  172. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  173. package/esm/cli/esv/esv-variable-delete.js +9 -5
  174. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  175. package/esm/cli/esv/esv-variable-describe.js +5 -3
  176. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  177. package/esm/cli/esv/esv-variable-export.js +7 -4
  178. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  179. package/esm/cli/esv/esv-variable-import.js +7 -4
  180. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  181. package/esm/cli/esv/esv-variable-list.js +5 -3
  182. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  183. package/esm/cli/esv/esv-variable-set.js +7 -4
  184. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  185. package/esm/cli/esv/esv-variable.js +4 -1
  186. package/esm/cli/esv/esv-variable.js.map +1 -1
  187. package/esm/cli/esv/esv.js +0 -2
  188. package/esm/cli/esv/esv.js.map +1 -1
  189. package/esm/cli/idm/idm-count.js +5 -3
  190. package/esm/cli/idm/idm-count.js.map +1 -1
  191. package/esm/cli/idm/idm-export.js +11 -6
  192. package/esm/cli/idm/idm-export.js.map +1 -1
  193. package/esm/cli/idm/idm-import.js +11 -6
  194. package/esm/cli/idm/idm-import.js.map +1 -1
  195. package/esm/cli/idm/idm-list.js +7 -4
  196. package/esm/cli/idm/idm-list.js.map +1 -1
  197. package/esm/cli/idm/idm.js +2 -3
  198. package/esm/cli/idm/idm.js.map +1 -1
  199. package/esm/cli/idp/idp-export.js +11 -6
  200. package/esm/cli/idp/idp-export.js.map +1 -1
  201. package/esm/cli/idp/idp-import.js +13 -7
  202. package/esm/cli/idp/idp-import.js.map +1 -1
  203. package/esm/cli/idp/idp-list.js +7 -4
  204. package/esm/cli/idp/idp-list.js.map +1 -1
  205. package/esm/cli/idp/idp.js +0 -2
  206. package/esm/cli/idp/idp.js.map +1 -1
  207. package/esm/cli/info/info.js +0 -5
  208. package/esm/cli/info/info.js.map +1 -1
  209. package/esm/cli/journey/journey-delete.e2e.test_.js.map +1 -1
  210. package/esm/cli/journey/journey-delete.js +9 -5
  211. package/esm/cli/journey/journey-delete.js.map +1 -1
  212. package/esm/cli/journey/journey-describe.js +31 -28
  213. package/esm/cli/journey/journey-describe.js.map +1 -1
  214. package/esm/cli/journey/journey-disable.js +9 -6
  215. package/esm/cli/journey/journey-disable.js.map +1 -1
  216. package/esm/cli/journey/journey-enable.js +9 -6
  217. package/esm/cli/journey/journey-enable.js.map +1 -1
  218. package/esm/cli/journey/journey-export.js +11 -6
  219. package/esm/cli/journey/journey-export.js.map +1 -1
  220. package/esm/cli/journey/journey-import.js +13 -7
  221. package/esm/cli/journey/journey-import.js.map +1 -1
  222. package/esm/cli/journey/journey-list.e2e.test_.js.map +1 -1
  223. package/esm/cli/journey/journey-list.js +5 -3
  224. package/esm/cli/journey/journey-list.js.map +1 -1
  225. package/esm/cli/journey/journey-prune.js +5 -5
  226. package/esm/cli/journey/journey-prune.js.map +1 -1
  227. package/esm/cli/journey/journey.js +0 -2
  228. package/esm/cli/journey/journey.js.map +1 -1
  229. package/esm/cli/logging/logs-fetch.js +2 -11
  230. package/esm/cli/logging/logs-fetch.js.map +1 -1
  231. package/esm/cli/logging/logs-list.js +0 -5
  232. package/esm/cli/logging/logs-list.js.map +1 -1
  233. package/esm/cli/logging/logs-tail.js +0 -4
  234. package/esm/cli/logging/logs-tail.js.map +1 -1
  235. package/esm/cli/logging/logs.js +2 -4
  236. package/esm/cli/logging/logs.js.map +1 -1
  237. package/esm/cli/realm/realm-add-custom-domain.js +5 -3
  238. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  239. package/esm/cli/realm/realm-describe.js +5 -3
  240. package/esm/cli/realm/realm-describe.js.map +1 -1
  241. package/esm/cli/realm/realm-list.js +5 -3
  242. package/esm/cli/realm/realm-list.js.map +1 -1
  243. package/esm/cli/realm/realm-remove-custom-domain.js +5 -3
  244. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  245. package/esm/cli/realm/realm.js +5 -4
  246. package/esm/cli/realm/realm.js.map +1 -1
  247. package/esm/cli/saml/saml-cot-export.js +11 -6
  248. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  249. package/esm/cli/saml/saml-cot-import.js +13 -7
  250. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  251. package/esm/cli/saml/saml-cot-list.js +5 -3
  252. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  253. package/esm/cli/saml/saml-cot.js.map +1 -1
  254. package/esm/cli/saml/saml-delete.js +11 -6
  255. package/esm/cli/saml/saml-delete.js.map +1 -1
  256. package/esm/cli/saml/saml-describe.js +5 -3
  257. package/esm/cli/saml/saml-describe.js.map +1 -1
  258. package/esm/cli/saml/saml-export.js +13 -7
  259. package/esm/cli/saml/saml-export.js.map +1 -1
  260. package/esm/cli/saml/saml-import.js +13 -7
  261. package/esm/cli/saml/saml-import.js.map +1 -1
  262. package/esm/cli/saml/saml-list.js +5 -3
  263. package/esm/cli/saml/saml-list.js.map +1 -1
  264. package/esm/cli/saml/saml-metadata-export.js +7 -4
  265. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  266. package/esm/cli/saml/saml-metadata.js.map +1 -1
  267. package/esm/cli/saml/saml.js +0 -2
  268. package/esm/cli/saml/saml.js.map +1 -1
  269. package/esm/cli/script/script-delete.js +7 -4
  270. package/esm/cli/script/script-delete.js.map +1 -1
  271. package/esm/cli/script/script-describe.js +7 -4
  272. package/esm/cli/script/script-describe.js.map +1 -1
  273. package/esm/cli/script/script-export.js +15 -8
  274. package/esm/cli/script/script-export.js.map +1 -1
  275. package/esm/cli/script/script-import.js +7 -4
  276. package/esm/cli/script/script-import.js.map +1 -1
  277. package/esm/cli/script/script-list.js +5 -3
  278. package/esm/cli/script/script-list.js.map +1 -1
  279. package/esm/cli/script/script.js +6 -4
  280. package/esm/cli/script/script.js.map +1 -1
  281. package/esm/cli/service/service-delete.js +0 -1
  282. package/esm/cli/service/service-delete.js.map +1 -1
  283. package/esm/cli/service/service-export.js +11 -6
  284. package/esm/cli/service/service-export.js.map +1 -1
  285. package/esm/cli/service/service-import.js +13 -6
  286. package/esm/cli/service/service-import.js.map +1 -1
  287. package/esm/cli/service/service-list.js +0 -1
  288. package/esm/cli/service/service-list.js.map +1 -1
  289. package/esm/cli/service/service.js +0 -2
  290. package/esm/cli/service/service.js.map +1 -1
  291. package/esm/cli/theme/theme-delete.e2e.test_.js.map +1 -1
  292. package/esm/cli/theme/theme-delete.js +16 -14
  293. package/esm/cli/theme/theme-delete.js.map +1 -1
  294. package/esm/cli/theme/theme-export.js +17 -15
  295. package/esm/cli/theme/theme-export.js.map +1 -1
  296. package/esm/cli/theme/theme-import.js +19 -17
  297. package/esm/cli/theme/theme-import.js.map +1 -1
  298. package/esm/cli/theme/theme-list.e2e.test_.js.map +1 -1
  299. package/esm/cli/theme/theme-list.js +7 -7
  300. package/esm/cli/theme/theme-list.js.map +1 -1
  301. package/esm/cli/theme/theme.js +0 -2
  302. package/esm/cli/theme/theme.js.map +1 -1
  303. package/esm/ops/AgentOps.js +48 -126
  304. package/esm/ops/AgentOps.js.map +1 -1
  305. package/esm/ops/CirclesOfTrustOps.js +2 -2
  306. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  307. package/esm/ops/EmailTemplateOps.js +270 -6
  308. package/esm/ops/EmailTemplateOps.js.map +1 -1
  309. package/esm/ops/IdpOps.js +2 -2
  310. package/esm/ops/IdpOps.js.map +1 -1
  311. package/esm/ops/JourneyOps.js +96 -152
  312. package/esm/ops/JourneyOps.js.map +1 -1
  313. package/esm/ops/NodeOps.js +6 -12
  314. package/esm/ops/NodeOps.js.map +1 -1
  315. package/esm/ops/Saml2Ops.js +25 -78
  316. package/esm/ops/Saml2Ops.js.map +1 -1
  317. package/esm/ops/Saml2Ops.test_.js.map +1 -1
  318. package/esm/ops/ScriptOps.js +3 -3
  319. package/esm/ops/ScriptOps.js.map +1 -1
  320. package/esm/ops/ServiceOps.js +10 -31
  321. package/esm/ops/ServiceOps.js.map +1 -1
  322. package/esm/ops/ThemeOps.js +331 -2
  323. package/esm/ops/ThemeOps.js.map +1 -1
  324. package/esm/ops/utils/Wordwrap.js.map +1 -1
  325. package/esm/storage/StaticStorage.js.map +1 -1
  326. package/esm/utils/Config.js +0 -9
  327. package/esm/utils/Config.js.map +1 -1
  328. package/esm/utils/Console.js +32 -79
  329. package/esm/utils/Console.js.map +1 -1
  330. package/esm/utils/ExportImportUtils.js +46 -0
  331. package/esm/utils/ExportImportUtils.js.map +1 -0
  332. package/esm/utils/Version.js +6 -24
  333. package/esm/utils/Version.js.map +1 -1
  334. package/package.json +18 -17
@@ -25,81 +25,74 @@ const {
25
25
  saveToFile,
26
26
  validateImport
27
27
  } = ExportImportUtils;
28
+
28
29
  /**
29
30
  * Get a one-line description of the saml2 provider object
30
31
  * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe
31
32
  * @returns {string} a one-line description
32
33
  */
33
-
34
34
  export function getOneLineDescription(saml2ProviderObj) {
35
35
  const roles = [];
36
-
37
36
  for (const [key, value] of Object.entries(roleMap)) {
38
37
  if (saml2ProviderObj[key]) {
39
38
  roles.push(value);
40
39
  }
41
40
  }
42
-
43
41
  const description = `[${saml2ProviderObj.entityId['brightCyan']}]${' (' + saml2ProviderObj.entityLocation}${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;
44
42
  return description;
45
43
  }
44
+
46
45
  /**
47
46
  * Get markdown table header
48
47
  * @returns {string} markdown table header
49
48
  */
50
-
51
49
  export function getTableHeaderMd() {
52
50
  let markdown = '';
53
51
  markdown += '| Entity Id | Location | Role(s) |\n';
54
52
  markdown += '| --------- | -------- | ------- |';
55
53
  return markdown;
56
54
  }
55
+
57
56
  /**
58
57
  * Get a table-row of the saml2 provider in markdown
59
58
  * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe
60
59
  * @returns {string} a table-row of the saml2 provider in markdown
61
60
  */
62
-
63
61
  export function getTableRowMd(saml2ProviderObj) {
64
62
  const roles = [];
65
-
66
63
  for (const [key, value] of Object.entries(roleMap)) {
67
64
  if (saml2ProviderObj[key]) {
68
65
  roles.push(value);
69
66
  }
70
67
  }
71
-
72
68
  const row = `| ${saml2ProviderObj.entityId} | ${saml2ProviderObj.entityLocation} | ${roles.length ? roles.join(', ') : ''} |`;
73
69
  return row;
74
70
  }
71
+
75
72
  /**
76
73
  * List entity providers
77
74
  * @param {boolean} long Long list format with details
78
75
  */
79
-
80
76
  export async function listSaml2Providers(long = false) {
81
77
  const providerList = await getSaml2ProviderStubs();
82
78
  providerList.sort((a, b) => a._id.localeCompare(b._id));
83
-
84
79
  if (!long) {
85
80
  for (const provider of providerList) {
86
81
  printMessage(`${provider.entityId}`, 'data');
87
82
  }
88
83
  } else {
89
84
  const table = createTable(['Entity Id'['brightCyan'], 'Location'['brightCyan'], 'Role(s)'['brightCyan']]);
90
-
91
85
  for (const provider of providerList) {
92
86
  table.push([provider.entityId, provider.location, provider.roles.map(role => roleMap[role]).join(', ')]);
93
87
  }
94
-
95
88
  printMessage(table.toString());
96
89
  }
97
90
  }
91
+
98
92
  /**
99
93
  * Describe an entity provider's configuration
100
94
  * @param {String} entityId Provider entity id
101
95
  */
102
-
103
96
  export async function describeSaml2Provider(entityId) {
104
97
  try {
105
98
  const stub = await getSaml2ProviderStub(entityId);
@@ -121,21 +114,18 @@ export async function describeSaml2Provider(entityId) {
121
114
  printMessage(error.message, 'error');
122
115
  }
123
116
  }
117
+
124
118
  /**
125
119
  * Export provider metadata to file
126
120
  * @param {String} entityId Provider entity id
127
121
  * @param {String} file Optional filename
128
122
  */
129
-
130
123
  export async function exportSaml2MetadataToFile(entityId, file = null) {
131
124
  let fileName = file;
132
-
133
125
  if (!fileName) {
134
126
  fileName = getTypedFilename(entityId, 'metadata', 'xml');
135
127
  }
136
-
137
128
  createProgressBar(1, `Exporting metadata for: ${entityId}`);
138
-
139
129
  try {
140
130
  updateProgressBar(`Writing file ${fileName}`);
141
131
  const metaData = await getProviderMetadata(entityId);
@@ -146,20 +136,18 @@ export async function exportSaml2MetadataToFile(entityId, file = null) {
146
136
  printMessage(error, 'error');
147
137
  }
148
138
  }
139
+
149
140
  /**
150
141
  * Export a single entity provider to file
151
142
  * @param {String} entityId Provider entity id
152
143
  * @param {String} file Optional filename
153
144
  */
154
-
155
145
  export async function exportSaml2ProviderToFile(entityId, file = null) {
156
146
  debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`);
157
147
  let fileName = file;
158
-
159
148
  if (!fileName) {
160
149
  fileName = getTypedFilename(entityId, 'saml');
161
150
  }
162
-
163
151
  try {
164
152
  createProgressBar(1, `Exporting provider ${entityId}`);
165
153
  const fileData = await exportSaml2Provider(entityId);
@@ -169,70 +157,60 @@ export async function exportSaml2ProviderToFile(entityId, file = null) {
169
157
  stopProgressBar(`${err}`);
170
158
  printMessage(err, 'error');
171
159
  }
172
-
173
160
  debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`);
174
161
  }
162
+
175
163
  /**
176
164
  * Export all entity providers to one file
177
165
  * @param {String} file Optional filename
178
166
  */
179
-
180
167
  export async function exportSaml2ProvidersToFile(file = null) {
181
168
  debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);
182
169
  let fileName = file;
183
-
184
170
  if (!fileName) {
185
171
  fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');
186
172
  }
187
-
188
173
  try {
189
174
  const exportData = await exportSaml2Providers();
190
175
  saveJsonToFile(exportData, fileName);
191
176
  } catch (error) {
192
177
  var _error$response;
193
-
194
178
  printMessage(error.message, 'error');
195
179
  printMessage(`exportSaml2ProvidersToFile: ${(_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status}`, 'error');
196
180
  }
197
-
198
181
  debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);
199
182
  }
183
+
200
184
  /**
201
185
  * Export all entity providers to individual files
202
186
  */
203
-
204
187
  export async function exportSaml2ProvidersToFiles() {
205
188
  const stubs = await getSaml2ProviderStubs();
206
-
207
189
  if (stubs.length > 0) {
208
190
  createProgressBar(stubs.length, 'Exporting providers');
209
-
210
191
  for (const stub of stubs) {
211
192
  updateProgressBar(`Exporting provider ${stub.entityId}`);
212
193
  const fileName = getTypedFilename(stub.entityId, 'saml');
213
194
  const fileData = await exportSaml2Provider(stub.entityId);
214
195
  saveJsonToFile(fileData, fileName);
215
196
  }
216
-
217
197
  stopProgressBar(`${stubs.length} providers exported.`);
218
198
  } else {
219
199
  printMessage('No entity providers found.', 'info');
220
200
  }
221
201
  }
202
+
222
203
  /**
223
204
  * Import a SAML entity provider by entity id from file
224
205
  * @param {String} entityId Provider entity id
225
206
  * @param {String} file Import file name
226
207
  */
227
-
228
208
  export async function importSaml2ProviderFromFile(entityId, file) {
229
209
  fs.readFile(file, 'utf8', async (err, data) => {
230
210
  if (err) throw err;
231
211
  const fileData = JSON.parse(data);
232
-
233
212
  if (validateImport(fileData.meta)) {
234
213
  showSpinner(`Importing ${entityId}...`);
235
-
236
214
  try {
237
215
  await importSaml2Provider(entityId, fileData);
238
216
  stopSpinner(`Imported ${entityId}.`);
@@ -244,21 +222,19 @@ export async function importSaml2ProviderFromFile(entityId, file) {
244
222
  }
245
223
  });
246
224
  }
225
+
247
226
  /**
248
227
  * Import a SAML entity provider by entity id from file
249
228
  * @param {String} file Import file name
250
229
  */
251
-
252
230
  export async function importFirstSaml2ProviderFromFile(file) {
253
231
  fs.readFile(file, 'utf8', async (err, data) => {
254
232
  if (err) throw err;
255
- const fileData = JSON.parse(data); // pick the first provider and run with it
256
-
233
+ const fileData = JSON.parse(data);
234
+ // pick the first provider and run with it
257
235
  const entityId = Object.keys(fileData.saml.remote)[0] || Object.keys(fileData.saml.hosted)[0];
258
-
259
236
  if (validateImport(fileData.meta)) {
260
237
  showSpinner(`Importing ${entityId}...`);
261
-
262
238
  try {
263
239
  await importSaml2Provider(entityId, fileData);
264
240
  stopSpinner(`Imported ${entityId}.`);
@@ -270,16 +246,15 @@ export async function importFirstSaml2ProviderFromFile(file) {
270
246
  }
271
247
  });
272
248
  }
249
+
273
250
  /**
274
251
  * Import all SAML entity providers from file
275
252
  * @param {String} file Import file name
276
253
  */
277
-
278
254
  export async function importSaml2ProvidersFromFile(file) {
279
255
  fs.readFile(file, 'utf8', async (err, data) => {
280
256
  if (err) throw err;
281
257
  const fileData = JSON.parse(data);
282
-
283
258
  if (validateImport(fileData.meta)) {
284
259
  await importSaml2Providers(fileData);
285
260
  } else {
@@ -287,10 +262,10 @@ export async function importSaml2ProvidersFromFile(file) {
287
262
  }
288
263
  });
289
264
  }
265
+
290
266
  /**
291
267
  * Import all SAML entity providers from all *.saml.json files in the current directory
292
268
  */
293
-
294
269
  export async function importSaml2ProvidersFromFiles() {
295
270
  const names = fs.readdirSync('.');
296
271
  const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.saml.json'));
@@ -301,11 +276,9 @@ export async function importSaml2ProvidersFromFiles() {
301
276
  warnings: 0,
302
277
  failures: 0
303
278
  };
304
-
305
279
  for (const file of jsonFiles) {
306
280
  const data = fs.readFileSync(file, 'utf8');
307
281
  const fileData = JSON.parse(data);
308
-
309
282
  if (validateImport(fileData.meta)) {
310
283
  const myStatus = await importSaml2Providers(fileData);
311
284
  totalStatus.total += myStatus.total;
@@ -317,37 +290,32 @@ export async function importSaml2ProvidersFromFiles() {
317
290
  printMessage(`Validation of ${file} failed!`, 'error');
318
291
  }
319
292
  }
320
-
321
293
  stopProgressBar(`Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`);
322
294
  }
295
+
323
296
  /**
324
297
  * List entity providers
325
298
  */
326
-
327
299
  export async function listRawSaml2Providers() {
328
300
  const providerList = (await getRawProviders()).result;
329
301
  providerList.sort((a, b) => a._id.localeCompare(b._id));
330
-
331
302
  for (const provider of providerList) {
332
303
  printMessage(`${provider._id}`, 'data');
333
304
  }
334
305
  }
306
+
335
307
  /**
336
308
  * Exports a RAW SAML entity, which means the raw xml is included.
337
309
  * @param {string} entityId Reference to the entity for export
338
310
  * @param {string} file Optional filename for the exported file
339
311
  */
340
-
341
312
  export async function exportRawSaml2ProviderToFile(entityId, file = null) {
342
313
  printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');
343
314
  let fileName = file;
344
-
345
315
  if (!file) {
346
316
  fileName = getTypedFilename(`${entityId}`, 'raw.saml');
347
317
  }
348
-
349
318
  createProgressBar(1, `Exporting raw entity provider: ${entityId}`);
350
-
351
319
  try {
352
320
  const rawData = await getRawProvider(entityId);
353
321
  updateProgressBar(`Writing file ${fileName}`);
@@ -355,47 +323,41 @@ export async function exportRawSaml2ProviderToFile(entityId, file = null) {
355
323
  stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);
356
324
  } catch (error) {
357
325
  var _error$response2;
358
-
359
326
  stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);
360
327
  printMessage((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data, 'error');
361
328
  }
362
329
  }
330
+
363
331
  /**
364
332
  * Export all entity providers raw to one file
365
333
  * @param {String} file Optional filename
366
334
  */
367
-
368
335
  export async function exportRawSaml2ProvidersToFile(file = null) {
369
336
  let fileName = file;
370
-
371
337
  if (!fileName) {
372
338
  fileName = getTypedFilename(`all${getRealmString()}ProvidersRaw`, 'raw.saml');
373
339
  }
374
-
375
340
  try {
376
341
  const samlApplicationList = (await getRawProviders()).result;
377
342
  saveToFile('application', samlApplicationList, '_id', fileName);
378
343
  printMessage(`All RAW saml entity providers exported to: ${fileName}`, 'info');
379
344
  } catch (error) {
380
345
  var _error$response3;
381
-
382
346
  printMessage(error.message, 'error');
383
347
  printMessage(`exportRawSaml2ProvidersToFile: ${(_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.status}`, 'error');
384
348
  }
385
349
  }
350
+
386
351
  /**
387
352
  * Export all entity providers to individual files
388
353
  */
389
-
390
354
  export async function exportRawSaml2ProvidersToFiles() {
391
355
  const samlApplicationList = (await getRawProviders()).result;
392
356
  let hasError = false;
393
357
  createProgressBar(samlApplicationList.length, 'Exporting RAW providers');
394
358
  let exportedAmount = 0;
395
-
396
359
  for (const item of samlApplicationList) {
397
360
  updateProgressBar(`Exporting provider ${item.entityId}`);
398
-
399
361
  try {
400
362
  const samlApplicationData = await getRawProvider(item._id);
401
363
  const fileName = getTypedFilename(`${item._id}${getRealmString()}ProviderRaw`, 'raw.saml');
@@ -406,38 +368,33 @@ export async function exportRawSaml2ProvidersToFiles() {
406
368
  printMessage(`Unable to export: ${item._id}`, 'error');
407
369
  }
408
370
  }
409
-
410
371
  stopProgressBar(`${exportedAmount} providers exported.`);
411
-
412
372
  if (!hasError) {
413
373
  printMessage('All entities exported.', 'info');
414
374
  } else {
415
375
  printMessage('All other entities exported.', 'info');
416
376
  }
417
377
  }
378
+
418
379
  /**
419
380
  * Imports a raw SAML export file (containing one entity).
420
381
  * @param {string} file The import file
421
382
  */
422
-
423
- export async function importRawSaml2ProviderFromFile( // entityId: string,
383
+ export async function importRawSaml2ProviderFromFile(
384
+ // entityId: string,
424
385
  file) {
425
386
  printMessage(`Importing SAML Entity ${file}...`, 'info');
426
-
427
387
  if (file.indexOf('.raw.saml.json') > -1) {
428
388
  const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));
429
-
430
389
  if (validateImport(samlEntityData.meta)) {
431
390
  for (const id in samlEntityData.application) {
432
391
  // remove the "_rev" data before PUT
433
392
  delete samlEntityData.application[id]._rev;
434
-
435
393
  try {
436
394
  await putRawProvider(id, samlEntityData.application[id]);
437
395
  } catch (error) {
438
396
  printMessage(`Unable to import: ${id}`, 'error');
439
397
  }
440
-
441
398
  printMessage(`Imported ${id}`, 'info');
442
399
  }
443
400
  } else {
@@ -445,28 +402,24 @@ file) {
445
402
  }
446
403
  }
447
404
  }
405
+
448
406
  /**
449
407
  * Import first raw SAML entity provider from file
450
408
  * @param {String} file Import file name
451
409
  */
452
-
453
410
  export async function importFirstRawSaml2ProviderFromFile(file) {
454
411
  printMessage(`Importing SAML Entity ${file}...`, 'info');
455
-
456
412
  if (file.indexOf('.raw.saml.json') > -1) {
457
413
  const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));
458
-
459
414
  if (validateImport(samlEntityData.meta)) {
460
415
  for (const id in samlEntityData.application) {
461
416
  // remove the "_rev" data before PUT
462
417
  delete samlEntityData.application[id]._rev;
463
-
464
418
  try {
465
419
  await putRawProvider(id, samlEntityData.application[id]);
466
420
  } catch (error) {
467
421
  printMessage(`Unable to import: ${id}`, 'error');
468
422
  }
469
-
470
423
  printMessage(`Imported ${id}`, 'info');
471
424
  return;
472
425
  }
@@ -475,26 +428,23 @@ export async function importFirstRawSaml2ProviderFromFile(file) {
475
428
  }
476
429
  }
477
430
  }
431
+
478
432
  /**
479
433
  * Imports the RAW provider info from a single file.
480
434
  * @param file Import file name
481
435
  */
482
-
483
436
  export async function importRawSaml2ProvidersFromFile(file) {
484
437
  fs.readFile(file, 'utf8', async function (err, data) {
485
438
  if (err) throw err;
486
439
  const samlEntityData = JSON.parse(data);
487
440
  let amountOfEntities = 0;
488
-
489
441
  for (const id in samlEntityData.application) {
490
442
  if (id.length) {
491
443
  amountOfEntities++;
492
444
  }
493
445
  }
494
-
495
446
  if (validateImport(samlEntityData.meta)) {
496
447
  createProgressBar(amountOfEntities, 'Importing providers...');
497
-
498
448
  for (const id in samlEntityData.application) {
499
449
  // remove the "_rev" data before PUT
500
450
  delete samlEntityData.application[id]._rev;
@@ -505,30 +455,27 @@ export async function importRawSaml2ProvidersFromFile(file) {
505
455
  });
506
456
  updateProgressBar(`Imported ${id}...`);
507
457
  }
508
-
509
458
  stopProgressBar(`Import done`);
510
459
  } else {
511
460
  printMessage('Import validation failed...', 'error');
512
461
  }
513
462
  });
514
463
  }
464
+
515
465
  /**
516
466
  * Whenever the SAML RAW file were exported using the exportRAW functionality this function
517
467
  * is used to read them back in. Only files with the .samlRaw.json extension will be imported.
518
468
  * @param {string} directory The directory from which to import the files
519
469
  */
520
-
521
470
  export async function importRawSaml2ProvidersFromFiles(directory) {
522
471
  const files = fs.readdirSync(directory);
523
472
  const filesToImport = files.filter(file => file.indexOf('.samlRaw.json') > -1);
524
-
525
473
  if (filesToImport.length > 0) {
526
474
  createProgressBar(filesToImport.length, 'Importing providers...');
527
475
  filesToImport.forEach(async file => {
528
476
  const filePathAbsolute = path.join(directory, file);
529
477
  filesToImport.push(file);
530
478
  const samlEntityData = JSON.parse(fs.readFileSync(filePathAbsolute, 'utf8'));
531
-
532
479
  if (validateImport(samlEntityData.meta)) {
533
480
  for (const id in samlEntityData.application) {
534
481
  // remove the "_rev" data before PUT
@@ -1 +1 @@
1
- {"version":3,"file":"Saml2Ops.js","names":["fs","path","Saml2","ExportImportUtils","createObjectTable","createProgressBar","createTable","debugMessage","printMessage","showSpinner","stopProgressBar","stopSpinner","updateProgressBar","roleMap","exportSaml2Provider","exportSaml2Providers","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadata","getProviderMetadataUrl","getSaml2ProviderStub","getRawProviders","getRawProvider","importSaml2Provider","importSaml2Providers","putRawProvider","getTypedFilename","saveJsonToFile","saveTextToFile","getRealmString","saveToFile","validateImport","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","id","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","fileName","metaData","brightCyan","exportSaml2ProviderToFile","fileData","err","exportSaml2ProvidersToFile","exportData","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","readFile","data","JSON","parse","meta","importFirstSaml2ProviderFromFile","keys","saml","remote","hosted","importSaml2ProvidersFromFile","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","totalStatus","total","successes","warnings","failures","readFileSync","myStatus","listRawSaml2Providers","result","exportRawSaml2ProviderToFile","rawData","stringify","exportRawSaml2ProvidersToFile","samlApplicationList","exportRawSaml2ProvidersToFiles","hasError","exportedAmount","item","samlApplicationData","importRawSaml2ProviderFromFile","indexOf","samlEntityData","application","importFirstRawSaml2ProviderFromFile","importRawSaml2ProvidersFromFile","amountOfEntities","then","importRawSaml2ProvidersFromFiles","directory","files","filesToImport","forEach","filePathAbsolute"],"sources":["ops/Saml2Ops.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Saml2, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport {\n MultiOpStatusInterface,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n printMessage,\n showSpinner,\n stopProgressBar,\n stopSpinner,\n updateProgressBar,\n} from '../utils/Console';\n\nconst {\n roleMap,\n exportSaml2Provider,\n exportSaml2Providers,\n getSaml2ProviderStubs,\n getProviderByLocationAndId,\n getProviderMetadata,\n getProviderMetadataUrl,\n getSaml2ProviderStub,\n getRawProviders,\n getRawProvider,\n importSaml2Provider,\n importSaml2Providers,\n putRawProvider,\n} = Saml2;\nconst {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n getRealmString,\n saveToFile,\n validateImport,\n} = ExportImportUtils;\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await getSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString());\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await getSaml2ProviderStub(entityId);\n printMessage(stub);\n const { location } = stub;\n const id = stub._id;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await getProviderByLocationAndId(location, id);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString());\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'metadata', 'xml');\n }\n createProgressBar(1, `Exporting metadata for: ${entityId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const metaData = await getProviderMetadata(entityId);\n saveTextToFile(metaData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`\n );\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProviderToFile(entityId, file = null) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'saml');\n }\n try {\n createProgressBar(1, `Exporting provider ${entityId}`);\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProvidersToFile(file = null) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportSaml2ProvidersToFiles() {\n const stubs = await getSaml2ProviderStubs();\n if (stubs.length > 0) {\n createProgressBar(stubs.length, 'Exporting providers');\n for (const stub of stubs) {\n updateProgressBar(`Exporting provider ${stub.entityId}`);\n const fileName = getTypedFilename(stub.entityId, 'saml');\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, fileName);\n }\n stopProgressBar(`${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n stopSpinner(`Imported ${entityId}.`);\n } catch (error) {\n stopSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n if (validateImport(fileData.meta)) {\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n stopSpinner(`Imported ${entityId}.`);\n } catch (error) {\n stopSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.saml.json')\n );\n createProgressBar(jsonFiles.length, 'Importing providers...');\n const totalStatus: MultiOpStatusInterface = {\n total: 0,\n successes: 0,\n warnings: 0,\n failures: 0,\n };\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const myStatus = await importSaml2Providers(fileData);\n totalStatus.total += myStatus.total;\n totalStatus.successes += myStatus.successes;\n totalStatus.warnings += myStatus.warnings;\n totalStatus.failures += myStatus.failures;\n updateProgressBar(\n `Imported ${myStatus.successes}/${myStatus.total} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressBar(\n `Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n\n/**\n * List entity providers\n */\nexport async function listRawSaml2Providers() {\n const providerList = (await getRawProviders()).result;\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n for (const provider of providerList) {\n printMessage(`${provider._id}`, 'data');\n }\n}\n\n/**\n * Exports a RAW SAML entity, which means the raw xml is included.\n * @param {string} entityId Reference to the entity for export\n * @param {string} file Optional filename for the exported file\n */\nexport async function exportRawSaml2ProviderToFile(entityId, file = null) {\n printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');\n let fileName = file;\n if (!file) {\n fileName = getTypedFilename(`${entityId}`, 'raw.saml');\n }\n createProgressBar(1, `Exporting raw entity provider: ${entityId}`);\n try {\n const rawData = await getRawProvider(entityId);\n updateProgressBar(`Writing file ${fileName}`);\n saveTextToFile(JSON.stringify(rawData, null, 2), fileName);\n stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);\n } catch (error) {\n stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);\n printMessage(error.response?.data, 'error');\n }\n}\n\n/**\n * Export all entity providers raw to one file\n * @param {String} file Optional filename\n */\nexport async function exportRawSaml2ProvidersToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}ProvidersRaw`,\n 'raw.saml'\n );\n }\n try {\n const samlApplicationList = (await getRawProviders()).result;\n\n saveToFile('application', samlApplicationList, '_id', fileName);\n printMessage(\n `All RAW saml entity providers exported to: ${fileName}`,\n 'info'\n );\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportRawSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportRawSaml2ProvidersToFiles() {\n const samlApplicationList = (await getRawProviders()).result;\n let hasError = false;\n createProgressBar(samlApplicationList.length, 'Exporting RAW providers');\n let exportedAmount = 0;\n for (const item of samlApplicationList) {\n updateProgressBar(`Exporting provider ${item.entityId}`);\n try {\n const samlApplicationData = await getRawProvider(item._id);\n const fileName = getTypedFilename(\n `${item._id}${getRealmString()}ProviderRaw`,\n 'raw.saml'\n );\n saveToFile('application', [samlApplicationData], '_id', fileName);\n exportedAmount++;\n } catch (error) {\n hasError = true;\n printMessage(`Unable to export: ${item._id}`, 'error');\n }\n }\n stopProgressBar(`${exportedAmount} providers exported.`);\n if (!hasError) {\n printMessage('All entities exported.', 'info');\n } else {\n printMessage('All other entities exported.', 'info');\n }\n}\n\n/**\n * Imports a raw SAML export file (containing one entity).\n * @param {string} file The import file\n */\nexport async function importRawSaml2ProviderFromFile(\n // entityId: string,\n file: string\n) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawProvider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Import first raw SAML entity provider from file\n * @param {String} file Import file name\n */\nexport async function importFirstRawSaml2ProviderFromFile(file) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawProvider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n return;\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Imports the RAW provider info from a single file.\n * @param file Import file name\n */\nexport async function importRawSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async function (err, data) {\n if (err) throw err;\n const samlEntityData = JSON.parse(data);\n let amountOfEntities = 0;\n for (const id in samlEntityData.application) {\n if (id.length) {\n amountOfEntities++;\n }\n }\n if (validateImport(samlEntityData.meta)) {\n createProgressBar(amountOfEntities, 'Importing providers...');\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawProvider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n stopProgressBar(`Import done`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Whenever the SAML RAW file were exported using the exportRAW functionality this function\n * is used to read them back in. Only files with the .samlRaw.json extension will be imported.\n * @param {string} directory The directory from which to import the files\n */\nexport async function importRawSaml2ProvidersFromFiles(directory) {\n const files = fs.readdirSync(directory);\n const filesToImport = files.filter(\n (file) => file.indexOf('.samlRaw.json') > -1\n );\n\n if (filesToImport.length > 0) {\n createProgressBar(filesToImport.length, 'Importing providers...');\n filesToImport.forEach(async (file) => {\n const filePathAbsolute = path.join(directory, file);\n filesToImport.push(file);\n const samlEntityData = JSON.parse(\n fs.readFileSync(filePathAbsolute, 'utf8')\n );\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawProvider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n stopProgressBar(`Import done`);\n } else {\n printMessage(\n 'Import failed, no files to import. (check extension to be .samlRaw.json)',\n 'warn'\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Saml2Ops.js","names":["fs","path","Saml2","ExportImportUtils","createObjectTable","createProgressBar","createTable","debugMessage","printMessage","showSpinner","stopProgressBar","stopSpinner","updateProgressBar","roleMap","exportSaml2Provider","exportSaml2Providers","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadata","getProviderMetadataUrl","getSaml2ProviderStub","getRawProviders","getRawProvider","importSaml2Provider","importSaml2Providers","putRawProvider","getTypedFilename","saveJsonToFile","saveTextToFile","getRealmString","saveToFile","validateImport","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","id","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","fileName","metaData","brightCyan","exportSaml2ProviderToFile","fileData","err","exportSaml2ProvidersToFile","exportData","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","readFile","data","JSON","parse","meta","importFirstSaml2ProviderFromFile","keys","saml","remote","hosted","importSaml2ProvidersFromFile","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","totalStatus","total","successes","warnings","failures","readFileSync","myStatus","listRawSaml2Providers","result","exportRawSaml2ProviderToFile","rawData","stringify","exportRawSaml2ProvidersToFile","samlApplicationList","exportRawSaml2ProvidersToFiles","hasError","exportedAmount","item","samlApplicationData","importRawSaml2ProviderFromFile","indexOf","samlEntityData","application","importFirstRawSaml2ProviderFromFile","importRawSaml2ProvidersFromFile","amountOfEntities","then","importRawSaml2ProvidersFromFiles","directory","files","filesToImport","forEach","filePathAbsolute"],"sources":["ops/Saml2Ops.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Saml2, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport {\n MultiOpStatusInterface,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n printMessage,\n showSpinner,\n stopProgressBar,\n stopSpinner,\n updateProgressBar,\n} from '../utils/Console';\n\nconst {\n roleMap,\n exportSaml2Provider,\n exportSaml2Providers,\n getSaml2ProviderStubs,\n getProviderByLocationAndId,\n getProviderMetadata,\n getProviderMetadataUrl,\n getSaml2ProviderStub,\n getRawProviders,\n getRawProvider,\n importSaml2Provider,\n importSaml2Providers,\n putRawProvider,\n} = Saml2;\nconst {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n getRealmString,\n saveToFile,\n validateImport,\n} = ExportImportUtils;\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await getSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString());\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await getSaml2ProviderStub(entityId);\n printMessage(stub);\n const { location } = stub;\n const id = stub._id;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await getProviderByLocationAndId(location, id);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString());\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'metadata', 'xml');\n }\n createProgressBar(1, `Exporting metadata for: ${entityId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const metaData = await getProviderMetadata(entityId);\n saveTextToFile(metaData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`\n );\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProviderToFile(entityId, file = null) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'saml');\n }\n try {\n createProgressBar(1, `Exporting provider ${entityId}`);\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProvidersToFile(file = null) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportSaml2ProvidersToFiles() {\n const stubs = await getSaml2ProviderStubs();\n if (stubs.length > 0) {\n createProgressBar(stubs.length, 'Exporting providers');\n for (const stub of stubs) {\n updateProgressBar(`Exporting provider ${stub.entityId}`);\n const fileName = getTypedFilename(stub.entityId, 'saml');\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, fileName);\n }\n stopProgressBar(`${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n stopSpinner(`Imported ${entityId}.`);\n } catch (error) {\n stopSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n if (validateImport(fileData.meta)) {\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n stopSpinner(`Imported ${entityId}.`);\n } catch (error) {\n stopSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.saml.json')\n );\n createProgressBar(jsonFiles.length, 'Importing providers...');\n const totalStatus: MultiOpStatusInterface = {\n total: 0,\n successes: 0,\n warnings: 0,\n failures: 0,\n };\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const myStatus = await importSaml2Providers(fileData);\n totalStatus.total += myStatus.total;\n totalStatus.successes += myStatus.successes;\n totalStatus.warnings += myStatus.warnings;\n totalStatus.failures += myStatus.failures;\n updateProgressBar(\n `Imported ${myStatus.successes}/${myStatus.total} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressBar(\n `Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n\n/**\n * List entity providers\n */\nexport async function listRawSaml2Providers() {\n const providerList = (await getRawProviders()).result;\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n for (const provider of providerList) {\n printMessage(`${provider._id}`, 'data');\n }\n}\n\n/**\n * Exports a RAW SAML entity, which means the raw xml is included.\n * @param {string} entityId Reference to the entity for export\n * @param {string} file Optional filename for the exported file\n */\nexport async function exportRawSaml2ProviderToFile(entityId, file = null) {\n printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');\n let fileName = file;\n if (!file) {\n fileName = getTypedFilename(`${entityId}`, 'raw.saml');\n }\n createProgressBar(1, `Exporting raw entity provider: ${entityId}`);\n try {\n const rawData = await getRawProvider(entityId);\n updateProgressBar(`Writing file ${fileName}`);\n saveTextToFile(JSON.stringify(rawData, null, 2), fileName);\n stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);\n } catch (error) {\n stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);\n printMessage(error.response?.data, 'error');\n }\n}\n\n/**\n * Export all entity providers raw to one file\n * @param {String} file Optional filename\n */\nexport async function exportRawSaml2ProvidersToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}ProvidersRaw`,\n 'raw.saml'\n );\n }\n try {\n const samlApplicationList = (await getRawProviders()).result;\n\n saveToFile('application', samlApplicationList, '_id', fileName);\n printMessage(\n `All RAW saml entity providers exported to: ${fileName}`,\n 'info'\n );\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportRawSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportRawSaml2ProvidersToFiles() {\n const samlApplicationList = (await getRawProviders()).result;\n let hasError = false;\n createProgressBar(samlApplicationList.length, 'Exporting RAW providers');\n let exportedAmount = 0;\n for (const item of samlApplicationList) {\n updateProgressBar(`Exporting provider ${item.entityId}`);\n try {\n const samlApplicationData = await getRawProvider(item._id);\n const fileName = getTypedFilename(\n `${item._id}${getRealmString()}ProviderRaw`,\n 'raw.saml'\n );\n saveToFile('application', [samlApplicationData], '_id', fileName);\n exportedAmount++;\n } catch (error) {\n hasError = true;\n printMessage(`Unable to export: ${item._id}`, 'error');\n }\n }\n stopProgressBar(`${exportedAmount} providers exported.`);\n if (!hasError) {\n printMessage('All entities exported.', 'info');\n } else {\n printMessage('All other entities exported.', 'info');\n }\n}\n\n/**\n * Imports a raw SAML export file (containing one entity).\n * @param {string} file The import file\n */\nexport async function importRawSaml2ProviderFromFile(\n // entityId: string,\n file: string\n) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawProvider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Import first raw SAML entity provider from file\n * @param {String} file Import file name\n */\nexport async function importFirstRawSaml2ProviderFromFile(file) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawProvider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n return;\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Imports the RAW provider info from a single file.\n * @param file Import file name\n */\nexport async function importRawSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async function (err, data) {\n if (err) throw err;\n const samlEntityData = JSON.parse(data);\n let amountOfEntities = 0;\n for (const id in samlEntityData.application) {\n if (id.length) {\n amountOfEntities++;\n }\n }\n if (validateImport(samlEntityData.meta)) {\n createProgressBar(amountOfEntities, 'Importing providers...');\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawProvider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n stopProgressBar(`Import done`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Whenever the SAML RAW file were exported using the exportRAW functionality this function\n * is used to read them back in. Only files with the .samlRaw.json extension will be imported.\n * @param {string} directory The directory from which to import the files\n */\nexport async function importRawSaml2ProvidersFromFiles(directory) {\n const files = fs.readdirSync(directory);\n const filesToImport = files.filter(\n (file) => file.indexOf('.samlRaw.json') > -1\n );\n\n if (filesToImport.length > 0) {\n createProgressBar(filesToImport.length, 'Importing providers...');\n filesToImport.forEach(async (file) => {\n const filePathAbsolute = path.join(directory, file);\n filesToImport.push(file);\n const samlEntityData = JSON.parse(\n fs.readFileSync(filePathAbsolute, 'utf8')\n );\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawProvider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n stopProgressBar(`Import done`);\n } else {\n printMessage(\n 'Import failed, no files to import. (check extension to be .samlRaw.json)',\n 'warn'\n );\n }\n}\n"],"mappings":"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"}