@rockcarver/frodo-cli 2.0.0-6 → 2.0.0-7
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.
- package/CHANGELOG.md +5 -1
- package/esm/app.js +4 -1
- package/esm/app.js.map +1 -1
- package/esm/cli/_template/something-delete.js +4 -1
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +4 -1
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +4 -1
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +4 -1
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +4 -1
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +4 -1
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +4 -1
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-export.js +4 -1
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +4 -1
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +4 -1
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +4 -1
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +4 -1
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +4 -1
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +4 -1
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +4 -1
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +8 -2
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +10 -3
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-federation-export.js +4 -1
- package/esm/cli/admin/admin-federation-export.js.map +1 -1
- package/esm/cli/admin/admin-federation-import.js +7 -4
- package/esm/cli/admin/admin-federation-import.js.map +1 -1
- package/esm/cli/admin/admin-federation-list.js +4 -1
- package/esm/cli/admin/admin-federation-list.js.map +1 -1
- package/esm/cli/admin/admin-get-access-token.js +8 -2
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +8 -2
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +8 -2
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +8 -2
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +8 -2
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-static-user-mappings.js +8 -2
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +8 -2
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +8 -2
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +8 -2
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +8 -2
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +10 -3
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +4 -1
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +4 -1
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +10 -3
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +4 -1
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +4 -1
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +4 -1
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +4 -1
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-import.js +4 -1
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +10 -3
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +4 -1
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +4 -1
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +4 -1
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +4 -1
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-list.js +4 -1
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +10 -3
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +4 -1
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +4 -1
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +4 -1
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +4 -1
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/app/app-delete.js +4 -1
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +4 -1
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +6 -3
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +7 -4
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +4 -1
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/authz/authz-policy-delete.js +6 -3
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +4 -1
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +8 -5
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +7 -4
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +5 -2
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +5 -2
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +4 -1
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +6 -3
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +7 -4
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +4 -1
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +6 -3
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +5 -2
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +7 -4
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +8 -5
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +4 -1
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +18 -5
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/email/email-template-export.js +6 -3
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +7 -4
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +4 -1
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +15 -5
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +4 -1
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +5 -2
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +4 -1
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +4 -1
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +4 -1
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +4 -1
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +4 -1
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +4 -1
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +4 -1
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +4 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +5 -2
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +4 -1
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +4 -1
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +5 -2
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +4 -1
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +4 -1
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +4 -1
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +4 -1
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +5 -2
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/idm/idm-count.js +4 -1
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +6 -3
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +7 -4
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +4 -1
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +4 -1
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +7 -4
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +4 -1
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/info/info.js +8 -2
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +5 -2
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +14 -6
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +8 -2
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +8 -2
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +6 -3
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +7 -4
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +4 -1
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +10 -3
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/log/log-fetch.js +16 -6
- package/esm/cli/log/log-fetch.js.map +1 -1
- package/esm/cli/log/log-key-delete.js +5 -2
- package/esm/cli/log/log-key-delete.js.map +1 -1
- package/esm/cli/log/log-key-describe.js +4 -1
- package/esm/cli/log/log-key-describe.js.map +1 -1
- package/esm/cli/log/log-key-list.js +4 -1
- package/esm/cli/log/log-key-list.js.map +1 -1
- package/esm/cli/log/log-list.js +14 -4
- package/esm/cli/log/log-list.js.map +1 -1
- package/esm/cli/log/log-tail.js +16 -6
- package/esm/cli/log/log-tail.js.map +1 -1
- package/esm/cli/realm/realm-add-custom-domain.js +4 -1
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +4 -1
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +4 -1
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +8 -2
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +6 -3
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +7 -4
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +4 -1
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +11 -4
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +4 -1
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +6 -3
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +7 -4
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +4 -1
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +5 -2
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/script/script-delete.js +4 -1
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +4 -1
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +4 -1
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +4 -1
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +4 -1
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/service/service-delete.js +5 -2
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +6 -3
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +7 -4
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +4 -1
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +6 -3
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +7 -4
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +8 -5
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +4 -1
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +17 -9
- package/esm/ops/AdminFederationOps.js.map +1 -1
- package/esm/ops/AgentOps.js +62 -36
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +22 -10
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +10 -3
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +23 -15
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +34 -21
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +17 -9
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +46 -30
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +21 -11
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js +5 -2
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +25 -12
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/OrganizationOps.js +8 -2
- package/esm/ops/OrganizationOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +36 -21
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +35 -18
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +11 -6
- package/esm/ops/RealmOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +34 -18
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +43 -23
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +18 -10
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +28 -14
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +38 -17
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +35 -19
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +23 -12
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/utils/Config.js +6 -3
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +5 -2
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +6 -3
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/esm/utils/Version.js +7 -3
- package/esm/utils/Version.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuth2ClientOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveJsonToFile","listOAuth2Clients","long","clients","oauth2oidc","client","getOAuth2Clients","sort","a","b","_id","localeCompare","table","grantTypesMap","authorization_code","client_credentials","refresh_token","password","implicit","forEach","push","coreOAuth2ClientConfig","status","clientType","advancedOAuth2ClientConfig","grantTypes","map","type","join","scopes","redirectionUris","toString","error","exportOAuth2ClientToFile","clientId","file","options","useStringArrays","deps","outcome","fileName","utils","impex","getTypedFilename","exportData","exportOAuth2Client","message","exportOAuth2ClientsToFile","titleCase","helper","getRealmName","getRealm","exportOAuth2Clients","exportOAuth2ClientsToFiles","errors","length","importOAuth2ClientFromFile","data","readFileSync","fileData","JSON","parse","importOAuth2Client","importFirstOAuth2ClientFromFile","importFirstOAuth2Client","importOAuth2ClientsFromFile","applicationData","importOAuth2Clients","importOAuth2ClientsFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","application"],"sources":["ops/OAuth2ClientOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport type {\n OAuth2ClientExportInterface,\n OAuth2ClientExportOptions,\n OAuth2ClientImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/OAuth2ClientOps';\nimport { ReadableStrings } from '@rockcarver/frodo-lib/types/api/ApiTypes';\n\n/**\n * List OAuth2 clients\n */\nexport async function listOAuth2Clients(long = false) {\n try {\n const clients = await frodo.oauth2oidc.client.getOAuth2Clients();\n clients.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable([\n 'Client Id',\n 'Status',\n 'Client Type',\n 'Grant Types',\n 'Scopes',\n 'Redirect URIs',\n // 'Description',\n ]);\n const grantTypesMap = {\n authorization_code: 'Authz Code',\n client_credentials: 'Client Creds',\n refresh_token: 'Refresh Token',\n password: 'ROPC',\n 'urn:ietf:params:oauth:grant-type:uma-ticket': 'UMA',\n implicit: 'Implicit',\n 'urn:ietf:params:oauth:grant-type:device_code': 'Device Code',\n 'urn:ietf:params:oauth:grant-type:saml2-bearer': 'SAML2 Bearer',\n 'urn:openid:params:grant-type:ciba': 'CIBA',\n 'urn:ietf:params:oauth:grant-type:token-exchange': 'Token Exchange',\n 'urn:ietf:params:oauth:grant-type:jwt-bearer': 'JWT Bearer',\n };\n clients.forEach((client) => {\n table.push([\n client._id,\n client.coreOAuth2ClientConfig.status === 'Active'\n ? 'Active'['brightGreen']\n : (client.coreOAuth2ClientConfig.status as string)['brightRed'],\n client.coreOAuth2ClientConfig.clientType,\n (client.advancedOAuth2ClientConfig.grantTypes as ReadableStrings)\n .map((type) => grantTypesMap[type])\n .join('\\n'),\n (client.coreOAuth2ClientConfig.scopes as ReadableStrings).join('\\n'),\n (client.coreOAuth2ClientConfig.redirectionUris as string[]).join(\n '\\n'\n ),\n // wordwrap(client.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n clients.forEach((client) => {\n printMessage(`${client._id}`, 'data');\n });\n }\n } catch (error) {\n printMessage(`Error listing applications - ${error}`, 'error');\n }\n}\n\n/**\n * Export OAuth2 client to file\n * @param {string} clientId client id\n * @param {string} file file name\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientToFile(\n clientId: string,\n file: string,\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n) {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientToFile: begin`);\n showSpinner(`Exporting ${clientId}...`);\n try {\n let fileName = frodo.utils.impex.getTypedFilename(clientId, 'oauth2.app');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.oauth2oidc.client.exportOAuth2Client(\n clientId,\n options\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${clientId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${clientId}: ${error.message}`);\n }\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientToFile: end`);\n return outcome;\n}\n\n/**\n * Export all OAuth2 clients to file\n * @param {string} file file name\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientsToFile(\n file: string,\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFile: begin`);\n showSpinner(`Exporting all clients...`);\n try {\n let fileName = frodo.utils.impex.getTypedFilename(\n `all${frodo.utils.impex.titleCase(\n frodo.helper.utils.getRealmName(state.getRealm())\n )}Applications`,\n 'oauth2.app'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.oauth2oidc.client.exportOAuth2Clients(\n options\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all clients to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting all clients`);\n printMessage(`${error.message}`, 'error');\n }\n debugMessage(\n `cli.OAuth2ClientOps.exportOAuth2ClientsToFile: end [${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export all OAuth2 clients to separate files\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientsToFiles(\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n) {\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFiles: begin`);\n const errors = [];\n try {\n const clients = await frodo.oauth2oidc.client.getOAuth2Clients();\n createProgressBar(clients.length, 'Exporting clients...');\n for (const client of clients) {\n const file = frodo.utils.impex.getTypedFilename(client._id, 'oauth2.app');\n try {\n const exportData: OAuth2ClientExportInterface =\n await frodo.oauth2oidc.client.exportOAuth2Client(client._id, options);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${client._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${client._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting client(s) to file(s)`);\n }\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import first OAuth2 client from file\n * @param {string} clientId client id\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientFromFile(\n clientId: string,\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientFromFile: begin`);\n showSpinner(`Importing ${clientId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.oauth2oidc.client.importOAuth2Client(\n clientId,\n fileData,\n options\n );\n outcome = true;\n succeedSpinner(`Imported ${clientId}.`);\n } catch (error) {\n failSpinner(`Error importing ${clientId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first OAuth2 client from file\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstOAuth2ClientFromFile(\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importFirstOAuth2ClientFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.oauth2oidc.client.importFirstOAuth2Client(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importFirstOAuth2ClientFromFile: end`);\n return outcome;\n}\n\n/**\n * Import OAuth2 clients from file\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientsFromFile(\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const applicationData = JSON.parse(data);\n await frodo.oauth2oidc.client.importOAuth2Clients(applicationData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFile: end`);\n return outcome;\n}\n\n/**\n * Import OAuth2 clients from files\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientsFromFiles(\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.oauth2.app.json')\n );\n createProgressBar(files.length, 'Importing clients...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: OAuth2ClientExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.application).length;\n total += count;\n await frodo.oauth2oidc.client.importOAuth2Clients(fileData, options);\n updateProgressBar(`Imported ${count} client(s) from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing client(s) from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} client(s) from ${files.length} file(s).`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing client(s) from file(s).`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OAuth2ClientOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveJsonToFile","getTypedFilename","titleCase","utils","impex","getOAuth2Clients","exportOAuth2Client","exportOAuth2Clients","importOAuth2Client","importFirstOAuth2Client","importOAuth2Clients","oauth2oidc","client","listOAuth2Clients","long","clients","sort","a","b","_id","localeCompare","table","grantTypesMap","authorization_code","client_credentials","refresh_token","password","implicit","forEach","push","coreOAuth2ClientConfig","status","clientType","advancedOAuth2ClientConfig","grantTypes","map","type","join","scopes","redirectionUris","toString","error","exportOAuth2ClientToFile","clientId","file","options","useStringArrays","deps","outcome","fileName","exportData","message","exportOAuth2ClientsToFile","helper","getRealmName","getRealm","exportOAuth2ClientsToFiles","errors","length","importOAuth2ClientFromFile","data","readFileSync","fileData","JSON","parse","importFirstOAuth2ClientFromFile","importOAuth2ClientsFromFile","applicationData","importOAuth2ClientsFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","application"],"sources":["ops/OAuth2ClientOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport type {\n OAuth2ClientExportInterface,\n OAuth2ClientExportOptions,\n OAuth2ClientImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/OAuth2ClientOps';\nimport { ReadableStrings } from '@rockcarver/frodo-lib/types/api/ApiTypes';\n\nconst { getTypedFilename, titleCase } = frodo.utils.impex;\nconst {\n getOAuth2Clients,\n exportOAuth2Client,\n exportOAuth2Clients,\n importOAuth2Client,\n importFirstOAuth2Client,\n importOAuth2Clients,\n} = frodo.oauth2oidc.client;\n\n/**\n * List OAuth2 clients\n */\nexport async function listOAuth2Clients(long = false) {\n try {\n const clients = await getOAuth2Clients();\n clients.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable([\n 'Client Id',\n 'Status',\n 'Client Type',\n 'Grant Types',\n 'Scopes',\n 'Redirect URIs',\n // 'Description',\n ]);\n const grantTypesMap = {\n authorization_code: 'Authz Code',\n client_credentials: 'Client Creds',\n refresh_token: 'Refresh Token',\n password: 'ROPC',\n 'urn:ietf:params:oauth:grant-type:uma-ticket': 'UMA',\n implicit: 'Implicit',\n 'urn:ietf:params:oauth:grant-type:device_code': 'Device Code',\n 'urn:ietf:params:oauth:grant-type:saml2-bearer': 'SAML2 Bearer',\n 'urn:openid:params:grant-type:ciba': 'CIBA',\n 'urn:ietf:params:oauth:grant-type:token-exchange': 'Token Exchange',\n 'urn:ietf:params:oauth:grant-type:jwt-bearer': 'JWT Bearer',\n };\n clients.forEach((client) => {\n table.push([\n client._id,\n client.coreOAuth2ClientConfig.status === 'Active'\n ? 'Active'['brightGreen']\n : (client.coreOAuth2ClientConfig.status as string)['brightRed'],\n client.coreOAuth2ClientConfig.clientType,\n (client.advancedOAuth2ClientConfig.grantTypes as ReadableStrings)\n .map((type) => grantTypesMap[type])\n .join('\\n'),\n (client.coreOAuth2ClientConfig.scopes as ReadableStrings).join('\\n'),\n (client.coreOAuth2ClientConfig.redirectionUris as string[]).join(\n '\\n'\n ),\n // wordwrap(client.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n clients.forEach((client) => {\n printMessage(`${client._id}`, 'data');\n });\n }\n } catch (error) {\n printMessage(`Error listing applications - ${error}`, 'error');\n }\n}\n\n/**\n * Export OAuth2 client to file\n * @param {string} clientId client id\n * @param {string} file file name\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientToFile(\n clientId: string,\n file: string,\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n) {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientToFile: begin`);\n showSpinner(`Exporting ${clientId}...`);\n try {\n let fileName = getTypedFilename(clientId, 'oauth2.app');\n if (file) {\n fileName = file;\n }\n const exportData = await exportOAuth2Client(clientId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${clientId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${clientId}: ${error.message}`);\n }\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientToFile: end`);\n return outcome;\n}\n\n/**\n * Export all OAuth2 clients to file\n * @param {string} file file name\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientsToFile(\n file: string,\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFile: begin`);\n showSpinner(`Exporting all clients...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(\n frodo.helper.utils.getRealmName(state.getRealm())\n )}Applications`,\n 'oauth2.app'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportOAuth2Clients(options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all clients to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting all clients`);\n printMessage(`${error.message}`, 'error');\n }\n debugMessage(\n `cli.OAuth2ClientOps.exportOAuth2ClientsToFile: end [${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export all OAuth2 clients to separate files\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientsToFiles(\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n) {\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFiles: begin`);\n const errors = [];\n try {\n const clients = await getOAuth2Clients();\n createProgressBar(clients.length, 'Exporting clients...');\n for (const client of clients) {\n const file = getTypedFilename(client._id, 'oauth2.app');\n try {\n const exportData: OAuth2ClientExportInterface =\n await exportOAuth2Client(client._id, options);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${client._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${client._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting client(s) to file(s)`);\n }\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import first OAuth2 client from file\n * @param {string} clientId client id\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientFromFile(\n clientId: string,\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientFromFile: begin`);\n showSpinner(`Importing ${clientId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importOAuth2Client(clientId, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${clientId}.`);\n } catch (error) {\n failSpinner(`Error importing ${clientId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first OAuth2 client from file\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstOAuth2ClientFromFile(\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importFirstOAuth2ClientFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstOAuth2Client(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importFirstOAuth2ClientFromFile: end`);\n return outcome;\n}\n\n/**\n * Import OAuth2 clients from file\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientsFromFile(\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const applicationData = JSON.parse(data);\n await importOAuth2Clients(applicationData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFile: end`);\n return outcome;\n}\n\n/**\n * Import OAuth2 clients from files\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientsFromFiles(\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.oauth2.app.json')\n );\n createProgressBar(files.length, 'Importing clients...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: OAuth2ClientExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.application).length;\n total += count;\n await importOAuth2Clients(fileData, options);\n updateProgressBar(`Imported ${count} client(s) from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing client(s) from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} client(s) from ${files.length} file(s).`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing client(s) from file(s).`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,OAAOC,EAAE,MAAM,IAAI;AACnB,SACEC,iBAAiB,EACjBC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,iBAAiB,QACZ,kBAAkB;AACzB,SAASC,cAAc,QAAQ,4BAA4B;AAQ3D,MAAM;EAAEC,gBAAgB;EAAEC;AAAU,CAAC,GAAGd,KAAK,CAACe,KAAK,CAACC,KAAK;AACzD,MAAM;EACJC,gBAAgB;EAChBC,kBAAkB;EAClBC,mBAAmB;EACnBC,kBAAkB;EAClBC,uBAAuB;EACvBC;AACF,CAAC,GAAGtB,KAAK,CAACuB,UAAU,CAACC,MAAM;;AAE3B;AACA;AACA;AACA,OAAO,eAAeC,iBAAiBA,CAACC,IAAI,GAAG,KAAK,EAAE;EACpD,IAAI;IACF,MAAMC,OAAO,GAAG,MAAMV,gBAAgB,CAAC,CAAC;IACxCU,OAAO,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,GAAG,CAACC,aAAa,CAACF,CAAC,CAACC,GAAG,CAAC,CAAC;IAClD,IAAIL,IAAI,EAAE;MACR,MAAMO,KAAK,GAAG7B,WAAW,CAAC,CACxB,WAAW,EACX,QAAQ,EACR,aAAa,EACb,aAAa,EACb,QAAQ,EACR;MACA;MAAA,CACD,CAAC;;MACF,MAAM8B,aAAa,GAAG;QACpBC,kBAAkB,EAAE,YAAY;QAChCC,kBAAkB,EAAE,cAAc;QAClCC,aAAa,EAAE,eAAe;QAC9BC,QAAQ,EAAE,MAAM;QAChB,6CAA6C,EAAE,KAAK;QACpDC,QAAQ,EAAE,UAAU;QACpB,8CAA8C,EAAE,aAAa;QAC7D,+CAA+C,EAAE,cAAc;QAC/D,mCAAmC,EAAE,MAAM;QAC3C,iDAAiD,EAAE,gBAAgB;QACnE,6CAA6C,EAAE;MACjD,CAAC;MACDZ,OAAO,CAACa,OAAO,CAAEhB,MAAM,IAAK;QAC1BS,KAAK,CAACQ,IAAI,CAAC,CACTjB,MAAM,CAACO,GAAG,EACVP,MAAM,CAACkB,sBAAsB,CAACC,MAAM,KAAK,QAAQ,GAC7C,QAAQ,CAAC,aAAa,CAAC,GACtBnB,MAAM,CAACkB,sBAAsB,CAACC,MAAM,CAAY,WAAW,CAAC,EACjEnB,MAAM,CAACkB,sBAAsB,CAACE,UAAU,EACvCpB,MAAM,CAACqB,0BAA0B,CAACC,UAAU,CAC1CC,GAAG,CAAEC,IAAI,IAAKd,aAAa,CAACc,IAAI,CAAC,CAAC,CAClCC,IAAI,CAAC,IAAI,CAAC,EACZzB,MAAM,CAACkB,sBAAsB,CAACQ,MAAM,CAAqBD,IAAI,CAAC,IAAI,CAAC,EACnEzB,MAAM,CAACkB,sBAAsB,CAACS,eAAe,CAAcF,IAAI,CAC9D,IACF;QACA;QAAA,CACD,CAAC;MACJ,CAAC,CAAC;;MACF1C,YAAY,CAAC0B,KAAK,CAACmB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACxC,CAAC,MAAM;MACLzB,OAAO,CAACa,OAAO,CAAEhB,MAAM,IAAK;QAC1BjB,YAAY,CAAE,GAAEiB,MAAM,CAACO,GAAI,EAAC,EAAE,MAAM,CAAC;MACvC,CAAC,CAAC;IACJ;EACF,CAAC,CAAC,OAAOsB,KAAK,EAAE;IACd9C,YAAY,CAAE,gCAA+B8C,KAAM,EAAC,EAAE,OAAO,CAAC;EAChE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,wBAAwBA,CAC5CC,QAAgB,EAChBC,IAAY,EACZC,OAAkC,GAAG;EAAEC,eAAe,EAAE,IAAI;EAAEC,IAAI,EAAE;AAAK,CAAC,EAC1E;EACA,IAAIC,OAAO,GAAG,KAAK;EACnBvD,YAAY,CAAE,qDAAoD,CAAC;EACnEG,WAAW,CAAE,aAAY+C,QAAS,KAAI,CAAC;EACvC,IAAI;IACF,IAAIM,QAAQ,GAAGhD,gBAAgB,CAAC0C,QAAQ,EAAE,YAAY,CAAC;IACvD,IAAIC,IAAI,EAAE;MACRK,QAAQ,GAAGL,IAAI;IACjB;IACA,MAAMM,UAAU,GAAG,MAAM5C,kBAAkB,CAACqC,QAAQ,EAAEE,OAAO,CAAC;IAC9D7C,cAAc,CAACkD,UAAU,EAAED,QAAQ,CAAC;IACpCnD,cAAc,CAAE,YAAW6C,QAAS,OAAMM,QAAS,GAAE,CAAC;IACtDD,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOP,KAAK,EAAE;IACd/C,WAAW,CAAE,mBAAkBiD,QAAS,KAAIF,KAAK,CAACU,OAAQ,EAAC,CAAC;EAC9D;EACA1D,YAAY,CAAE,mDAAkD,CAAC;EACjE,OAAOuD,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeI,yBAAyBA,CAC7CR,IAAY,EACZC,OAAkC,GAAG;EAAEC,eAAe,EAAE,IAAI;EAAEC,IAAI,EAAE;AAAK,CAAC,EACxD;EAClB,IAAIC,OAAO,GAAG,KAAK;EACnBvD,YAAY,CAAE,sDAAqD,CAAC;EACpEG,WAAW,CAAE,0BAAyB,CAAC;EACvC,IAAI;IACF,IAAIqD,QAAQ,GAAGhD,gBAAgB,CAC5B,MAAKC,SAAS,CACbd,KAAK,CAACiE,MAAM,CAAClD,KAAK,CAACmD,YAAY,CAACjE,KAAK,CAACkE,QAAQ,CAAC,CAAC,CAClD,CAAE,cAAa,EACf,YACF,CAAC;IACD,IAAIX,IAAI,EAAE;MACRK,QAAQ,GAAGL,IAAI;IACjB;IACA,MAAMM,UAAU,GAAG,MAAM3C,mBAAmB,CAACsC,OAAO,CAAC;IACrD7C,cAAc,CAACkD,UAAU,EAAED,QAAQ,CAAC;IACpCnD,cAAc,CAAE,2BAA0BmD,QAAS,GAAE,CAAC;IACtDD,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOP,KAAK,EAAE;IACd/C,WAAW,CAAE,6BAA4B,CAAC;IAC1CC,YAAY,CAAE,GAAE8C,KAAK,CAACU,OAAQ,EAAC,EAAE,OAAO,CAAC;EAC3C;EACA1D,YAAY,CACT,uDAAsDuD,OAAQ,GACjE,CAAC;EACD,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeQ,0BAA0BA,CAC9CX,OAAkC,GAAG;EAAEC,eAAe,EAAE,IAAI;EAAEC,IAAI,EAAE;AAAK,CAAC,EAC1E;EACAtD,YAAY,CAAE,uDAAsD,CAAC;EACrE,MAAMgE,MAAM,GAAG,EAAE;EACjB,IAAI;IACF,MAAM1C,OAAO,GAAG,MAAMV,gBAAgB,CAAC,CAAC;IACxCd,iBAAiB,CAACwB,OAAO,CAAC2C,MAAM,EAAE,sBAAsB,CAAC;IACzD,KAAK,MAAM9C,MAAM,IAAIG,OAAO,EAAE;MAC5B,MAAM6B,IAAI,GAAG3C,gBAAgB,CAACW,MAAM,CAACO,GAAG,EAAE,YAAY,CAAC;MACvD,IAAI;QACF,MAAM+B,UAAuC,GAC3C,MAAM5C,kBAAkB,CAACM,MAAM,CAACO,GAAG,EAAE0B,OAAO,CAAC;QAC/C7C,cAAc,CAACkD,UAAU,EAAEN,IAAI,CAAC;QAChC7C,iBAAiB,CAAE,YAAWa,MAAM,CAACO,GAAI,GAAE,CAAC;MAC9C,CAAC,CAAC,OAAOsB,KAAK,EAAE;QACdgB,MAAM,CAAC5B,IAAI,CAACY,KAAK,CAAC;QAClB1C,iBAAiB,CAAE,mBAAkBa,MAAM,CAACO,GAAI,GAAE,CAAC;MACrD;IACF;IACAtB,eAAe,CAAE,kBAAiB,CAAC;EACrC,CAAC,CAAC,OAAO4C,KAAK,EAAE;IACdgB,MAAM,CAAC5B,IAAI,CAACY,KAAK,CAAC;IAClB5C,eAAe,CAAE,sCAAqC,CAAC;EACzD;EACAJ,YAAY,CAAE,qDAAoD,CAAC;EACnE,OAAO,CAAC,KAAKgE,MAAM,CAACC,MAAM;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,0BAA0BA,CAC9ChB,QAAgB,EAChBC,IAAY,EACZC,OAAkC,GAAG;EAAEE,IAAI,EAAE;AAAK,CAAC,EACjC;EAClB,IAAIC,OAAO,GAAG,KAAK;EACnBvD,YAAY,CAAE,uDAAsD,CAAC;EACrEG,WAAW,CAAE,aAAY+C,QAAS,KAAI,CAAC;EACvC,IAAI;IACF,MAAMiB,IAAI,GAAGtE,EAAE,CAACuE,YAAY,CAACjB,IAAI,EAAE,MAAM,CAAC;IAC1C,MAAMkB,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;IACjC,MAAMpD,kBAAkB,CAACmC,QAAQ,EAAEmB,QAAQ,EAAEjB,OAAO,CAAC;IACrDG,OAAO,GAAG,IAAI;IACdlD,cAAc,CAAE,YAAW6C,QAAS,GAAE,CAAC;EACzC,CAAC,CAAC,OAAOF,KAAK,EAAE;IACd/C,WAAW,CAAE,mBAAkBiD,QAAS,GAAE,CAAC;IAC3ChD,YAAY,CAAC8C,KAAK,EAAE,OAAO,CAAC;EAC9B;EACAhD,YAAY,CAAE,qDAAoD,CAAC;EACnE,OAAOuD,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeiB,+BAA+BA,CACnDrB,IAAY,EACZC,OAAkC,GAAG;EAAEE,IAAI,EAAE;AAAK,CAAC,EACjC;EAClB,IAAIC,OAAO,GAAG,KAAK;EACnBvD,YAAY,CAAE,4DAA2D,CAAC;EAC1EG,WAAW,CAAE,aAAYgD,IAAK,KAAI,CAAC;EACnC,IAAI;IACF,MAAMgB,IAAI,GAAGtE,EAAE,CAACuE,YAAY,CAACjB,IAAI,EAAE,MAAM,CAAC;IAC1C,MAAMkB,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;IACjC,MAAMnD,uBAAuB,CAACqD,QAAQ,EAAEjB,OAAO,CAAC;IAChDG,OAAO,GAAG,IAAI;IACdlD,cAAc,CAAE,YAAW8C,IAAK,GAAE,CAAC;EACrC,CAAC,CAAC,OAAOH,KAAK,EAAE;IACd/C,WAAW,CAAE,mBAAkBkD,IAAK,GAAE,CAAC;IACvCjD,YAAY,CAAC8C,KAAK,EAAE,OAAO,CAAC;EAC9B;EACAhD,YAAY,CAAE,0DAAyD,CAAC;EACxE,OAAOuD,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAekB,2BAA2BA,CAC/CtB,IAAY,EACZC,OAAkC,GAAG;EAAEE,IAAI,EAAE;AAAK,CAAC,EACjC;EAClB,IAAIC,OAAO,GAAG,KAAK;EACnBvD,YAAY,CAAE,wDAAuD,CAAC;EACtEG,WAAW,CAAE,aAAYgD,IAAK,KAAI,CAAC;EACnC,IAAI;IACF,MAAMgB,IAAI,GAAGtE,EAAE,CAACuE,YAAY,CAACjB,IAAI,EAAE,MAAM,CAAC;IAC1C,MAAMuB,eAAe,GAAGJ,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;IACxC,MAAMlD,mBAAmB,CAACyD,eAAe,EAAEtB,OAAO,CAAC;IACnDG,OAAO,GAAG,IAAI;IACdlD,cAAc,CAAE,YAAW8C,IAAK,GAAE,CAAC;EACrC,CAAC,CAAC,OAAOH,KAAK,EAAE;IACd/C,WAAW,CAAE,mBAAkBkD,IAAK,GAAE,CAAC;IACvCjD,YAAY,CAAC8C,KAAK,EAAE,OAAO,CAAC;EAC9B;EACAhD,YAAY,CAAE,sDAAqD,CAAC;EACpE,OAAOuD,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeoB,4BAA4BA,CAChDvB,OAAkC,GAAG;EAAEE,IAAI,EAAE;AAAK,CAAC,EACjC;EAClB,MAAMU,MAAM,GAAG,EAAE;EACjB,IAAI;IACFhE,YAAY,CAAE,yDAAwD,CAAC;IACvE,MAAM4E,KAAK,GAAG/E,EAAE,CAACgF,WAAW,CAAC,GAAG,CAAC;IACjC,MAAMC,KAAK,GAAGF,KAAK,CAACG,MAAM,CAAEC,IAAI,IAC9BA,IAAI,CAACC,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,kBAAkB,CAChD,CAAC;IACDpF,iBAAiB,CAACgF,KAAK,CAACb,MAAM,EAAE,sBAAsB,CAAC;IACvD,IAAIkB,KAAK,GAAG,CAAC;IACb,KAAK,MAAMhC,IAAI,IAAI2B,KAAK,EAAE;MACxB,IAAI;QACF,MAAMX,IAAI,GAAGtE,EAAE,CAACuE,YAAY,CAACjB,IAAI,EAAE,MAAM,CAAC;QAC1C,MAAMkB,QAAqC,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;QAC9D,MAAMiB,KAAK,GAAGC,MAAM,CAACC,IAAI,CAACjB,QAAQ,CAACkB,WAAW,CAAC,CAACtB,MAAM;QACtDkB,KAAK,IAAIC,KAAK;QACd,MAAMnE,mBAAmB,CAACoD,QAAQ,EAAEjB,OAAO,CAAC;QAC5C9C,iBAAiB,CAAE,YAAW8E,KAAM,mBAAkBjC,IAAK,EAAC,CAAC;MAC/D,CAAC,CAAC,OAAOH,KAAK,EAAE;QACdgB,MAAM,CAAC5B,IAAI,CAACY,KAAK,CAAC;QAClB1C,iBAAiB,CAAE,kCAAiC6C,IAAK,EAAC,CAAC;QAC3DjD,YAAY,CAAC8C,KAAK,EAAE,OAAO,CAAC;MAC9B;IACF;IACA5C,eAAe,CACZ,sBAAqB+E,KAAM,mBAAkBL,KAAK,CAACb,MAAO,WAC7D,CAAC;EACH,CAAC,CAAC,OAAOjB,KAAK,EAAE;IACdgB,MAAM,CAAC5B,IAAI,CAACY,KAAK,CAAC;IAClB5C,eAAe,CAAE,yCAAwC,CAAC;IAC1DF,YAAY,CAAC8C,KAAK,EAAE,OAAO,CAAC;EAC9B;EACAhD,YAAY,CAAE,uDAAsD,CAAC;EACrE,OAAO,CAAC,KAAKgE,MAAM,CAACC,MAAM;AAC5B"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { frodo } from '@rockcarver/frodo-lib';
|
|
2
2
|
import { printMessage } from '../utils/Console';
|
|
3
|
+
const {
|
|
4
|
+
queryAllManagedObjectsByType
|
|
5
|
+
} = frodo.idm.config;
|
|
6
|
+
const {
|
|
7
|
+
getRealmManagedOrganization
|
|
8
|
+
} = frodo.idm.organization;
|
|
3
9
|
|
|
4
10
|
// unfinished work
|
|
5
11
|
export async function listOrganizationsTopDown() {
|
|
@@ -15,10 +21,10 @@ export async function listOrganizationsTopDown() {
|
|
|
15
21
|
do {
|
|
16
22
|
try {
|
|
17
23
|
// eslint-disable-next-line no-await-in-loop
|
|
18
|
-
result = await
|
|
24
|
+
result = await queryAllManagedObjectsByType(getRealmManagedOrganization(), ['name', 'parent/*/name', 'children/*/name'], result.pagedResultsCookie);
|
|
19
25
|
} catch (queryAllManagedObjectsByTypeError) {
|
|
20
26
|
printMessage(queryAllManagedObjectsByTypeError, 'error');
|
|
21
|
-
printMessage(`Error querying ${
|
|
27
|
+
printMessage(`Error querying ${getRealmManagedOrganization()} objects: ${queryAllManagedObjectsByTypeError}`, 'error');
|
|
22
28
|
}
|
|
23
29
|
orgs.concat(result.result);
|
|
24
30
|
printMessage('.', 'text', false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganizationOps.js","names":["frodo","printMessage","
|
|
1
|
+
{"version":3,"file":"OrganizationOps.js","names":["frodo","printMessage","queryAllManagedObjectsByType","idm","config","getRealmManagedOrganization","organization","listOrganizationsTopDown","orgs","result","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults","queryAllManagedObjectsByTypeError","concat"],"sources":["ops/OrganizationOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { printMessage } from '../utils/Console';\n\nconst { queryAllManagedObjectsByType } = frodo.idm.config;\nconst { getRealmManagedOrganization } = frodo.idm.organization;\n\n// unfinished work\nexport async function listOrganizationsTopDown() {\n const orgs = [];\n let result = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'NONE',\n totalPagedResults: -1,\n remainingPagedResults: -1,\n };\n do {\n try {\n // eslint-disable-next-line no-await-in-loop\n result = await queryAllManagedObjectsByType(\n getRealmManagedOrganization(),\n ['name', 'parent/*/name', 'children/*/name'],\n result.pagedResultsCookie\n );\n } catch (queryAllManagedObjectsByTypeError) {\n printMessage(queryAllManagedObjectsByTypeError, 'error');\n printMessage(\n `Error querying ${getRealmManagedOrganization()} objects: ${queryAllManagedObjectsByTypeError}`,\n 'error'\n );\n }\n orgs.concat(result.result);\n printMessage('.', 'text', false);\n } while (result.pagedResultsCookie);\n return orgs;\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,YAAY,QAAQ,kBAAkB;AAE/C,MAAM;EAAEC;AAA6B,CAAC,GAAGF,KAAK,CAACG,GAAG,CAACC,MAAM;AACzD,MAAM;EAAEC;AAA4B,CAAC,GAAGL,KAAK,CAACG,GAAG,CAACG,YAAY;;AAE9D;AACA,OAAO,eAAeC,wBAAwBA,CAAA,EAAG;EAC/C,MAAMC,IAAI,GAAG,EAAE;EACf,IAAIC,MAAM,GAAG;IACXA,MAAM,EAAE,EAAE;IACVC,WAAW,EAAE,CAAC;IACdC,kBAAkB,EAAE,IAAI;IACxBC,uBAAuB,EAAE,MAAM;IAC/BC,iBAAiB,EAAE,CAAC,CAAC;IACrBC,qBAAqB,EAAE,CAAC;EAC1B,CAAC;EACD,GAAG;IACD,IAAI;MACF;MACAL,MAAM,GAAG,MAAMP,4BAA4B,CACzCG,2BAA2B,CAAC,CAAC,EAC7B,CAAC,MAAM,EAAE,eAAe,EAAE,iBAAiB,CAAC,EAC5CI,MAAM,CAACE,kBACT,CAAC;IACH,CAAC,CAAC,OAAOI,iCAAiC,EAAE;MAC1Cd,YAAY,CAACc,iCAAiC,EAAE,OAAO,CAAC;MACxDd,YAAY,CACT,kBAAiBI,2BAA2B,CAAC,CAAE,aAAYU,iCAAkC,EAAC,EAC/F,OACF,CAAC;IACH;IACAP,IAAI,CAACQ,MAAM,CAACP,MAAM,CAACA,MAAM,CAAC;IAC1BR,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC;EAClC,CAAC,QAAQQ,MAAM,CAACE,kBAAkB;EAClC,OAAOH,IAAI;AACb"}
|
package/esm/ops/PolicyOps.js
CHANGED
|
@@ -2,6 +2,21 @@ import { frodo, state } from '@rockcarver/frodo-lib';
|
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import { createObjectTable, createProgressBar, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
|
|
4
4
|
import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
|
|
5
|
+
const {
|
|
6
|
+
getRealmName
|
|
7
|
+
} = frodo.helper.utils;
|
|
8
|
+
const {
|
|
9
|
+
getPolicies,
|
|
10
|
+
getPoliciesByPolicySet,
|
|
11
|
+
getPolicy,
|
|
12
|
+
exportPolicy,
|
|
13
|
+
exportPolicies,
|
|
14
|
+
exportPoliciesByPolicySet,
|
|
15
|
+
importPolicy,
|
|
16
|
+
importFirstPolicy,
|
|
17
|
+
importPolicies
|
|
18
|
+
} = frodo.authz.policy;
|
|
19
|
+
|
|
5
20
|
/**
|
|
6
21
|
* List policies
|
|
7
22
|
* @param {boolean} long list with details
|
|
@@ -10,7 +25,7 @@ import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImpo
|
|
|
10
25
|
export async function listPolicies(long = false) {
|
|
11
26
|
let outcome = false;
|
|
12
27
|
try {
|
|
13
|
-
const policies = await
|
|
28
|
+
const policies = await getPolicies();
|
|
14
29
|
policies.sort((a, b) => a._id.localeCompare(b._id));
|
|
15
30
|
for (const policy of policies) {
|
|
16
31
|
if (!long) {
|
|
@@ -34,7 +49,7 @@ export async function listPolicies(long = false) {
|
|
|
34
49
|
export async function listPoliciesByPolicySet(policySetId, long = false) {
|
|
35
50
|
let outcome = false;
|
|
36
51
|
try {
|
|
37
|
-
const policies = await
|
|
52
|
+
const policies = await getPoliciesByPolicySet(policySetId);
|
|
38
53
|
policies.sort((a, b) => a._id.localeCompare(b._id));
|
|
39
54
|
for (const policy of policies) {
|
|
40
55
|
if (!long) {
|
|
@@ -57,7 +72,7 @@ export async function listPoliciesByPolicySet(policySetId, long = false) {
|
|
|
57
72
|
*/
|
|
58
73
|
export async function describePolicy(policyId, json = false) {
|
|
59
74
|
let outcome = false;
|
|
60
|
-
const policySet = await
|
|
75
|
+
const policySet = await getPolicy(policyId);
|
|
61
76
|
outcome = true;
|
|
62
77
|
if (json) {
|
|
63
78
|
printMessage(policySet, 'data');
|
|
@@ -80,7 +95,7 @@ export async function deletePolicy(policyId) {
|
|
|
80
95
|
const errors = [];
|
|
81
96
|
try {
|
|
82
97
|
debugMessage(`Deleting policy ${policyId}`);
|
|
83
|
-
await
|
|
98
|
+
await deletePolicy(policyId);
|
|
84
99
|
} catch (error) {
|
|
85
100
|
printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');
|
|
86
101
|
}
|
|
@@ -107,7 +122,7 @@ export async function deletePolicies() {
|
|
|
107
122
|
try {
|
|
108
123
|
showSpinner(`Retrieving all policies...`);
|
|
109
124
|
try {
|
|
110
|
-
policies = await
|
|
125
|
+
policies = await getPolicies();
|
|
111
126
|
succeedSpinner(`Found ${policies.length} policies.`);
|
|
112
127
|
} catch (error) {
|
|
113
128
|
error.message = `Error retrieving all policies: ${error.message}`;
|
|
@@ -119,7 +134,7 @@ export async function deletePolicies() {
|
|
|
119
134
|
const policyId = policy._id;
|
|
120
135
|
try {
|
|
121
136
|
debugMessage(`Deleting policy ${policyId}`);
|
|
122
|
-
await
|
|
137
|
+
await deletePolicy(policyId);
|
|
123
138
|
updateProgressBar(`Deleted ${policyId}`);
|
|
124
139
|
} catch (error) {
|
|
125
140
|
error.message = `Error deleting policy ${policyId}: ${error}`;
|
|
@@ -156,7 +171,7 @@ export async function deletePoliciesByPolicySet(policySetId) {
|
|
|
156
171
|
try {
|
|
157
172
|
showSpinner(`Retrieving all policies from policy set ${policySetId}...`);
|
|
158
173
|
try {
|
|
159
|
-
policies = await
|
|
174
|
+
policies = await getPoliciesByPolicySet(policySetId);
|
|
160
175
|
succeedSpinner(`Found ${policies.length} policies in policy set ${policySetId}.`);
|
|
161
176
|
} catch (error) {
|
|
162
177
|
error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;
|
|
@@ -168,7 +183,7 @@ export async function deletePoliciesByPolicySet(policySetId) {
|
|
|
168
183
|
const policyId = policy._id;
|
|
169
184
|
try {
|
|
170
185
|
debugMessage(`Deleting policy ${policyId}`);
|
|
171
|
-
await
|
|
186
|
+
await deletePolicy(policyId);
|
|
172
187
|
updateProgressBar(`Deleted ${policyId}`);
|
|
173
188
|
} catch (error) {
|
|
174
189
|
error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;
|
|
@@ -212,7 +227,7 @@ export async function exportPolicyToFile(policyId, file, options = {
|
|
|
212
227
|
if (file) {
|
|
213
228
|
fileName = file;
|
|
214
229
|
}
|
|
215
|
-
const exportData = await
|
|
230
|
+
const exportData = await exportPolicy(policyId, options);
|
|
216
231
|
saveJsonToFile(exportData, fileName);
|
|
217
232
|
succeedSpinner(`Exported ${policyId} to ${fileName}.`);
|
|
218
233
|
outcome = true;
|
|
@@ -238,11 +253,11 @@ export async function exportPoliciesToFile(file, options = {
|
|
|
238
253
|
debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
|
|
239
254
|
showSpinner(`Exporting all policy sets...`);
|
|
240
255
|
try {
|
|
241
|
-
let fileName = getTypedFilename(`all${titleCase(
|
|
256
|
+
let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}Policies`, 'policy.authz');
|
|
242
257
|
if (file) {
|
|
243
258
|
fileName = file;
|
|
244
259
|
}
|
|
245
|
-
const exportData = await
|
|
260
|
+
const exportData = await exportPolicies(options);
|
|
246
261
|
saveJsonToFile(exportData, fileName);
|
|
247
262
|
succeedSpinner(`Exported all policy sets to ${fileName}.`);
|
|
248
263
|
outcome = true;
|
|
@@ -269,11 +284,11 @@ export async function exportPoliciesByPolicySetToFile(policySetId, file, options
|
|
|
269
284
|
debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
|
|
270
285
|
showSpinner(`Exporting all policy sets...`);
|
|
271
286
|
try {
|
|
272
|
-
let fileName = getTypedFilename(`all${titleCase(
|
|
287
|
+
let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm())) + titleCase(policySetId)}Policies`, 'policy.authz');
|
|
273
288
|
if (file) {
|
|
274
289
|
fileName = file;
|
|
275
290
|
}
|
|
276
|
-
const exportData = await
|
|
291
|
+
const exportData = await exportPoliciesByPolicySet(policySetId, options);
|
|
277
292
|
saveJsonToFile(exportData, fileName);
|
|
278
293
|
succeedSpinner(`Exported all policy sets to ${fileName}.`);
|
|
279
294
|
outcome = true;
|
|
@@ -297,12 +312,12 @@ export async function exportPoliciesToFiles(options = {
|
|
|
297
312
|
debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);
|
|
298
313
|
const errors = [];
|
|
299
314
|
try {
|
|
300
|
-
const policies = await
|
|
315
|
+
const policies = await getPolicies();
|
|
301
316
|
createProgressBar(policies.length, 'Exporting policy sets...');
|
|
302
317
|
for (const policy of policies) {
|
|
303
318
|
const file = getTypedFilename(policy._id, 'policy.authz');
|
|
304
319
|
try {
|
|
305
|
-
const exportData = await
|
|
320
|
+
const exportData = await exportPolicy(policy._id, options);
|
|
306
321
|
saveJsonToFile(exportData, file);
|
|
307
322
|
updateProgressBar(`Exported ${policy._id}.`);
|
|
308
323
|
} catch (error) {
|
|
@@ -332,12 +347,12 @@ export async function exportPoliciesByPolicySetToFiles(policySetId, options = {
|
|
|
332
347
|
debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);
|
|
333
348
|
const errors = [];
|
|
334
349
|
try {
|
|
335
|
-
const policies = await
|
|
350
|
+
const policies = await getPoliciesByPolicySet(policySetId);
|
|
336
351
|
createProgressBar(policies.length, `Exporting policies in policy set ${policySetId}...`);
|
|
337
352
|
for (const policy of policies) {
|
|
338
353
|
const file = getTypedFilename(policy._id, 'policy.authz');
|
|
339
354
|
try {
|
|
340
|
-
const exportData = await
|
|
355
|
+
const exportData = await exportPolicy(policy._id, options);
|
|
341
356
|
saveJsonToFile(exportData, file);
|
|
342
357
|
updateProgressBar(`Exported ${policy._id}.`);
|
|
343
358
|
} catch (error) {
|
|
@@ -371,7 +386,7 @@ export async function importPolicyFromFile(policyId, file, options = {
|
|
|
371
386
|
try {
|
|
372
387
|
const data = fs.readFileSync(file, 'utf8');
|
|
373
388
|
const fileData = JSON.parse(data);
|
|
374
|
-
await
|
|
389
|
+
await importPolicy(policyId, fileData, options);
|
|
375
390
|
outcome = true;
|
|
376
391
|
succeedSpinner(`Imported ${policyId}.`);
|
|
377
392
|
} catch (error) {
|
|
@@ -398,7 +413,7 @@ export async function importFirstPolicyFromFile(file, options = {
|
|
|
398
413
|
try {
|
|
399
414
|
const data = fs.readFileSync(file, 'utf8');
|
|
400
415
|
const fileData = JSON.parse(data);
|
|
401
|
-
await
|
|
416
|
+
await importFirstPolicy(fileData, options);
|
|
402
417
|
outcome = true;
|
|
403
418
|
succeedSpinner(`Imported ${file}.`);
|
|
404
419
|
} catch (error) {
|
|
@@ -425,7 +440,7 @@ export async function importPoliciesFromFile(file, options = {
|
|
|
425
440
|
try {
|
|
426
441
|
const data = fs.readFileSync(file, 'utf8');
|
|
427
442
|
const fileData = JSON.parse(data);
|
|
428
|
-
await
|
|
443
|
+
await importPolicies(fileData, options);
|
|
429
444
|
outcome = true;
|
|
430
445
|
succeedSpinner(`Imported ${file}${options.policySetName ? ' into policy set ' + options.policySetName : '.'}`);
|
|
431
446
|
} catch (error) {
|
|
@@ -458,7 +473,7 @@ export async function importPoliciesFromFiles(options = {
|
|
|
458
473
|
const fileData = JSON.parse(data);
|
|
459
474
|
const count = Object.keys(fileData.policyset).length;
|
|
460
475
|
total += count;
|
|
461
|
-
await
|
|
476
|
+
await importPolicies(fileData, options);
|
|
462
477
|
updateProgressBar(`Imported ${count} policies from ${file}`);
|
|
463
478
|
} catch (error) {
|
|
464
479
|
errors.push(error);
|
package/esm/ops/PolicyOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyOps.js","names":["frodo","state","fs","createObjectTable","createProgressBar","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","listPolicies","long","outcome","policies","authz","policy","getPolicies","sort","a","b","_id","localeCompare","err","message","listPoliciesByPolicySet","policySetId","getPoliciesByPolicySet","describePolicy","policyId","json","policySet","getPolicy","table","toString","deletePolicy","errors","error","length","errorMessages","map","join","deletePolicies","push","deletePoliciesByPolicySet","exportPolicyToFile","file","options","deps","prereqs","useStringArrays","fileName","exportData","exportPolicy","exportPoliciesToFile","helper","utils","getRealmName","getRealm","exportPolicies","exportPoliciesByPolicySetToFile","exportPoliciesByPolicySet","exportPoliciesToFiles","exportPoliciesByPolicySetToFiles","importPolicyFromFile","data","readFileSync","fileData","JSON","parse","importPolicy","importFirstPolicyFromFile","importFirstPolicy","importPoliciesFromFile","importPolicies","policySetName","importPoliciesFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","policyset"],"sources":["ops/PolicyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type { PolicySkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n createObjectTable,\n createProgressBar,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport type {\n PolicyExportOptions,\n PolicyImportOptions,\n PolicyExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/PolicyOps';\n\n/**\n * List policies\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPolicies(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await frodo.authz.policy.getPolicies();\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * List policies by policy set\n * @param {string} policySetId policy set id/name\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPoliciesByPolicySet(\n policySetId: string,\n long = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await frodo.authz.policy.getPoliciesByPolicySet(\n policySetId\n );\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe policy\n * @param {string} policyId policy id/name\n * @param {Object} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describePolicy(\n policyId: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n const policySet = await frodo.authz.policy.getPolicy(policyId);\n outcome = true;\n if (json) {\n printMessage(policySet, 'data');\n } else {\n const table = createObjectTable(policySet);\n printMessage(table.toString(), 'data');\n }\n return outcome;\n}\n\n/**\n * Delete policy\n * @param {string} policyId policy id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicy(policyId: string): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicy: begin`);\n showSpinner(`Deleting ${policyId}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await frodo.authz.policy.deletePolicy(policyId);\n } catch (error) {\n printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n failSpinner(`Error deleting ${policyId}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${policyId}.`);\n outcome = true;\n }\n debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicies(): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicies: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies...`);\n try {\n policies = await frodo.authz.policy.getPolicies();\n succeedSpinner(`Found ${policies.length} policies.`);\n } catch (error) {\n error.message = `Error retrieving all policies: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await frodo.authz.policy.deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(`Error deleting all policies: ${errorMessages}`);\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies in policy set\n * @param {string} policySetId policy set id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePoliciesByPolicySet(\n policySetId: string\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies from policy set ${policySetId}...`);\n try {\n policies = await frodo.authz.policy.getPoliciesByPolicySet(policySetId);\n succeedSpinner(\n `Found ${policies.length} policies in policy set ${policySetId}.`\n );\n } catch (error) {\n error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies from policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await frodo.authz.policy.deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(\n `Error deleting all policies from policy set ${policySetId}: ${errorMessages}`\n );\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export policy to file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPolicyToFile(\n policyId: string,\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);\n showSpinner(`Exporting ${policyId}...`);\n try {\n let fileName = getTypedFilename(policyId, 'policy.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.policy.exportPolicy(policyId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${policyId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${policyId}: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFile(\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(\n frodo.helper.utils.getRealmName(state.getRealm())\n )}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.policy.exportPolicies(options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} policySetId policy set id/name\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFile(\n policySetId: string,\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${\n titleCase(frodo.helper.utils.getRealmName(state.getRealm())) +\n titleCase(policySetId)\n }Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.policy.exportPoliciesByPolicySet(\n policySetId,\n options\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFiles(\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await frodo.authz.policy.getPolicies();\n createProgressBar(policies.length, 'Exporting policy sets...');\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface =\n await frodo.authz.policy.exportPolicy(policy._id, options);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFiles(\n policySetId: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] =\n await frodo.authz.policy.getPoliciesByPolicySet(policySetId);\n createProgressBar(\n policies.length,\n `Exporting policies in policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface =\n await frodo.authz.policy.exportPolicy(policy._id, options);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import policy from file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPolicyFromFile(\n policyId: string,\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);\n showSpinner(`Importing ${policyId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.policy.importPolicy(policyId, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${policyId}.`);\n } catch (error) {\n failSpinner(`Error importing ${policyId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first policy from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstPolicyFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.policy.importFirstPolicy(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.policy.importPolicies(fileData, options);\n outcome = true;\n succeedSpinner(\n `Imported ${file}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n } catch (error) {\n failSpinner(\n `Error importing ${file}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from files\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFiles(\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.policy.authz.json')\n );\n createProgressBar(files.length, 'Importing policies...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: PolicyExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.policyset).length;\n total += count;\n await frodo.authz.policy.importPolicies(fileData, options);\n updateProgressBar(`Imported ${count} policies from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing policies from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} policies from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing policies from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PolicyOps.js","names":["frodo","state","fs","createObjectTable","createProgressBar","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","getRealmName","helper","utils","getPolicies","getPoliciesByPolicySet","getPolicy","exportPolicy","exportPolicies","exportPoliciesByPolicySet","importPolicy","importFirstPolicy","importPolicies","authz","policy","listPolicies","long","outcome","policies","sort","a","b","_id","localeCompare","err","message","listPoliciesByPolicySet","policySetId","describePolicy","policyId","json","policySet","table","toString","deletePolicy","errors","error","length","errorMessages","map","join","deletePolicies","push","deletePoliciesByPolicySet","exportPolicyToFile","file","options","deps","prereqs","useStringArrays","fileName","exportData","exportPoliciesToFile","getRealm","exportPoliciesByPolicySetToFile","exportPoliciesToFiles","exportPoliciesByPolicySetToFiles","importPolicyFromFile","data","readFileSync","fileData","JSON","parse","importFirstPolicyFromFile","importPoliciesFromFile","policySetName","importPoliciesFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","policyset"],"sources":["ops/PolicyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type { PolicySkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n createObjectTable,\n createProgressBar,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport type {\n PolicyExportOptions,\n PolicyImportOptions,\n PolicyExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/PolicyOps';\n\nconst { getRealmName } = frodo.helper.utils;\nconst {\n getPolicies,\n getPoliciesByPolicySet,\n getPolicy,\n exportPolicy,\n exportPolicies,\n exportPoliciesByPolicySet,\n importPolicy,\n importFirstPolicy,\n importPolicies,\n} = frodo.authz.policy;\n\n/**\n * List policies\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPolicies(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await getPolicies();\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * List policies by policy set\n * @param {string} policySetId policy set id/name\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPoliciesByPolicySet(\n policySetId: string,\n long = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await getPoliciesByPolicySet(policySetId);\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe policy\n * @param {string} policyId policy id/name\n * @param {Object} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describePolicy(\n policyId: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n const policySet = await getPolicy(policyId);\n outcome = true;\n if (json) {\n printMessage(policySet, 'data');\n } else {\n const table = createObjectTable(policySet);\n printMessage(table.toString(), 'data');\n }\n return outcome;\n}\n\n/**\n * Delete policy\n * @param {string} policyId policy id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicy(policyId: string): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicy: begin`);\n showSpinner(`Deleting ${policyId}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n } catch (error) {\n printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n failSpinner(`Error deleting ${policyId}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${policyId}.`);\n outcome = true;\n }\n debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicies(): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicies: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies...`);\n try {\n policies = await getPolicies();\n succeedSpinner(`Found ${policies.length} policies.`);\n } catch (error) {\n error.message = `Error retrieving all policies: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(`Error deleting all policies: ${errorMessages}`);\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies in policy set\n * @param {string} policySetId policy set id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePoliciesByPolicySet(\n policySetId: string\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies from policy set ${policySetId}...`);\n try {\n policies = await getPoliciesByPolicySet(policySetId);\n succeedSpinner(\n `Found ${policies.length} policies in policy set ${policySetId}.`\n );\n } catch (error) {\n error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies from policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(\n `Error deleting all policies from policy set ${policySetId}: ${errorMessages}`\n );\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export policy to file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPolicyToFile(\n policyId: string,\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);\n showSpinner(`Exporting ${policyId}...`);\n try {\n let fileName = getTypedFilename(policyId, 'policy.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await exportPolicy(policyId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${policyId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${policyId}: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFile(\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportPolicies(options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} policySetId policy set id/name\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFile(\n policySetId: string,\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${\n titleCase(getRealmName(state.getRealm())) + titleCase(policySetId)\n }Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportPoliciesByPolicySet(policySetId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFiles(\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await getPolicies();\n createProgressBar(policies.length, 'Exporting policy sets...');\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFiles(\n policySetId: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await getPoliciesByPolicySet(\n policySetId\n );\n createProgressBar(\n policies.length,\n `Exporting policies in policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import policy from file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPolicyFromFile(\n policyId: string,\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);\n showSpinner(`Importing ${policyId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importPolicy(policyId, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${policyId}.`);\n } catch (error) {\n failSpinner(`Error importing ${policyId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first policy from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstPolicyFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstPolicy(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importPolicies(fileData, options);\n outcome = true;\n succeedSpinner(\n `Imported ${file}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n } catch (error) {\n failSpinner(\n `Error importing ${file}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from files\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFiles(\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.policy.authz.json')\n );\n createProgressBar(files.length, 'Importing policies...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: PolicyExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.policyset).length;\n total += count;\n await importPolicies(fileData, options);\n updateProgressBar(`Imported ${count} policies from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing policies from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} policies from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing policies from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|