@rockcarver/frodo-lib 0.16.2-8 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +221 -1
- package/cjs/api/AgentApi.js +14 -61
- package/cjs/api/AgentApi.js.map +1 -1
- package/cjs/api/AgentApi.test.js.map +1 -1
- package/cjs/api/ApiTypes.js +0 -5
- package/cjs/api/ApiTypes.js.map +1 -1
- package/cjs/api/AuthenticateApi.js +9 -20
- package/cjs/api/AuthenticateApi.js.map +1 -1
- package/cjs/api/AuthenticateApi.test.js.map +1 -0
- package/cjs/api/BaseApi.js +82 -124
- package/cjs/api/BaseApi.js.map +1 -1
- package/cjs/api/CirclesOfTrustApi.js +8 -32
- package/cjs/api/CirclesOfTrustApi.js.map +1 -1
- package/cjs/api/IdmConfigApi.js +9 -34
- package/cjs/api/IdmConfigApi.js.map +1 -1
- package/cjs/api/LogApi.js +8 -31
- package/cjs/api/LogApi.js.map +1 -1
- package/cjs/api/ManagedObjectApi.js +34 -31
- package/cjs/api/ManagedObjectApi.js.map +1 -1
- package/cjs/api/NodeApi.js +10 -41
- package/cjs/api/NodeApi.js.map +1 -1
- package/cjs/api/NodeApi.test.js.map +1 -1
- package/cjs/api/OAuth2ClientApi.js +7 -26
- package/cjs/api/OAuth2ClientApi.js.map +1 -1
- package/cjs/api/OAuth2OIDCApi.js +28 -34
- package/cjs/api/OAuth2OIDCApi.js.map +1 -1
- package/cjs/api/OAuth2OIDCApi.test.js.map +1 -0
- package/cjs/api/OAuth2ProviderApi.js +5 -15
- package/cjs/api/OAuth2ProviderApi.js.map +1 -1
- package/cjs/api/RealmApi.js +8 -34
- package/cjs/api/RealmApi.js.map +1 -1
- package/cjs/api/Saml2Api.js +32 -118
- package/cjs/api/Saml2Api.js.map +1 -1
- package/cjs/api/ScriptApi.js +8 -30
- package/cjs/api/ScriptApi.js.map +1 -1
- package/cjs/api/SecretsApi.js +14 -64
- package/cjs/api/SecretsApi.js.map +1 -1
- package/cjs/api/SecretsApi.test.js.map +1 -1
- package/cjs/api/ServerInfoApi.js +6 -21
- package/cjs/api/ServerInfoApi.js.map +1 -1
- package/cjs/api/ServiceApi.js +49 -47
- package/cjs/api/ServiceApi.js.map +1 -1
- package/cjs/api/SocialIdentityProvidersApi.js +9 -36
- package/cjs/api/SocialIdentityProvidersApi.js.map +1 -1
- package/cjs/api/StartupApi.js +5 -24
- package/cjs/api/StartupApi.js.map +1 -1
- package/cjs/api/StartupApi.test.js.map +1 -1
- package/cjs/api/TreeApi.js +8 -30
- package/cjs/api/TreeApi.js.map +1 -1
- package/cjs/api/TreeApi.test.js.map +1 -1
- package/cjs/api/VariablesApi.js +9 -37
- package/cjs/api/VariablesApi.js.map +1 -1
- package/cjs/api/VariablesApi.test.js.map +1 -1
- package/cjs/api/utils/ApiUtils.js +47 -57
- package/cjs/api/utils/ApiUtils.js.map +1 -1
- package/cjs/api/utils/ApiUtils.test.js.map +1 -1
- package/cjs/api/utils/Base64.js +6 -15
- package/cjs/api/utils/Base64.js.map +1 -1
- package/cjs/ext/axios-curlirize/curlirize.js +2 -9
- package/cjs/ext/axios-curlirize/curlirize.js.map +1 -1
- package/cjs/ext/axios-curlirize/lib/CurlHelper.js +7 -22
- package/cjs/ext/axios-curlirize/lib/CurlHelper.js.map +1 -1
- package/cjs/index.js +30 -89
- package/cjs/index.js.map +1 -1
- package/cjs/ops/AdminOps.js +27 -165
- package/cjs/ops/AdminOps.js.map +1 -1
- package/cjs/ops/AgentOps.js +3 -160
- package/cjs/ops/AgentOps.js.map +1 -1
- package/cjs/ops/AgentOps.test.js.map +1 -1
- package/cjs/ops/AuthenticateOps.js +265 -226
- package/cjs/ops/AuthenticateOps.js.map +1 -1
- package/cjs/ops/AuthenticateOps.test.js.map +1 -1
- package/cjs/ops/CirclesOfTrustOps.js +13 -91
- package/cjs/ops/CirclesOfTrustOps.js.map +1 -1
- package/cjs/ops/ConnectionProfileOps.js +220 -136
- package/cjs/ops/ConnectionProfileOps.js.map +1 -1
- package/cjs/ops/ConnectionProfileOps.test.js.map +1 -1
- package/cjs/ops/EmailTemplateOps.js +35 -379
- package/cjs/ops/EmailTemplateOps.js.map +1 -1
- package/cjs/ops/EmailTemplateOps.test.js.map +1 -1
- package/cjs/ops/IdmOps.js +52 -426
- package/cjs/ops/IdmOps.js.map +1 -1
- package/cjs/ops/IdmOps.test.js.map +1 -1
- package/cjs/ops/IdpOps.js +11 -94
- package/cjs/ops/IdpOps.js.map +1 -1
- package/cjs/ops/IdpOps.test.js.map +1 -1
- package/cjs/ops/JoseOps.js +81 -0
- package/cjs/ops/JoseOps.js.map +1 -0
- package/cjs/ops/JoseOps.test.js.map +1 -0
- package/cjs/ops/JourneyOps.js +140 -371
- package/cjs/ops/JourneyOps.js.map +1 -1
- package/cjs/ops/JourneyOps.test.js.map +1 -1
- package/cjs/ops/LogOps.js +14 -47
- package/cjs/ops/LogOps.js.map +1 -1
- package/cjs/ops/ManagedObjectOps.js +4 -12
- package/cjs/ops/ManagedObjectOps.js.map +1 -1
- package/cjs/ops/NodeOps.js +9 -67
- package/cjs/ops/NodeOps.js.map +1 -1
- package/cjs/ops/OAuth2ClientOps.js +10 -40
- package/cjs/ops/OAuth2ClientOps.js.map +1 -1
- package/cjs/ops/OpsTypes.js +0 -5
- package/cjs/ops/OpsTypes.js.map +1 -1
- package/cjs/ops/OrganizationOps.js +6 -25
- package/cjs/ops/OrganizationOps.js.map +1 -1
- package/cjs/ops/RealmOps.js +0 -19
- package/cjs/ops/RealmOps.js.map +1 -1
- package/cjs/ops/Saml2Ops.js +258 -802
- package/cjs/ops/Saml2Ops.js.map +1 -1
- package/cjs/ops/Saml2Ops.test.js.map +1 -1
- package/cjs/ops/ScriptOps.js +28 -73
- package/cjs/ops/ScriptOps.js.map +1 -1
- package/cjs/ops/SecretsOps.js +2 -58
- package/cjs/ops/SecretsOps.js.map +1 -1
- package/cjs/ops/ServiceAccountOps.js +61 -0
- package/cjs/ops/ServiceAccountOps.js.map +1 -0
- package/cjs/ops/ServiceAccountOps.test.js.map +1 -0
- package/cjs/ops/ServiceOps.js +55 -101
- package/cjs/ops/ServiceOps.js.map +1 -1
- package/cjs/ops/StartupOps.js +2 -23
- package/cjs/ops/StartupOps.js.map +1 -1
- package/cjs/ops/ThemeOps.js +230 -436
- package/cjs/ops/ThemeOps.js.map +1 -1
- package/cjs/ops/ThemeOps.test.js.map +1 -0
- package/cjs/ops/VariablesOps.js +0 -38
- package/cjs/ops/VariablesOps.js.map +1 -1
- package/cjs/ops/utils/Console.js +29 -62
- package/cjs/ops/utils/Console.js.map +1 -1
- package/cjs/ops/utils/DataProtection.js +13 -47
- package/cjs/ops/utils/DataProtection.js.map +1 -1
- package/cjs/ops/utils/DataProtection.test.js.map +1 -1
- package/cjs/ops/utils/ExportImportUtils.js +36 -74
- package/cjs/ops/utils/ExportImportUtils.js.map +1 -1
- package/cjs/ops/utils/ExportImportUtils.test.js.map +1 -1
- package/cjs/ops/utils/OpsUtils.js +27 -43
- package/cjs/ops/utils/OpsUtils.js.map +1 -1
- package/cjs/ops/utils/OpsUtils.test.js.map +1 -1
- package/cjs/ops/utils/ValidationUtils.js +0 -13
- package/cjs/ops/utils/ValidationUtils.js.map +1 -1
- package/cjs/ops/utils/ValidationUtils.test.js.map +1 -1
- package/cjs/ops/utils/Version.js +2 -12
- package/cjs/ops/utils/Version.js.map +1 -1
- package/cjs/ops/utils/Version.test.js.map +1 -1
- package/cjs/ops/utils/Wordwrap.js +1 -2
- package/cjs/ops/utils/Wordwrap.js.map +1 -1
- package/cjs/ops/utils/Wordwrap.test.js.map +1 -0
- package/cjs/shared/State.js +239 -0
- package/cjs/shared/State.js.map +1 -0
- package/cjs/shared/State.test.js.map +1 -0
- package/cjs/storage/StaticStorage.js.map +1 -1
- package/cjs/test/mocks/AuthenticateApi/step/default_steps.json +88 -0
- package/cjs/test/mocks/ForgeRockApiMockEngine.js +184 -80
- package/cjs/test/mocks/ForgeRockApiMockEngine.js.map +1 -1
- package/cjs/test/mocks/IdmConfigApi/getConfigEntity/managed.json +4420 -0
- package/cjs/test/mocks/OAuth2OIDCApi/accessToken/body.json +6 -0
- package/cjs/test/mocks/OAuth2OIDCApi/accessToken/headers.json +19 -0
- package/cjs/test/mocks/OAuth2OIDCApi/authorize/headers.json +38 -0
- package/cjs/test/mocks/Saml2Api/findSaml2Providers/https:sts.windows.net711ffa9c-5972-4713-ace3-688c9732614a_stub.json +18 -0
- package/cjs/test/mocks/Saml2Api/findSaml2Providers/iSPAzure_stub.json +18 -0
- package/cjs/test/mocks/Saml2Api/getProvider/aVNQQXp1cmU.json +1 -2
- package/cjs/test/mocks/Saml2Api/getProvider/dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l.json +1 -3
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/U1BBenVyZQ.json +147 -0
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/aHR0cHM6Ly9pZGMuc2NoZXViZXIuaW8vYW0vc2FtbDIvSURQQXp1cmU.json +182 -0
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/aHR0cHM6Ly9pZGMuc2NoZXViZXIuaW8vYW0vc2FtbDIvSURQQnJvYWRjb20.json +149 -0
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/aHR0cHM6Ly9pZGMuc2NoZXViZXIuaW8vYW0vc2FtbDIvSURQRmVkbGV0.json +141 -0
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/aVNQQXp1cmU.json +1 -2
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/dm9sa2VyRGV2U1A.json +118 -0
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/remote/aHR0cHM6Ly9zYW1sLm15dGVzdHJ1bi5jb20vc3A.json +66 -0
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/remote/aHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNzExZmZhOWMtNTk3Mi00NzEzLWFjZTMtNjg4Yzk3MzI2MTRhLw.json +35 -0
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/remote/aWRw.json +83 -0
- package/cjs/test/mocks/Saml2Api/getProviderByLocationAndId/remote/dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l.json +1 -3
- package/cjs/test/mocks/Saml2Api/getProviderMetadata/alpha/SPAzure.xml +74 -0
- package/cjs/test/mocks/Saml2Api/getProviderMetadata/alpha/https%3A%2F%2Fidc.scheuber.io%2Fam%2Fsaml2%2FIDPAzure.xml +78 -0
- package/cjs/test/mocks/Saml2Api/getProviderMetadata/alpha/https%3A%2F%2Fidc.scheuber.io%2Fam%2Fsaml2%2FIDPBroadcom.xml +78 -0
- package/cjs/test/mocks/Saml2Api/getProviderMetadata/alpha/https%3A%2F%2Fidc.scheuber.io%2Fam%2Fsaml2%2FIDPFedlet.xml +78 -0
- package/cjs/test/mocks/Saml2Api/getProviderMetadata/alpha/https%3A%2F%2Fsaml.mytestrun.com%2Fsp.xml +13 -0
- package/cjs/test/mocks/Saml2Api/getProviderMetadata/alpha/{dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l.xml → https%3A%2F%2Fsts.windows.net%2F711ffa9c-5972-4713-ace3-688c9732614a%2F.xml} +0 -0
- package/cjs/test/mocks/Saml2Api/getProviderMetadata/alpha/{aVNQQXp1cmU.xml → iSPAzure.xml} +0 -0
- package/cjs/test/mocks/Saml2Api/getProviderMetadata/alpha/urn%3Afederation%3AMicrosoftOnline.xml +84 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/SPAzure.saml.json +243 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/iSPAzure.saml.json +242 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/idc.scheuber.ioamsaml2IDPAzure.saml.json +454 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/idc.scheuber.ioamsaml2IDPBroadcom.saml.json +586 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/idc.scheuber.ioamsaml2IDPFedlet.saml.json +241 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/idp.saml.json +185 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/saml.mytestrun.comsp.saml.json +101 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/sts.windows.net711ffa9c-5972-4713-ace3-688c9732614a.saml.json +113 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/urn:federation:MicrosoftOnline.saml.json +199 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Provider/volkerDevSP.saml.json +212 -0
- package/cjs/test/mocks/Saml2Ops/importSaml2Providers/allAlphaProviders.saml.json +2414 -0
- package/cjs/test/mocks/ScriptApi/getScript/5b29c5b7-b161-4a42-a41f-d6c85316b951.json +13 -0
- package/cjs/test/mocks/ScriptApi/getScript/85523e71-2d77-4577-b078-6f9674cc54e2.json +13 -0
- package/cjs/test/mocks/ScriptApi/getScript/90c4eca5-05f0-42f5-b9bf-88b693eabbbd.json +13 -0
- package/cjs/test/mocks/ServerInfoApi/getServerInfo/info.json +25 -0
- package/cjs/test/mocks/ServerInfoApi/getServerVersionInfo/version.json +8 -0
- package/cjs/utils/AutoSetupPolly.js +79 -0
- package/cjs/utils/AutoSetupPolly.js.map +1 -0
- package/cjs/utils/SetupJest.js +6 -0
- package/cjs/utils/SetupJest.js.map +1 -0
- package/cjs/{test/mocks → utils}/snapshotResolve.js +10 -12
- package/cjs/utils/snapshotResolve.js.map +1 -0
- package/esm/api/AgentApi.mjs +19 -21
- package/esm/api/AgentApi.test.mjs +6 -15
- package/esm/api/ApiTypes.mjs +0 -5
- package/esm/api/AuthenticateApi.mjs +7 -10
- package/esm/api/AuthenticateApi.test.mjs +39 -0
- package/esm/api/BaseApi.mjs +96 -81
- package/esm/api/CirclesOfTrustApi.mjs +9 -12
- package/esm/api/IdmConfigApi.mjs +11 -12
- package/esm/api/LogApi.mjs +6 -10
- package/esm/api/ManagedObjectApi.mjs +23 -8
- package/esm/api/NodeApi.mjs +13 -15
- package/esm/api/NodeApi.test.mjs +13 -17
- package/esm/api/OAuth2ClientApi.mjs +7 -9
- package/esm/api/OAuth2OIDCApi.mjs +15 -9
- package/esm/api/OAuth2OIDCApi.test.mjs +53 -0
- package/esm/api/OAuth2ProviderApi.mjs +3 -5
- package/esm/api/RealmApi.mjs +10 -13
- package/esm/api/Saml2Api.mjs +31 -61
- package/esm/api/ScriptApi.mjs +9 -11
- package/esm/api/SecretsApi.mjs +21 -24
- package/esm/api/SecretsApi.test.mjs +9 -31
- package/esm/api/ServerInfoApi.mjs +5 -9
- package/esm/api/ServiceApi.mjs +53 -26
- package/esm/api/SocialIdentityProvidersApi.mjs +11 -13
- package/esm/api/StartupApi.mjs +5 -10
- package/esm/api/StartupApi.test.mjs +4 -7
- package/esm/api/TreeApi.mjs +9 -11
- package/esm/api/TreeApi.test.mjs +24 -61
- package/esm/api/VariablesApi.mjs +11 -13
- package/esm/api/VariablesApi.test.mjs +80 -222
- package/esm/api/utils/ApiUtils.mjs +45 -48
- package/esm/api/utils/ApiUtils.test.mjs +33 -32
- package/esm/api/utils/Base64.mjs +6 -9
- package/esm/ext/axios-curlirize/curlirize.mjs +2 -7
- package/esm/ext/axios-curlirize/lib/CurlHelper.mjs +7 -20
- package/esm/index.mjs +23 -13
- package/esm/ops/AdminOps.mjs +33 -119
- package/esm/ops/AgentOps.mjs +38 -81
- package/esm/ops/AgentOps.test.mjs +5 -45
- package/esm/ops/AuthenticateOps.mjs +241 -175
- package/esm/ops/AuthenticateOps.test.mjs +7 -9
- package/esm/ops/CirclesOfTrustOps.mjs +24 -61
- package/esm/ops/ConnectionProfileOps.mjs +192 -82
- package/esm/ops/ConnectionProfileOps.test.mjs +19 -19
- package/esm/ops/EmailTemplateOps.mjs +18 -276
- package/esm/ops/EmailTemplateOps.test.mjs +19 -44
- package/esm/ops/IdmOps.mjs +30 -327
- package/esm/ops/IdmOps.test.mjs +47 -54
- package/esm/ops/IdpOps.mjs +21 -59
- package/esm/ops/IdpOps.test.mjs +5 -5
- package/esm/ops/JoseOps.mjs +41 -0
- package/esm/ops/JoseOps.test.mjs +137 -0
- package/esm/ops/JourneyOps.mjs +147 -290
- package/esm/ops/JourneyOps.test.mjs +30 -28
- package/esm/ops/LogOps.mjs +15 -25
- package/esm/ops/ManagedObjectOps.mjs +6 -6
- package/esm/ops/NodeOps.mjs +9 -47
- package/esm/ops/OAuth2ClientOps.mjs +13 -19
- package/esm/ops/OpsTypes.mjs +1 -3
- package/esm/ops/OrganizationOps.mjs +7 -14
- package/esm/ops/RealmOps.mjs +4 -7
- package/esm/ops/Saml2Ops.mjs +199 -587
- package/esm/ops/Saml2Ops.test.mjs +303 -84
- package/esm/ops/ScriptOps.mjs +31 -47
- package/esm/ops/SecretsOps.mjs +15 -31
- package/esm/ops/ServiceAccountOps.mjs +41 -0
- package/esm/ops/ServiceAccountOps.test.mjs +51 -0
- package/esm/ops/ServiceOps.mjs +66 -83
- package/esm/ops/StartupOps.mjs +4 -13
- package/esm/ops/ThemeOps.mjs +189 -298
- package/esm/{api/ThemeApi.test.mjs → ops/ThemeOps.test.mjs} +91 -96
- package/esm/ops/VariablesOps.mjs +9 -18
- package/esm/ops/utils/Console.mjs +28 -46
- package/esm/ops/utils/DataProtection.mjs +15 -28
- package/esm/ops/utils/DataProtection.test.mjs +8 -8
- package/esm/ops/utils/ExportImportUtils.mjs +34 -43
- package/esm/ops/utils/ExportImportUtils.test.mjs +20 -18
- package/esm/ops/utils/OpsUtils.mjs +27 -21
- package/esm/ops/utils/OpsUtils.test.mjs +155 -27
- package/esm/ops/utils/ValidationUtils.mjs +0 -9
- package/esm/ops/utils/Version.mjs +2 -3
- package/esm/ops/utils/Version.test.mjs +0 -2
- package/esm/ops/utils/Wordwrap.mjs +1 -1
- package/esm/ops/utils/Wordwrap.test.mjs +19 -0
- package/esm/shared/State.mjs +164 -0
- package/esm/shared/State.test.mjs +249 -0
- package/esm/test/mocks/AuthenticateApi/step/default_steps.json +88 -0
- package/esm/test/mocks/ForgeRockApiMockEngine.mjs +169 -33
- package/esm/test/mocks/IdmConfigApi/getConfigEntity/managed.json +4420 -0
- package/esm/test/mocks/OAuth2OIDCApi/accessToken/body.json +6 -0
- package/esm/test/mocks/OAuth2OIDCApi/accessToken/headers.json +19 -0
- package/esm/test/mocks/OAuth2OIDCApi/authorize/headers.json +38 -0
- package/esm/test/mocks/Saml2Api/findSaml2Providers/https:sts.windows.net711ffa9c-5972-4713-ace3-688c9732614a_stub.json +18 -0
- package/esm/test/mocks/Saml2Api/findSaml2Providers/iSPAzure_stub.json +18 -0
- package/esm/test/mocks/Saml2Api/getProvider/aVNQQXp1cmU.json +1 -2
- package/esm/test/mocks/Saml2Api/getProvider/dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l.json +1 -3
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/U1BBenVyZQ.json +147 -0
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/aHR0cHM6Ly9pZGMuc2NoZXViZXIuaW8vYW0vc2FtbDIvSURQQXp1cmU.json +182 -0
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/aHR0cHM6Ly9pZGMuc2NoZXViZXIuaW8vYW0vc2FtbDIvSURQQnJvYWRjb20.json +149 -0
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/aHR0cHM6Ly9pZGMuc2NoZXViZXIuaW8vYW0vc2FtbDIvSURQRmVkbGV0.json +141 -0
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/aVNQQXp1cmU.json +1 -2
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/hosted/dm9sa2VyRGV2U1A.json +118 -0
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/remote/aHR0cHM6Ly9zYW1sLm15dGVzdHJ1bi5jb20vc3A.json +66 -0
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/remote/aHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNzExZmZhOWMtNTk3Mi00NzEzLWFjZTMtNjg4Yzk3MzI2MTRhLw.json +35 -0
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/remote/aWRw.json +83 -0
- package/esm/test/mocks/Saml2Api/getProviderByLocationAndId/remote/dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l.json +1 -3
- package/esm/test/mocks/Saml2Api/getProviderMetadata/alpha/SPAzure.xml +74 -0
- package/esm/test/mocks/Saml2Api/getProviderMetadata/alpha/https%3A%2F%2Fidc.scheuber.io%2Fam%2Fsaml2%2FIDPAzure.xml +78 -0
- package/esm/test/mocks/Saml2Api/getProviderMetadata/alpha/https%3A%2F%2Fidc.scheuber.io%2Fam%2Fsaml2%2FIDPBroadcom.xml +78 -0
- package/esm/test/mocks/Saml2Api/getProviderMetadata/alpha/https%3A%2F%2Fidc.scheuber.io%2Fam%2Fsaml2%2FIDPFedlet.xml +78 -0
- package/esm/test/mocks/Saml2Api/getProviderMetadata/alpha/https%3A%2F%2Fsaml.mytestrun.com%2Fsp.xml +13 -0
- package/esm/test/mocks/Saml2Api/getProviderMetadata/alpha/{dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l.xml → https%3A%2F%2Fsts.windows.net%2F711ffa9c-5972-4713-ace3-688c9732614a%2F.xml} +0 -0
- package/esm/test/mocks/Saml2Api/getProviderMetadata/alpha/{aVNQQXp1cmU.xml → iSPAzure.xml} +0 -0
- package/esm/test/mocks/Saml2Api/getProviderMetadata/alpha/urn%3Afederation%3AMicrosoftOnline.xml +84 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/SPAzure.saml.json +243 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/iSPAzure.saml.json +242 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/idc.scheuber.ioamsaml2IDPAzure.saml.json +454 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/idc.scheuber.ioamsaml2IDPBroadcom.saml.json +586 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/idc.scheuber.ioamsaml2IDPFedlet.saml.json +241 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/idp.saml.json +185 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/saml.mytestrun.comsp.saml.json +101 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/sts.windows.net711ffa9c-5972-4713-ace3-688c9732614a.saml.json +113 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/urn:federation:MicrosoftOnline.saml.json +199 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Provider/volkerDevSP.saml.json +212 -0
- package/esm/test/mocks/Saml2Ops/importSaml2Providers/allAlphaProviders.saml.json +2414 -0
- package/esm/test/mocks/ScriptApi/getScript/5b29c5b7-b161-4a42-a41f-d6c85316b951.json +13 -0
- package/esm/test/mocks/ScriptApi/getScript/85523e71-2d77-4577-b078-6f9674cc54e2.json +13 -0
- package/esm/test/mocks/ScriptApi/getScript/90c4eca5-05f0-42f5-b9bf-88b693eabbbd.json +13 -0
- package/esm/test/mocks/ServerInfoApi/getServerInfo/info.json +25 -0
- package/esm/test/mocks/ServerInfoApi/getServerVersionInfo/version.json +8 -0
- package/esm/utils/AutoSetupPolly.mjs +72 -0
- package/esm/utils/SetupJest.mjs +3 -0
- package/esm/{test/mocks → utils}/snapshotResolve.mjs +10 -12
- package/package.json +38 -27
- package/types/api/AgentApi.d.ts.map +1 -1
- package/types/api/ApiTypes.d.ts +19 -15
- package/types/api/ApiTypes.d.ts.map +1 -1
- package/types/api/AuthenticateApi.d.ts +1 -1
- package/types/api/AuthenticateApi.d.ts.map +1 -1
- package/types/api/BaseApi.d.ts +2 -0
- package/types/api/BaseApi.d.ts.map +1 -1
- package/types/api/CirclesOfTrustApi.d.ts.map +1 -1
- package/types/api/IdmConfigApi.d.ts.map +1 -1
- package/types/api/LogApi.d.ts.map +1 -1
- package/types/api/ManagedObjectApi.d.ts +9 -1
- package/types/api/ManagedObjectApi.d.ts.map +1 -1
- package/types/api/NodeApi.d.ts.map +1 -1
- package/types/api/OAuth2ClientApi.d.ts.map +1 -1
- package/types/api/OAuth2OIDCApi.d.ts +4 -2
- package/types/api/OAuth2OIDCApi.d.ts.map +1 -1
- package/types/api/OAuth2ProviderApi.d.ts.map +1 -1
- package/types/api/RealmApi.d.ts.map +1 -1
- package/types/api/Saml2Api.d.ts +7 -13
- package/types/api/Saml2Api.d.ts.map +1 -1
- package/types/api/ScriptApi.d.ts.map +1 -1
- package/types/api/SecretsApi.d.ts.map +1 -1
- package/types/api/ServerInfoApi.d.ts.map +1 -1
- package/types/api/ServiceApi.d.ts +14 -7
- package/types/api/ServiceApi.d.ts.map +1 -1
- package/types/api/SocialIdentityProvidersApi.d.ts.map +1 -1
- package/types/api/StartupApi.d.ts.map +1 -1
- package/types/api/TreeApi.d.ts.map +1 -1
- package/types/api/VariablesApi.d.ts.map +1 -1
- package/types/api/utils/ApiUtils.d.ts +1 -0
- package/types/api/utils/ApiUtils.d.ts.map +1 -1
- package/types/api/utils/Base64.d.ts +1 -0
- package/types/api/utils/Base64.d.ts.map +1 -1
- package/types/index.d.ts +11 -5
- package/types/index.d.ts.map +1 -1
- package/types/ops/AgentOps.d.ts +1 -1
- package/types/ops/AgentOps.d.ts.map +1 -1
- package/types/ops/AuthenticateOps.d.ts +10 -2
- package/types/ops/AuthenticateOps.d.ts.map +1 -1
- package/types/ops/ConnectionProfileOps.d.ts +49 -21
- package/types/ops/ConnectionProfileOps.d.ts.map +1 -1
- package/types/ops/EmailTemplateOps.d.ts +14 -33
- package/types/ops/EmailTemplateOps.d.ts.map +1 -1
- package/types/ops/IdmOps.d.ts +29 -37
- package/types/ops/IdmOps.d.ts.map +1 -1
- package/types/ops/JoseOps.d.ts +33 -0
- package/types/ops/JoseOps.d.ts.map +1 -0
- package/types/ops/JourneyOps.d.ts.map +1 -1
- package/types/ops/LogOps.d.ts.map +1 -1
- package/types/ops/NodeOps.d.ts.map +1 -1
- package/types/ops/OAuth2ClientOps.d.ts.map +1 -1
- package/types/ops/OpsTypes.d.ts +17 -1
- package/types/ops/OpsTypes.d.ts.map +1 -1
- package/types/ops/OrganizationOps.d.ts.map +1 -1
- package/types/ops/Saml2Ops.d.ts +52 -55
- package/types/ops/Saml2Ops.d.ts.map +1 -1
- package/types/ops/ScriptOps.d.ts.map +1 -1
- package/types/ops/ServiceAccountOps.d.ts +20 -0
- package/types/ops/ServiceAccountOps.d.ts.map +1 -0
- package/types/ops/ServiceOps.d.ts +18 -10
- package/types/ops/ServiceOps.d.ts.map +1 -1
- package/types/ops/ThemeOps.d.ts +35 -50
- package/types/ops/ThemeOps.d.ts.map +1 -1
- package/types/ops/utils/Console.d.ts +1 -1
- package/types/ops/utils/Console.d.ts.map +1 -1
- package/types/ops/utils/DataProtection.d.ts.map +1 -1
- package/types/ops/utils/ExportImportUtils.d.ts +5 -2
- package/types/ops/utils/ExportImportUtils.d.ts.map +1 -1
- package/types/ops/utils/OpsUtils.d.ts +6 -0
- package/types/ops/utils/OpsUtils.d.ts.map +1 -1
- package/types/ops/utils/Wordwrap.d.ts.map +1 -1
- package/types/shared/State.d.ts +223 -0
- package/types/shared/State.d.ts.map +1 -0
- package/types/test/mocks/ForgeRockApiMockEngine.d.ts +21 -1
- package/types/test/mocks/ForgeRockApiMockEngine.d.ts.map +1 -1
- package/types/utils/AutoSetupPolly.d.ts +1 -0
- package/types/utils/AutoSetupPolly.d.ts.map +1 -0
- package/types/utils/SetupJest.d.ts +1 -0
- package/types/utils/SetupJest.d.ts.map +1 -0
- package/types/utils/snapshotResolve.d.ts +1 -0
- package/types/utils/snapshotResolve.d.ts.map +1 -0
- package/cjs/api/EmailTemplateApi.js +0 -73
- package/cjs/api/EmailTemplateApi.js.map +0 -1
- package/cjs/api/ThemeApi.js +0 -367
- package/cjs/api/ThemeApi.js.map +0 -1
- package/cjs/api/ThemeApi.test.js.map +0 -1
- package/cjs/storage/SessionStorage.js +0 -91
- package/cjs/storage/SessionStorage.js.map +0 -1
- package/cjs/test/mocks/snapshotResolve.js.map +0 -1
- package/esm/api/EmailTemplateApi.mjs +0 -34
- package/esm/api/ThemeApi.mjs +0 -271
- package/esm/storage/SessionStorage.mjs +0 -79
- package/types/api/EmailTemplateApi.d.ts +0 -22
- package/types/api/EmailTemplateApi.d.ts.map +0 -1
- package/types/api/ThemeApi.d.ts +0 -56
- package/types/api/ThemeApi.d.ts.map +0 -1
- package/types/storage/SessionStorage.d.ts +0 -71
- package/types/storage/SessionStorage.d.ts.map +0 -1
- package/types/test/mocks/snapshotResolve.d.ts +0 -1
- package/types/test/mocks/snapshotResolve.d.ts.map +0 -1
package/esm/ops/IdpOps.mjs
CHANGED
|
@@ -3,8 +3,9 @@ import { getSocialIdentityProviders, putProviderByTypeAndId } from '../api/Socia
|
|
|
3
3
|
import { getScript } from '../api/ScriptApi';
|
|
4
4
|
import { createOrUpdateScript } from './ScriptOps';
|
|
5
5
|
import { convertBase64TextToArray, convertTextArrayToBase64, getRealmString, getTypedFilename, saveJsonToFile, validateImport } from './utils/ExportImportUtils';
|
|
6
|
-
import { printMessage, createProgressIndicator, updateProgressIndicator, stopProgressIndicator } from './utils/Console';
|
|
6
|
+
import { printMessage, createProgressIndicator, updateProgressIndicator, stopProgressIndicator } from './utils/Console';
|
|
7
7
|
|
|
8
|
+
// use a function vs a template variable to avoid problems in loops
|
|
8
9
|
function getFileDataTemplate() {
|
|
9
10
|
return {
|
|
10
11
|
meta: {},
|
|
@@ -12,11 +13,10 @@ function getFileDataTemplate() {
|
|
|
12
13
|
idp: {}
|
|
13
14
|
};
|
|
14
15
|
}
|
|
16
|
+
|
|
15
17
|
/**
|
|
16
18
|
* List providers
|
|
17
19
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
20
|
export async function listSocialProviders() {
|
|
21
21
|
try {
|
|
22
22
|
const providers = await getSocialIdentityProviders();
|
|
@@ -29,55 +29,47 @@ export async function listSocialProviders() {
|
|
|
29
29
|
printMessage(err, 'error');
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
|
|
32
33
|
/**
|
|
33
34
|
* Get social identity provider by id
|
|
34
35
|
* @param {String} providerId social identity provider id/name
|
|
35
36
|
* @returns {Promise} a promise that resolves a social identity provider object
|
|
36
37
|
*/
|
|
37
|
-
|
|
38
38
|
export async function getSocialProvider(providerId) {
|
|
39
39
|
return getSocialIdentityProviders().then(response => {
|
|
40
40
|
const foundProviders = response.result.filter(provider => provider._id === providerId);
|
|
41
|
-
|
|
42
41
|
switch (foundProviders.length) {
|
|
43
42
|
case 1:
|
|
44
43
|
return foundProviders[0];
|
|
45
|
-
|
|
46
44
|
case 0:
|
|
47
45
|
throw new Error(`Provider '${providerId}' not found`);
|
|
48
|
-
|
|
49
46
|
default:
|
|
50
47
|
throw new Error(`${foundProviders.length} providers '${providerId}' found`);
|
|
51
48
|
}
|
|
52
49
|
});
|
|
53
50
|
}
|
|
51
|
+
|
|
54
52
|
/**
|
|
55
53
|
* Export provider by id
|
|
56
54
|
* @param {String} providerId provider id/name
|
|
57
55
|
* @param {String} file optional export file name
|
|
58
56
|
*/
|
|
59
|
-
|
|
60
57
|
export async function exportSocialProviderToFile(providerId, file = '') {
|
|
61
58
|
let fileName = file;
|
|
62
|
-
|
|
63
59
|
if (!fileName) {
|
|
64
60
|
fileName = getTypedFilename(providerId, 'idp');
|
|
65
61
|
}
|
|
66
|
-
|
|
67
62
|
createProgressIndicator(1, `Exporting ${providerId}`);
|
|
68
|
-
|
|
69
63
|
try {
|
|
70
64
|
const idpData = await getSocialProvider(providerId);
|
|
71
65
|
updateProgressIndicator(`Writing file ${fileName}`);
|
|
72
66
|
const fileData = getFileDataTemplate();
|
|
73
67
|
fileData.idp[idpData._id] = idpData;
|
|
74
|
-
|
|
75
68
|
if (idpData.transform) {
|
|
76
69
|
const scriptData = await getScript(idpData.transform);
|
|
77
70
|
scriptData.script = convertBase64TextToArray(scriptData.script);
|
|
78
71
|
fileData.script[idpData.transform] = scriptData;
|
|
79
72
|
}
|
|
80
|
-
|
|
81
73
|
saveJsonToFile(fileData, fileName);
|
|
82
74
|
stopProgressIndicator(`Exported ${providerId['brightCyan']} to ${fileName['brightCyan']}.`);
|
|
83
75
|
} catch (err) {
|
|
@@ -85,26 +77,22 @@ export async function exportSocialProviderToFile(providerId, file = '') {
|
|
|
85
77
|
printMessage(`${err}`, 'error');
|
|
86
78
|
}
|
|
87
79
|
}
|
|
80
|
+
|
|
88
81
|
/**
|
|
89
82
|
* Export all providers
|
|
90
83
|
* @param {String} file optional export file name
|
|
91
84
|
*/
|
|
92
|
-
|
|
93
85
|
export async function exportSocialProvidersToFile(file) {
|
|
94
86
|
let fileName = file;
|
|
95
|
-
|
|
96
87
|
if (!fileName) {
|
|
97
88
|
fileName = getTypedFilename(`all${getRealmString()}Providers`, 'idp');
|
|
98
89
|
}
|
|
99
|
-
|
|
100
90
|
const fileData = getFileDataTemplate();
|
|
101
91
|
const allIdpsData = (await getSocialIdentityProviders()).result;
|
|
102
92
|
createProgressIndicator(allIdpsData.length, 'Exporting providers');
|
|
103
|
-
|
|
104
93
|
for (const idpData of allIdpsData) {
|
|
105
94
|
updateProgressIndicator(`Exporting provider ${idpData._id}`);
|
|
106
95
|
fileData.idp[idpData._id] = idpData;
|
|
107
|
-
|
|
108
96
|
if (idpData.transform) {
|
|
109
97
|
// eslint-disable-next-line no-await-in-loop
|
|
110
98
|
const scriptData = await getScript(idpData.transform);
|
|
@@ -112,52 +100,45 @@ export async function exportSocialProvidersToFile(file) {
|
|
|
112
100
|
fileData.script[idpData.transform] = scriptData;
|
|
113
101
|
}
|
|
114
102
|
}
|
|
115
|
-
|
|
116
103
|
saveJsonToFile(fileData, fileName);
|
|
117
104
|
stopProgressIndicator(`${allIdpsData.length} providers exported to ${fileName}.`);
|
|
118
105
|
}
|
|
106
|
+
|
|
119
107
|
/**
|
|
120
108
|
* Export all providers to individual files
|
|
121
109
|
*/
|
|
122
|
-
|
|
123
110
|
export async function exportSocialProvidersToFiles() {
|
|
124
|
-
const allIdpsData = await (await getSocialIdentityProviders()).result;
|
|
125
|
-
|
|
111
|
+
const allIdpsData = await (await getSocialIdentityProviders()).result;
|
|
112
|
+
// printMessage(allIdpsData, 'data');
|
|
126
113
|
createProgressIndicator(allIdpsData.length, 'Exporting providers');
|
|
127
|
-
|
|
128
114
|
for (const idpData of allIdpsData) {
|
|
129
115
|
updateProgressIndicator(`Writing provider ${idpData._id}`);
|
|
130
116
|
const fileName = getTypedFilename(idpData._id, 'idp');
|
|
131
117
|
const fileData = getFileDataTemplate();
|
|
132
118
|
fileData.idp[idpData._id] = idpData;
|
|
133
|
-
|
|
134
119
|
if (idpData.transform) {
|
|
135
120
|
// eslint-disable-next-line no-await-in-loop
|
|
136
121
|
const scriptData = await getScript(idpData.transform);
|
|
137
122
|
scriptData.script = convertBase64TextToArray(scriptData.script);
|
|
138
123
|
fileData.script[idpData.transform] = scriptData;
|
|
139
124
|
}
|
|
140
|
-
|
|
141
125
|
saveJsonToFile(fileData, fileName);
|
|
142
126
|
}
|
|
143
|
-
|
|
144
127
|
stopProgressIndicator(`${allIdpsData.length} providers exported.`);
|
|
145
128
|
}
|
|
129
|
+
|
|
146
130
|
/**
|
|
147
131
|
* Import provider by id/name
|
|
148
132
|
* @param {String} providerId provider id/name
|
|
149
133
|
* @param {String} file import file name
|
|
150
134
|
*/
|
|
151
|
-
|
|
152
135
|
export async function importSocialProviderFromFile(providerId, file) {
|
|
153
136
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
154
137
|
if (err) throw err;
|
|
155
138
|
const fileData = JSON.parse(data);
|
|
156
|
-
|
|
157
139
|
if (validateImport(fileData.meta)) {
|
|
158
140
|
createProgressIndicator(1, 'Importing provider...');
|
|
159
141
|
let found = false;
|
|
160
|
-
|
|
161
142
|
for (const idpId in fileData.idp) {
|
|
162
143
|
if ({}.hasOwnProperty.call(fileData.idp, idpId)) {
|
|
163
144
|
if (idpId === providerId) {
|
|
@@ -165,13 +146,11 @@ export async function importSocialProviderFromFile(providerId, file) {
|
|
|
165
146
|
updateProgressIndicator(`Importing ${fileData.idp[idpId]._id}`);
|
|
166
147
|
const scriptId = fileData.idp[idpId].transform;
|
|
167
148
|
const scriptData = fileData.script[scriptId];
|
|
168
|
-
|
|
169
149
|
if (scriptId && scriptData) {
|
|
170
|
-
scriptData.script = convertTextArrayToBase64(scriptData.script);
|
|
171
|
-
|
|
150
|
+
scriptData.script = convertTextArrayToBase64(scriptData.script);
|
|
151
|
+
// eslint-disable-next-line no-await-in-loop
|
|
172
152
|
await createOrUpdateScript(fileData.idp[idpId].transform, fileData.script[fileData.idp[idpId].transform]);
|
|
173
153
|
}
|
|
174
|
-
|
|
175
154
|
putProviderByTypeAndId(fileData.idp[idpId]._type._id, idpId, fileData.idp[idpId]).then(() => {
|
|
176
155
|
stopProgressIndicator(`Successfully imported provider ${providerId}.`);
|
|
177
156
|
}).catch(importProviderErr => {
|
|
@@ -183,7 +162,6 @@ export async function importSocialProviderFromFile(providerId, file) {
|
|
|
183
162
|
}
|
|
184
163
|
}
|
|
185
164
|
}
|
|
186
|
-
|
|
187
165
|
if (!found) {
|
|
188
166
|
stopProgressIndicator(`Provider ${providerId.brightCyan} not found in ${file.brightCyan}!`);
|
|
189
167
|
}
|
|
@@ -192,31 +170,27 @@ export async function importSocialProviderFromFile(providerId, file) {
|
|
|
192
170
|
}
|
|
193
171
|
});
|
|
194
172
|
}
|
|
173
|
+
|
|
195
174
|
/**
|
|
196
175
|
* Import first provider from file
|
|
197
176
|
* @param {String} file import file name
|
|
198
177
|
*/
|
|
199
|
-
|
|
200
178
|
export async function importFirstSocialProviderFromFile(file) {
|
|
201
179
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
202
180
|
if (err) throw err;
|
|
203
181
|
const fileData = JSON.parse(data);
|
|
204
|
-
|
|
205
182
|
if (validateImport(fileData.meta)) {
|
|
206
183
|
createProgressIndicator(1, 'Importing provider...');
|
|
207
|
-
|
|
208
184
|
for (const idpId in fileData.idp) {
|
|
209
185
|
if ({}.hasOwnProperty.call(fileData.idp, idpId)) {
|
|
210
186
|
updateProgressIndicator(`Importing ${fileData.idp[idpId]._id}`);
|
|
211
187
|
const scriptId = fileData.idp[idpId].transform;
|
|
212
188
|
const scriptData = fileData.script[scriptId];
|
|
213
|
-
|
|
214
189
|
if (scriptId && scriptData) {
|
|
215
|
-
scriptData.script = convertTextArrayToBase64(scriptData.script);
|
|
216
|
-
|
|
190
|
+
scriptData.script = convertTextArrayToBase64(scriptData.script);
|
|
191
|
+
// eslint-disable-next-line no-await-in-loop
|
|
217
192
|
await createOrUpdateScript(fileData.idp[idpId].transform, fileData.script[fileData.idp[idpId].transform]);
|
|
218
193
|
}
|
|
219
|
-
|
|
220
194
|
putProviderByTypeAndId(fileData.idp[idpId]._type._id, idpId, fileData.idp[idpId]).then(result => {
|
|
221
195
|
if (result == null) {
|
|
222
196
|
stopProgressIndicator(`Error importing provider ${fileData.idp[idpId]._id}`);
|
|
@@ -233,80 +207,68 @@ export async function importFirstSocialProviderFromFile(file) {
|
|
|
233
207
|
}
|
|
234
208
|
});
|
|
235
209
|
}
|
|
210
|
+
|
|
236
211
|
/**
|
|
237
212
|
* Import all providers from file
|
|
238
213
|
* @param {String} file import file name
|
|
239
214
|
*/
|
|
240
|
-
|
|
241
215
|
export async function importSocialProvidersFromFile(file) {
|
|
242
216
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
243
217
|
if (err) throw err;
|
|
244
218
|
const fileData = JSON.parse(data);
|
|
245
|
-
|
|
246
219
|
if (validateImport(fileData.meta)) {
|
|
247
220
|
createProgressIndicator(Object.keys(fileData.idp).length, 'Importing providers...');
|
|
248
|
-
|
|
249
221
|
for (const idpId in fileData.idp) {
|
|
250
222
|
if ({}.hasOwnProperty.call(fileData.idp, idpId)) {
|
|
251
223
|
const scriptId = fileData.idp[idpId].transform;
|
|
252
224
|
const scriptData = fileData.script[scriptId];
|
|
253
|
-
|
|
254
225
|
if (scriptId && scriptData) {
|
|
255
|
-
scriptData.script = convertTextArrayToBase64(scriptData.script);
|
|
256
|
-
|
|
226
|
+
scriptData.script = convertTextArrayToBase64(scriptData.script);
|
|
227
|
+
// eslint-disable-next-line no-await-in-loop
|
|
257
228
|
await createOrUpdateScript(fileData.idp[idpId].transform, fileData.script[fileData.idp[idpId].transform]);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
|
|
229
|
+
}
|
|
230
|
+
// eslint-disable-next-line no-await-in-loop
|
|
261
231
|
const result = await putProviderByTypeAndId(fileData.idp[idpId]._type._id, idpId, fileData.idp[idpId]);
|
|
262
|
-
|
|
263
232
|
if (!result) {
|
|
264
233
|
updateProgressIndicator(`Successfully imported ${fileData.idp[idpId].name}`);
|
|
265
234
|
}
|
|
266
235
|
}
|
|
267
236
|
}
|
|
268
|
-
|
|
269
237
|
stopProgressIndicator(`Providers imported.`);
|
|
270
238
|
} else {
|
|
271
239
|
printMessage('Import validation failed...', 'error');
|
|
272
240
|
}
|
|
273
241
|
});
|
|
274
242
|
}
|
|
243
|
+
|
|
275
244
|
/**
|
|
276
245
|
* Import providers from *.idp.json files in current working directory
|
|
277
246
|
*/
|
|
278
|
-
|
|
279
247
|
export async function importSocialProvidersFromFiles() {
|
|
280
248
|
const names = fs.readdirSync('.');
|
|
281
249
|
const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.idp.json'));
|
|
282
250
|
createProgressIndicator(jsonFiles.length, 'Importing providers...');
|
|
283
251
|
let total = 0;
|
|
284
|
-
|
|
285
252
|
for (const file of jsonFiles) {
|
|
286
253
|
const data = fs.readFileSync(file, 'utf8');
|
|
287
254
|
const fileData = JSON.parse(data);
|
|
288
|
-
|
|
289
255
|
if (validateImport(fileData.meta)) {
|
|
290
256
|
const count = Object.keys(fileData.idp).length;
|
|
291
257
|
total += count;
|
|
292
|
-
|
|
293
258
|
for (const idpId in fileData.idp) {
|
|
294
259
|
if ({}.hasOwnProperty.call(fileData.idp, idpId)) {
|
|
295
260
|
// eslint-disable-next-line no-await-in-loop
|
|
296
261
|
const result = await putProviderByTypeAndId(fileData.idp[idpId]._type._id, idpId, fileData.idp[idpId]);
|
|
297
|
-
|
|
298
262
|
if (result == null) {
|
|
299
263
|
printMessage(`Error importing ${count} providers from ${file}`, 'error');
|
|
300
264
|
}
|
|
301
265
|
}
|
|
302
266
|
}
|
|
303
|
-
|
|
304
267
|
updateProgressIndicator(`Imported ${count} provider(s) from ${file}`);
|
|
305
268
|
} else {
|
|
306
269
|
printMessage(`Validation of ${file} failed!`, 'error');
|
|
307
270
|
}
|
|
308
271
|
}
|
|
309
|
-
|
|
310
272
|
stopProgressIndicator(`Finished importing ${total} provider(s) from ${jsonFiles.length} file(s).`);
|
|
311
273
|
}
|
|
312
274
|
//# sourceMappingURL=IdpOps.js.map
|
package/esm/ops/IdpOps.test.mjs
CHANGED
|
@@ -4,11 +4,11 @@ import { Idp, state } from '../index';
|
|
|
4
4
|
import * as global from '../storage/StaticStorage';
|
|
5
5
|
import { mockGetSocialProviders } from '../test/mocks/ForgeRockApiMockEngine';
|
|
6
6
|
const mock = new MockAdapter(axios);
|
|
7
|
-
state.
|
|
8
|
-
state.
|
|
9
|
-
state.
|
|
10
|
-
state.
|
|
11
|
-
state.
|
|
7
|
+
state.setHost('https://openam-frodo-dev.forgeblocks.com/am');
|
|
8
|
+
state.setRealm('alpha');
|
|
9
|
+
state.setCookieName('cookieName');
|
|
10
|
+
state.setCookieValue('cookieValue');
|
|
11
|
+
state.setDeploymentType(global.CLOUD_DEPLOYMENT_TYPE_KEY);
|
|
12
12
|
describe('IdpOps - exportSocialProviderToFile()', () => {
|
|
13
13
|
test('exportSocialProviderToFile() 0: Method is implemented', async () => {
|
|
14
14
|
expect(Idp.exportSocialProviderToFile).toBeDefined();
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import jose from 'node-jose';
|
|
2
|
+
export async function createJwkRsa() {
|
|
3
|
+
const jwk = await jose.JWK.createKey('RSA', 4096, {
|
|
4
|
+
alg: 'RS256'
|
|
5
|
+
});
|
|
6
|
+
// include the private key
|
|
7
|
+
return jwk.toJSON(true);
|
|
8
|
+
}
|
|
9
|
+
export async function getJwkRsaPublic(jwkJson) {
|
|
10
|
+
const jwk = await jose.JWK.asKey(jwkJson);
|
|
11
|
+
// do not include the private key
|
|
12
|
+
return jwk.toJSON(false);
|
|
13
|
+
}
|
|
14
|
+
export function createJwks(...keys) {
|
|
15
|
+
return {
|
|
16
|
+
keys
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export async function createSignedJwtToken(payload, jwkJson) {
|
|
20
|
+
const key = await jose.JWK.asKey(jwkJson);
|
|
21
|
+
if (typeof payload === 'object') {
|
|
22
|
+
payload = JSON.stringify(payload);
|
|
23
|
+
}
|
|
24
|
+
const jwt = await jose.JWS.createSign({
|
|
25
|
+
alg: 'RS256',
|
|
26
|
+
compact: true,
|
|
27
|
+
fields: {}
|
|
28
|
+
},
|
|
29
|
+
// https://github.com/cisco/node-jose/issues/253
|
|
30
|
+
{
|
|
31
|
+
key,
|
|
32
|
+
reference: false
|
|
33
|
+
}).update(payload).final();
|
|
34
|
+
return jwt;
|
|
35
|
+
}
|
|
36
|
+
export async function verifySignedJwtToken(jwt, jwkJson) {
|
|
37
|
+
const jwk = await jose.JWK.asKey(jwkJson);
|
|
38
|
+
const verifyResult = await jose.JWS.createVerify(jwk).verify(jwt);
|
|
39
|
+
return verifyResult;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=JoseOps.js.map
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { jest } from '@jest/globals';
|
|
2
|
+
import * as Jose from './JoseOps';
|
|
3
|
+
import { parseUrl } from '../api/utils/ApiUtils';
|
|
4
|
+
import { v4 } from 'uuid';
|
|
5
|
+
import { isEqualJson } from './utils/OpsUtils';
|
|
6
|
+
import { decode } from '../api/utils/Base64';
|
|
7
|
+
|
|
8
|
+
// Increase timeout for this test as pipeline keeps failing with error:
|
|
9
|
+
// Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.
|
|
10
|
+
jest.setTimeout(30000);
|
|
11
|
+
describe('JoseOps - createJWK()', () => {
|
|
12
|
+
test('createJWK() 0: Method is implemented', async () => {
|
|
13
|
+
expect(Jose.createJwkRsa).toBeDefined();
|
|
14
|
+
});
|
|
15
|
+
test('createJWK() 1: Create JWK with RSA key', async () => {
|
|
16
|
+
const jwk = await Jose.createJwkRsa();
|
|
17
|
+
expect(jwk).toBeTruthy();
|
|
18
|
+
expect(jwk.kty).toBe('RSA');
|
|
19
|
+
expect(jwk.alg).toBe('RS256');
|
|
20
|
+
expect(jwk.kid).toBeTruthy();
|
|
21
|
+
expect(jwk.d).toBeTruthy();
|
|
22
|
+
expect(jwk.dp).toBeTruthy();
|
|
23
|
+
expect(jwk.dq).toBeTruthy();
|
|
24
|
+
expect(jwk.e).toBe('AQAB');
|
|
25
|
+
expect(jwk.n).toBeTruthy();
|
|
26
|
+
expect(jwk.p).toBeTruthy();
|
|
27
|
+
expect(jwk.q).toBeTruthy();
|
|
28
|
+
expect(jwk.qi).toBeTruthy();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('JoseOps - getJwkRsaPublic()', () => {
|
|
32
|
+
test('getJwkRsaPublic() 0: Method is implemented', async () => {
|
|
33
|
+
expect(Jose.getJwkRsaPublic).toBeDefined();
|
|
34
|
+
});
|
|
35
|
+
test('getJwkRsaPublic() 1: Get JWK with RSA public key, only', async () => {
|
|
36
|
+
const jwk = await Jose.createJwkRsa();
|
|
37
|
+
const jwkPublic = await Jose.getJwkRsaPublic(jwk);
|
|
38
|
+
expect(jwkPublic).toBeTruthy();
|
|
39
|
+
expect(jwkPublic.kty).toBe('RSA');
|
|
40
|
+
expect(jwkPublic.alg).toBe('RS256');
|
|
41
|
+
expect(jwkPublic.kid).toBeTruthy();
|
|
42
|
+
expect(jwkPublic['d']).toBeFalsy();
|
|
43
|
+
expect(jwkPublic['dp']).toBeFalsy();
|
|
44
|
+
expect(jwkPublic['dq']).toBeFalsy();
|
|
45
|
+
expect(jwkPublic.e).toBe('AQAB');
|
|
46
|
+
expect(jwkPublic.n).toBeTruthy();
|
|
47
|
+
expect(jwkPublic['p']).toBeFalsy();
|
|
48
|
+
expect(jwkPublic['q']).toBeFalsy();
|
|
49
|
+
expect(jwkPublic['qi']).toBeFalsy();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('JoseOps - createJwks()', () => {
|
|
53
|
+
test('createJwks() 0: Method is implemented', async () => {
|
|
54
|
+
expect(Jose.createJwks).toBeDefined();
|
|
55
|
+
});
|
|
56
|
+
test('createJwks() 1: Create JWKS with 1 key', async () => {
|
|
57
|
+
const jwk = await Jose.createJwkRsa();
|
|
58
|
+
const jwks = await Jose.createJwks(jwk);
|
|
59
|
+
expect(jwks).toBeTruthy();
|
|
60
|
+
expect(jwks.keys).toBeTruthy();
|
|
61
|
+
expect(jwks.keys.length).toBe(1);
|
|
62
|
+
});
|
|
63
|
+
test('createJwks() 2: Create JWKS with 2 keys', async () => {
|
|
64
|
+
const jwk1 = await Jose.createJwkRsa();
|
|
65
|
+
const jwk2 = await Jose.createJwkRsa();
|
|
66
|
+
const jwks = await Jose.createJwks(jwk1, jwk2);
|
|
67
|
+
expect(jwks).toBeTruthy();
|
|
68
|
+
expect(jwks.keys).toBeTruthy();
|
|
69
|
+
expect(jwks.keys.length).toBe(2);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('JoseOps - createSignedJwtToken()', () => {
|
|
73
|
+
test('createSignedJwtToken() 0: Method is implemented', async () => {
|
|
74
|
+
expect(Jose.createSignedJwtToken).toBeDefined();
|
|
75
|
+
});
|
|
76
|
+
test('createSignedJwtToken() 1: Create signed JWT', async () => {
|
|
77
|
+
// The audience is the URL of the access token in the realm for client, and must include the port number
|
|
78
|
+
const u = parseUrl('https://openam-svcaccts-final.forgeblocks.com/am');
|
|
79
|
+
const aud = `${u.origin}:${u.port ? u.port : u.protocol === 'https' ? '443' : '80'}${u.pathname}/oauth2/access_token`;
|
|
80
|
+
|
|
81
|
+
// Cross platform way of setting JWT expiry time 3 minutes in the future, expressed as number of seconds since EPOCH
|
|
82
|
+
const exp = Math.floor(new Date().getTime() / 1000 + 180);
|
|
83
|
+
|
|
84
|
+
// A unique ID for the JWT which is required when requesting the openid scope
|
|
85
|
+
const jti = v4();
|
|
86
|
+
const iss = '0de8d0d8-e423-41e8-9034-73883af90917';
|
|
87
|
+
const sub = iss;
|
|
88
|
+
|
|
89
|
+
// Create the payload for our bearer token
|
|
90
|
+
const payload = {
|
|
91
|
+
iss,
|
|
92
|
+
sub,
|
|
93
|
+
aud,
|
|
94
|
+
exp,
|
|
95
|
+
jti
|
|
96
|
+
};
|
|
97
|
+
const jwk = await Jose.createJwkRsa();
|
|
98
|
+
const jwt = await Jose.createSignedJwtToken(payload, jwk);
|
|
99
|
+
expect(jwt).toBeTruthy();
|
|
100
|
+
expect(jwt.split('.').length).toBe(3);
|
|
101
|
+
expect(isEqualJson(JSON.parse(decode(jwt.split('.')[1])), payload)).toBeTruthy();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('JoseOps - verifySignedJwtToken()', () => {
|
|
105
|
+
test('verifySignedJwtToken() 0: Method is implemented', async () => {
|
|
106
|
+
expect(Jose.verifySignedJwtToken).toBeDefined();
|
|
107
|
+
});
|
|
108
|
+
test('verifySignedJwtToken() 1: Verify signed JWT', async () => {
|
|
109
|
+
// The audience is the URL of the access token in the realm for client, and must include the port number
|
|
110
|
+
const u = parseUrl('https://openam-svcaccts-final.forgeblocks.com/am');
|
|
111
|
+
const aud = `${u.origin}:${u.port ? u.port : u.protocol === 'https' ? '443' : '80'}${u.pathname}/oauth2/access_token`;
|
|
112
|
+
|
|
113
|
+
// Cross platform way of setting JWT expiry time 3 minutes in the future, expressed as number of seconds since EPOCH
|
|
114
|
+
const exp = Math.floor(new Date().getTime() / 1000 + 180);
|
|
115
|
+
|
|
116
|
+
// A unique ID for the JWT which is required when requesting the openid scope
|
|
117
|
+
const jti = v4();
|
|
118
|
+
const iss = '0de8d0d8-e423-41e8-9034-73883af90917';
|
|
119
|
+
const sub = iss;
|
|
120
|
+
|
|
121
|
+
// Create the payload for our bearer token
|
|
122
|
+
const payload = {
|
|
123
|
+
iss,
|
|
124
|
+
sub,
|
|
125
|
+
aud,
|
|
126
|
+
exp,
|
|
127
|
+
jti
|
|
128
|
+
};
|
|
129
|
+
const jwk = await Jose.createJwkRsa();
|
|
130
|
+
const jwt = await Jose.createSignedJwtToken(payload, jwk);
|
|
131
|
+
expect(jwt).toBeTruthy();
|
|
132
|
+
const jwkPublic = await Jose.getJwkRsaPublic(jwk);
|
|
133
|
+
const verifyResult = await Jose.verifySignedJwtToken(jwt, jwkPublic);
|
|
134
|
+
expect(isEqualJson(JSON.parse(verifyResult.payload.toString()), payload)).toBeTruthy();
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=JoseOps.test.js.map
|