diff --git a/package-lock.json b/package-lock.json index 94c097b56..4d5042060 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9399,9 +9399,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/src/cli/admin/admin-add-autoid-static-user-mapping.ts b/src/cli/admin/admin-add-autoid-static-user-mapping.ts index ac3d327d1..ab6160b29 100644 --- a/src/cli/admin/admin-add-autoid-static-user-mapping.ts +++ b/src/cli/admin/admin-add-autoid-static-user-mapping.ts @@ -1,9 +1,13 @@ +import { frodo } from '@rockcarver/frodo-lib'; + import { addAutoIdStaticUserMapping } from '../../ops/AdminOps'; import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; + +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-create-oauth2-client-with-admin-privileges.ts b/src/cli/admin/admin-create-oauth2-client-with-admin-privileges.ts index cbc07b5b9..680122c69 100644 --- a/src/cli/admin/admin-create-oauth2-client-with-admin-privileges.ts +++ b/src/cli/admin/admin-create-oauth2-client-with-admin-privileges.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import Table from 'cli-table3'; import { Option } from 'commander'; import { v4 as uuidv4 } from 'uuid'; @@ -11,7 +11,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printError, printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-execute-rfc7523-authz-grant-flow.ts b/src/cli/admin/admin-execute-rfc7523-authz-grant-flow.ts index 2b0efbc03..08ef0d82a 100644 --- a/src/cli/admin/admin-execute-rfc7523-authz-grant-flow.ts +++ b/src/cli/admin/admin-execute-rfc7523-authz-grant-flow.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { JwkRsa } from '@rockcarver/frodo-lib/types/ops/JoseOps.js'; import { Option } from 'commander'; import fs from 'fs'; @@ -9,9 +10,23 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand.js'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { const program = new FrodoCommand( - 'frodo admin execute-rfc7523-authz-grant-flow' + 'frodo admin execute-rfc7523-authz-grant-flow', + [], + deploymentTypes ); program @@ -65,7 +80,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { printMessage(`Executing RFC7523 authorization grant flow...`); let clientId = uuidv4(); if (options.clientId) { diff --git a/src/cli/admin/admin-federation-export.ts b/src/cli/admin/admin-federation-export.ts index e0fdfec8b..e4c1554d9 100644 --- a/src/cli/admin/admin-federation-export.ts +++ b/src/cli/admin/admin-federation-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,7 +10,8 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-federation-import.ts b/src/cli/admin/admin-federation-import.ts index 2c92677ac..ee701a106 100644 --- a/src/cli/admin/admin-federation-import.ts +++ b/src/cli/admin/admin-federation-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,7 +11,8 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-federation-list.ts b/src/cli/admin/admin-federation-list.ts index 1b7e7f821..09397e301 100644 --- a/src/cli/admin/admin-federation-list.ts +++ b/src/cli/admin/admin-federation-list.ts @@ -1,9 +1,12 @@ +import { frodo } from '@rockcarver/frodo-lib'; + import { getTokens } from '../../ops/AuthenticateOps'; import { listAdminFederationProviders } from '../../ops/cloud/AdminFederationOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.ts b/src/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.ts index 349c7fc04..729b85663 100644 --- a/src/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.ts +++ b/src/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { JwkRsa } from '@rockcarver/frodo-lib/types/ops/JoseOps.js'; import { Option } from 'commander'; import fs from 'fs'; @@ -10,9 +10,22 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand.js'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( - 'frodo admin generate-rfc7523-authz-grant-artefacts' + 'frodo admin generate-rfc7523-authz-grant-artefacts', + [], + deploymentTypes ); program @@ -80,7 +93,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { printMessage( `Generating RFC7523 authorization grant artefacts in realm "${state.getRealm()}"...` ); diff --git a/src/cli/admin/admin-get-access-token.ts b/src/cli/admin/admin-get-access-token.ts index d62d87b78..299143089 100644 --- a/src/cli/admin/admin-get-access-token.ts +++ b/src/cli/admin/admin-get-access-token.ts @@ -5,9 +5,24 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; const { clientCredentialsGrant } = frodo.oauth2oidc.endpoint; export default function setup() { - const program = new FrodoCommand('frodo admin get-access-token'); + const program = new FrodoCommand( + 'frodo admin get-access-token', + [], + deploymentTypes + ); program .description('Get an access token using client credentials grant type.') @@ -37,7 +52,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { printMessage( `Getting an access token using client "${options.clientId}"...` ); diff --git a/src/cli/admin/admin-grant-oauth2-client-admin-privileges.ts b/src/cli/admin/admin-grant-oauth2-client-admin-privileges.ts index 31c9bc65a..097586ba5 100644 --- a/src/cli/admin/admin-grant-oauth2-client-admin-privileges.ts +++ b/src/cli/admin/admin-grant-oauth2-client-admin-privileges.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { grantOAuth2ClientAdminPrivileges } from '../../ops/AdminOps'; @@ -6,7 +6,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-hide-generic-extension-attributes.ts b/src/cli/admin/admin-hide-generic-extension-attributes.ts index e98f25b85..49e5a7029 100644 --- a/src/cli/admin/admin-hide-generic-extension-attributes.ts +++ b/src/cli/admin/admin-hide-generic-extension-attributes.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { hideGenericExtensionAttributes } from '../../ops/AdminOps'; @@ -6,7 +6,8 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-list-oauth2-clients-with-admin-privileges.ts b/src/cli/admin/admin-list-oauth2-clients-with-admin-privileges.ts index 9d259cc86..5c6d23e0f 100644 --- a/src/cli/admin/admin-list-oauth2-clients-with-admin-privileges.ts +++ b/src/cli/admin/admin-list-oauth2-clients-with-admin-privileges.ts @@ -1,11 +1,17 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { listOAuth2AdminClients } from '../../ops/AdminOps'; import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-list-oauth2-clients-with-custom-privileges.ts b/src/cli/admin/admin-list-oauth2-clients-with-custom-privileges.ts index a0fdb92bb..cf480ab91 100644 --- a/src/cli/admin/admin-list-oauth2-clients-with-custom-privileges.ts +++ b/src/cli/admin/admin-list-oauth2-clients-with-custom-privileges.ts @@ -1,11 +1,17 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { listOAuth2CustomClients } from '../../ops/AdminOps'; import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-list-static-user-mappings.ts b/src/cli/admin/admin-list-static-user-mappings.ts index a061346f9..147a35fb5 100644 --- a/src/cli/admin/admin-list-static-user-mappings.ts +++ b/src/cli/admin/admin-list-static-user-mappings.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { listNonOAuth2AdminStaticUserMappings } from '../../ops/AdminOps'; @@ -5,7 +6,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-remove-static-user-mapping.ts b/src/cli/admin/admin-remove-static-user-mapping.ts index b67da98a4..4b3b11367 100644 --- a/src/cli/admin/admin-remove-static-user-mapping.ts +++ b/src/cli/admin/admin-remove-static-user-mapping.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { removeStaticUserMapping } from '../../ops/AdminOps'; @@ -5,7 +6,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-repair-org-model.ts b/src/cli/admin/admin-repair-org-model.ts index b336823b1..e0aafa619 100644 --- a/src/cli/admin/admin-repair-org-model.ts +++ b/src/cli/admin/admin-repair-org-model.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { repairOrgModel } from '../../ops/AdminOps'; @@ -6,7 +6,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-revoke-oauth2-client-admin-privileges.ts b/src/cli/admin/admin-revoke-oauth2-client-admin-privileges.ts index d9ee95946..88cd95995 100644 --- a/src/cli/admin/admin-revoke-oauth2-client-admin-privileges.ts +++ b/src/cli/admin/admin-revoke-oauth2-client-admin-privileges.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { revokeOAuth2ClientAdminPrivileges } from '../../ops/AdminOps'; @@ -6,7 +6,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-show-generic-extension-attributes.ts b/src/cli/admin/admin-show-generic-extension-attributes.ts index ccaa03321..054266822 100644 --- a/src/cli/admin/admin-show-generic-extension-attributes.ts +++ b/src/cli/admin/admin-show-generic-extension-attributes.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { showGenericExtensionAttributes } from '../../ops/AdminOps'; @@ -6,7 +6,8 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/admin/admin-train-auto-access-model.ts b/src/cli/admin/admin-train-auto-access-model.ts index 07b538230..28183aa16 100644 --- a/src/cli/admin/admin-train-auto-access-model.ts +++ b/src/cli/admin/admin-train-auto-access-model.ts @@ -7,7 +7,8 @@ import { FrodoCommand } from '../FrodoCommand.js'; const { trainAA } = frodo.admin; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/agent/agent-delete.ts b/src/cli/agent/agent-delete.ts index 546a9ff27..014c79459 100644 --- a/src/cli/agent/agent-delete.ts +++ b/src/cli/agent/agent-delete.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { deleteAgent, deleteAgents } from '../../ops/AgentOps'; @@ -6,8 +6,19 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('frodo agent delete'); + const program = new FrodoCommand('frodo agent delete', [], deploymentTypes); program .description('Delete agents.') @@ -29,7 +40,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // delete by id if (options.agentId) { verboseMessage( diff --git a/src/cli/agent/agent-describe.ts b/src/cli/agent/agent-describe.ts index b1fdb7920..44cfaa670 100644 --- a/src/cli/agent/agent-describe.ts +++ b/src/cli/agent/agent-describe.ts @@ -8,7 +8,11 @@ const { CLASSIC_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; const globalDeploymentTypes = [CLASSIC_DEPLOYMENT_TYPE_KEY]; export default function setup() { - const program = new FrodoCommand('frodo agent describe'); + const program = new FrodoCommand( + 'frodo agent describe', + [], + globalDeploymentTypes + ); program .description('Describe agents.') diff --git a/src/cli/agent/agent-export.ts b/src/cli/agent/agent-export.ts index 05a4a152c..eb650cc75 100644 --- a/src/cli/agent/agent-export.ts +++ b/src/cli/agent/agent-export.ts @@ -14,7 +14,11 @@ const { CLASSIC_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; const globalDeploymentTypes = [CLASSIC_DEPLOYMENT_TYPE_KEY]; export default function setup() { - const program = new FrodoCommand('frodo agent export'); + const program = new FrodoCommand( + 'frodo agent export', + [], + globalDeploymentTypes + ); program .description('Export agents.') diff --git a/src/cli/agent/agent-gateway-delete.ts b/src/cli/agent/agent-gateway-delete.ts index c5b4d1e61..01c2a1751 100644 --- a/src/cli/agent/agent-gateway-delete.ts +++ b/src/cli/agent/agent-gateway-delete.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { @@ -9,8 +9,24 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent gateway delete'); + const program = new FrodoCommand( + 'frodo agent gateway delete', + [], + deploymentTypes + ); program .description('Delete identity gateway agents.') @@ -37,7 +53,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // delete by id if (options.agentId) { verboseMessage( diff --git a/src/cli/agent/agent-gateway-describe.ts b/src/cli/agent/agent-gateway-describe.ts index 8dba69bdc..983dd5545 100644 --- a/src/cli/agent/agent-gateway-describe.ts +++ b/src/cli/agent/agent-gateway-describe.ts @@ -1,10 +1,27 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent gateway describe'); + const program = new FrodoCommand( + 'frodo agent gateway describe', + [], + deploymentTypes + ); program .description('Describe gateway agents.') @@ -20,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // code goes here } else { process.exitCode = 1; diff --git a/src/cli/agent/agent-gateway-export.ts b/src/cli/agent/agent-gateway-export.ts index 848408039..13ac84672 100644 --- a/src/cli/agent/agent-gateway-export.ts +++ b/src/cli/agent/agent-gateway-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { @@ -9,8 +10,23 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('frodo agent gateway export'); + const program = new FrodoCommand( + 'frodo agent gateway export', + [], + deploymentTypes + ); program .description('Export gateway agents.') @@ -50,7 +66,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // export if (options.agentId) { verboseMessage('Exporting identity gateway agent...'); diff --git a/src/cli/agent/agent-gateway-import.ts b/src/cli/agent/agent-gateway-import.ts index 98e68907b..815471863 100644 --- a/src/cli/agent/agent-gateway-import.ts +++ b/src/cli/agent/agent-gateway-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { @@ -10,8 +11,23 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('frodo agent gateway import'); + const program = new FrodoCommand( + 'frodo agent gateway import', + [], + deploymentTypes + ); program .description('Import gateway agents.') @@ -45,7 +61,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // import if (options.agentId) { verboseMessage( diff --git a/src/cli/agent/agent-gateway-list.ts b/src/cli/agent/agent-gateway-list.ts index 82e405aa2..1d5386729 100644 --- a/src/cli/agent/agent-gateway-list.ts +++ b/src/cli/agent/agent-gateway-list.ts @@ -1,11 +1,27 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { listIdentityGatewayAgents } from '../../ops/AgentOps.js'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('frodo agent gateway list'); + const program = new FrodoCommand( + 'frodo agent gateway list', + [], + deploymentTypes + ); program .description('List gateway agents.') @@ -23,7 +39,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { const outcome = await listIdentityGatewayAgents(options.long); if (!outcome) process.exitCode = 1; } else { diff --git a/src/cli/agent/agent-import.ts b/src/cli/agent/agent-import.ts index e3985dbf7..ef3a267ac 100644 --- a/src/cli/agent/agent-import.ts +++ b/src/cli/agent/agent-import.ts @@ -15,7 +15,11 @@ const { CLASSIC_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; const globalDeploymentTypes = [CLASSIC_DEPLOYMENT_TYPE_KEY]; export default function setup() { - const program = new FrodoCommand('frodo agent import'); + const program = new FrodoCommand( + 'frodo agent import', + [], + globalDeploymentTypes + ); program .description('Import agents.') diff --git a/src/cli/agent/agent-java-delete.ts b/src/cli/agent/agent-java-delete.ts index a6e209adf..db86f3f7f 100644 --- a/src/cli/agent/agent-java-delete.ts +++ b/src/cli/agent/agent-java-delete.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { deleteJavaAgent, deleteJavaAgents } from '../../ops/AgentOps'; @@ -6,8 +6,24 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent java delete'); + const program = new FrodoCommand( + 'frodo agent java delete', + [], + deploymentTypes + ); program .description('Delete java agents.') @@ -31,7 +47,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // delete by id if (options.agentId) { verboseMessage( diff --git a/src/cli/agent/agent-java-describe.ts b/src/cli/agent/agent-java-describe.ts index 4305f2366..cbcdffec0 100644 --- a/src/cli/agent/agent-java-describe.ts +++ b/src/cli/agent/agent-java-describe.ts @@ -1,10 +1,27 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent java describe'); + const program = new FrodoCommand( + 'frodo agent java describe', + [], + deploymentTypes + ); program .description('Describe java agents.') @@ -20,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // code goes here } else { process.exitCode = 1; diff --git a/src/cli/agent/agent-java-export.ts b/src/cli/agent/agent-java-export.ts index b6d452092..81fd5c56e 100644 --- a/src/cli/agent/agent-java-export.ts +++ b/src/cli/agent/agent-java-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { @@ -9,8 +10,24 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent java export'); + const program = new FrodoCommand( + 'frodo agent java export', + [], + deploymentTypes + ); program .description('Export java agents.') @@ -50,7 +67,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // export if (options.agentId) { verboseMessage('Exporting java agent...'); diff --git a/src/cli/agent/agent-java-import.ts b/src/cli/agent/agent-java-import.ts index 91aa46418..55f0a1f96 100644 --- a/src/cli/agent/agent-java-import.ts +++ b/src/cli/agent/agent-java-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { @@ -10,8 +11,24 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent java import'); + const program = new FrodoCommand( + 'frodo agent java import', + [], + deploymentTypes + ); program .description('Import java agents.') @@ -45,7 +62,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // import if (options.agentId) { verboseMessage( diff --git a/src/cli/agent/agent-java-list.ts b/src/cli/agent/agent-java-list.ts index 04ec5d7aa..a96d7cd83 100644 --- a/src/cli/agent/agent-java-list.ts +++ b/src/cli/agent/agent-java-list.ts @@ -1,11 +1,28 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { listJavaAgents } from '../../ops/AgentOps.js'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent java list'); + const program = new FrodoCommand( + 'frodo agent java list', + [], + deploymentTypes + ); program .description('List java agents.') @@ -23,7 +40,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { const outcome = await listJavaAgents(options.long); if (!outcome) process.exitCode = 1; } else { diff --git a/src/cli/agent/agent-list.ts b/src/cli/agent/agent-list.ts index a7e2ab5bd..20a92284f 100644 --- a/src/cli/agent/agent-list.ts +++ b/src/cli/agent/agent-list.ts @@ -9,7 +9,11 @@ const { CLASSIC_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; const globalDeploymentTypes = [CLASSIC_DEPLOYMENT_TYPE_KEY]; export default function setup() { - const program = new FrodoCommand('frodo agent list'); + const program = new FrodoCommand( + 'frodo agent list', + [], + globalDeploymentTypes + ); program .description('List agents.') diff --git a/src/cli/agent/agent-web-delete.ts b/src/cli/agent/agent-web-delete.ts index fecf3f8a8..8a1b61dfe 100644 --- a/src/cli/agent/agent-web-delete.ts +++ b/src/cli/agent/agent-web-delete.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { deleteWebAgent, deleteWebAgents } from '../../ops/AgentOps'; @@ -6,8 +6,24 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent web delete'); + const program = new FrodoCommand( + 'frodo agent web delete', + [], + deploymentTypes + ); program .description('Delete web agents.') @@ -31,7 +47,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // delete by id if (options.agentId) { verboseMessage( diff --git a/src/cli/agent/agent-web-describe.ts b/src/cli/agent/agent-web-describe.ts index 0e99eb62a..c65863298 100644 --- a/src/cli/agent/agent-web-describe.ts +++ b/src/cli/agent/agent-web-describe.ts @@ -1,10 +1,27 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent web describe'); + const program = new FrodoCommand( + 'frodo agent web describe', + [], + deploymentTypes + ); program .description('Describe web agents.') @@ -20,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // code goes here } else { process.exitCode = 1; diff --git a/src/cli/agent/agent-web-export.ts b/src/cli/agent/agent-web-export.ts index 6c179300d..aff0704ca 100644 --- a/src/cli/agent/agent-web-export.ts +++ b/src/cli/agent/agent-web-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { @@ -9,8 +10,24 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent web export'); + const program = new FrodoCommand( + 'frodo agent web export', + [], + deploymentTypes + ); program .description('Export web agents.') @@ -50,7 +67,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // export if (options.agentId) { verboseMessage('Exporting web agent...'); diff --git a/src/cli/agent/agent-web-import.ts b/src/cli/agent/agent-web-import.ts index e24885b63..1eb417fa5 100644 --- a/src/cli/agent/agent-web-import.ts +++ b/src/cli/agent/agent-web-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { @@ -10,8 +11,24 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent web import'); + const program = new FrodoCommand( + 'frodo agent web import', + [], + deploymentTypes + ); program .description('Import web agents.') @@ -45,7 +62,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // import if (options.agentId) { verboseMessage( diff --git a/src/cli/agent/agent-web-list.ts b/src/cli/agent/agent-web-list.ts index d23fb2f73..7cd21e870 100644 --- a/src/cli/agent/agent-web-list.ts +++ b/src/cli/agent/agent-web-list.ts @@ -1,11 +1,24 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { listWebAgents } from '../../ops/AgentOps.js'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo agent web list'); + const program = new FrodoCommand('frodo agent web list', [], deploymentTypes); program .description('List web agents.') @@ -23,7 +36,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { const outcome = await listWebAgents(options.long); if (!outcome) process.exitCode = 1; } else { diff --git a/src/cli/app/app-delete.ts b/src/cli/app/app-delete.ts index 2e359a098..88679f60e 100644 --- a/src/cli/app/app-delete.ts +++ b/src/cli/app/app-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; @@ -9,7 +10,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo app delete', [], deploymentTypes); diff --git a/src/cli/app/app-describe.ts b/src/cli/app/app-describe.ts index 06e5d3cfc..2a6f1e75c 100644 --- a/src/cli/app/app-describe.ts +++ b/src/cli/app/app-describe.ts @@ -1,10 +1,17 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo app describe', [], deploymentTypes); diff --git a/src/cli/app/app-export.ts b/src/cli/app/app-export.ts index b20757f52..c00468e91 100644 --- a/src/cli/app/app-export.ts +++ b/src/cli/app/app-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; @@ -10,7 +11,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo app export', [], deploymentTypes); diff --git a/src/cli/app/app-import.ts b/src/cli/app/app-import.ts index ace0c5202..d459a4ff6 100644 --- a/src/cli/app/app-import.ts +++ b/src/cli/app/app-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; @@ -11,7 +12,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo app import', [], deploymentTypes); diff --git a/src/cli/app/app-list.ts b/src/cli/app/app-list.ts index 16e8f7d08..b8835b4cc 100644 --- a/src/cli/app/app-list.ts +++ b/src/cli/app/app-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; @@ -6,7 +7,13 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo app list', [], deploymentTypes); diff --git a/src/cli/authn/authn-describe.ts b/src/cli/authn/authn-describe.ts index 4f3c6b970..c01abb1af 100644 --- a/src/cli/authn/authn-describe.ts +++ b/src/cli/authn/authn-describe.ts @@ -10,7 +10,11 @@ const { CLASSIC_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; const globalDeploymentTypes = [CLASSIC_DEPLOYMENT_TYPE_KEY]; export default function setup() { - const program = new FrodoCommand('frodo authn describe'); + const program = new FrodoCommand( + 'frodo authn describe', + [], + globalDeploymentTypes + ); program .description('Describe authentication settings.') diff --git a/src/cli/authn/authn-export.ts b/src/cli/authn/authn-export.ts index 3d5da2643..8a000a3d5 100644 --- a/src/cli/authn/authn-export.ts +++ b/src/cli/authn/authn-export.ts @@ -10,7 +10,11 @@ const { CLASSIC_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; const globalDeploymentTypes = [CLASSIC_DEPLOYMENT_TYPE_KEY]; export default function setup() { - const program = new FrodoCommand('frodo authn export'); + const program = new FrodoCommand( + 'frodo authn export', + [], + globalDeploymentTypes + ); program .description('Export authentication settings.') @@ -39,7 +43,7 @@ export default function setup() { await getTokens( false, true, - options.global ? globalDeploymentTypes : undefined + options.global ?globalDeploymentTypes : undefined ) ) { verboseMessage('Exporting authentication settings to file...'); diff --git a/src/cli/authn/authn-import.ts b/src/cli/authn/authn-import.ts index 2461ead3a..66a435493 100644 --- a/src/cli/authn/authn-import.ts +++ b/src/cli/authn/authn-import.ts @@ -10,7 +10,11 @@ const { CLASSIC_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; const globalDeploymentTypes = [CLASSIC_DEPLOYMENT_TYPE_KEY]; export default function setup() { - const program = new FrodoCommand('frodo authn import'); + const program = new FrodoCommand( + 'frodo authn import', + [], + globalDeploymentTypes + ); program .description('Import authentication settings.') diff --git a/src/cli/authz/authz-policy-delete.ts b/src/cli/authz/authz-policy-delete.ts index 7e29dd2ce..6c0d18a9d 100644 --- a/src/cli/authz/authz-policy-delete.ts +++ b/src/cli/authz/authz-policy-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,8 +10,24 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz policy delete'); + const program = new FrodoCommand( + 'frodo authz policy delete', + [], + deploymentTypes + ); program .description('Delete authorization policies.') @@ -41,13 +58,20 @@ export default function setup() { command ); // delete by id - if (options.policyId && (await getTokens())) { + if ( + options.policyId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Deleting authorization policy...'); const outcome = await deletePolicyById(options.policyId); if (!outcome) process.exitCode = 1; } // --all -a by policy set - else if (options.setId && options.all && (await getTokens())) { + else if ( + options.setId && + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Deleting all authorization policies in policy set ${options.setId}...` ); @@ -55,7 +79,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Deleting all authorization policies...'); const outcome = await deletePolicies(); if (!outcome) process.exitCode = 1; diff --git a/src/cli/authz/authz-policy-describe.ts b/src/cli/authz/authz-policy-describe.ts index 904b5eb61..8a3824aa2 100644 --- a/src/cli/authz/authz-policy-describe.ts +++ b/src/cli/authz/authz-policy-describe.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,24 @@ import { describePolicy } from '../../ops/PolicyOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz policy describe'); + const program = new FrodoCommand( + 'frodo authz policy describe', + [], + deploymentTypes + ); program .description('Describe authorization policies.') @@ -28,7 +45,10 @@ export default function setup() { options, command ); - if (options.policyId && (await getTokens())) { + if ( + options.policyId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Describing authorization policy ${options.policyId}...` ); diff --git a/src/cli/authz/authz-policy-export.ts b/src/cli/authz/authz-policy-export.ts index 948a7f20c..4cc808cd0 100644 --- a/src/cli/authz/authz-policy-export.ts +++ b/src/cli/authz/authz-policy-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -11,8 +12,24 @@ import { import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz policy export'); + const program = new FrodoCommand( + 'frodo authz policy export', + [], + deploymentTypes + ); program .description('Export authorization policies.') @@ -68,7 +85,10 @@ export default function setup() { command ); // export - if (options.policyId && (await getTokens())) { + if ( + options.policyId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting authorization policy to file...'); const outcome = await exportPolicyToFile( options.policyId, @@ -83,7 +103,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a/--all by policy set - else if (options.setId && options.all && (await getTokens())) { + else if ( + options.setId && + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Exporting all authorization policies in policy set ${options.setId} to file...` ); @@ -100,7 +124,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a/--all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all authorization policies to file...'); const outcome = await exportPoliciesToFile( options.file, @@ -114,7 +141,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A/--all-separate by policy set - else if (options.setId && options.allSeparate && (await getTokens())) { + else if ( + options.setId && + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Exporting all authorization policies in policy set ${options.setId} to separate files...` ); @@ -130,7 +161,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A/--all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Exporting all authorization policies to separate files...' ); diff --git a/src/cli/authz/authz-policy-import.ts b/src/cli/authz/authz-policy-import.ts index f1464a33e..797377a25 100644 --- a/src/cli/authz/authz-policy-import.ts +++ b/src/cli/authz/authz-policy-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +11,24 @@ import { import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz policy import'); + const program = new FrodoCommand( + 'frodo authz policy import', + [], + deploymentTypes + ); program .description('Import authorization policies.') @@ -61,7 +78,10 @@ export default function setup() { command ); // import - if (options.policyId && (await getTokens())) { + if ( + options.policyId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Importing authorization policy from file...'); const outcome = await importPolicyFromFile( options.policyId, @@ -75,7 +95,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a/--all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Importing all authorization policies from file...'); const outcome = await importPoliciesFromFile(options.file, { deps: options.deps, @@ -85,7 +108,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A/--all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all authorization policies from separate files...' ); @@ -97,7 +123,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import first policy set from file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing first authorization policy from file "${options.file}"...` ); diff --git a/src/cli/authz/authz-policy-list.ts b/src/cli/authz/authz-policy-list.ts index 3ab7b6cde..cff3351d0 100644 --- a/src/cli/authz/authz-policy-list.ts +++ b/src/cli/authz/authz-policy-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,24 @@ import { listPolicies, listPoliciesByPolicySet } from '../../ops/PolicyOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz policy list'); + const program = new FrodoCommand( + 'frodo authz policy list', + [], + deploymentTypes + ); program .description('List authorization policies.') @@ -26,7 +43,7 @@ export default function setup() { command ); // by policy set - if (options.setId && (await getTokens())) { + if (options.setId && (await getTokens(false, true, deploymentTypes))) { verboseMessage( `Listing authorization policies in policy set ${options.setId}...` ); @@ -37,7 +54,7 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // all policies - else if (await getTokens()) { + else if (await getTokens(false, true, deploymentTypes)) { verboseMessage(`Listing authorization policies...`); const outcome = await listPolicies(options.long); if (!outcome) process.exitCode = 1; diff --git a/src/cli/authz/authz-set-delete.ts b/src/cli/authz/authz-set-delete.ts index 2aa2112ed..5af9356f5 100644 --- a/src/cli/authz/authz-set-delete.ts +++ b/src/cli/authz/authz-set-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,24 @@ import { deletePolicySetById, deletePolicySets } from '../../ops/PolicySetOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz set delete'); + const program = new FrodoCommand( + 'frodo authz set delete', + [], + deploymentTypes + ); program .description('Delete authorization policy sets.') @@ -29,13 +46,16 @@ export default function setup() { command ); // delete by id - if (options.setId && (await getTokens())) { + if (options.setId && (await getTokens(false, true, deploymentTypes))) { verboseMessage('Deleting authorization policy set...'); const outcome = await deletePolicySetById(options.setId); if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Deleting all authorization policy sets...'); const outcome = await deletePolicySets(); if (!outcome) process.exitCode = 1; diff --git a/src/cli/authz/authz-set-describe.ts b/src/cli/authz/authz-set-describe.ts index 611ec0711..50a0f2bd4 100644 --- a/src/cli/authz/authz-set-describe.ts +++ b/src/cli/authz/authz-set-describe.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,24 @@ import { describePolicySet } from '../../ops/PolicySetOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz set describe'); + const program = new FrodoCommand( + 'frodo authz set describe', + [], + deploymentTypes + ); program .description('Describe authorization policy sets.') @@ -28,7 +45,7 @@ export default function setup() { options, command ); - if (options.setId && (await getTokens())) { + if (options.setId && (await getTokens(false, true, deploymentTypes))) { verboseMessage( `Describing authorization policy set ${options.setId}...` ); diff --git a/src/cli/authz/authz-set-export.ts b/src/cli/authz/authz-set-export.ts index 969a545e0..17489d21c 100644 --- a/src/cli/authz/authz-set-export.ts +++ b/src/cli/authz/authz-set-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,8 +10,24 @@ import { import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz set export'); + const program = new FrodoCommand( + 'frodo authz set export', + [], + deploymentTypes + ); program .description('Export authorization policy sets.') @@ -60,7 +77,7 @@ export default function setup() { command ); // export - if (options.setId && (await getTokens())) { + if (options.setId && (await getTokens(false, true, deploymentTypes))) { verboseMessage('Exporting authorization policy set to file...'); const outcome = await exportPolicySetToFile( options.setId, @@ -75,7 +92,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a/--all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all authorization policy sets to file...'); const outcome = await exportPolicySetsToFile( options.file, @@ -89,7 +109,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A/--all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Exporting all authorization policy sets to separate files...' ); diff --git a/src/cli/authz/authz-set-import.ts b/src/cli/authz/authz-set-import.ts index 1c1d7ed0f..f24a29c3b 100644 --- a/src/cli/authz/authz-set-import.ts +++ b/src/cli/authz/authz-set-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +11,24 @@ import { import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz set import'); + const program = new FrodoCommand( + 'frodo authz set import', + [], + deploymentTypes + ); program .description('Import authorization policy sets.') @@ -55,7 +72,7 @@ export default function setup() { command ); // import - if (options.setId && (await getTokens())) { + if (options.setId && (await getTokens(false, true, deploymentTypes))) { verboseMessage('Importing authorization policy set from file...'); const outcome = await importPolicySetFromFile( options.setId, @@ -68,7 +85,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a/--all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all authorization policy sets from file...' ); @@ -79,7 +99,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A/--all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all authorization policy sets from separate files...' ); @@ -90,7 +113,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import first policy set from file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing first authorization policy set from file "${options.file}"...` ); diff --git a/src/cli/authz/authz-set-list.ts b/src/cli/authz/authz-set-list.ts index 891207b46..be24da6d8 100644 --- a/src/cli/authz/authz-set-list.ts +++ b/src/cli/authz/authz-set-list.ts @@ -1,10 +1,24 @@ +import { frodo } from '@rockcarver/frodo-lib'; + import { getTokens } from '../../ops/AuthenticateOps'; import { listPolicySets } from '../../ops/PolicySetOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz set list'); + const program = new FrodoCommand('frodo authz set list', [], deploymentTypes); program.description('List authorization policy sets.').action( // implement command logic inside action handler @@ -17,7 +31,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage('Listing authorization policy sets...'); const outcome = await listPolicySets(); if (!outcome) process.exitCode = 1; diff --git a/src/cli/authz/authz-type-delete.ts b/src/cli/authz/authz-type-delete.ts index bb6bcc506..6143b10d0 100644 --- a/src/cli/authz/authz-type-delete.ts +++ b/src/cli/authz/authz-type-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,8 +10,24 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz type delete'); + const program = new FrodoCommand( + 'frodo authz type delete', + [], + deploymentTypes + ); program .description('Delete authorization resource types.') @@ -44,19 +61,25 @@ export default function setup() { command ); // delete by uuid - if (options.typeId && (await getTokens())) { + if (options.typeId && (await getTokens(false, true, deploymentTypes))) { verboseMessage('Deleting authorization resource type...'); const outcome = await deleteResourceTypeById(options.typeId); if (!outcome) process.exitCode = 1; } // delete by name - else if (options.typeName && (await getTokens())) { + else if ( + options.typeName && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Deleting authorization resource type...'); const outcome = await deleteResourceTypeUsingName(options.typeName); if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Deleting all authorization resource types...'); const outcome = await deleteResourceTypes(); if (!outcome) process.exitCode = 1; diff --git a/src/cli/authz/authz-type-describe.ts b/src/cli/authz/authz-type-describe.ts index a9414a1f0..7b8c8a79a 100644 --- a/src/cli/authz/authz-type-describe.ts +++ b/src/cli/authz/authz-type-describe.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -8,8 +9,24 @@ import { import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz type describe'); + const program = new FrodoCommand( + 'frodo authz type describe', + [], + deploymentTypes + ); program .description('Describe authorization resource types.') @@ -27,14 +44,17 @@ export default function setup() { options, command ); - if (options.typeId && (await getTokens())) { + if (options.typeId && (await getTokens(false, true, deploymentTypes))) { verboseMessage(`Describing authorization resource type by uuid...`); const outcome = await describeResourceType( options.typeId, options.json ); if (!outcome) process.exitCode = 1; - } else if (options.typeName && (await getTokens())) { + } else if ( + options.typeName && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage(`Describing authorization resource type by name...`); const outcome = await describeResourceTypeByName( options.typeName, diff --git a/src/cli/authz/authz-type-export.ts b/src/cli/authz/authz-type-export.ts index 1d3842e8f..cd35abfe0 100644 --- a/src/cli/authz/authz-type-export.ts +++ b/src/cli/authz/authz-type-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +11,24 @@ import { import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz type export'); + const program = new FrodoCommand( + 'frodo authz type export', + [], + deploymentTypes + ); program .description('Export authorization resource types.') @@ -58,7 +75,7 @@ export default function setup() { command ); // export by uuid - if (options.typeId && (await getTokens())) { + if (options.typeId && (await getTokens(false, true, deploymentTypes))) { verboseMessage('Exporting authorization resource type to file...'); const outcome = await exportResourceTypeToFile( options.typeId, @@ -68,7 +85,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // export by name - else if (options.typeName && (await getTokens())) { + else if ( + options.typeName && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting authorization resource type to file...'); const outcome = await exportResourceTypeByNameToFile( options.typeName, @@ -78,7 +98,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a/--all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Exporting all authorization resource types to file...' ); @@ -89,7 +112,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A/--all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Exporting all authorization resource types to separate files...' ); diff --git a/src/cli/authz/authz-type-import.ts b/src/cli/authz/authz-type-import.ts index 0d02565c7..16675c636 100644 --- a/src/cli/authz/authz-type-import.ts +++ b/src/cli/authz/authz-type-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -11,8 +12,24 @@ import { import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz type import'); + const program = new FrodoCommand( + 'frodo authz type import', + [], + deploymentTypes + ); program .description('Import authorization resource types.') @@ -53,7 +70,7 @@ export default function setup() { command ); // import by uuid - if (options.typeId && (await getTokens())) { + if (options.typeId && (await getTokens(false, true, deploymentTypes))) { verboseMessage( 'Importing authorization resource type by uuid from file...' ); @@ -64,7 +81,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import by name - else if (options.typeName && (await getTokens())) { + else if ( + options.typeName && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing authorization resource type by name from file...' ); @@ -75,7 +95,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a/--all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all authorization resource types from file...' ); @@ -83,7 +106,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A/--all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all authorization resource types from separate files...' ); @@ -91,7 +117,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import first - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing first authorization resource type from file "${options.file}"...` ); diff --git a/src/cli/authz/authz-type-list.ts b/src/cli/authz/authz-type-list.ts index 6d065af36..45498dcda 100644 --- a/src/cli/authz/authz-type-list.ts +++ b/src/cli/authz/authz-type-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,24 @@ import { listResourceTypes } from '../../ops/ResourceTypeOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo authz type list'); + const program = new FrodoCommand( + 'frodo authz type list', + [], + deploymentTypes + ); program .description('List authorization resource types.') @@ -24,7 +41,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage('Listing resource types...'); const outcome = await listResourceTypes(options.long); if (!outcome) process.exitCode = 1; diff --git a/src/cli/config/config-delete.ts b/src/cli/config/config-delete.ts index 2664548a9..fe8453c6b 100644 --- a/src/cli/config/config-delete.ts +++ b/src/cli/config/config-delete.ts @@ -1,10 +1,25 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo config delete'); + const program = new FrodoCommand('frodo config delete', [], deploymentTypes); program .description('Delete full cloud configuration.') @@ -37,7 +52,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // code goes here } else { process.exitCode = 1; diff --git a/src/cli/config/config-describe.ts b/src/cli/config/config-describe.ts index c018e98db..9dbc0f2e8 100644 --- a/src/cli/config/config-describe.ts +++ b/src/cli/config/config-describe.ts @@ -1,10 +1,29 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo config describe'); + const program = new FrodoCommand( + 'frodo config describe', + [], + deploymentTypes + ); program .description('Describe full cloud configuration.') @@ -20,7 +39,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // code goes here } else { process.exitCode = 1; diff --git a/src/cli/config/config-export.ts b/src/cli/config/config-export.ts index 4b9056ecf..f99a88f68 100644 --- a/src/cli/config/config-export.ts +++ b/src/cli/config/config-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; @@ -10,8 +10,22 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo config export'); + const program = new FrodoCommand('frodo config export', [], deploymentTypes); program .description( @@ -148,7 +162,7 @@ export default function setup() { command ); // --all -a - if (options.all && (await getTokens())) { + if (options.all && (await getTokens(false, true, deploymentTypes))) { verboseMessage('Exporting everything to a single file...'); const outcome = await exportEverythingToFile( options.file, @@ -177,7 +191,10 @@ export default function setup() { process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting everything to separate files...'); const outcome = await exportEverythingToFiles( options.extract, diff --git a/src/cli/config/config-import.ts b/src/cli/config/config-import.ts index a466a39ee..ac1c589f4 100644 --- a/src/cli/config/config-import.ts +++ b/src/cli/config/config-import.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; @@ -11,8 +11,22 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo config import'); + const program = new FrodoCommand('frodo config import', [], deploymentTypes); program .description('Import full cloud configuration.') @@ -113,7 +127,10 @@ export default function setup() { process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting everything from a single file...'); const outcome = await importEverythingFromFile(options.file, { reUuidJourneys: options.reUuidJourneys, @@ -135,7 +152,10 @@ export default function setup() { process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Importing everything from separate files...'); const outcome = await importEverythingFromFiles({ reUuidJourneys: options.reUuidJourneys, @@ -148,7 +168,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // Import entity from file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Importing config entity from file...'); const outcome = await importEntityfromFile( options.file, diff --git a/src/cli/config/config-list.ts b/src/cli/config/config-list.ts index 789cadb57..00d08ff00 100644 --- a/src/cli/config/config-list.ts +++ b/src/cli/config/config-list.ts @@ -1,10 +1,25 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo config list'); + const program = new FrodoCommand('frodo config list', [], deploymentTypes); program .description('List full cloud configuration.') @@ -22,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // code goes here } else { process.exitCode = 1; diff --git a/src/cli/email/email-template-export.ts b/src/cli/email/email-template-export.ts index 06cc375dc..82289b099 100644 --- a/src/cli/email/email-template-export.ts +++ b/src/cli/email/email-template-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,7 +10,17 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/email/email-template-import.ts b/src/cli/email/email-template-import.ts index 5c5eebcff..4f85249a9 100644 --- a/src/cli/email/email-template-import.ts +++ b/src/cli/email/email-template-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,7 +11,17 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/email/email-template-list.ts b/src/cli/email/email-template-list.ts index fa60fbba7..091161a7b 100644 --- a/src/cli/email/email-template-list.ts +++ b/src/cli/email/email-template-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,17 @@ import { listEmailTemplates } from '../../ops/EmailTemplateOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-apply.ts b/src/cli/esv/esv-apply.ts index 074c41edb..6bc16cc1e 100644 --- a/src/cli/esv/esv-apply.ts +++ b/src/cli/esv/esv-apply.ts @@ -9,7 +9,8 @@ import { FrodoCommand } from '../FrodoCommand'; const { checkForUpdates, applyUpdates } = frodo.cloud.startup; const { resolveUserName } = frodo.idm.managed; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-create.ts b/src/cli/esv/esv-secret-create.ts index 9fd80bc7b..44fd6ee12 100644 --- a/src/cli/esv/esv-secret-create.ts +++ b/src/cli/esv/esv-secret-create.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { createSecret, createSecretFromFile } from '../../ops/cloud/SecretsOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-delete.ts b/src/cli/esv/esv-secret-delete.ts index ff91853c1..7d6375642 100644 --- a/src/cli/esv/esv-secret-delete.ts +++ b/src/cli/esv/esv-secret-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { deleteSecret, deleteSecrets } from '../../ops/cloud/SecretsOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-describe.ts b/src/cli/esv/esv-secret-describe.ts index 70c948ed0..3f56aab66 100644 --- a/src/cli/esv/esv-secret-describe.ts +++ b/src/cli/esv/esv-secret-describe.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { describeSecret } from '../../ops/cloud/SecretsOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-export.ts b/src/cli/esv/esv-secret-export.ts index 2fe8f6143..f1e37f84f 100644 --- a/src/cli/esv/esv-secret-export.ts +++ b/src/cli/esv/esv-secret-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; @@ -11,7 +11,8 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-import.ts b/src/cli/esv/esv-secret-import.ts index c5073bf86..b87e521f0 100644 --- a/src/cli/esv/esv-secret-import.ts +++ b/src/cli/esv/esv-secret-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import * as s from '../../help/SampleData'; @@ -10,7 +11,8 @@ import { import { printMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-list.ts b/src/cli/esv/esv-secret-list.ts index dca5dbd5f..394540601 100644 --- a/src/cli/esv/esv-secret-list.ts +++ b/src/cli/esv/esv-secret-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { listSecrets } from '../../ops/cloud/SecretsOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-set.ts b/src/cli/esv/esv-secret-set.ts index 612fb88f9..f1f65a4a5 100644 --- a/src/cli/esv/esv-secret-set.ts +++ b/src/cli/esv/esv-secret-set.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { setSecretDescription } from '../../ops/cloud/SecretsOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-version-activate.ts b/src/cli/esv/esv-secret-version-activate.ts index e11a8e989..a5f288b8f 100644 --- a/src/cli/esv/esv-secret-version-activate.ts +++ b/src/cli/esv/esv-secret-version-activate.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { activateVersionOfSecret } from '../../ops/cloud/SecretsOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-version-create.ts b/src/cli/esv/esv-secret-version-create.ts index 98fe199ba..3fe759e7d 100644 --- a/src/cli/esv/esv-secret-version-create.ts +++ b/src/cli/esv/esv-secret-version-create.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -8,7 +9,8 @@ import { import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-version-deactivate.ts b/src/cli/esv/esv-secret-version-deactivate.ts index 743ddec0a..0d5dc8e71 100644 --- a/src/cli/esv/esv-secret-version-deactivate.ts +++ b/src/cli/esv/esv-secret-version-deactivate.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { deactivateVersionOfSecret } from '../../ops/cloud/SecretsOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-version-delete.ts b/src/cli/esv/esv-secret-version-delete.ts index bcc6ad943..5a39fe878 100644 --- a/src/cli/esv/esv-secret-version-delete.ts +++ b/src/cli/esv/esv-secret-version-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { deleteVersionOfSecret } from '../../ops/cloud/SecretsOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-secret-version-list.ts b/src/cli/esv/esv-secret-version-list.ts index cde3659a2..024184139 100644 --- a/src/cli/esv/esv-secret-version-list.ts +++ b/src/cli/esv/esv-secret-version-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { listSecretVersions } from '../../ops/cloud/SecretsOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-variable-create.ts b/src/cli/esv/esv-variable-create.ts index f3b1fe838..2bc8e3fe7 100644 --- a/src/cli/esv/esv-variable-create.ts +++ b/src/cli/esv/esv-variable-create.ts @@ -1,10 +1,13 @@ +import { frodo } from '@rockcarver/frodo-lib'; + import * as s from '../../help/SampleData'; import { getTokens } from '../../ops/AuthenticateOps'; import { createVariable } from '../../ops/cloud/VariablesOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-variable-delete.ts b/src/cli/esv/esv-variable-delete.ts index c586f7487..74fdc3e53 100644 --- a/src/cli/esv/esv-variable-delete.ts +++ b/src/cli/esv/esv-variable-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -8,7 +9,8 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-variable-describe.ts b/src/cli/esv/esv-variable-describe.ts index b05da3477..c04cc04ed 100644 --- a/src/cli/esv/esv-variable-describe.ts +++ b/src/cli/esv/esv-variable-describe.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { describeVariable } from '../../ops/cloud/VariablesOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-variable-export.ts b/src/cli/esv/esv-variable-export.ts index 4acf1e7c1..3a5a01900 100644 --- a/src/cli/esv/esv-variable-export.ts +++ b/src/cli/esv/esv-variable-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,7 +10,8 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-variable-import.ts b/src/cli/esv/esv-variable-import.ts index e2f27af0f..1b138db9e 100644 --- a/src/cli/esv/esv-variable-import.ts +++ b/src/cli/esv/esv-variable-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,7 +10,8 @@ import { import { printMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-variable-list.ts b/src/cli/esv/esv-variable-list.ts index 78756fad0..90850312c 100644 --- a/src/cli/esv/esv-variable-list.ts +++ b/src/cli/esv/esv-variable-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { listVariables } from '../../ops/cloud/VariablesOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/esv/esv-variable-set.ts b/src/cli/esv/esv-variable-set.ts index 4372a9a6a..54e57f602 100644 --- a/src/cli/esv/esv-variable-set.ts +++ b/src/cli/esv/esv-variable-set.ts @@ -1,3 +1,5 @@ +import { frodo } from '@rockcarver/frodo-lib'; + import { getTokens } from '../../ops/AuthenticateOps'; import { setVariableDescription, @@ -6,7 +8,8 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/idm/idm-count.ts b/src/cli/idm/idm-count.ts index e541c44a9..67becab9b 100644 --- a/src/cli/idm/idm-count.ts +++ b/src/cli/idm/idm-count.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,17 @@ import { countManagedObjects } from '../../ops/IdmOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo idm count', [], deploymentTypes); diff --git a/src/cli/idm/idm-delete.ts b/src/cli/idm/idm-delete.ts index 4f5c779fa..958a2abf6 100644 --- a/src/cli/idm/idm-delete.ts +++ b/src/cli/idm/idm-delete.ts @@ -1,11 +1,24 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { deleteConfigEntityById } from '../../ops/IdmOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo idm delete'); + const program = new FrodoCommand('frodo idm delete', [], deploymentTypes); interface ServiceDeleteOptions { id?: string; @@ -41,7 +54,7 @@ export default function setup() { // const globalConfig = options.global ?? false; - if (options.id && (await getTokens())) { + if (options.id && (await getTokens(false, true, deploymentTypes))) { const outcome = await deleteConfigEntityById(options.id); if (!outcome) process.exitCode = 1; } else { diff --git a/src/cli/idm/idm-export.ts b/src/cli/idm/idm-export.ts index 1ed3ced81..5d7f3524d 100644 --- a/src/cli/idm/idm-export.ts +++ b/src/cli/idm/idm-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -11,7 +11,17 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo idm export', [], deploymentTypes); @@ -67,6 +77,13 @@ export default function setup() { 'Does not include metadata in the export file.' ) ) + + .addOption( + new Option( + '-x, --extract', + 'Extract the scripts from the exported file, and save it to a separate file. Ignored with -a.' + ) + ) .action( // implement command logic inside action handler async (host, realm, user, password, options, command) => { @@ -102,7 +119,8 @@ export default function setup() { options.envFile, options.separateMappings, options.separateObjects, - options.metadata + options.metadata, + options.extract ); if (!outcome) process.exitCode = 1; // --all -a @@ -144,7 +162,8 @@ export default function setup() { options.envFile, options.separateMappings, options.separateObjects, - options.metadata + options.metadata, + options.extract ); if (!outcome) process.exitCode = 1; await warnAboutOfflineConnectorServers(); diff --git a/src/cli/idm/idm-import.ts b/src/cli/idm/idm-import.ts index a191828aa..1d3c9f94f 100644 --- a/src/cli/idm/idm-import.ts +++ b/src/cli/idm/idm-import.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -11,7 +11,17 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo idm import', [], deploymentTypes); diff --git a/src/cli/idm/idm-list.ts b/src/cli/idm/idm-list.ts index acad9e4bf..b23428526 100644 --- a/src/cli/idm/idm-list.ts +++ b/src/cli/idm/idm-list.ts @@ -1,3 +1,5 @@ +import { frodo } from '@rockcarver/frodo-lib'; + import { getTokens } from '../../ops/AuthenticateOps'; import { listAllConfigEntities, @@ -6,7 +8,17 @@ import { import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo idm list', [], deploymentTypes); diff --git a/src/cli/idm/idm-schema-object-export.ts b/src/cli/idm/idm-schema-object-export.ts index e766b1156..3b9ad1ee1 100644 --- a/src/cli/idm/idm-schema-object-export.ts +++ b/src/cli/idm/idm-schema-object-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,7 +10,17 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( @@ -47,6 +57,13 @@ export default function setup() { 'Does not include metadata in the export file.' ) ) + .addOption( + new Option( + '-x, --extract', + 'Extract scripts from the exported file, and save it to a separate file. Ignored with -a.' + ) + ) + .action( // implement command logic inside action handler async (host, realm, user, password, options, command) => { @@ -93,7 +110,8 @@ export default function setup() { options.envFile, false, false, - options.metadata + options.metadata, + false ); if (!outcome) process.exitCode = 1; } // -A, --all-separate @@ -110,7 +128,8 @@ export default function setup() { options.envFile, false, true, - options.metadata + options.metadata, + options.extract ); if (!outcome) process.exitCode = 1; await warnAboutOfflineConnectorServers(); diff --git a/src/cli/idm/idm-schema-object-import.ts b/src/cli/idm/idm-schema-object-import.ts index d8f66ea4c..c412af003 100644 --- a/src/cli/idm/idm-schema-object-import.ts +++ b/src/cli/idm/idm-schema-object-import.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,7 +10,17 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/idp/idp-delete.ts b/src/cli/idp/idp-delete.ts index 9a6565801..b9063b695 100644 --- a/src/cli/idp/idp-delete.ts +++ b/src/cli/idp/idp-delete.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,20 @@ import { deleteSocialIdentityProviderById } from '../../ops/IdpOps'; import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo idp delete'); + const program = new FrodoCommand('frodo idp delete', [], deploymentTypes); program .description('Delete (social) identity providers.') @@ -23,7 +35,7 @@ export default function setup() { options, command ); - if ((await getTokens()) && options.idpId) { + if ((await getTokens(false, true, deploymentTypes)) && options.idpId) { verboseMessage( `Deleting idp ${options.idpId} in realm "${state.getRealm()}"...` ); diff --git a/src/cli/idp/idp-export.ts b/src/cli/idp/idp-export.ts index 50ded2e85..19e3c386a 100644 --- a/src/cli/idp/idp-export.ts +++ b/src/cli/idp/idp-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +10,19 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('frodo idp export'); + const program = new FrodoCommand('frodo idp export', [], deploymentTypes); program .description('Export (social) identity providers.') @@ -57,7 +68,7 @@ export default function setup() { command ); // export by id/name - if (options.idpId && (await getTokens())) { + if (options.idpId && (await getTokens(false, true, deploymentTypes))) { verboseMessage( `Exporting provider "${ options.idpId @@ -71,7 +82,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all providers to a single file...'); const outcome = await exportSocialIdentityProvidersToFile( options.file, @@ -80,7 +94,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all providers to separate files...'); const outcome = await exportSocialIdentityProvidersToFiles( options.metadata diff --git a/src/cli/idp/idp-import.ts b/src/cli/idp/idp-import.ts index 8fe05cb10..2bb7cd2b7 100644 --- a/src/cli/idp/idp-import.ts +++ b/src/cli/idp/idp-import.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -11,8 +11,19 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('frodo idp import'); + const program = new FrodoCommand('frodo idp import', [], deploymentTypes); program .description('Import (social) identity providers.') @@ -55,7 +66,11 @@ export default function setup() { command ); // import by id - if (options.file && options.idpId && (await getTokens())) { + if ( + options.file && + options.idpId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing provider "${ options.idpId @@ -71,7 +86,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && options.file && (await getTokens())) { + else if ( + options.all && + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing all providers from a single file (${options.file})...` ); @@ -84,7 +103,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && !options.file && (await getTokens())) { + else if ( + options.allSeparate && + !options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all providers from separate files in current directory...' ); @@ -94,7 +117,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import first provider from file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing first provider from file "${ options.file diff --git a/src/cli/idp/idp-list.ts b/src/cli/idp/idp-list.ts index 85e0e15b1..f27df38f7 100644 --- a/src/cli/idp/idp-list.ts +++ b/src/cli/idp/idp-list.ts @@ -1,12 +1,23 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { getTokens } from '../../ops/AuthenticateOps'; import { listSocialProviders } from '../../ops/IdpOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('frodo idp list'); + const program = new FrodoCommand('frodo idp list', [], deploymentTypes); program .description('List (social) identity providers.') @@ -24,7 +35,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage(`Listing providers in realm "${state.getRealm()}"...`); const outcome = await listSocialProviders(); if (!outcome) process.exitCode = 1; diff --git a/src/cli/journey/journey-delete.ts b/src/cli/journey/journey-delete.ts index f29e99cc9..adf38aa7a 100644 --- a/src/cli/journey/journey-delete.ts +++ b/src/cli/journey/journey-delete.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,19 @@ import { deleteJourney, deleteJourneys } from '../../ops/JourneyOps'; import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('frodo journey delete'); + const program = new FrodoCommand('frodo journey delete', [], deploymentTypes); program .description('Delete journeys/trees.') @@ -47,7 +58,10 @@ export default function setup() { command ); // delete by id - if (options.journeyId && (await getTokens())) { + if ( + options.journeyId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Deleting journey ${ options.journeyId @@ -57,7 +71,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Deleting all journeys...'); const outcome = await deleteJourneys(options); if (!outcome) process.exitCode = 1; diff --git a/src/cli/journey/journey-describe.ts b/src/cli/journey/journey-describe.ts index 83cdc1fd6..2d04def0c 100644 --- a/src/cli/journey/journey-describe.ts +++ b/src/cli/journey/journey-describe.ts @@ -7,12 +7,27 @@ import { describeJourney, describeJourneyMd } from '../../ops/JourneyOps'; import { printError, printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; const { saveTextToFile } = frodo.utils; const { createFileParamTreeExportResolver, readJourneys, exportJourney } = frodo.authn.journey; export default function setup() { - const program = new FrodoCommand('frodo journey describe'); + const program = new FrodoCommand( + 'frodo journey describe', + [], + deploymentTypes + ); program .description( @@ -137,7 +152,7 @@ export default function setup() { printMessage(error.message, 'error'); process.exitCode = 1; } - } else if (await getTokens()) { + } else if (await getTokens(false, true, deploymentTypes)) { verboseMessage( `Describing journey(s) in realm "${state.getRealm()}"...` ); diff --git a/src/cli/journey/journey-disable.ts b/src/cli/journey/journey-disable.ts index e8202da4b..29e01a1bb 100644 --- a/src/cli/journey/journey-disable.ts +++ b/src/cli/journey/journey-disable.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,24 @@ import { disableJourney } from '../../ops/JourneyOps'; import { printMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo journey disable'); + const program = new FrodoCommand( + 'frodo journey disable', + [], + deploymentTypes + ); program .description('Disable journeys/trees.') @@ -31,7 +48,10 @@ export default function setup() { command ); // disable - if (options.journeyId && (await getTokens())) { + if ( + options.journeyId && + (await getTokens(false, true, deploymentTypes)) + ) { const outcome = await disableJourney(options.journeyId); if (!outcome) process.exitCode = 1; } diff --git a/src/cli/journey/journey-enable.ts b/src/cli/journey/journey-enable.ts index f1aef769a..10d81eb5c 100644 --- a/src/cli/journey/journey-enable.ts +++ b/src/cli/journey/journey-enable.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,20 @@ import { enableJourney } from '../../ops/JourneyOps'; import { printMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo journey enable'); + const program = new FrodoCommand('frodo journey enable', [], deploymentTypes); program .description('Enable journeys/trees.') @@ -31,7 +44,10 @@ export default function setup() { command ); // enable - if (options.journeyId && (await getTokens())) { + if ( + options.journeyId && + (await getTokens(false, true, deploymentTypes)) + ) { const outcome = await enableJourney(options.journeyId); if (!outcome) process.exitCode = 1; } diff --git a/src/cli/journey/journey-export.ts b/src/cli/journey/journey-export.ts index 04ec0095c..258bb6182 100644 --- a/src/cli/journey/journey-export.ts +++ b/src/cli/journey/journey-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,8 +10,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo journey export'); + const program = new FrodoCommand('frodo journey export', [], deploymentTypes); program .description('Export journeys/trees.') @@ -83,7 +96,10 @@ export default function setup() { command ); // export - if (options.journeyId && (await getTokens())) { + if ( + options.journeyId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting journey...'); const outcome = await exportJourneyToFile( options.journeyId, @@ -98,7 +114,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all journeys to a single file...'); const outcome = await exportJourneysToFile( options.file, @@ -112,7 +131,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all journeys to separate files...'); const outcome = await exportJourneysToFiles(options.metadata, { useStringArrays: options.useStringArrays, diff --git a/src/cli/journey/journey-import.ts b/src/cli/journey/journey-import.ts index 015138c0a..42570b110 100644 --- a/src/cli/journey/journey-import.ts +++ b/src/cli/journey/journey-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +11,20 @@ import { import { printMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo journey import'); + const program = new FrodoCommand('frodo journey import', [], deploymentTypes); program .description('Import journey/tree.') @@ -63,7 +76,10 @@ export default function setup() { command ); // import - if (options.journeyId && (await getTokens())) { + if ( + options.journeyId && + (await getTokens(false, true, deploymentTypes)) + ) { printMessage(`Importing journey ${options.journeyId}...`); const outcome = await importJourneyFromFile( options.journeyId, @@ -76,7 +92,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && options.file && (await getTokens())) { + else if ( + options.all && + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { printMessage( `Importing all journeys from a single file (${options.file})...` ); @@ -87,7 +107,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && !options.file && (await getTokens())) { + else if ( + options.allSeparate && + !options.file && + (await getTokens(false, true, deploymentTypes)) + ) { printMessage( 'Importing all journeys from separate files in current directory...' ); @@ -98,7 +122,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import first journey in file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { printMessage('Importing first journey in file...'); const outcome = await importFirstJourneyFromFile(options.file, { reUuid: options.reUuid, diff --git a/src/cli/journey/journey-list.ts b/src/cli/journey/journey-list.ts index 8f9cf6971..e016a6a3b 100644 --- a/src/cli/journey/journey-list.ts +++ b/src/cli/journey/journey-list.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,20 @@ import { listJourneys } from '../../ops/JourneyOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo journey list'); + const program = new FrodoCommand('frodo journey list', [], deploymentTypes); program .description('List journeys/trees.') @@ -28,7 +40,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage(`Listing journeys in realm "${state.getRealm()}"...`); const outcome = await listJourneys(options.long, options.analyze); if (!outcome) process.exitCode = 1; diff --git a/src/cli/journey/journey-prune.ts b/src/cli/journey/journey-prune.ts index 5def4a994..7d6cb4981 100644 --- a/src/cli/journey/journey-prune.ts +++ b/src/cli/journey/journey-prune.ts @@ -7,8 +7,20 @@ import { FrodoCommand } from '../FrodoCommand'; const { findOrphanedNodes, removeOrphanedNodes } = frodo.authn.node; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo journey prune'); + const program = new FrodoCommand('frodo journey prune', [], deploymentTypes); program .description( @@ -25,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage( `Pruning orphaned configuration artifacts in realm "${state.getRealm()}"...` ); diff --git a/src/cli/log/log-fetch.ts b/src/cli/log/log-fetch.ts index 2b32c5612..a8c37606e 100644 --- a/src/cli/log/log-fetch.ts +++ b/src/cli/log/log-fetch.ts @@ -15,7 +15,8 @@ const SECONDS_IN_30_DAYS = 2592000; const SECONDS_IN_1_HOUR = 3600; const LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/log/log-key-delete.ts b/src/cli/log/log-key-delete.ts index a6d7a0d9f..fbc5409ee 100644 --- a/src/cli/log/log-key-delete.ts +++ b/src/cli/log/log-key-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { deleteLogApiKey, deleteLogApiKeys } from '../../ops/LogOps'; import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/log/log-key-describe.ts b/src/cli/log/log-key-describe.ts index e4ac9c76e..b100b918d 100644 --- a/src/cli/log/log-key-describe.ts +++ b/src/cli/log/log-key-describe.ts @@ -1,9 +1,11 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/log/log-key-list.ts b/src/cli/log/log-key-list.ts index d0db3c9ab..705e882ad 100644 --- a/src/cli/log/log-key-list.ts +++ b/src/cli/log/log-key-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,8 @@ import { listLogApiKeys } from '../../ops/LogOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/log/log-list.ts b/src/cli/log/log-list.ts index 6292243c3..f30f5f948 100644 --- a/src/cli/log/log-list.ts +++ b/src/cli/log/log-list.ts @@ -9,7 +9,8 @@ import { FrodoCommand } from '../FrodoCommand'; const { getConnectionProfile, saveConnectionProfile } = frodo.conn; const { getLogSources } = frodo.cloud.log; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/log/log-tail.ts b/src/cli/log/log-tail.ts index 490d32de7..3589e3bdc 100644 --- a/src/cli/log/log-tail.ts +++ b/src/cli/log/log-tail.ts @@ -11,7 +11,8 @@ import { sourcesOptionM } from './log'; const { resolveLevel } = frodo.cloud.log; const { getConnectionProfile, saveConnectionProfile } = frodo.conn; -const deploymentTypes = ['cloud']; +const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; +const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY]; export default function setup() { const program = new FrodoCommand( diff --git a/src/cli/mapping/mapping-delete.ts b/src/cli/mapping/mapping-delete.ts index df53cca76..a585cf9fe 100644 --- a/src/cli/mapping/mapping-delete.ts +++ b/src/cli/mapping/mapping-delete.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,17 @@ import { deleteMapping, deleteMappings } from '../../ops/MappingOps'; import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo mapping delete', [], deploymentTypes); diff --git a/src/cli/mapping/mapping-export.ts b/src/cli/mapping/mapping-export.ts index 72f4fca51..8f0fcfdc2 100644 --- a/src/cli/mapping/mapping-export.ts +++ b/src/cli/mapping/mapping-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,7 +10,17 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo mapping export', [], deploymentTypes); @@ -57,6 +68,13 @@ export default function setup() { 'Where applicable, use string arrays to store multi-line text (e.g. scripts).' ).default(false, 'off') ) + + .addOption( + new Option( + '-x, --extract', + 'Extract the script from the exported file, and save it to a separate file. Ignored with -a.' + ) + ) .action( // implement command logic inside action handler async (host, realm, user, password, options, command) => { @@ -109,12 +127,16 @@ export default function setup() { (await getTokens(false, true, deploymentTypes)) ) { verboseMessage('Exporting all mappings to separate files...'); - const outcome = await exportMappingsToFiles(options.metadata, { - connectorId: options.connectorId, - moType: options.managedObjectType, - deps: options.deps, - useStringArrays: options.useStringArrays, - }); + const outcome = await exportMappingsToFiles( + options.metadata, + options.extract, + { + connectorId: options.connectorId, + moType: options.managedObjectType, + deps: options.deps, + useStringArrays: options.useStringArrays, + } + ); if (!outcome) process.exitCode = 1; } // unrecognized combination of options or no options diff --git a/src/cli/mapping/mapping-import.ts b/src/cli/mapping/mapping-import.ts index 752069460..f259169f6 100644 --- a/src/cli/mapping/mapping-import.ts +++ b/src/cli/mapping/mapping-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,7 +11,17 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo mapping import', [], deploymentTypes); diff --git a/src/cli/mapping/mapping-list.ts b/src/cli/mapping/mapping-list.ts index b12b56a12..5fe44e9eb 100644 --- a/src/cli/mapping/mapping-list.ts +++ b/src/cli/mapping/mapping-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,17 @@ import { listMappings } from '../../ops/MappingOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo mapping list', [], deploymentTypes); diff --git a/src/cli/mapping/mapping-rename.ts b/src/cli/mapping/mapping-rename.ts index 95d293fc9..ab3471fc7 100644 --- a/src/cli/mapping/mapping-rename.ts +++ b/src/cli/mapping/mapping-rename.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,7 +6,17 @@ import { renameMapping, renameMappings } from '../../ops/MappingOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo mapping rename', [], deploymentTypes); diff --git a/src/cli/oauth/oauth-client-delete.ts b/src/cli/oauth/oauth-client-delete.ts index 39defb09d..0ab8ec940 100644 --- a/src/cli/oauth/oauth-client-delete.ts +++ b/src/cli/oauth/oauth-client-delete.ts @@ -1,11 +1,28 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { deleteOauth2ClientById } from '../../ops/OAuth2ClientOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo oauth client delete'); + const program = new FrodoCommand( + 'frodo oauth client delete', + [], + deploymentTypes + ); program .description('Delete OAuth2 clients.') @@ -35,7 +52,7 @@ export default function setup() { options, command ); - if (options.appId && (await getTokens())) { + if (options.appId && (await getTokens(false, true, deploymentTypes))) { const outcome = deleteOauth2ClientById(options.appId); if (!outcome) process.exitCode = 1; } else { diff --git a/src/cli/oauth/oauth-client-describe.ts b/src/cli/oauth/oauth-client-describe.ts index 3c6a769d5..416fece7e 100644 --- a/src/cli/oauth/oauth-client-describe.ts +++ b/src/cli/oauth/oauth-client-describe.ts @@ -1,10 +1,27 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo oauth client describe'); + const program = new FrodoCommand( + 'frodo oauth client describe', + [], + deploymentTypes + ); program .description('Describe OAuth2 client.') @@ -20,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { // code goes here } else { process.exitCode = 1; diff --git a/src/cli/oauth/oauth-client-export.ts b/src/cli/oauth/oauth-client-export.ts index 2c83fbdbf..23116d414 100644 --- a/src/cli/oauth/oauth-client-export.ts +++ b/src/cli/oauth/oauth-client-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,8 +10,24 @@ import { import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo oauth client export'); + const program = new FrodoCommand( + 'frodo oauth client export', + [], + deploymentTypes + ); program .description('Export OAuth2 clients.') @@ -54,7 +71,7 @@ export default function setup() { command ); // export - if (options.appId && (await getTokens())) { + if (options.appId && (await getTokens(false, true, deploymentTypes))) { verboseMessage('Exporting OAuth2 client...'); const outcome = await exportOAuth2ClientToFile( options.appId, @@ -68,7 +85,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a/--all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all OAuth2 clients to file...'); const outcome = await exportOAuth2ClientsToFile( options.file, @@ -81,7 +101,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A/--all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all clients to separate files...'); const outcome = await exportOAuth2ClientsToFiles(options.metadata, { useStringArrays: true, diff --git a/src/cli/oauth/oauth-client-import.ts b/src/cli/oauth/oauth-client-import.ts index bf4867b08..0c36af6c7 100644 --- a/src/cli/oauth/oauth-client-import.ts +++ b/src/cli/oauth/oauth-client-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +11,24 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo oauth client import'); + const program = new FrodoCommand( + 'frodo oauth client import', + [], + deploymentTypes + ); program .description('Import OAuth2 clients.') @@ -49,7 +66,11 @@ export default function setup() { command ); // import by id - if (options.file && options.appId && (await getTokens())) { + if ( + options.file && + options.appId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage(`Importing OAuth2 client "${options.appId}"...`); const outcome = await importOAuth2ClientFromFile( options.appId, @@ -61,7 +82,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && options.file && (await getTokens())) { + else if ( + options.all && + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing all OAuth2 clients from a single file (${options.file})...` ); @@ -71,7 +96,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && !options.file && (await getTokens())) { + else if ( + options.allSeparate && + !options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all OAuth2 clients from separate files in current directory...' ); @@ -81,7 +110,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import first provider from file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing first OAuth2 client from file "${options.file}"...` ); diff --git a/src/cli/oauth/oauth-client-list.ts b/src/cli/oauth/oauth-client-list.ts index a9ba75adc..f75f57c7a 100644 --- a/src/cli/oauth/oauth-client-list.ts +++ b/src/cli/oauth/oauth-client-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,24 @@ import { listOAuth2Clients } from '../../ops/OAuth2ClientOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo oauth client list'); + const program = new FrodoCommand( + 'frodo oauth client list', + [], + deploymentTypes + ); program .description('List OAuth2 clients.') @@ -24,7 +41,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage(`Listing OAuth2 clients...`); const outcome = await listOAuth2Clients(options.long); if (!outcome) process.exitCode = 1; diff --git a/src/cli/promote/promote.ts b/src/cli/promote/promote.ts index 83b848bf2..1c7dd09e2 100644 --- a/src/cli/promote/promote.ts +++ b/src/cli/promote/promote.ts @@ -1,4 +1,4 @@ -import { FrodoError } from '@rockcarver/frodo-lib'; +import { frodo, FrodoError } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,10 +6,16 @@ import { compareExportToDirectory } from '../../ops/PromoteOps'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { - const program = new FrodoCommand('promote'); + const program = new FrodoCommand('promote', [], deploymentTypes); program .description('Prepares a tenant to be promoted') diff --git a/src/cli/realm/realm-add-custom-domain.ts b/src/cli/realm/realm-add-custom-domain.ts index 443891671..b776aceea 100644 --- a/src/cli/realm/realm-add-custom-domain.ts +++ b/src/cli/realm/realm-add-custom-domain.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,24 @@ import { addCustomDomain } from '../../ops/RealmOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo realm add-custom-domain'); + const program = new FrodoCommand( + 'frodo realm add-custom-domain', + [], + deploymentTypes + ); program .description('Add custom domain (realm DNS alias).') @@ -28,7 +44,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage( `Adding custom DNS domain ${ options.domain diff --git a/src/cli/realm/realm-describe.ts b/src/cli/realm/realm-describe.ts index 655c5dcf2..88ede05b0 100644 --- a/src/cli/realm/realm-describe.ts +++ b/src/cli/realm/realm-describe.ts @@ -5,8 +5,20 @@ import { describeRealm } from '../../ops/RealmOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo realm describe'); + const program = new FrodoCommand('frodo realm describe', [], deploymentTypes); program.description('Describe realms.').action( // implement command logic inside action handler @@ -19,7 +31,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage(`Retrieving details of realm ${state.getRealm()}...`); describeRealm(frodo.utils.getRealmName(state.getRealm())); } else { diff --git a/src/cli/realm/realm-export.ts b/src/cli/realm/realm-export.ts index cef020a80..4566e38b9 100644 --- a/src/cli/realm/realm-export.ts +++ b/src/cli/realm/realm-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +11,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo realm export'); + const program = new FrodoCommand('frodo realm export', [], deploymentTypes); program .description('Export realms.') @@ -58,7 +71,10 @@ export default function setup() { command ); // export by id - if (options.realmId && (await getTokens())) { + if ( + options.realmId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting realm...'); const outcome = await exportRealmById( options.realmId, @@ -68,7 +84,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // export by name - else if (options.realmName && (await getTokens())) { + else if ( + options.realmName && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting realm...'); const outcome = await exportRealmByName( options.realmName, @@ -78,7 +97,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a / --all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all realms to a single file...'); const outcome = await exportRealmsToFile( options.file, @@ -87,7 +109,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A / --all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all realms to separate files...'); const outcome = await exportRealmsToFiles(options.metadata); if (!outcome) process.exitCode = 1; diff --git a/src/cli/realm/realm-import.ts b/src/cli/realm/realm-import.ts index f75e8080e..7d98523b9 100644 --- a/src/cli/realm/realm-import.ts +++ b/src/cli/realm/realm-import.ts @@ -14,7 +14,7 @@ const { CLASSIC_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; const deploymentTypes = [CLASSIC_DEPLOYMENT_TYPE_KEY]; export default function setup() { - const program = new FrodoCommand('frodo realm import'); + const program = new FrodoCommand('frodo realm import', [], deploymentTypes); program .description('Import realms.') diff --git a/src/cli/realm/realm-list.ts b/src/cli/realm/realm-list.ts index e6cf34091..14cea554b 100644 --- a/src/cli/realm/realm-list.ts +++ b/src/cli/realm/realm-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,20 @@ import { listRealms } from '../../ops/RealmOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo realm list'); + const program = new FrodoCommand('frodo realm list', [], deploymentTypes); program .description('List realms.') @@ -24,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage('Listing all realms...'); await listRealms(options.long); } else { diff --git a/src/cli/realm/realm-remove-custom-domain.ts b/src/cli/realm/realm-remove-custom-domain.ts index f4275b193..e58de117d 100644 --- a/src/cli/realm/realm-remove-custom-domain.ts +++ b/src/cli/realm/realm-remove-custom-domain.ts @@ -5,10 +5,26 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + const { removeCustomDomain } = frodo.realm; export default function setup() { - const program = new FrodoCommand('frodo realm remove-custom-domain'); + const program = new FrodoCommand( + 'frodo realm remove-custom-domain', + [], + deploymentTypes + ); program .description('Remove custom domain (realm DNS alias).') @@ -29,7 +45,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage( `Removing custom DNS domain ${ options.domain diff --git a/src/cli/role/role-delete.ts b/src/cli/role/role-delete.ts index a248d4033..1821e39f9 100644 --- a/src/cli/role/role-delete.ts +++ b/src/cli/role/role-delete.ts @@ -4,12 +4,16 @@ import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; -const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = - frodo.utils.constants; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; const deploymentTypes = [ CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, ]; export default function setup() { diff --git a/src/cli/role/role-describe.ts b/src/cli/role/role-describe.ts index 643a71e40..8e8c04201 100644 --- a/src/cli/role/role-describe.ts +++ b/src/cli/role/role-describe.ts @@ -4,12 +4,16 @@ import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { FrodoCommand } from '../FrodoCommand'; -const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = - frodo.utils.constants; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; const deploymentTypes = [ CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, ]; export default function setup() { diff --git a/src/cli/role/role-export.ts b/src/cli/role/role-export.ts index f82248535..ddba9ccde 100644 --- a/src/cli/role/role-export.ts +++ b/src/cli/role/role-export.ts @@ -10,12 +10,16 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = - frodo.utils.constants; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; const deploymentTypes = [ CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, ]; export default function setup() { diff --git a/src/cli/role/role-import.ts b/src/cli/role/role-import.ts index 23dede098..5c1c0d433 100644 --- a/src/cli/role/role-import.ts +++ b/src/cli/role/role-import.ts @@ -11,12 +11,16 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = - frodo.utils.constants; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; const deploymentTypes = [ CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, ]; export default function setup() { diff --git a/src/cli/role/role-list.ts b/src/cli/role/role-list.ts index 15b2205fa..34d2a61b9 100644 --- a/src/cli/role/role-list.ts +++ b/src/cli/role/role-list.ts @@ -6,12 +6,16 @@ import { listRoles } from '../../ops/InternalRoleOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = - frodo.utils.constants; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; const deploymentTypes = [ CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY, + IDM_DEPLOYMENT_TYPE_KEY, ]; export default function setup() { diff --git a/src/cli/saml/saml-cot-export.ts b/src/cli/saml/saml-cot-export.ts index 422ff16c1..92c5a1157 100644 --- a/src/cli/saml/saml-cot-export.ts +++ b/src/cli/saml/saml-cot-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +10,24 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo saml cot export'); + const program = new FrodoCommand( + 'frodo saml cot export', + [], + deploymentTypes + ); program .description('Export SAML circles of trust.') @@ -57,7 +73,7 @@ export default function setup() { command ); // export by id/name - if (options.cotId && (await getTokens())) { + if (options.cotId && (await getTokens(false, true, deploymentTypes))) { verboseMessage( `Exporting circle of trust "${ options.cotId @@ -71,7 +87,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all circles of trust to a single file...'); const outcome = await exportCirclesOfTrustToFile( options.file, @@ -80,7 +99,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all circles of trust to separate files...'); const outcome = await exportCirclesOfTrustToFiles(options.metadata); if (!outcome) process.exitCode = 1; diff --git a/src/cli/saml/saml-cot-import.ts b/src/cli/saml/saml-cot-import.ts index af6a6ee58..bc638696c 100644 --- a/src/cli/saml/saml-cot-import.ts +++ b/src/cli/saml/saml-cot-import.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -11,8 +11,24 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo saml cot import'); + const program = new FrodoCommand( + 'frodo saml cot import', + [], + deploymentTypes + ); program .description('Import SAML circles of trust.') @@ -52,7 +68,11 @@ export default function setup() { command ); // import by id - if (options.file && options.cotId && (await getTokens())) { + if ( + options.file && + options.cotId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing circle of trust "${ options.cotId @@ -65,7 +85,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && options.file && (await getTokens())) { + else if ( + options.all && + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing all circles of trust from a single file (${options.file})...` ); @@ -73,7 +97,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && !options.file && (await getTokens())) { + else if ( + options.allSeparate && + !options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all circles of trust from separate files (*.saml.json) in current directory...' ); @@ -81,7 +109,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import first from file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing first circle of trust from file "${ options.file diff --git a/src/cli/saml/saml-cot-list.ts b/src/cli/saml/saml-cot-list.ts index 05d768092..f16ee25e4 100644 --- a/src/cli/saml/saml-cot-list.ts +++ b/src/cli/saml/saml-cot-list.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,20 @@ import { listCirclesOfTrust } from '../../ops/CirclesOfTrustOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo saml cot list'); + const program = new FrodoCommand('frodo saml cot list', [], deploymentTypes); program .description('List SAML circles of trust.') @@ -25,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage( `Listing SAML circles of trust in realm "${state.getRealm()}"...` ); diff --git a/src/cli/saml/saml-delete.ts b/src/cli/saml/saml-delete.ts index 60e5607d7..bbb6f59bd 100644 --- a/src/cli/saml/saml-delete.ts +++ b/src/cli/saml/saml-delete.ts @@ -5,11 +5,23 @@ import { getTokens } from '../../ops/AuthenticateOps'; import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + const { deleteSaml2Provider, deleteSaml2Providers } = frodo.saml2.entityProvider; export default function setup() { - const program = new FrodoCommand('frodo saml delete'); + const program = new FrodoCommand('frodo saml delete', [], deploymentTypes); program .description('Delete SAML entity providers.') @@ -34,12 +46,18 @@ export default function setup() { command ); // -i / --entity-id - if (options.entityId && (await getTokens())) { + if ( + options.entityId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage(`Deleting entity provider '${options.entityId}'...`); await deleteSaml2Provider(options.entityId); } // -a / --all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage(`Deleting all entity providers...`); await deleteSaml2Providers(); } diff --git a/src/cli/saml/saml-describe.ts b/src/cli/saml/saml-describe.ts index 55d3f0e6d..b6707ad84 100644 --- a/src/cli/saml/saml-describe.ts +++ b/src/cli/saml/saml-describe.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,20 @@ import { describeSaml2Provider } from '../../ops/Saml2Ops'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo saml describe'); + const program = new FrodoCommand('frodo saml describe', [], deploymentTypes); program .description('Describe the configuration of an entity provider.') @@ -23,7 +35,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage( `Describing SAML entity provider ${ options.entityId diff --git a/src/cli/saml/saml-export.ts b/src/cli/saml/saml-export.ts index e2234896e..350eb9cb3 100644 --- a/src/cli/saml/saml-export.ts +++ b/src/cli/saml/saml-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +10,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo saml export'); + const program = new FrodoCommand('frodo saml export', [], deploymentTypes); program .description('Export SAML entity providers.') @@ -60,7 +72,10 @@ export default function setup() { command ); // export by id/name - if (options.entityId && (await getTokens())) { + if ( + options.entityId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Exporting provider "${ options.entityId @@ -77,7 +92,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all providers to a single file...'); const outcome = await exportSaml2ProvidersToFile( options.file, @@ -89,7 +107,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all providers to separate files...'); const outcome = await exportSaml2ProvidersToFiles(options.metadata, { deps: options.deps, diff --git a/src/cli/saml/saml-import.ts b/src/cli/saml/saml-import.ts index 70f7640a9..e2e9c68fa 100644 --- a/src/cli/saml/saml-import.ts +++ b/src/cli/saml/saml-import.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -11,8 +11,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo saml import'); + const program = new FrodoCommand('frodo saml import', [], deploymentTypes); program .description('Import SAML entity providers.') @@ -55,7 +67,11 @@ export default function setup() { command ); // import by id - if (options.file && options.entityId && (await getTokens())) { + if ( + options.file && + options.entityId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing provider "${ options.entityId @@ -71,7 +87,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all -a - else if (options.all && options.file && (await getTokens())) { + else if ( + options.all && + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing all providers from a single file (${options.file})...` ); @@ -81,7 +101,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // --all-separate -A - else if (options.allSeparate && !options.file && (await getTokens())) { + else if ( + options.allSeparate && + !options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( 'Importing all providers from separate files (*.saml.json) in current directory...' ); @@ -91,7 +115,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import first provider from file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing first provider from file "${ options.file diff --git a/src/cli/saml/saml-list.ts b/src/cli/saml/saml-list.ts index 84118109d..6e96c69c0 100644 --- a/src/cli/saml/saml-list.ts +++ b/src/cli/saml/saml-list.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,20 @@ import { listSaml2Providers } from '../../ops/Saml2Ops'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo saml list'); + const program = new FrodoCommand('frodo saml list', [], deploymentTypes); program .description('List SAML entity providers.') @@ -25,7 +37,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage( `Listing SAML entity providers in realm "${state.getRealm()}"...` ); diff --git a/src/cli/saml/saml-metadata-export.ts b/src/cli/saml/saml-metadata-export.ts index f4f467c23..cee331987 100644 --- a/src/cli/saml/saml-metadata-export.ts +++ b/src/cli/saml/saml-metadata-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,24 @@ import { exportSaml2MetadataToFile } from '../../ops/Saml2Ops'; import { printMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo saml metadata export'); + const program = new FrodoCommand( + 'frodo saml metadata export', + [], + deploymentTypes + ); program .description('Export SAML metadata.') @@ -41,7 +57,10 @@ export default function setup() { command ); // export by id/name - if (options.entityId && (await getTokens())) { + if ( + options.entityId && + (await getTokens(false, true, deploymentTypes)) + ) { printMessage( `Exporting metadata for provider "${ options.entityId @@ -54,7 +73,7 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // // --all-separate -A - // else if (options.allSeparate && (await getTokens())) { + // else if (options.allSeparate && (await getTokens(false, true, deploymentTypes))) { // printMessage('Exporting all providers to separate files...'); // exportProvidersToFiles(); // } diff --git a/src/cli/script/script-delete.ts b/src/cli/script/script-delete.ts index 814880b47..30d87c8d4 100644 --- a/src/cli/script/script-delete.ts +++ b/src/cli/script/script-delete.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +10,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo script delete'); + const program = new FrodoCommand('frodo script delete', [], deploymentTypes); program .description('Delete scripts.') @@ -44,7 +56,10 @@ export default function setup() { options, command ); - if (options.scriptId && (await getTokens())) { + if ( + options.scriptId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Deleting script ${ options.scriptId @@ -52,7 +67,10 @@ export default function setup() { ); const outcome = await deleteScriptId(options.scriptId); if (!outcome) process.exitCode = 1; - } else if (options.scriptName && (await getTokens())) { + } else if ( + options.scriptName && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Deleting script ${ options.scriptName @@ -60,7 +78,10 @@ export default function setup() { ); const outcome = await deleteScriptName(options.scriptName); if (!outcome) process.exitCode = 1; - } else if (options.all && (await getTokens())) { + } else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Deleting all non-default scripts...'); const outcome = await deleteAllScripts(); if (!outcome) process.exitCode = 1; diff --git a/src/cli/script/script-describe.ts b/src/cli/script/script-describe.ts index ac5b47799..9c20cf39e 100644 --- a/src/cli/script/script-describe.ts +++ b/src/cli/script/script-describe.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,24 @@ import { describeScript } from '../../ops/ScriptOps'; import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo script describe'); + const program = new FrodoCommand( + 'frodo script describe', + [], + deploymentTypes + ); program .description('Describe script.') @@ -36,7 +53,10 @@ export default function setup() { options, command ); - if ((options.scriptName || options.scriptId) && (await getTokens())) { + if ( + (options.scriptName || options.scriptId) && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Describing script ${options.scriptName ? options.scriptName : options.scriptId}...` ); diff --git a/src/cli/script/script-export.ts b/src/cli/script/script-export.ts index 3c5433571..127577e00 100644 --- a/src/cli/script/script-export.ts +++ b/src/cli/script/script-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +11,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo script export'); + const program = new FrodoCommand('frodo script export', [], deploymentTypes); program .description('Export scripts.') @@ -83,7 +96,10 @@ export default function setup() { command ); // export by id - if (options.scriptId && (await getTokens())) { + if ( + options.scriptId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting script...'); const outcome = await exportScriptToFile( options.scriptId, @@ -101,7 +117,7 @@ export default function setup() { // export by name else if ( (options.scriptName || options.script) && - (await getTokens()) + (await getTokens(false, true, deploymentTypes)) ) { verboseMessage('Exporting script...'); const outcome = await exportScriptByNameToFile( @@ -118,7 +134,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a / --all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all scripts to a single file...'); const outcome = await exportScriptsToFile( options.file, @@ -132,7 +151,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A / --all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all scripts to separate files...'); const outcome = await exportScriptsToFiles( options.extract, diff --git a/src/cli/script/script-import.ts b/src/cli/script/script-import.ts index 7be05d00c..e0ea44dde 100644 --- a/src/cli/script/script-import.ts +++ b/src/cli/script/script-import.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,8 +9,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo script import'); + const program = new FrodoCommand('frodo script import', [], deploymentTypes); program .description('Import scripts.') @@ -76,7 +88,7 @@ export default function setup() { command ); - if (options.file && (await getTokens())) { + if (options.file && (await getTokens(false, true, deploymentTypes))) { verboseMessage( `Importing script(s) into realm "${state.getRealm()}"...` ); @@ -91,7 +103,10 @@ export default function setup() { } ); if (!outcome) process.exitCode = 1; - } else if (options.allSeparate && (await getTokens())) { + } else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage( `Importing all script files into realm "${state.getRealm()}"...` ); diff --git a/src/cli/script/script-list.ts b/src/cli/script/script-list.ts index bbe41c76d..c4b6b7172 100644 --- a/src/cli/script/script-list.ts +++ b/src/cli/script/script-list.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,8 +6,20 @@ import { listScripts } from '../../ops/ScriptOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo script list'); + const program = new FrodoCommand('frodo script list', [], deploymentTypes); program .description('List scripts.') @@ -40,7 +52,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage(`Listing scripts in realm "${state.getRealm()}"...`); const outcome = await listScripts( options.long, diff --git a/src/cli/service/service-delete.ts b/src/cli/service/service-delete.ts index 92a7867e5..b5d52a79d 100644 --- a/src/cli/service/service-delete.ts +++ b/src/cli/service/service-delete.ts @@ -1,11 +1,24 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; import { deleteService, deleteServices } from '../../ops/ServiceOps.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo service delete'); + const program = new FrodoCommand('frodo service delete', [], deploymentTypes); interface ServiceDeleteOptions { id?: string; @@ -43,10 +56,13 @@ export default function setup() { const globalConfig = options.global ?? false; - if (options.id && (await getTokens())) { + if (options.id && (await getTokens(false, true, deploymentTypes))) { const outcome = await deleteService(options.id, globalConfig); if (!outcome) process.exitCode = 1; - } else if (options.all && (await getTokens())) { + } else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { const outcome = await deleteServices(globalConfig); if (!outcome) process.exitCode = 1; } else { diff --git a/src/cli/service/service-export.ts b/src/cli/service/service-export.ts index 6f4022bbf..9e69c9a1f 100644 --- a/src/cli/service/service-export.ts +++ b/src/cli/service/service-export.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -9,8 +10,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo service export'); + const program = new FrodoCommand('frodo service export', [], deploymentTypes); interface ServiceExportOptions { file?: string; @@ -70,7 +83,10 @@ export default function setup() { const globalConfig = options.global ?? false; // export by name - if (options.serviceId && (await getTokens())) { + if ( + options.serviceId && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting service...'); const outcome = await exportServiceToFile( options.serviceId, @@ -81,7 +97,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a / --all - else if (options.all && (await getTokens())) { + else if ( + options.all && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all services to a single file...'); const outcome = await exportServicesToFile( options.file, @@ -91,7 +110,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A / --all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Exporting all services to separate files...'); const outcome = await exportServicesToFiles( globalConfig, diff --git a/src/cli/service/service-import.ts b/src/cli/service/service-import.ts index 2b6b22529..4235b2a11 100644 --- a/src/cli/service/service-import.ts +++ b/src/cli/service/service-import.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,8 +11,20 @@ import { import { printMessage, verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo service import'); + const program = new FrodoCommand('frodo service import', [], deploymentTypes); interface ServiceImportOptions { file?: string; @@ -92,7 +105,11 @@ export default function setup() { : (options.currentRealm ?? false); // import by id - if (options.serviceId && options.file && (await getTokens())) { + if ( + options.serviceId && + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Importing service...'); const outcome = await importServiceFromFile( options.serviceId, @@ -106,7 +123,11 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -a / --all - else if (options.all && options.file && (await getTokens())) { + else if ( + options.all && + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Importing all services from a single file...'); const outcome = await importServicesFromFile(options.file, { clean, @@ -116,7 +137,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // -A / --all-separate - else if (options.allSeparate && (await getTokens())) { + else if ( + options.allSeparate && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Importing all services from separate files...'); const outcome = await importServicesFromFiles({ clean, @@ -126,7 +150,10 @@ export default function setup() { if (!outcome) process.exitCode = 1; } // import file - else if (options.file && (await getTokens())) { + else if ( + options.file && + (await getTokens(false, true, deploymentTypes)) + ) { verboseMessage('Importing service...'); const outcome = await importFirstServiceFromFile(options.file, { clean, diff --git a/src/cli/service/service-list.ts b/src/cli/service/service-list.ts index c303700f1..c08b191f2 100644 --- a/src/cli/service/service-list.ts +++ b/src/cli/service/service-list.ts @@ -1,3 +1,4 @@ +import { frodo } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -5,8 +6,20 @@ import { listServices } from '../../ops/ServiceOps.js'; import { verboseMessage } from '../../utils/Console.js'; import { FrodoCommand } from '../FrodoCommand'; +const { + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +} = frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, + CLASSIC_DEPLOYMENT_TYPE_KEY, +]; + export default function setup() { - const program = new FrodoCommand('frodo service list'); + const program = new FrodoCommand('frodo service list', [], deploymentTypes); program .description('List AM services.') @@ -23,7 +36,7 @@ export default function setup() { options, command ); - if (await getTokens()) { + if (await getTokens(false, true, deploymentTypes)) { verboseMessage(`Listing all AM services for realm: ${realm}`); const outcome = await listServices(options.long, options.global); if (!outcome) process.exitCode = 1; diff --git a/src/cli/theme/theme-delete.ts b/src/cli/theme/theme-delete.ts index 5608ceadc..3558a4b62 100644 --- a/src/cli/theme/theme-delete.ts +++ b/src/cli/theme/theme-delete.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -10,7 +10,13 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo theme delete', [], deploymentTypes); diff --git a/src/cli/theme/theme-export.ts b/src/cli/theme/theme-export.ts index bf7e430a4..b8077b171 100644 --- a/src/cli/theme/theme-export.ts +++ b/src/cli/theme/theme-export.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -11,7 +11,13 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo theme export', [], deploymentTypes); diff --git a/src/cli/theme/theme-import.ts b/src/cli/theme/theme-import.ts index ef3805417..5678007fc 100644 --- a/src/cli/theme/theme-import.ts +++ b/src/cli/theme/theme-import.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -12,7 +12,13 @@ import { import { printMessage, verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo theme import', [], deploymentTypes); diff --git a/src/cli/theme/theme-list.ts b/src/cli/theme/theme-list.ts index b4681074a..978fc2124 100644 --- a/src/cli/theme/theme-list.ts +++ b/src/cli/theme/theme-list.ts @@ -1,4 +1,4 @@ -import { state } from '@rockcarver/frodo-lib'; +import { frodo, state } from '@rockcarver/frodo-lib'; import { Option } from 'commander'; import { getTokens } from '../../ops/AuthenticateOps'; @@ -6,7 +6,13 @@ import { listThemes } from '../../ops/ThemeOps'; import { verboseMessage } from '../../utils/Console'; import { FrodoCommand } from '../FrodoCommand'; -const deploymentTypes = ['cloud', 'forgeops']; +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; export default function setup() { const program = new FrodoCommand('frodo theme list', [], deploymentTypes); diff --git a/src/ops/ConfigOps.ts b/src/ops/ConfigOps.ts index 3e3350819..0cff44054 100644 --- a/src/ops/ConfigOps.ts +++ b/src/ops/ConfigOps.ts @@ -17,8 +17,19 @@ import { } from '../utils/Config'; import { cleanupProgressIndicators, printError } from '../utils/Console'; import { saveServersToFiles } from './classic/ServerOps'; -import { ManagedSkeleton, writeManagedJsonToDirectory } from './IdmOps'; -import { writeSyncJsonToDirectory } from './MappingOps'; +import { + extractIdmEndpointScript, + extractIdmScriptsToFolder, + extractIdmScriptToSameLevel, + findScriptsFromIdm, + ManagedSkeleton, + writeManagedJsonToDirectory, +} from './IdmOps'; +import { + extractMappingScripts, + writeMappingJsonToDirectory, + writeSyncJsonToDirectory, +} from './MappingOps'; import { extractScriptsToFiles } from './ScriptOps'; import { errorHandler } from './utils/OpsUtils'; @@ -242,7 +253,8 @@ export function exportItem( writeSyncJsonToDirectory( obj as SyncSkeleton, `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}`, - includeMeta + includeMeta, + extract ); } else if (type === 'server') { saveServersToFiles( @@ -252,24 +264,79 @@ export function exportItem( extract, includeMeta ); + } else if (type === 'mapping') { + writeMappingJsonToDirectory( + obj, + `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}`, + includeMeta, + extract + ); } else { // eslint-disable-next-line @typescript-eslint/no-explicit-any Object.entries(obj).forEach(([id, value]: [string, any]) => { if (type === 'idm') { if (value != null) { - if (separateMappings && id === 'sync') { + if ((separateMappings || extract) && id === 'sync') { writeSyncJsonToDirectory( value as SyncSkeleton, `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}/sync`, - includeMeta + includeMeta, + extract ); - } else if (separateObjects && id === 'managed') { + } else if ((separateObjects || extract) && id === 'managed') { writeManagedJsonToDirectory( value as ManagedSkeleton, `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}/managed`, - includeMeta + includeMeta, + extract ); } else { + if (extract) { + if (id.includes('endpoint/')) { + const result = findScriptsFromIdm(value); + if (result.length !== 0) { + const endpointId = id.replace('endpoint/', ''); + extractIdmEndpointScript( + endpointId, + value, + result, + `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}/endpoint/` + ); + } + } else if (id.includes('schedule/')) { + const result = findScriptsFromIdm(value); + if (result.length !== 0) { + const scheduleId = id.replace('schedule/', ''); + extractIdmScriptToSameLevel( + scheduleId, + value, + result, + `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}/schedule/` + ); + } + } else if (id.includes('mapping/')) { + const result = findScriptsFromIdm(obj); + if (result.length !== 0) { + const mappingId = id.replace('mapping/', ''); + extractMappingScripts( + `${mappingId}.mapping.script`, + obj, + result, + `mapping/` + ); + } + } else { + const result = findScriptsFromIdm(value); + if (result.length !== 0) { + extractIdmScriptsToFolder( + `${id}.idm.scripts`, + value, + result, + `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}` + ); + } + } + } const filename = `${id}.idm.json`; if (filename.includes('/')) { fs.mkdirSync( diff --git a/src/ops/IdmOps.ts b/src/ops/IdmOps.ts index cf68d3d20..de87fe181 100644 --- a/src/ops/IdmOps.ts +++ b/src/ops/IdmOps.ts @@ -6,7 +6,11 @@ import fs from 'fs'; import path from 'path'; import propertiesReader from 'properties-reader'; -import { extractDataToFile, getExtractedJsonData } from '../utils/Config'; +import { + extractDataToFile, + getExtractedData, + getExtractedJsonData, +} from '../utils/Config'; import { createProgressIndicator, printError, @@ -14,6 +18,7 @@ import { stopProgressIndicator, } from '../utils/Console'; import { + extractMappingScripts, getLegacyMappingsFromFiles, writeSyncJsonToDirectory, } from './MappingOps'; @@ -66,7 +71,7 @@ export async function warnAboutOfflineConnectorServers(): Promise { } /** - * List all IDM configuration objects + * List all Idm configuration objects * @return {Promise} a promise that resolves to true if successful, false otherwise */ export async function listAllConfigEntities(): Promise { @@ -106,7 +111,8 @@ export async function exportConfigEntityToFile( envFile?: string, separateMappings: boolean = false, separateObjects: boolean = false, - includeMeta: boolean = true + includeMeta: boolean = true, + extract: boolean = false ): Promise { try { const options = getIdmImportExportOptions(undefined, envFile); @@ -114,19 +120,21 @@ export async function exportConfigEntityToFile( envReplaceParams: options.envReplaceParams, entitiesToExport: undefined, }); - if (separateMappings && id === 'sync') { + if ((separateMappings || extract) && id === 'sync') { writeSyncJsonToDirectory( exportData.idm[id] as SyncSkeleton, file, - includeMeta + includeMeta, + extract ); return true; } - if (separateObjects && id === 'managed') { + if ((separateObjects || extract) && id === 'managed') { writeManagedJsonToDirectory( exportData.idm[id] as ManagedSkeleton, file, - includeMeta + includeMeta, + extract ); return true; } @@ -221,7 +229,8 @@ export async function exportAllConfigEntitiesToFiles( envFile?: string, separateMappings: boolean = false, separateObjects: boolean = false, - includeMeta: boolean = true + includeMeta: boolean = true, + extract: boolean = false ): Promise { const errors: Error[] = []; try { @@ -234,28 +243,74 @@ export async function exportAllConfigEntitiesToFiles( errorHandler ); for (const [id, obj] of Object.entries(exportData.idm)) { - try { - if (separateMappings && id === 'sync') { - writeSyncJsonToDirectory(obj as SyncSkeleton, 'sync', includeMeta); - continue; - } - if (separateObjects && id === 'managed') { - writeManagedJsonToDirectory( - obj as ManagedSkeleton, - 'managed', + if (obj) { + try { + if ((separateMappings || extract) && id === 'sync') { + writeSyncJsonToDirectory( + obj as SyncSkeleton, + 'sync', + includeMeta, + extract + ); + continue; + } + if ((separateObjects || extract) && id === 'managed') { + writeManagedJsonToDirectory( + obj as ManagedSkeleton, + 'managed', + includeMeta, + extract + ); + continue; + } + if (extract && (id !== 'sync' || 'managed')) { + if (id.includes('endpoint/')) { + const result = findScriptsFromIdm(obj); + if (result.length !== 0) { + const endpointId = id.replace('endpoint/', ''); + extractIdmEndpointScript(endpointId, obj, result, `endpoint/`); + } + } else if (id.includes('schedule/')) { + const result = findScriptsFromIdm(obj); + if (result.length !== 0) { + const scheduleId = id.replace('schedule/', ''); + extractIdmScriptToSameLevel( + scheduleId, + obj, + result, + `schedule/` + ); + } + } else if (id.includes('mapping/')) { + const result = findScriptsFromIdm(obj); + if (result.length !== 0) { + const mappingId = id.replace('mapping/', ''); + extractMappingScripts( + `${mappingId}.mapping.script`, + obj, + result, + `mapping/` + ); + } + } else { + const result = findScriptsFromIdm(obj); + if (result.length !== 0) { + extractIdmScriptsToFolder(`${id}.idm.scripts`, obj, result); + } + } + } + saveToFile( + 'idm', + obj, + '_id', + getFilePath(`${id}.idm.json`, true), includeMeta ); - continue; + } catch (error) { + errors.push( + new FrodoError(`Error saving config entity ${id}`, error) + ); } - saveToFile( - 'idm', - obj, - '_id', - getFilePath(`${id}.idm.json`, true), - includeMeta - ); - } catch (error) { - errors.push(new FrodoError(`Error saving config entity ${id}`, error)); } } if (errors.length > 0) { @@ -312,8 +367,13 @@ export async function importConfigEntityByIdFromFile( importData = { idm: { managed: managedData } }; } else { importData = JSON.parse(fileData); + const entity = importData.idm?.[entityId]; + if (entity) { + const baseDir = path.dirname(filePath); + resolveAllExtractedScriptsForImport(entity, baseDir); + importData.idm[entityId] = entity; + } } - const options = getIdmImportExportOptions(undefined, envFile); await importConfigEntities( @@ -377,33 +437,46 @@ export async function importFirstConfigEntityFromFile( 0, `Importing ${filePath}...` ); + const fileData = fs.readFileSync( path.resolve(process.cwd(), filePath), 'utf8' ); - const entities = Object.values( - JSON.parse(fileData).idm - ) as IdObjectSkeletonInterface[]; - if (entities.length === 0) { + + const parsed = JSON.parse(fileData); + const allEntities = Object.entries(parsed.idm) + .filter(([id]) => id !== 'meta') // ✅ "meta" 필터링 + .map(([, val]) => val) as IdObjectSkeletonInterface[]; + + if (allEntities.length === 0) { stopProgressIndicator(indicatorId, `No items to import.`, 'success'); return true; } - const entityId = entities[0]._id; - const importData = { idm: { [entityId]: entities[0] } }; + + const entity = allEntities[0]; + const entityId = entity._id; + + const baseDir = path.dirname(filePath); + resolveAllExtractedScriptsForImport(entity, baseDir); + + const importData: ConfigEntityExportInterface = { + idm: { [entityId]: entity }, + }; if (entityId === 'sync') { importData.idm.sync = getLegacyMappingsFromFiles([ { content: fileData, - path: `${filePath.substring(0, filePath.lastIndexOf('/'))}/sync.idm.json`, + path: `${baseDir}/sync.idm.json`, }, ]); } + if (entityId === 'managed') { importData.idm.managed = getManagedObjectsFromFiles([ { content: fileData, - path: `${filePath.substring(0, filePath.lastIndexOf('/'))}/managed.idm.json`, + path: `${baseDir}/managed.idm.json`, }, ]); } @@ -425,6 +498,7 @@ export async function importFirstConfigEntityFromFile( `Imported ${entityId} from ${filePath}.`, 'success' ); + return true; } catch (error) { stopProgressIndicator(indicatorId, `Error importing ${filePath}.`, 'fail'); @@ -497,13 +571,18 @@ export async function importManagedObjectFromFile( let filePath: string; try { filePath = getFilePath(file); - const importData = JSON.parse(fs.readFileSync(filePath, 'utf8')); + const fileData = fs.readFileSync(filePath, 'utf8'); + const importData = JSON.parse(fileData); + const baseDir = path.dirname(filePath); + resolveAllExtractedScriptsForImport(importData, baseDir); + indicatorId = createProgressIndicator( 'indeterminate', 0, `Importing config managed object from ${filePath}...` ); const options = getIdmImportExportOptions(undefined, envFile); + await importSubConfigEntity('managed', importData, { entitiesToImport: options.entitiesToExportOrImport, envReplaceParams: options.envReplaceParams, @@ -526,9 +605,8 @@ export async function importManagedObjectFromFile( } return false; } - /** - * Import all IDM configuration objects from working directory + * Import all Idm configuration objects from working directory * @param {string} entitiesFile JSON file that specifies the config entities to export/import * @param {string} envFile File that defines environment specific variables for replacement during configuration export/import * @param {boolean} validate True to validate script hooks. Default: false @@ -543,6 +621,7 @@ export async function importAllConfigEntitiesFromFiles( const baseDirectory = getWorkingDirectory(); try { const importData = await getIdmImportDataFromIdmDirectory(baseDirectory); + indicatorId = createProgressIndicator( 'indeterminate', 0, @@ -597,12 +676,17 @@ export async function getIdmImportDataFromIdmDirectory( ): Promise { const importData = { idm: {} } as ConfigEntityExportInterface; const idmConfigFiles = await readFiles(directory); - idmConfigFiles.forEach( - (f) => (f.path = f.path.toLowerCase().replace(/\/$/, '')) - ); + idmConfigFiles.forEach((f) => (f.path = f.path.replace(/\/$/, ''))); // Process sync mapping file(s) - importData.idm.sync = getLegacyMappingsFromFiles(idmConfigFiles); - importData.idm.managed = getManagedObjectsFromFiles(idmConfigFiles); + const sync = getLegacyMappingsFromFiles(idmConfigFiles); + if (sync.mappings && sync.mappings.length > 0) { + importData.idm.sync = sync; + } + const managed = getManagedObjectsFromFiles(idmConfigFiles); + if (managed.objects && managed.objects.length > 0) { + importData.idm.managed = managed; + } + // Process other files for (const f of idmConfigFiles.filter( (f) => @@ -610,16 +694,46 @@ export async function getIdmImportDataFromIdmDirectory( !f.path.endsWith('managed.idm.json') && f.path.endsWith('.idm.json') )) { + const baseDirOfThisJson = path.dirname(f.path); const entities = Object.values( JSON.parse(f.content).idm ) as unknown as IdObjectSkeletonInterface[]; + for (const entity of entities) { + resolveAllExtractedScriptsForImport(entity, baseDirOfThisJson); importData.idm[entity._id] = entity; } } return importData; } +export function resolveAllExtractedScriptsForImport( + obj: any, + baseDir: string, + visited = new WeakSet() +) { + if (obj === null || typeof obj !== 'object') { + return; + } + if (visited.has(obj)) return; + visited.add(obj); + if (Array.isArray(obj)) { + for (const item of obj) { + resolveAllExtractedScriptsForImport(item, baseDir, visited); + } + return; + } + if (typeof obj.source === 'string' && obj.source.startsWith('file://')) { + const fileContent = getExtractedData(obj.source, baseDir); + if (fileContent !== null) { + obj.source = fileContent; + } + } + for (const key of Object.keys(obj)) { + resolveAllExtractedScriptsForImport(obj[key], baseDir, visited); + } +} + /** * Helper that returns options for exporting/importing IDM config entities * @param {string} entitiesFile JSON file that specifies the config entities to export/import @@ -664,10 +778,20 @@ function getIdmImportExportOptions( export function writeManagedJsonToDirectory( managed: ManagedSkeleton, directory: string = 'managed', - includeMeta: boolean = true + includeMeta: boolean = true, + extract: boolean ) { const objectPaths = []; for (const object of managed.objects) { + if (extract) { + const result = findScriptsFromIdm(object); + if (result.length !== 0) { + const dirName = getTypedFilename(object.name, 'managed', 'scripts'); + // getFilePath(`${directory}/${dirName}`, true); + extractIdmScriptsToFolder(dirName, object, result, `${directory}/`); + //dirname= oobject name + + } + } const fileName = getTypedFilename(object.name, 'managed'); objectPaths.push(extractDataToFile(object, fileName, directory)); } @@ -681,6 +805,63 @@ export function writeManagedJsonToDirectory( ); } +export function extractIdmScriptsToFolder( + id: string, + object: any, + foundResults, + directory?: string +): boolean { + for (const result of foundResults) { + const sourceObj = getObjectByPath(object, result.path); + const objectFileName = getTypedFilename(result.path, 'script', result.type); + sourceObj.source = extractDataToFile( + result.source, + `${id}/${objectFileName}`, + directory + ); + } + return false; +} + +export function extractIdmScriptToSameLevel( + id: string, + object: any, + foundResults: any, + directory?: string +): boolean { + for (const result of foundResults) { + const sourceObj = getObjectByPath(object, result.path); + const objectFileName = getTypedFilename( + `${id}.${result.path}`, + 'script', + result.type + ); + sourceObj.source = extractDataToFile( + result.source, + objectFileName, + directory + ); + } + return false; +} + +export function extractIdmEndpointScript( + id: string, + object: any, + foundResults: any, + directory?: string +): boolean { + for (const result of foundResults) { + const objectFileName = getTypedFilename(id, 'script', result.type); + object.source = extractDataToFile( + result.source, + objectFileName, + directory + ); + } + return false; +} + /** * Helper that returns the managed.idm.json object containing all the mappings in it by looking through the files * @@ -698,28 +879,98 @@ export function getManagedObjectsFromFiles( 'Multiple managed.idm.json files found in idm directory' ); } - const managed = { + const managed: ManagedSkeleton = { _id: 'managed', objects: [], }; if (managedFiles.length === 1) { const jsonData = JSON.parse(managedFiles[0].content); - const managedData = jsonData.managed - ? jsonData.managed - : jsonData.idm.managed; + const managedData = jsonData.managed ?? jsonData.idm?.managed; const managedJsonDir = managedFiles[0].path.substring( 0, managedFiles[0].path.indexOf('/managed.idm.json') ); - if (managedData.objects) { + if (managedData?.objects) { for (const object of managedData.objects) { + let resolvedObject: any; if (typeof object === 'string') { - managed.objects.push(getExtractedJsonData(object, managedJsonDir)); + resolvedObject = getExtractedJsonData(object, managedJsonDir); } else { - managed.objects.push(object); + resolvedObject = object; } + resolveAllExtractedScriptsForImport(resolvedObject, managedJsonDir); + managed.objects.push(resolvedObject); } } } return managed; } + +type MatchResult = { path: string; source: string; type: string }; + +export function findScriptsFromIdm( + obj: any, + currentPath = '', + result: MatchResult[] = [] +): MatchResult[] { + if ( + typeof obj === 'object' && + obj !== null && + 'source' in obj && + 'type' in obj && + (obj.type === 'text/javascript' || obj.type === 'groovy') + ) { + const rawSource = obj.source; + const normalizedSource = Array.isArray(rawSource) + ? rawSource.join('\n') + : rawSource; + const scriptType = + obj.type === 'text/javascript' + ? 'js' + : obj.type === 'groovy' + ? 'groovy' + : ''; + result.push({ + path: currentPath, + source: normalizedSource, + type: scriptType, + }); + } + + if (typeof obj === 'object' && obj !== null) { + for (const key of Object.keys(obj)) { + const newPath = currentPath ? `${currentPath}.${key}` : key; + findScriptsFromIdm(obj[key], newPath, result); + } + } + + return result; +} +export function getTopObject(path, obj) { + const parts = path.split('.'); + return obj[parts[0]]; +} +export function getTopString(path) { + const parts = path.split('.'); + return parts[0]; +} + +export function getLastString(path) { + const parts = path.split('.'); + return parts[parts.length - 1]; +} +export function getObjectByPath(obj, path) { + return path.split('.').reduce((acc, key) => { + const realKey = /^\d+$/.test(key) ? Number(key) : key; + return acc?.[realKey]; + }, obj); +} + +export function getObjectByPathExcludeLast(obj: any, path: string): any { + const keys = path.split('.'); + keys.pop(); + return keys.reduce((acc, key) => { + const realKey = /^\d+$/.test(key) ? Number(key) : key; + return acc?.[realKey]; + }, obj); +} diff --git a/src/ops/MappingOps.ts b/src/ops/MappingOps.ts index 1d56aca38..9238f17fa 100644 --- a/src/ops/MappingOps.ts +++ b/src/ops/MappingOps.ts @@ -7,6 +7,7 @@ import { SyncSkeleton, } from '@rockcarver/frodo-lib/types/ops/MappingOps'; import fs from 'fs'; +import path from 'path'; import { extractDataToFile, getExtractedJsonData } from '../utils/Config'; import { @@ -18,6 +19,14 @@ import { stopProgressIndicator, updateProgressIndicator, } from '../utils/Console'; +import { + findScriptsFromIdm, + getLastString, + getObjectByPath, + getObjectByPathExcludeLast, + getTopString, + resolveAllExtractedScriptsForImport, +} from './IdmOps'; const { getTypedFilename, @@ -42,6 +51,79 @@ const { createMappingExportTemplate, } = frodo.idm.mapping; +export function extractMappingScripts( + id: string, + mapping: any, + foundResult, + directory: string +): boolean { + for (const behavior of foundResult) { + if (getTopString(behavior.path) === 'policies') { + const situation = getObjectByPathExcludeLast( + mapping, + behavior.path + ).situation; + const fileName = `policies.${situation}.${getLastString(behavior.path)}`; + const objectSource = getObjectByPath(mapping, behavior.path); + saveMappingScript( + id, + objectSource, + fileName, + behavior.type, + behavior.source, + directory + ); + } else if (getTopString(behavior.path) === 'properties') { + let source = getObjectByPathExcludeLast(mapping, behavior.path).source; + if (!source) source = 'SOURCE'; + let target = getObjectByPathExcludeLast(mapping, behavior.path).target; + if (!target) target = 'TARGET'; + const fileName = `properties.${source}.${target}.${getLastString(behavior.path)}`; + const objectSource = getObjectByPath(mapping, behavior.path); + saveMappingScript( + id, + objectSource, + fileName, + behavior.type, + behavior.source, + directory + ); + } else { + const objectSource = getObjectByPath(mapping, behavior.path); + saveMappingScript( + id, + objectSource, + behavior.path, + behavior.type, + behavior.source, + directory + ); + } + } + return false; +} + +function saveMappingScript( + id: string, + object: any, + fileName: string, + type: string, + script?: string, + directory?: string +): boolean { + try { + const objectFileName = getTypedFilename(fileName, 'script', type); + object.source = extractDataToFile( + script, + `${id}/${objectFileName}`, + directory + ); + return true; + } catch (error) { + printError(error); + } + return false; +} /** * List mappings * @param {boolean} [long=false] detailed list @@ -155,6 +237,7 @@ export async function exportMappingsToFile( */ export async function exportMappingsToFiles( includeMeta: boolean = true, + extract: boolean, options: MappingExportOptions = { deps: true, useStringArrays: true, @@ -162,20 +245,14 @@ export async function exportMappingsToFiles( ): Promise { try { const exportData = await exportMappings(options); - for (const mapping of Object.values(exportData.mapping)) { - const fileName = getTypedFilename( - mapping.name, - getMappingTypeFromId(mapping._id) - ); - saveToFile( - getMappingTypeFromId(mapping._id), - mapping, - '_id', - getFilePath('mapping/' + fileName, true), - includeMeta - ); - } - writeSyncJsonToDirectory(exportData.sync, 'sync', includeMeta); + writeMappingJsonToDirectory( + exportData.mapping, + 'mapping', + includeMeta, + extract + ); + + writeSyncJsonToDirectory(exportData.sync, 'sync', includeMeta, extract); return true; } catch (error) { printError(error, `Error exporting mappings to files`); @@ -255,18 +332,23 @@ export async function importMappingsFromFiles( const workingDirectory = getWorkingDirectory(); const allMappingFiles = (await readFiles(workingDirectory)).filter( (f) => - f.path.toLowerCase().endsWith('mapping.json') || - f.path.toLowerCase().endsWith('sync.json') || - f.path.toLowerCase().endsWith('sync.idm.json') || - f.path.toLowerCase().endsWith('mapping.idm.json') + f.path.endsWith('mapping.json') || + f.path.endsWith('sync.json') || + f.path.endsWith('sync.idm.json') || + f.path.endsWith('mapping.idm.json') ); - const mapping = Object.fromEntries( - allMappingFiles - .filter((f) => f.path.toLowerCase().endsWith('mapping.json')) - .map((f) => Object.values(JSON.parse(f.content).mapping)) - .flat() - .map((m) => [(m as MappingSkeleton)._id, m]) - ) as Record; + const mappingEntries: [string, MappingSkeleton][] = []; + for (const f of allMappingFiles.filter((f) => + f.path.endsWith('mapping.json') + )) { + const parsed = parseAndResolveMappingFile(f); + mappingEntries.push(...Object.entries(parsed)); + } + const mapping = Object.fromEntries(mappingEntries) as Record< + string, + MappingSkeleton + >; + await importMappings( { mapping, @@ -274,6 +356,7 @@ export async function importMappingsFromFiles( } as MappingExportInterface, options ); + return true; } catch (error) { printError(error, `Error importing mappings from files`); @@ -281,6 +364,27 @@ export async function importMappingsFromFiles( return false; } +/** + * Loads and resolves extracted scripts from a single mapping file. + * @param file A file object with path and content (from readFiles) + * @returns Record of mappings keyed by _id + */ +export function parseAndResolveMappingFile(file: { + path: string; + content: string; +}): Record { + const baseDir = path.dirname(file.path); + const parsed = JSON.parse(file.content); + const mappings = Object.values(parsed.mapping || {}) as MappingSkeleton[]; + + const mappingRecord: Record = {}; + for (const mapping of mappings) { + resolveAllExtractedScriptsForImport(mapping, baseDir); + mappingRecord[mapping._id] = mapping; + } + return mappingRecord; +} + /** * Import first mapping from file * @param {string} file import file name @@ -462,10 +566,19 @@ export async function renameMappings( export function writeSyncJsonToDirectory( sync: SyncSkeleton, directory: string = 'sync', - includeMeta: boolean = true + includeMeta: boolean = true, + extract: boolean ) { const mappingPaths = []; for (const mapping of sync.mappings) { + if (extract) { + const result = findScriptsFromIdm(mapping); + if (result.length !== 0) { + const dirName = getTypedFilename(mapping.name, 'sync', 'scripts'); + //getFilePath(`${directory}/${dirName}`, true); + extractMappingScripts(dirName, mapping, result, `${directory}/`); + } + } const fileName = getTypedFilename(mapping.name, 'sync'); mappingPaths.push(extractDataToFile(mapping, fileName, directory)); } @@ -479,6 +592,38 @@ export function writeSyncJsonToDirectory( ); } +export function writeMappingJsonToDirectory( + mappings: Record, + directory: string = 'mapping', + includeMeta: boolean, + extract: boolean +) { + for (const mapping of Object.values(mappings)) { + if (extract) { + const result = findScriptsFromIdm(mapping); + if (result.length !== 0) { + const dirName = getTypedFilename( + mapping.name, + getMappingTypeFromId(mapping._id), + 'scripts' + ); + extractMappingScripts(dirName, mapping, result, `${directory}/`); + } + } + const fileName = getTypedFilename( + mapping.name, + getMappingTypeFromId(mapping._id) + ); + saveToFile( + getMappingTypeFromId(mapping._id), + mapping, + '_id', + getFilePath(`${directory}/${fileName}`, true), + includeMeta + ); + } +} + /** * Helper that returns the sync.idm.json object containing all the mappings in it by looking through the files * @@ -496,26 +641,50 @@ export function getLegacyMappingsFromFiles( _id: 'sync', mappings: [], }; + if (syncFiles.length === 1) { - const jsonData = JSON.parse(syncFiles[0].content); - const syncData = jsonData.sync ? jsonData.sync : jsonData.idm.sync; - const syncJsonDir = syncFiles[0].path.substring( - 0, - syncFiles[0].path.indexOf('/sync.idm.json') - ); - if (syncData.mappings) { + const file = syncFiles[0]; + const jsonData = JSON.parse(file.content); + const syncData = jsonData.sync ?? jsonData.idm?.sync; + const syncJsonDir = path.dirname(file.path); + if (syncData?.mappings) { for (const mapping of syncData.mappings) { + let resolvedMapping: any; if (typeof mapping === 'string') { - sync.mappings.push(getExtractedJsonData(mapping, syncJsonDir)); + resolvedMapping = getExtractedJsonData(mapping, syncJsonDir); } else { - sync.mappings.push(mapping); + resolvedMapping = mapping; } + resolveAllExtractedScriptsForImport(resolvedMapping, syncJsonDir); + sync.mappings.push(resolvedMapping); } } } + return sync; } +/** + * Helper that returns the sync.idm.json object containing all the mappings in it by looking through the files + * + * @param files the files to get sync.idm.json object from + * @returns the sync.idm.json object + */ +export function getNewMappingsFromFiles( + mappingFiles: { path: string; content: string }[] +): Record { + const mappingEntries: [string, MappingSkeleton][] = []; + for (const f of mappingFiles.filter((f) => f.path.endsWith('mapping.json'))) { + const parsed = parseAndResolveMappingFile(f); + mappingEntries.push(...Object.entries(parsed)); + } + const mapping = Object.fromEntries(mappingEntries) as Record< + string, + MappingSkeleton + >; + return mapping; +} + /** * Helper that gets a mapping's type (either 'sync' or 'mapping') from it's id * @param {string} mappingId the mapping id @@ -539,37 +708,42 @@ export function getMappingNameFromId(mappingId: string): string | undefined { : mappingId; } -/** - * Helper that returns mapping file data as import data - * - * @param {string} file the file path - * @returns {MappingExportInterface} the import data - */ function getMappingImportDataFromFile(file: string): MappingExportInterface { const filePath = getFilePath(file); const data = fs.readFileSync(filePath, 'utf8'); let importData = JSON.parse(data); - //If importing from file not in export format, put it into export format + const baseDir = path.dirname(filePath); + // If importing from file not in export format, put it into export format if (!importData.sync && !importData.mapping) { const mapping = importData; importData = createMappingExportTemplate(); + if (mapping.idm) { importData.sync = getLegacyMappingsFromFiles([ { - // Ensure path ends in /sync.idm.json so it gets processed path: `${filePath.substring(0, filePath.lastIndexOf('/'))}/sync.idm.json`, content: data, }, ]); } else if (isLegacyMapping(mapping._id)) { + resolveAllExtractedScriptsForImport(mapping, baseDir); importData.sync.mappings.push(mapping); } else { + resolveAllExtractedScriptsForImport(mapping, baseDir); importData.mapping[mapping._id] = mapping; } - } else if (!importData.sync && importData.mapping) { + } else { + if (importData.mapping) { + Object.values(importData.mapping).forEach((m) => { + resolveAllExtractedScriptsForImport(m, baseDir); + }); + } + } + if (!importData.sync && importData.mapping) { importData.sync = { id: 'sync', mappings: [] }; } else if (importData.sync && !importData.mapping) { importData.mapping = {}; } + return importData; } diff --git a/src/utils/Config.ts b/src/utils/Config.ts index 38349baab..5f8fd4a23 100644 --- a/src/utils/Config.ts +++ b/src/utils/Config.ts @@ -1,4 +1,5 @@ import { frodo, state } from '@rockcarver/frodo-lib'; +import { IdObjectSkeletonInterface } from '@rockcarver/frodo-lib/types/api/ApiTypes'; import { FullExportInterface, FullGlobalExportInterface, @@ -7,10 +8,17 @@ import { import { ExportMetaData } from '@rockcarver/frodo-lib/types/ops/OpsTypes'; import fs from 'fs'; import os from 'os'; +import path from 'path'; import { readServersFromFiles } from '../ops/classic/ServerOps'; -import { getManagedObjectsFromFiles } from '../ops/IdmOps'; -import { getLegacyMappingsFromFiles } from '../ops/MappingOps'; +import { + getManagedObjectsFromFiles, + resolveAllExtractedScriptsForImport, +} from '../ops/IdmOps'; +import { + getLegacyMappingsFromFiles, + getNewMappingsFromFiles, +} from '../ops/MappingOps'; import { getScriptExportByScriptFile } from '../ops/ScriptOps'; import { errorHandler } from '../ops/utils/OpsUtils'; import { printMessage } from './Console'; @@ -20,6 +28,7 @@ const { getFilePath, readFiles, saveTextToFile, saveJsonToFile } = frodo.utils; const { exportFullConfiguration } = frodo.config; const { getDefaultNoiseFilter } = frodo.cloud.log; +const { IDM_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants; export const FRODO_CONFIG_PATH_KEY = 'FRODO_CONFIG_PATH'; export const FRODO_LOG_NOISEFILTER_FILENAME = 'LoggingNoiseFilter.json'; @@ -111,23 +120,30 @@ export async function getFullExportConfig( export async function getFullExportConfigFromDirectory( directory: string ): Promise { - const realms = fs.readdirSync(directory + '/realm'); + let realms = {} as string[]; + let realmInterface; + if (state.getDeploymentType() !== IDM_DEPLOYMENT_TYPE_KEY) { + realms = fs.readdirSync(directory + '/realm'); + realmInterface = Object.fromEntries( + realms.map((r) => [r, {} as FullRealmExportInterface]) + ); + } const fullExportConfig: FullExportInterface = { meta: {} as ExportMetaData, global: {} as unknown as FullGlobalExportInterface, - realm: Object.fromEntries( - realms.map((r) => [r, {} as FullRealmExportInterface]) - ), + realm: realmInterface, } as FullExportInterface; // Get global await getConfig(fullExportConfig.global, undefined, directory + '/global'); // Get realms - for (const realm of realms) { - await getConfig( - fullExportConfig.realm[realm], - undefined, - directory + '/realm/' + realm - ); + if (state.getDeploymentType() !== IDM_DEPLOYMENT_TYPE_KEY) { + for (const realm of realms) { + await getConfig( + fullExportConfig.realm[realm], + undefined, + directory + '/realm/' + realm + ); + } } return fullExportConfig; } @@ -156,11 +172,24 @@ export async function getConfig( const jsonFiles = files.filter((f) => f.path.endsWith('.json')); const samlFiles = jsonFiles.filter((f) => f.path.endsWith('.saml.json')); const scriptFiles = jsonFiles.filter((f) => f.path.endsWith('.script.json')); + const mappingFiles = jsonFiles.filter((f) => + f.path.endsWith('.mapping.json') + ); const serverFiles = jsonFiles.filter( (f) => f.path.endsWith('.server.json') && !f.path.endsWith('.properties.server.json') ); + const idmFiles = jsonFiles.filter( + (f) => + f.path.endsWith('idm.json') && + !f.path.endsWith('/sync.idm.json') && + !f.path.endsWith('sync.json') && + !f.path.endsWith('/managed.idm.json') && + !f.path.endsWith('managed.json') && + !f.path.endsWith('mapping.idm.json') + ); + const allOtherFiles = jsonFiles.filter( (f) => !f.path.endsWith('.saml.json') && @@ -169,8 +198,10 @@ export async function getConfig( !f.path.endsWith('/sync.idm.json') && !f.path.endsWith('sync.json') && !f.path.endsWith('/managed.idm.json') && - !f.path.endsWith('managed.json') + !f.path.endsWith('managed.json') && + !f.path.endsWith('idm.json') ); + // Handle all other json files for (const f of allOtherFiles) { for (const [id, value] of Object.entries( @@ -188,15 +219,37 @@ export async function getConfig( } } } + for (const f of idmFiles) { + const baseDirOfThisJson = path.dirname(f.path); + const parsed = JSON.parse(f.content); + if (!parsed.idm) continue; + + const entities = Object.values( + parsed.idm + ) as unknown as IdObjectSkeletonInterface[]; + for (const entity of entities) { + resolveAllExtractedScriptsForImport(entity, baseDirOfThisJson); + if (!(exportConfig as FullGlobalExportInterface).idm) { + (exportConfig as FullGlobalExportInterface).idm = {}; + } + (exportConfig as FullGlobalExportInterface).idm[entity._id] = entity; + } + } // Handle sync files const sync = await getLegacyMappingsFromFiles(jsonFiles); if (sync.mappings.length > 0) { (exportConfig as FullGlobalExportInterface).sync = sync; } + if (mappingFiles.length > 0) { + const mapping = await getNewMappingsFromFiles(mappingFiles); + (exportConfig as FullGlobalExportInterface).mapping = mapping; + } + const managed = await getManagedObjectsFromFiles(jsonFiles); if (managed.objects.length > 0) { (exportConfig as FullGlobalExportInterface).idm.managed = managed; } + // Handle saml files if ( samlFiles.length > 0 && @@ -261,7 +314,7 @@ export async function getConfig( export function extractDataToFile( data: any, file: string, - directory?: string + directory?: string, ): string { const filePath = getFilePath((directory ? `${directory}/` : '') + file, true); if (typeof data === 'object') { diff --git a/test/client_cli/en/__snapshots__/admin-add-autoid-static-user-mapping.test.js.snap b/test/client_cli/en/__snapshots__/admin-add-autoid-static-user-mapping.test.js.snap index b55c8d804..75c9ab8f7 100644 --- a/test/client_cli/en/__snapshots__/admin-add-autoid-static-user-mapping.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-add-autoid-static-user-mapping.test.js.snap @@ -69,7 +69,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-create-oauth2-client-with-admin-privileges.test.js.snap b/test/client_cli/en/__snapshots__/admin-create-oauth2-client-with-admin-privileges.test.js.snap index 255e07e34..7bd0429b4 100644 --- a/test/client_cli/en/__snapshots__/admin-create-oauth2-client-with-admin-privileges.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-create-oauth2-client-with-admin-privileges.test.js.snap @@ -91,7 +91,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-llt-esv Don't store the token in a secret and output to console instead. This option diff --git a/test/client_cli/en/__snapshots__/admin-get-access-token.test.js.snap b/test/client_cli/en/__snapshots__/admin-get-access-token.test.js.snap index 3c97ee932..7cdc976cc 100644 --- a/test/client_cli/en/__snapshots__/admin-get-access-token.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-get-access-token.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. -s, --client-secret [secret] Client secret. --sa-id Service account id. diff --git a/test/client_cli/en/__snapshots__/admin-grant-oauth2-client-admin-privileges.test.js.snap b/test/client_cli/en/__snapshots__/admin-grant-oauth2-client-admin-privileges.test.js.snap index 0d949b256..ea34e35dd 100644 --- a/test/client_cli/en/__snapshots__/admin-grant-oauth2-client-admin-privileges.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-grant-oauth2-client-admin-privileges.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-hide-generic-extension-attributes.test.js.snap b/test/client_cli/en/__snapshots__/admin-hide-generic-extension-attributes.test.js.snap index 96e5fe6fd..2a0eab543 100644 --- a/test/client_cli/en/__snapshots__/admin-hide-generic-extension-attributes.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-hide-generic-extension-attributes.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-list-oauth2-clients-with-admin-privileges.test.js.snap b/test/client_cli/en/__snapshots__/admin-list-oauth2-clients-with-admin-privileges.test.js.snap index 998383de8..b4a114bf7 100644 --- a/test/client_cli/en/__snapshots__/admin-list-oauth2-clients-with-admin-privileges.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-list-oauth2-clients-with-admin-privileges.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-list-oauth2-clients-with-custom-privileges.test.js.snap b/test/client_cli/en/__snapshots__/admin-list-oauth2-clients-with-custom-privileges.test.js.snap index 922e02437..ae12e0e56 100644 --- a/test/client_cli/en/__snapshots__/admin-list-oauth2-clients-with-custom-privileges.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-list-oauth2-clients-with-custom-privileges.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-list-static-user-mappings.test.js.snap b/test/client_cli/en/__snapshots__/admin-list-static-user-mappings.test.js.snap index 6235f9b95..40fb0222a 100644 --- a/test/client_cli/en/__snapshots__/admin-list-static-user-mappings.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-list-static-user-mappings.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-remove-static-user-mapping.test.js.snap b/test/client_cli/en/__snapshots__/admin-remove-static-user-mapping.test.js.snap index 550ca843e..3dfcfda8c 100644 --- a/test/client_cli/en/__snapshots__/admin-remove-static-user-mapping.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-remove-static-user-mapping.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-repair-org-model.test.js.snap b/test/client_cli/en/__snapshots__/admin-repair-org-model.test.js.snap index a1b861397..05ec23b8a 100644 --- a/test/client_cli/en/__snapshots__/admin-repair-org-model.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-repair-org-model.test.js.snap @@ -77,7 +77,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-revoke-oauth2-client-admin-privileges.test.js.snap b/test/client_cli/en/__snapshots__/admin-revoke-oauth2-client-admin-privileges.test.js.snap index ec5b8fef1..b7115c067 100644 --- a/test/client_cli/en/__snapshots__/admin-revoke-oauth2-client-admin-privileges.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-revoke-oauth2-client-admin-privileges.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/admin-show-generic-extension-attributes.test.js.snap b/test/client_cli/en/__snapshots__/admin-show-generic-extension-attributes.test.js.snap index df5163fc9..b757bc5cb 100644 --- a/test/client_cli/en/__snapshots__/admin-show-generic-extension-attributes.test.js.snap +++ b/test/client_cli/en/__snapshots__/admin-show-generic-extension-attributes.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-delete.test.js.snap b/test/client_cli/en/__snapshots__/agent-delete.test.js.snap index 8723663b1..e5f68d0fb 100644 --- a/test/client_cli/en/__snapshots__/agent-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-delete.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-describe.test.js.snap b/test/client_cli/en/__snapshots__/agent-describe.test.js.snap index c51ae5e4e..37ee4abe3 100644 --- a/test/client_cli/en/__snapshots__/agent-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-describe.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-export.test.js.snap b/test/client_cli/en/__snapshots__/agent-export.test.js.snap index 140f21f16..5202032a9 100644 --- a/test/client_cli/en/__snapshots__/agent-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-export.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/agent-gateway-delete.test.js.snap b/test/client_cli/en/__snapshots__/agent-gateway-delete.test.js.snap index bc58fdf8f..c9c83c144 100644 --- a/test/client_cli/en/__snapshots__/agent-gateway-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-gateway-delete.test.js.snap @@ -75,7 +75,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-gateway-describe.test.js.snap b/test/client_cli/en/__snapshots__/agent-gateway-describe.test.js.snap index 79f939fb4..a81b5797d 100644 --- a/test/client_cli/en/__snapshots__/agent-gateway-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-gateway-describe.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-gateway-export.test.js.snap b/test/client_cli/en/__snapshots__/agent-gateway-export.test.js.snap index ce89b195a..c44242797 100644 --- a/test/client_cli/en/__snapshots__/agent-gateway-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-gateway-export.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/agent-gateway-import.test.js.snap b/test/client_cli/en/__snapshots__/agent-gateway-import.test.js.snap index d67b2c9f2..b6c5e9610 100644 --- a/test/client_cli/en/__snapshots__/agent-gateway-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-gateway-import.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-gateway-list.test.js.snap b/test/client_cli/en/__snapshots__/agent-gateway-list.test.js.snap index d9fbf7810..543b0b891 100644 --- a/test/client_cli/en/__snapshots__/agent-gateway-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-gateway-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-import.test.js.snap b/test/client_cli/en/__snapshots__/agent-import.test.js.snap index 3d8bb5213..f97158839 100644 --- a/test/client_cli/en/__snapshots__/agent-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-import.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-java-delete.test.js.snap b/test/client_cli/en/__snapshots__/agent-java-delete.test.js.snap index c2624a67d..33d3d961e 100644 --- a/test/client_cli/en/__snapshots__/agent-java-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-java-delete.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-java-describe.test.js.snap b/test/client_cli/en/__snapshots__/agent-java-describe.test.js.snap index 2cfbf6770..91e84b832 100644 --- a/test/client_cli/en/__snapshots__/agent-java-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-java-describe.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-java-export.test.js.snap b/test/client_cli/en/__snapshots__/agent-java-export.test.js.snap index 940f712c9..82eee9656 100644 --- a/test/client_cli/en/__snapshots__/agent-java-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-java-export.test.js.snap @@ -80,7 +80,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/agent-java-import.test.js.snap b/test/client_cli/en/__snapshots__/agent-java-import.test.js.snap index 53afa6b74..b582ec7e2 100644 --- a/test/client_cli/en/__snapshots__/agent-java-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-java-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-java-list.test.js.snap b/test/client_cli/en/__snapshots__/agent-java-list.test.js.snap index 45b53f8c9..6a4046ca5 100644 --- a/test/client_cli/en/__snapshots__/agent-java-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-java-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-list.test.js.snap b/test/client_cli/en/__snapshots__/agent-list.test.js.snap index 6700357b3..744da79de 100644 --- a/test/client_cli/en/__snapshots__/agent-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-list.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-web-delete.test.js.snap b/test/client_cli/en/__snapshots__/agent-web-delete.test.js.snap index a311eab31..f095d2c42 100644 --- a/test/client_cli/en/__snapshots__/agent-web-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-web-delete.test.js.snap @@ -75,7 +75,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-web-describe.test.js.snap b/test/client_cli/en/__snapshots__/agent-web-describe.test.js.snap index b82e5ab1a..85b3fc0b8 100644 --- a/test/client_cli/en/__snapshots__/agent-web-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-web-describe.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-web-export.test.js.snap b/test/client_cli/en/__snapshots__/agent-web-export.test.js.snap index 2a817336e..50a9d6ec2 100644 --- a/test/client_cli/en/__snapshots__/agent-web-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-web-export.test.js.snap @@ -80,7 +80,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/agent-web-import.test.js.snap b/test/client_cli/en/__snapshots__/agent-web-import.test.js.snap index 4649f8318..32afb4a18 100644 --- a/test/client_cli/en/__snapshots__/agent-web-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-web-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/agent-web-list.test.js.snap b/test/client_cli/en/__snapshots__/agent-web-list.test.js.snap index 5f1331447..7af59f4cf 100644 --- a/test/client_cli/en/__snapshots__/agent-web-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/agent-web-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/app-delete.test.js.snap b/test/client_cli/en/__snapshots__/app-delete.test.js.snap index 592f2d02d..02f49ff94 100644 --- a/test/client_cli/en/__snapshots__/app-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/app-delete.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deep No deep delete. This leaves orphaned configuration artifacts behind. diff --git a/test/client_cli/en/__snapshots__/app-export.test.js.snap b/test/client_cli/en/__snapshots__/app-export.test.js.snap index 1de27341d..da396fda5 100644 --- a/test/client_cli/en/__snapshots__/app-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/app-export.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/app-import.test.js.snap b/test/client_cli/en/__snapshots__/app-import.test.js.snap index 0f4513e73..cdea09887 100644 --- a/test/client_cli/en/__snapshots__/app-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/app-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deps Do not include any dependencies (scripts). diff --git a/test/client_cli/en/__snapshots__/app-list.test.js.snap b/test/client_cli/en/__snapshots__/app-list.test.js.snap index 5766b42f9..6fcbfa2dc 100644 --- a/test/client_cli/en/__snapshots__/app-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/app-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/authn-describe.test.js.snap b/test/client_cli/en/__snapshots__/authn-describe.test.js.snap index 9529aeaca..3ab653462 100644 --- a/test/client_cli/en/__snapshots__/authn-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/authn-describe.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/authn-export.test.js.snap b/test/client_cli/en/__snapshots__/authn-export.test.js.snap index a205c3e38..cc09c7b72 100644 --- a/test/client_cli/en/__snapshots__/authn-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/authn-export.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/authn-import.test.js.snap b/test/client_cli/en/__snapshots__/authn-import.test.js.snap index e1bdc4073..437693a72 100644 --- a/test/client_cli/en/__snapshots__/authn-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/authn-import.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/authz-policy-delete.test.js.snap b/test/client_cli/en/__snapshots__/authz-policy-delete.test.js.snap index 744499154..49495c6a4 100644 --- a/test/client_cli/en/__snapshots__/authz-policy-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-policy-delete.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/authz-policy-describe.test.js.snap b/test/client_cli/en/__snapshots__/authz-policy-describe.test.js.snap index a57f9a3f6..1d57d51fa 100644 --- a/test/client_cli/en/__snapshots__/authz-policy-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-policy-describe.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/authz-policy-export.test.js.snap b/test/client_cli/en/__snapshots__/authz-policy-export.test.js.snap index f574540ab..98b6f309f 100644 --- a/test/client_cli/en/__snapshots__/authz-policy-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-policy-export.test.js.snap @@ -80,7 +80,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/authz-policy-import.test.js.snap b/test/client_cli/en/__snapshots__/authz-policy-import.test.js.snap index 18ce5583e..09f1dc204 100644 --- a/test/client_cli/en/__snapshots__/authz-policy-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-policy-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deps Do not import dependencies (scripts) even if they are available in the import diff --git a/test/client_cli/en/__snapshots__/authz-policy-list.test.js.snap b/test/client_cli/en/__snapshots__/authz-policy-list.test.js.snap index bf357cc9a..3fb17f780 100644 --- a/test/client_cli/en/__snapshots__/authz-policy-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-policy-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/authz-set-delete.test.js.snap b/test/client_cli/en/__snapshots__/authz-set-delete.test.js.snap index 390602502..e03e6e026 100644 --- a/test/client_cli/en/__snapshots__/authz-set-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-set-delete.test.js.snap @@ -75,7 +75,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/authz-set-describe.test.js.snap b/test/client_cli/en/__snapshots__/authz-set-describe.test.js.snap index 7eb683e1e..b488af397 100644 --- a/test/client_cli/en/__snapshots__/authz-set-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-set-describe.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/authz-set-export.test.js.snap b/test/client_cli/en/__snapshots__/authz-set-export.test.js.snap index 073ee7c73..d9bba2695 100644 --- a/test/client_cli/en/__snapshots__/authz-set-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-set-export.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/authz-set-import.test.js.snap b/test/client_cli/en/__snapshots__/authz-set-import.test.js.snap index ac611010f..858e63a3f 100644 --- a/test/client_cli/en/__snapshots__/authz-set-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-set-import.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deps Do not include any dependencies (policies, scripts). diff --git a/test/client_cli/en/__snapshots__/authz-type-delete.test.js.snap b/test/client_cli/en/__snapshots__/authz-type-delete.test.js.snap index 9197713ce..79d04dc3d 100644 --- a/test/client_cli/en/__snapshots__/authz-type-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-type-delete.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --type-name Resource type name. If specified, -a is ignored. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/authz-type-describe.test.js.snap b/test/client_cli/en/__snapshots__/authz-type-describe.test.js.snap index a372d1b2f..b0b042202 100644 --- a/test/client_cli/en/__snapshots__/authz-type-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-type-describe.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --type-name Resource type name. --no-cache Disable token cache for this operation. --sa-id Service account id. diff --git a/test/client_cli/en/__snapshots__/authz-type-export.test.js.snap b/test/client_cli/en/__snapshots__/authz-type-export.test.js.snap index f1937ef7c..136d20455 100644 --- a/test/client_cli/en/__snapshots__/authz-type-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-type-export.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --type-name Resource type name. If specified, -a and -A are ignored. -N, --no-metadata Does not include metadata in the export diff --git a/test/client_cli/en/__snapshots__/authz-type-import.test.js.snap b/test/client_cli/en/__snapshots__/authz-type-import.test.js.snap index b72e1a2ec..94c65b5cb 100644 --- a/test/client_cli/en/__snapshots__/authz-type-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-type-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --type-name Resource type name. If specified, -a and -A are ignored. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/authz-type-list.test.js.snap b/test/client_cli/en/__snapshots__/authz-type-list.test.js.snap index d517950ce..9d7f2034a 100644 --- a/test/client_cli/en/__snapshots__/authz-type-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/authz-type-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/config-export.test.js.snap b/test/client_cli/en/__snapshots__/config-export.test.js.snap index 4b7ffd871..9d59b5666 100644 --- a/test/client_cli/en/__snapshots__/config-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-export.test.js.snap @@ -97,7 +97,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/config-import.test.js.snap b/test/client_cli/en/__snapshots__/config-import.test.js.snap index f1b55e7e6..b1969a6ff 100644 --- a/test/client_cli/en/__snapshots__/config-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-import.test.js.snap @@ -94,7 +94,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --re-uuid-journeys Generate new UUIDs for all journey nodes during import. (default: off) diff --git a/test/client_cli/en/__snapshots__/conn-save.test.js.snap b/test/client_cli/en/__snapshots__/conn-save.test.js.snap index 6bc294566..3d8808957 100644 --- a/test/client_cli/en/__snapshots__/conn-save.test.js.snap +++ b/test/client_cli/en/__snapshots__/conn-save.test.js.snap @@ -28,7 +28,7 @@ Options: classic: A classic Access Management-only deployment with custom layout and configuration. cloud: A ForgeRock Identity Cloud environment. forgeops: A ForgeOps CDK or CDM deployment. - The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops") + The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops", "idm") --no-cache Disable token cache for this operation. --no-log-api Do not create and add log API key and secret. --no-sa Do not create and add service account. @@ -96,7 +96,7 @@ Options: classic: A classic Access Management-only deployment with custom layout and configuration. cloud: A ForgeRock Identity Cloud environment. forgeops: A ForgeOps CDK or CDM deployment. - The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops") + The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops", "idm") --no-cache Disable token cache for this operation. --no-log-api Do not create and add log API key and secret. --no-sa Do not create and add service account. @@ -164,7 +164,7 @@ Options: classic: A classic Access Management-only deployment with custom layout and configuration. cloud: A ForgeRock Identity Cloud environment. forgeops: A ForgeOps CDK or CDM deployment. - The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops") + The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops", "idm") --no-cache Disable token cache for this operation. --no-log-api Do not create and add log API key and secret. --no-sa Do not create and add service account. @@ -232,7 +232,7 @@ Options: classic: A classic Access Management-only deployment with custom layout and configuration. cloud: A ForgeRock Identity Cloud environment. forgeops: A ForgeOps CDK or CDM deployment. - The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops") + The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops", "idm") --no-cache Disable token cache for this operation. --no-log-api Do not create and add log API key and secret. --no-sa Do not create and add service account. diff --git a/test/client_cli/en/__snapshots__/email-template-export.test.js.snap b/test/client_cli/en/__snapshots__/email-template-export.test.js.snap index 3053f1191..3050770bb 100644 --- a/test/client_cli/en/__snapshots__/email-template-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/email-template-export.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/email-template-import.test.js.snap b/test/client_cli/en/__snapshots__/email-template-import.test.js.snap index 3ec645b61..36b1f92f0 100644 --- a/test/client_cli/en/__snapshots__/email-template-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/email-template-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --raw Import raw email template files. Raw templates do not contain the id/name, diff --git a/test/client_cli/en/__snapshots__/email-template-list.test.js.snap b/test/client_cli/en/__snapshots__/email-template-list.test.js.snap index 190cab019..c405d106f 100644 --- a/test/client_cli/en/__snapshots__/email-template-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/email-template-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-apply.test.js.snap b/test/client_cli/en/__snapshots__/esv-apply.test.js.snap index 65ed568a1..d2b1d6b46 100644 --- a/test/client_cli/en/__snapshots__/esv-apply.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-apply.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-wait Don't wait for the updates to finish applying. diff --git a/test/client_cli/en/__snapshots__/esv-secret-create.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-create.test.js.snap index 9c4f96b97..72e9d5765 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-create.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-create.test.js.snap @@ -75,7 +75,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-use-in-placeholders Secret cannot be used in placeholders. --sa-id Service account id. diff --git a/test/client_cli/en/__snapshots__/esv-secret-delete.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-delete.test.js.snap index 9720ca71d..67169ce31 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-delete.test.js.snap @@ -71,7 +71,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-describe.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-describe.test.js.snap index 5629e72e7..8238675f5 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-describe.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-export.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-export.test.js.snap index 6f5f6cce3..c0a42da3d 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-export.test.js.snap @@ -83,7 +83,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/esv-secret-import.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-import.test.js.snap index 6a790b0dc..a0311175f 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-import.test.js.snap @@ -84,7 +84,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-list.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-list.test.js.snap index 20dc280b3..0a33b3cd9 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-list.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-set.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-set.test.js.snap index 441356f70..9a07b8cf8 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-set.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-set.test.js.snap @@ -70,7 +70,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-version-activate.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-version-activate.test.js.snap index f14c2bbff..03ddf6447 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-version-activate.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-version-activate.test.js.snap @@ -69,7 +69,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-version-create.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-version-create.test.js.snap index 53f96e356..c9f2f4f79 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-version-create.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-version-create.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-version-deactivate.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-version-deactivate.test.js.snap index 51a18724f..d2ea0adec 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-version-deactivate.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-version-deactivate.test.js.snap @@ -69,7 +69,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-version-delete.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-version-delete.test.js.snap index b1fbc393e..255e9aec8 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-version-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-version-delete.test.js.snap @@ -71,7 +71,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-secret-version-list.test.js.snap b/test/client_cli/en/__snapshots__/esv-secret-version-list.test.js.snap index 839962660..6fc12341b 100644 --- a/test/client_cli/en/__snapshots__/esv-secret-version-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-secret-version-list.test.js.snap @@ -70,7 +70,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-variable-create.test.js.snap b/test/client_cli/en/__snapshots__/esv-variable-create.test.js.snap index 57774a259..1575828ea 100644 --- a/test/client_cli/en/__snapshots__/esv-variable-create.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-variable-create.test.js.snap @@ -70,7 +70,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-variable-delete.test.js.snap b/test/client_cli/en/__snapshots__/esv-variable-delete.test.js.snap index bcf382eb6..cec130982 100644 --- a/test/client_cli/en/__snapshots__/esv-variable-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-variable-delete.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deep No deep delete. This leaves orphaned configuration artifacts behind. diff --git a/test/client_cli/en/__snapshots__/esv-variable-describe.test.js.snap b/test/client_cli/en/__snapshots__/esv-variable-describe.test.js.snap index e3bfa6d47..196edef46 100644 --- a/test/client_cli/en/__snapshots__/esv-variable-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-variable-describe.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-variable-export.test.js.snap b/test/client_cli/en/__snapshots__/esv-variable-export.test.js.snap index 2e01d8792..f5d8faffc 100644 --- a/test/client_cli/en/__snapshots__/esv-variable-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-variable-export.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/esv-variable-import.test.js.snap b/test/client_cli/en/__snapshots__/esv-variable-import.test.js.snap index 4727ab958..ac88294ac 100644 --- a/test/client_cli/en/__snapshots__/esv-variable-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-variable-import.test.js.snap @@ -77,7 +77,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-variable-list.test.js.snap b/test/client_cli/en/__snapshots__/esv-variable-list.test.js.snap index f40191719..5dfe5f484 100644 --- a/test/client_cli/en/__snapshots__/esv-variable-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-variable-list.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/esv-variable-set.test.js.snap b/test/client_cli/en/__snapshots__/esv-variable-set.test.js.snap index 8237a6b6f..78f4ddd5b 100644 --- a/test/client_cli/en/__snapshots__/esv-variable-set.test.js.snap +++ b/test/client_cli/en/__snapshots__/esv-variable-set.test.js.snap @@ -70,7 +70,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/idm-count.test.js.snap b/test/client_cli/en/__snapshots__/idm-count.test.js.snap index 1ceeb4636..bfdf419e1 100644 --- a/test/client_cli/en/__snapshots__/idm-count.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-count.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. -o, --managed-object Type of managed object to count. E.g. "alpha_user", "alpha_role", "user", diff --git a/test/client_cli/en/__snapshots__/idm-delete.test.js.snap b/test/client_cli/en/__snapshots__/idm-delete.test.js.snap index aaecb77aa..5671cd406 100644 --- a/test/client_cli/en/__snapshots__/idm-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-delete.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/idm-export.test.js.snap b/test/client_cli/en/__snapshots__/idm-export.test.js.snap index da40cbe0c..f8f284850 100644 --- a/test/client_cli/en/__snapshots__/idm-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-export.test.js.snap @@ -88,7 +88,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. @@ -103,6 +103,9 @@ Options: --verbose Verbose output during command execution. If specified, may or may not produce additional output. + -x, --extract Extract the scripts from the exported + file, and save it to a separate file. + Ignored with -a. Environment Variables: FRODO_HOST: AM base URL. Overridden by 'host' argument. diff --git a/test/client_cli/en/__snapshots__/idm-import.test.js.snap b/test/client_cli/en/__snapshots__/idm-import.test.js.snap index 2365775c9..506f66e5e 100644 --- a/test/client_cli/en/__snapshots__/idm-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-import.test.js.snap @@ -86,7 +86,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/idm-list.test.js.snap b/test/client_cli/en/__snapshots__/idm-list.test.js.snap index 91a77306a..3fdeac7d8 100644 --- a/test/client_cli/en/__snapshots__/idm-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-list.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/idm-schema-object-export.test.js.snap b/test/client_cli/en/__snapshots__/idm-schema-object-export.test.js.snap index 4ec904db0..ade223f95 100644 --- a/test/client_cli/en/__snapshots__/idm-schema-object-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-schema-object-export.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/idm-schema-object-import.test.js.snap b/test/client_cli/en/__snapshots__/idm-schema-object-import.test.js.snap index 4ec904db0..ade223f95 100644 --- a/test/client_cli/en/__snapshots__/idm-schema-object-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-schema-object-import.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/idp-delete.test.js.snap b/test/client_cli/en/__snapshots__/idp-delete.test.js.snap index 99b7a467a..713962c7a 100644 --- a/test/client_cli/en/__snapshots__/idp-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/idp-delete.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/idp-export.test.js.snap b/test/client_cli/en/__snapshots__/idp-export.test.js.snap index bb57f882f..4dd5af7ca 100644 --- a/test/client_cli/en/__snapshots__/idp-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/idp-export.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/idp-import.test.js.snap b/test/client_cli/en/__snapshots__/idp-import.test.js.snap index 6c4130b49..658bee668 100644 --- a/test/client_cli/en/__snapshots__/idp-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/idp-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deps Do not include any dependencies (scripts). diff --git a/test/client_cli/en/__snapshots__/idp-list.test.js.snap b/test/client_cli/en/__snapshots__/idp-list.test.js.snap index 72135d594..dbb15e4a9 100644 --- a/test/client_cli/en/__snapshots__/idp-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/idp-list.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/info.test.js.snap b/test/client_cli/en/__snapshots__/info.test.js.snap index 7b378eb21..fdf8b4d61 100644 --- a/test/client_cli/en/__snapshots__/info.test.js.snap +++ b/test/client_cli/en/__snapshots__/info.test.js.snap @@ -69,7 +69,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/journey-delete.test.js.snap b/test/client_cli/en/__snapshots__/journey-delete.test.js.snap index 8645489e1..d6a623a0a 100644 --- a/test/client_cli/en/__snapshots__/journey-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/journey-delete.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deep No deep delete. This leaves orphaned configuration artifacts behind. diff --git a/test/client_cli/en/__snapshots__/journey-describe.test.js.snap b/test/client_cli/en/__snapshots__/journey-describe.test.js.snap index 2be83270d..e2571badf 100644 --- a/test/client_cli/en/__snapshots__/journey-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/journey-describe.test.js.snap @@ -79,7 +79,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --markdown Output in markdown. --no-cache Disable token cache for this operation. -o, --override-version Override version. Notation: diff --git a/test/client_cli/en/__snapshots__/journey-disable.test.js.snap b/test/client_cli/en/__snapshots__/journey-disable.test.js.snap index 90bbd60d2..b6a700566 100644 --- a/test/client_cli/en/__snapshots__/journey-disable.test.js.snap +++ b/test/client_cli/en/__snapshots__/journey-disable.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/journey-enable.test.js.snap b/test/client_cli/en/__snapshots__/journey-enable.test.js.snap index c0dd964b2..57d74a3ec 100644 --- a/test/client_cli/en/__snapshots__/journey-enable.test.js.snap +++ b/test/client_cli/en/__snapshots__/journey-enable.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/journey-export.test.js.snap b/test/client_cli/en/__snapshots__/journey-export.test.js.snap index c17a8d94e..8bfdc7c58 100644 --- a/test/client_cli/en/__snapshots__/journey-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/journey-export.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/journey-import.test.js.snap b/test/client_cli/en/__snapshots__/journey-import.test.js.snap index 4047dc74b..4cf22c487 100644 --- a/test/client_cli/en/__snapshots__/journey-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/journey-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deps Do not include any dependencies (scripts, email templates, SAML entity diff --git a/test/client_cli/en/__snapshots__/journey-list.test.js.snap b/test/client_cli/en/__snapshots__/journey-list.test.js.snap index e9579d4e2..08f01a8bb 100644 --- a/test/client_cli/en/__snapshots__/journey-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/journey-list.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/journey-prune.test.js.snap b/test/client_cli/en/__snapshots__/journey-prune.test.js.snap index 7e657abbc..3f51b962d 100644 --- a/test/client_cli/en/__snapshots__/journey-prune.test.js.snap +++ b/test/client_cli/en/__snapshots__/journey-prune.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/log-fetch.test.js.snap b/test/client_cli/en/__snapshots__/log-fetch.test.js.snap index 378545575..4a01a413d 100644 --- a/test/client_cli/en/__snapshots__/log-fetch.test.js.snap +++ b/test/client_cli/en/__snapshots__/log-fetch.test.js.snap @@ -93,7 +93,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. -s, --search-string Filter by a specific string (ANDed with transactionID filter) @@ -221,7 +221,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. -s, --search-string Filter by a specific string (ANDed with transactionID filter) diff --git a/test/client_cli/en/__snapshots__/log-list.test.js.snap b/test/client_cli/en/__snapshots__/log-list.test.js.snap index b869cc629..d5dce03c8 100644 --- a/test/client_cli/en/__snapshots__/log-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/log-list.test.js.snap @@ -68,7 +68,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) @@ -168,7 +168,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/log-tail.test.js.snap b/test/client_cli/en/__snapshots__/log-tail.test.js.snap index 1385dd60e..fab8d5185 100644 --- a/test/client_cli/en/__snapshots__/log-tail.test.js.snap +++ b/test/client_cli/en/__snapshots__/log-tail.test.js.snap @@ -83,7 +83,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) @@ -199,7 +199,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/mapping-delete.test.js.snap b/test/client_cli/en/__snapshots__/mapping-delete.test.js.snap index 0711bcf73..d27259c26 100644 --- a/test/client_cli/en/__snapshots__/mapping-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/mapping-delete.test.js.snap @@ -28,7 +28,7 @@ Options: classic: A classic Access Management-only deployment with custom layout and configuration. cloud: A ForgeRock Identity Cloud environment. forgeops: A ForgeOps CDK or CDM deployment. - The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops") + The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) associated with the the service account. diff --git a/test/client_cli/en/__snapshots__/mapping-export.test.js.snap b/test/client_cli/en/__snapshots__/mapping-export.test.js.snap index 065a57e9d..d74dcf221 100644 --- a/test/client_cli/en/__snapshots__/mapping-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/mapping-export.test.js.snap @@ -30,7 +30,7 @@ Options: classic: A classic Access Management-only deployment with custom layout and configuration. cloud: A ForgeRock Identity Cloud environment. forgeops: A ForgeOps CDK or CDM deployment. - The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops") + The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. --no-deps Do not include any dependencies in export. @@ -39,6 +39,7 @@ Options: -t, --managed-object-type Managed object type. If specified, limits mappings to that particular managed object type. Ignored with -i. --use-string-arrays Where applicable, use string arrays to store multi-line text (e.g. scripts). (default: off) --verbose Verbose output during command execution. If specified, may or may not produce additional output. + -x, --extract Extract the script from the exported file, and save it to a separate file. Ignored with -a. Environment Variables: FRODO_HOST: AM base URL. Overridden by 'host' argument. diff --git a/test/client_cli/en/__snapshots__/mapping-import.test.js.snap b/test/client_cli/en/__snapshots__/mapping-import.test.js.snap index c83159977..0f64db4fa 100644 --- a/test/client_cli/en/__snapshots__/mapping-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/mapping-import.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deps Do not include any dependencies. --sa-id Service account id. diff --git a/test/client_cli/en/__snapshots__/mapping-list.test.js.snap b/test/client_cli/en/__snapshots__/mapping-list.test.js.snap index fa6581dab..52c6c075f 100644 --- a/test/client_cli/en/__snapshots__/mapping-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/mapping-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/mapping-rename.test.js.snap b/test/client_cli/en/__snapshots__/mapping-rename.test.js.snap index 8450139b9..5245f2137 100644 --- a/test/client_cli/en/__snapshots__/mapping-rename.test.js.snap +++ b/test/client_cli/en/__snapshots__/mapping-rename.test.js.snap @@ -86,7 +86,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/oauth-client-delete.test.js.snap b/test/client_cli/en/__snapshots__/oauth-client-delete.test.js.snap index f4643f35a..6d5f1a2b1 100644 --- a/test/client_cli/en/__snapshots__/oauth-client-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/oauth-client-delete.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deep No deep delete. This leaves orphaned configuration artifacts behind. diff --git a/test/client_cli/en/__snapshots__/oauth-client-export.test.js.snap b/test/client_cli/en/__snapshots__/oauth-client-export.test.js.snap index 10e8aa7f7..d0027129a 100644 --- a/test/client_cli/en/__snapshots__/oauth-client-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/oauth-client-export.test.js.snap @@ -80,7 +80,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/oauth-client-import.test.js.snap b/test/client_cli/en/__snapshots__/oauth-client-import.test.js.snap index 0439dc5a6..eb082cc07 100644 --- a/test/client_cli/en/__snapshots__/oauth-client-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/oauth-client-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deps Do not include any dependencies (scripts). diff --git a/test/client_cli/en/__snapshots__/oauth-client-list.test.js.snap b/test/client_cli/en/__snapshots__/oauth-client-list.test.js.snap index de5402261..8b407940d 100644 --- a/test/client_cli/en/__snapshots__/oauth-client-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/oauth-client-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/promote.test.js.snap b/test/client_cli/en/__snapshots__/promote.test.js.snap index 2f5865035..65b67602b 100644 --- a/test/client_cli/en/__snapshots__/promote.test.js.snap +++ b/test/client_cli/en/__snapshots__/promote.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -M, --master-dir The directory where the master configurations is located. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/realm-add-custom-domain.test.js.snap b/test/client_cli/en/__snapshots__/realm-add-custom-domain.test.js.snap index 0fda55a2e..8bd4214a3 100644 --- a/test/client_cli/en/__snapshots__/realm-add-custom-domain.test.js.snap +++ b/test/client_cli/en/__snapshots__/realm-add-custom-domain.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/realm-describe.test.js.snap b/test/client_cli/en/__snapshots__/realm-describe.test.js.snap index 05ef9d0d8..cc6763b19 100644 --- a/test/client_cli/en/__snapshots__/realm-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/realm-describe.test.js.snap @@ -72,7 +72,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/realm-export.test.js.snap b/test/client_cli/en/__snapshots__/realm-export.test.js.snap index b59a2ef07..83b3c65f1 100644 --- a/test/client_cli/en/__snapshots__/realm-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/realm-export.test.js.snap @@ -80,7 +80,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --realm-name Realm name. If specified, -a and -A are ignored. -N, --no-metadata Does not include metadata in the export diff --git a/test/client_cli/en/__snapshots__/realm-import.test.js.snap b/test/client_cli/en/__snapshots__/realm-import.test.js.snap index 686b58f2b..0d56fd599 100644 --- a/test/client_cli/en/__snapshots__/realm-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/realm-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --realm-name Realm name. If specified, only one realm is imported and the options -a and -A are ignored. diff --git a/test/client_cli/en/__snapshots__/realm-list.test.js.snap b/test/client_cli/en/__snapshots__/realm-list.test.js.snap index a1effb3ea..a1509b0b7 100644 --- a/test/client_cli/en/__snapshots__/realm-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/realm-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/realm-remove-custom-domain.test.js.snap b/test/client_cli/en/__snapshots__/realm-remove-custom-domain.test.js.snap index e3af3148b..729187257 100644 --- a/test/client_cli/en/__snapshots__/realm-remove-custom-domain.test.js.snap +++ b/test/client_cli/en/__snapshots__/realm-remove-custom-domain.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/role-export.test.js.snap b/test/client_cli/en/__snapshots__/role-export.test.js.snap index 6a59049ee..fd2b2782e 100644 --- a/test/client_cli/en/__snapshots__/role-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/role-export.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --role-name Internal role name. If specified, only one internal role is exported and the options -a and -A are ignored. diff --git a/test/client_cli/en/__snapshots__/role-import.test.js.snap b/test/client_cli/en/__snapshots__/role-import.test.js.snap index 67196159f..96e589f1c 100644 --- a/test/client_cli/en/__snapshots__/role-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/role-import.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --role-name Internal role name. If specified, only one internal role is imported and the options -a and -A are ignored. diff --git a/test/client_cli/en/__snapshots__/role-list.test.js.snap b/test/client_cli/en/__snapshots__/role-list.test.js.snap index e97092410..cdccff717 100644 --- a/test/client_cli/en/__snapshots__/role-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/role-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/saml-cot-export.test.js.snap b/test/client_cli/en/__snapshots__/saml-cot-export.test.js.snap index 0d46a2a79..7a5197937 100644 --- a/test/client_cli/en/__snapshots__/saml-cot-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-cot-export.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/saml-cot-import.test.js.snap b/test/client_cli/en/__snapshots__/saml-cot-import.test.js.snap index dc88c059e..5f6f07301 100644 --- a/test/client_cli/en/__snapshots__/saml-cot-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-cot-import.test.js.snap @@ -83,7 +83,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/saml-cot-list.test.js.snap b/test/client_cli/en/__snapshots__/saml-cot-list.test.js.snap index 86559f430..b12960cd8 100644 --- a/test/client_cli/en/__snapshots__/saml-cot-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-cot-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/saml-delete.test.js.snap b/test/client_cli/en/__snapshots__/saml-delete.test.js.snap index 0b4754f19..08f3c62c7 100644 --- a/test/client_cli/en/__snapshots__/saml-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-delete.test.js.snap @@ -75,7 +75,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/saml-describe.test.js.snap b/test/client_cli/en/__snapshots__/saml-describe.test.js.snap index 5623e1014..9e31dfcc7 100644 --- a/test/client_cli/en/__snapshots__/saml-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-describe.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/saml-export.test.js.snap b/test/client_cli/en/__snapshots__/saml-export.test.js.snap index 5056f3887..6143b9e1e 100644 --- a/test/client_cli/en/__snapshots__/saml-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-export.test.js.snap @@ -84,7 +84,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/saml-import.test.js.snap b/test/client_cli/en/__snapshots__/saml-import.test.js.snap index b1192f2ef..5e405c37b 100644 --- a/test/client_cli/en/__snapshots__/saml-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-import.test.js.snap @@ -83,7 +83,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-deps Do not include any dependencies (scripts). diff --git a/test/client_cli/en/__snapshots__/saml-list.test.js.snap b/test/client_cli/en/__snapshots__/saml-list.test.js.snap index 5b944cc3f..6480f541e 100644 --- a/test/client_cli/en/__snapshots__/saml-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/saml-metadata-export.test.js.snap b/test/client_cli/en/__snapshots__/saml-metadata-export.test.js.snap index c19a1d519..ce64912e7 100644 --- a/test/client_cli/en/__snapshots__/saml-metadata-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/saml-metadata-export.test.js.snap @@ -78,7 +78,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/script-delete.test.js.snap b/test/client_cli/en/__snapshots__/script-delete.test.js.snap index 182e76faf..9a01ae87e 100644 --- a/test/client_cli/en/__snapshots__/script-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/script-delete.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --script-name Name of the script. If specified, -a and -A are ignored. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/script-describe.test.js.snap b/test/client_cli/en/__snapshots__/script-describe.test.js.snap index a7a5432a4..810c1888a 100644 --- a/test/client_cli/en/__snapshots__/script-describe.test.js.snap +++ b/test/client_cli/en/__snapshots__/script-describe.test.js.snap @@ -78,7 +78,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --script-name Name of the script. --no-cache Disable token cache for this operation. --sa-id Service account id. diff --git a/test/client_cli/en/__snapshots__/script-export.test.js.snap b/test/client_cli/en/__snapshots__/script-export.test.js.snap index fd16724a3..58874c4ec 100644 --- a/test/client_cli/en/__snapshots__/script-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/script-export.test.js.snap @@ -82,7 +82,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --script-name Name of the script. If specified, -a and -A are ignored. -N, --no-metadata Does not include metadata in the export diff --git a/test/client_cli/en/__snapshots__/script-import.test.js.snap b/test/client_cli/en/__snapshots__/script-import.test.js.snap index 72cd828da..8cfadfd55 100644 --- a/test/client_cli/en/__snapshots__/script-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/script-import.test.js.snap @@ -80,7 +80,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --script-name Name of the script. If specified, -a and -A are ignored. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/script-list.test.js.snap b/test/client_cli/en/__snapshots__/script-list.test.js.snap index bf3dc5c33..bdb807feb 100644 --- a/test/client_cli/en/__snapshots__/script-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/script-list.test.js.snap @@ -78,7 +78,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/server-export.test.js.snap b/test/client_cli/en/__snapshots__/server-export.test.js.snap index 9d2d44c20..5c10413c2 100644 --- a/test/client_cli/en/__snapshots__/server-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/server-export.test.js.snap @@ -83,7 +83,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/server-import.test.js.snap b/test/client_cli/en/__snapshots__/server-import.test.js.snap index 388103399..70aa6a130 100644 --- a/test/client_cli/en/__snapshots__/server-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/server-import.test.js.snap @@ -83,7 +83,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/server-list.test.js.snap b/test/client_cli/en/__snapshots__/server-list.test.js.snap index 4e4679fb6..411145253 100644 --- a/test/client_cli/en/__snapshots__/server-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/server-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/service-delete.test.js.snap b/test/client_cli/en/__snapshots__/service-delete.test.js.snap index f56b7f63f..377751ce1 100644 --- a/test/client_cli/en/__snapshots__/service-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/service-delete.test.js.snap @@ -75,7 +75,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/service-export.test.js.snap b/test/client_cli/en/__snapshots__/service-export.test.js.snap index 3adbd1f42..068172131 100644 --- a/test/client_cli/en/__snapshots__/service-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/service-export.test.js.snap @@ -80,7 +80,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/service-import.test.js.snap b/test/client_cli/en/__snapshots__/service-import.test.js.snap index 19ff14e5c..b15ff64ff 100644 --- a/test/client_cli/en/__snapshots__/service-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/service-import.test.js.snap @@ -83,7 +83,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. -r, --current-realm Import service(s) into the current realm. Use this flag if you exported a diff --git a/test/client_cli/en/__snapshots__/service-list.test.js.snap b/test/client_cli/en/__snapshots__/service-list.test.js.snap index 5b2754504..509097167 100644 --- a/test/client_cli/en/__snapshots__/service-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/service-list.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/shell.test.js.snap b/test/client_cli/en/__snapshots__/shell.test.js.snap index 93a19e872..5a1752203 100644 --- a/test/client_cli/en/__snapshots__/shell.test.js.snap +++ b/test/client_cli/en/__snapshots__/shell.test.js.snap @@ -74,7 +74,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/client_cli/en/__snapshots__/theme-delete.test.js.snap b/test/client_cli/en/__snapshots__/theme-delete.test.js.snap index 620217b5b..219857313 100644 --- a/test/client_cli/en/__snapshots__/theme-delete.test.js.snap +++ b/test/client_cli/en/__snapshots__/theme-delete.test.js.snap @@ -76,7 +76,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --theme-name Name of the theme. If specified, -a and -A are ignored. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/theme-export.test.js.snap b/test/client_cli/en/__snapshots__/theme-export.test.js.snap index cf3edc234..85beaa4d5 100644 --- a/test/client_cli/en/__snapshots__/theme-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/theme-export.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --theme-name Name of the theme. If specified, -a and -A are ignored. -N, --no-metadata Does not include metadata in the export diff --git a/test/client_cli/en/__snapshots__/theme-import.test.js.snap b/test/client_cli/en/__snapshots__/theme-import.test.js.snap index 4aa6ee3de..9585ed956 100644 --- a/test/client_cli/en/__snapshots__/theme-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/theme-import.test.js.snap @@ -81,7 +81,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") -n, --theme-name Name of the theme. If specified, -a and -A are ignored. --no-cache Disable token cache for this operation. diff --git a/test/client_cli/en/__snapshots__/theme-list.test.js.snap b/test/client_cli/en/__snapshots__/theme-list.test.js.snap index 77796bfe3..deb70478a 100644 --- a/test/client_cli/en/__snapshots__/theme-list.test.js.snap +++ b/test/client_cli/en/__snapshots__/theme-list.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/e2e/__snapshots__/email-template-export.e2e.test.js.snap b/test/e2e/__snapshots__/email-template-export.e2e.test.js.snap index 2c3c7b85c..830a0804b 100644 --- a/test/e2e/__snapshots__/email-template-export.e2e.test.js.snap +++ b/test/e2e/__snapshots__/email-template-export.e2e.test.js.snap @@ -1579,6 +1579,123 @@ exports[`frodo email template export "frodo email template export -A": should ex } `; +exports[`frodo email template export "frodo email template export -AD emailTemplateExportTestDir4 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3 1`] = `0`; + +exports[`frodo email template export "frodo email template export -AD emailTemplateExportTestDir4 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3 2`] = `""`; + +exports[`frodo email template export "frodo email template export -AD emailTemplateExportTestDir4 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3: emailTemplateExportTestDir4/forgottenUsername.template.email.json 1`] = ` +{ + "emailTemplate": { + "forgottenUsername": { + "_id": "emailTemplate/forgottenUsername", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

", + }, + "mimeType": "text/html", + "subject": { + "en": "Account Information - username", + "fr": "Informations sur le compte - nom d'utilisateur", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo email template export "frodo email template export -AD emailTemplateExportTestDir4 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3: emailTemplateExportTestDir4/registration.template.email.json 1`] = ` +{ + "emailTemplate": { + "registration": { + "_id": "emailTemplate/registration", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", + }, + "mimeType": "text/html", + "subject": { + "en": "Register new account", + "fr": "Créer un nouveau compte", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo email template export "frodo email template export -AD emailTemplateExportTestDir4 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3: emailTemplateExportTestDir4/resetPassword.template.email.json 1`] = ` +{ + "emailTemplate": { + "resetPassword": { + "_id": "emailTemplate/resetPassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Click to reset your password

Password reset link

", + "fr": "

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

", + }, + "mimeType": "text/html", + "subject": { + "en": "Reset your password", + "fr": "Réinitialisez votre mot de passe", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo email template export "frodo email template export -AD emailTemplateExportTestDir4 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3: emailTemplateExportTestDir4/updatePassword.template.email.json 1`] = ` +{ + "emailTemplate": { + "updatePassword": { + "_id": "emailTemplate/updatePassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Verify email to update password

Update password link

", + }, + "mimeType": "text/html", + "subject": { + "en": "Update your password", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo email template export "frodo email template export -AD emailTemplateExportTestDir4 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3: emailTemplateExportTestDir4/welcome.template.email.json 1`] = ` +{ + "emailTemplate": { + "welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Welcome to OpenIDM. Your username is '{{object.userName}}'.

", + "fr": "

Bienvenue sur OpenIDM. Votre nom d'utilisateur est '{{object.userName}}'.

", + }, + "mimeType": "text/html", + "subject": { + "en": "Your account has been created", + "fr": "Votre compte vient d’être créé !", + }, + }, + }, + "meta": Any, +} +`; + exports[`frodo email template export "frodo email template export -NaD emailTemplateExportTestDir2": should export all email templates to a single file in the directory emailTemplateExportTestDir2 1`] = `0`; exports[`frodo email template export "frodo email template export -NaD emailTemplateExportTestDir2": should export all email templates to a single file in the directory emailTemplateExportTestDir2 2`] = `""`; @@ -2498,6 +2615,91 @@ a { } `; +exports[`frodo email template export "frodo email template export -aD emailTemplateExportTestDir5 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3 1`] = `0`; + +exports[`frodo email template export "frodo email template export -aD emailTemplateExportTestDir5 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3 2`] = `""`; + +exports[`frodo email template export "frodo email template export -aD emailTemplateExportTestDir5 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3: emailTemplateExportTestDir5/allEmailTemplates.template.email.json 1`] = ` +{ + "emailTemplate": { + "forgottenUsername": { + "_id": "emailTemplate/forgottenUsername", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

", + }, + "mimeType": "text/html", + "subject": { + "en": "Account Information - username", + "fr": "Informations sur le compte - nom d'utilisateur", + }, + }, + "registration": { + "_id": "emailTemplate/registration", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", + }, + "mimeType": "text/html", + "subject": { + "en": "Register new account", + "fr": "Créer un nouveau compte", + }, + }, + "resetPassword": { + "_id": "emailTemplate/resetPassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Click to reset your password

Password reset link

", + "fr": "

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

", + }, + "mimeType": "text/html", + "subject": { + "en": "Reset your password", + "fr": "Réinitialisez votre mot de passe", + }, + }, + "updatePassword": { + "_id": "emailTemplate/updatePassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Verify email to update password

Update password link

", + }, + "mimeType": "text/html", + "subject": { + "en": "Update your password", + }, + }, + "welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Welcome to OpenIDM. Your username is '{{object.userName}}'.

", + "fr": "

Bienvenue sur OpenIDM. Votre nom d'utilisateur est '{{object.userName}}'.

", + }, + "mimeType": "text/html", + "subject": { + "en": "Your account has been created", + "fr": "Votre compte vient d’être créé !", + }, + }, + }, + "meta": Any, +} +`; + exports[`frodo email template export "frodo email template export -i welcome -f my-welcome.template.email.json": should export the email template with email id "welcome" into file named my-welcome.template.email.json 1`] = `0`; exports[`frodo email template export "frodo email template export -i welcome -f my-welcome.template.email.json": should export the email template with email id "welcome" into file named my-welcome.template.email.json 2`] = `""`; diff --git a/test/e2e/__snapshots__/email-template-import.e2e.test.js.snap b/test/e2e/__snapshots__/email-template-import.e2e.test.js.snap index cfea4124c..ef03354d1 100644 --- a/test/e2e/__snapshots__/email-template-import.e2e.test.js.snap +++ b/test/e2e/__snapshots__/email-template-import.e2e.test.js.snap @@ -14,6 +14,10 @@ exports[`frodo email template import "frodo email template import --raw -i welco exports[`frodo email template import "frodo email template import --template-id welcome --file test/e2e/exports/all/allEmailTemplates.template.email.json": should import the email template with the id "welcome" from the file "test/e2e/exports/all/allEmailTemplates.template.email.json" 1`] = `""`; +exports[`frodo email template import "frodo email template import -AD test/e2e/exports/all-separate/idm/global/emailTemplate -m idm": should import all on prem idm email templates from the directory" 1`] = `""`; + exports[`frodo email template import "frodo email template import -af allEmailTemplates.template.email.json -D test/e2e/exports/all": should import all email templates from the file "test/e2e/exports/all/allEmailTemplates.template.email.json" 1`] = `""`; exports[`frodo email template import "frodo email template import -af test/e2e/exports/all/allEmailTemplates.template.email.json": should import all email templates from the file "test/e2e/exports/all/allEmailTemplates.template.email.json" 1`] = `""`; + +exports[`frodo email template import "frodo email template import -af test/e2e/exports/all/idm/allEmailTemplates.template.email.json -m idm": should import email template for on prem idm from one file 1`] = `""`; diff --git a/test/e2e/__snapshots__/esv-secret-create.e2e.test.js.snap b/test/e2e/__snapshots__/esv-secret-create.e2e.test.js.snap index b8d018bbd..d9e51d700 100644 --- a/test/e2e/__snapshots__/esv-secret-create.e2e.test.js.snap +++ b/test/e2e/__snapshots__/esv-secret-create.e2e.test.js.snap @@ -89,7 +89,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --no-use-in-placeholders Secret cannot be used in placeholders. --sa-id Service account id. diff --git a/test/e2e/__snapshots__/idm-export.e2e.test.js.snap b/test/e2e/__snapshots__/idm-export.e2e.test.js.snap index 6c37ae75d..7cca46836 100644 --- a/test/e2e/__snapshots__/idm-export.e2e.test.js.snap +++ b/test/e2e/__snapshots__/idm-export.e2e.test.js.snap @@ -2706,11 +2706,11 @@ isGoogleEligible; } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files 1`] = `0`; +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files 1`] = `0`; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files 2`] = `""`; +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files 2`] = `""`; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files: testDir3/repo.ds.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files: idmTestDir3/repo.ds.idm.json 1`] = ` { "idm": { "repo.ds": { @@ -4842,7 +4842,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files: testDir3/script.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files: idmTestDir3/script.idm.json 1`] = ` { "idm": { "script": { @@ -4888,7 +4888,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files: testDir3/sync/AlphaUser2GoogleApps.sync.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files: idmTestDir3/sync/AlphaUser2GoogleApps.sync.json 1`] = ` { "_id": "sync/AlphaUser2GoogleApps", "consentRequired": false, @@ -5119,7 +5119,7 @@ isGoogleEligible; } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files: testDir3/sync/managedAlpha_application_managedBravo_application.sync.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files: idmTestDir3/sync/managedAlpha_application_managedBravo_application.sync.json 1`] = ` { "_id": "sync/managedAlpha_application_managedBravo_application", "consentRequired": true, @@ -5200,7 +5200,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files: testDir3/sync/managedAlpha_user_managedBravo_user.sync.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files: idmTestDir3/sync/managedAlpha_user_managedBravo_user.sync.json 1`] = ` { "_id": "sync/managedAlpha_user_managedBravo_user", "consentRequired": true, @@ -5289,7 +5289,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files: testDir3/sync/managedBravo_user_managedAlpha_user.sync.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files: idmTestDir3/sync/managedBravo_user_managedAlpha_user.sync.json 1`] = ` { "_id": "sync/managedBravo_user_managedAlpha_user", "consentRequired": false, @@ -5361,7 +5361,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files: testDir3/sync/managedBravo_user_managedBravo_user.sync.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files: idmTestDir3/sync/managedBravo_user_managedBravo_user.sync.json 1`] = ` { "_id": "sync/managedBravo_user_managedBravo_user", "consentRequired": false, @@ -5429,7 +5429,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory testDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "testDir" directory according to the entity and env files: testDir3/sync/sync.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-mappings --directory idmTestDir3 --entities-file test/e2e/env/testEntitiesFile.json --env-file test/e2e/env/testEnvFile.env": should export all idm config entities to separate files in the "idmTestDir" directory according to the entity and env files: idmTestDir3/sync/sync.idm.json 1`] = ` { "idm": { "sync": { @@ -5446,11 +5446,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory 1`] = `1`; +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory 1`] = `1`; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory 2`] = `""`; +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory 2`] = `""`; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/access.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/access.idm.json 1`] = ` { "idm": { "access": { @@ -5781,7 +5781,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/alphaOrgPrivileges.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/alphaOrgPrivileges.idm.json 1`] = ` { "idm": { "alphaOrgPrivileges": { @@ -6545,7 +6545,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/audit.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/audit.idm.json 1`] = ` { "idm": { "audit": { @@ -6666,7 +6666,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/authentication.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/authentication.idm.json 1`] = ` { "idm": { "authentication": { @@ -6713,7 +6713,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/bravoOrgPrivileges.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/bravoOrgPrivileges.idm.json 1`] = ` { "idm": { "bravoOrgPrivileges": { @@ -7477,7 +7477,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/baselineDemoEmailVerification.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/baselineDemoEmailVerification.idm.json 1`] = ` { "idm": { "emailTemplate/baselineDemoEmailVerification": { @@ -7549,7 +7549,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/baselineDemoMagicLink.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/baselineDemoMagicLink.idm.json 1`] = ` { "idm": { "emailTemplate/baselineDemoMagicLink": { @@ -7621,7 +7621,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/deleteTemplate.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/deleteTemplate.idm.json 1`] = ` { "idm": { "emailTemplate/deleteTemplate": { @@ -7664,7 +7664,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/forgottenUsername.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/forgottenUsername.idm.json 1`] = ` { "idm": { "emailTemplate/forgottenUsername": { @@ -7691,7 +7691,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/frEmailUpdated.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/frEmailUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frEmailUpdated": { @@ -7711,7 +7711,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/frForgotUsername.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/frForgotUsername.idm.json 1`] = ` { "idm": { "emailTemplate/frForgotUsername": { @@ -7731,7 +7731,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/frOnboarding.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/frOnboarding.idm.json 1`] = ` { "idm": { "emailTemplate/frOnboarding": { @@ -7751,7 +7751,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/frPasswordUpdated.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/frPasswordUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frPasswordUpdated": { @@ -7771,7 +7771,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/frProfileUpdated.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/frProfileUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frProfileUpdated": { @@ -7791,7 +7791,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/frResetPassword.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/frResetPassword.idm.json 1`] = ` { "idm": { "emailTemplate/frResetPassword": { @@ -7811,7 +7811,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/frUsernameUpdated.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/frUsernameUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frUsernameUpdated": { @@ -7831,7 +7831,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/idv.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/idv.idm.json 1`] = ` { "idm": { "emailTemplate/idv": { @@ -7862,7 +7862,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/joiner.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/joiner.idm.json 1`] = ` { "idm": { "emailTemplate/joiner": { @@ -7921,7 +7921,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/registerPasswordlessDevice.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/registerPasswordlessDevice.idm.json 1`] = ` { "idm": { "emailTemplate/registerPasswordlessDevice": { @@ -7967,7 +7967,7 @@ a { } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/registration.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/registration.idm.json 1`] = ` { "idm": { "emailTemplate/registration": { @@ -7994,7 +7994,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/resetPassword.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/resetPassword.idm.json 1`] = ` { "idm": { "emailTemplate/resetPassword": { @@ -8016,7 +8016,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/updatePassword.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/updatePassword.idm.json 1`] = ` { "idm": { "emailTemplate/updatePassword": { @@ -8040,7 +8040,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/emailTemplate/welcome.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/emailTemplate/welcome.idm.json 1`] = ` { "idm": { "emailTemplate/welcome": { @@ -8064,7 +8064,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/endpoint/Test.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/endpoint/Test.idm.json 1`] = ` { "idm": { "endpoint/Test": { @@ -8094,7 +8094,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/endpoint/testEndpoint2.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/endpoint/testEndpoint2.idm.json 1`] = ` { "idm": { "endpoint/testEndpoint2": { @@ -8124,7 +8124,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/entityId.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/entityId.idm.json 1`] = ` { "idm": { "entityId": { @@ -8145,7 +8145,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/external.email.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/external.email.idm.json 1`] = ` { "idm": { "external.email": { @@ -8175,7 +8175,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/external.emailDefault.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/external.emailDefault.idm.json 1`] = ` { "idm": { "external.emailDefault": { @@ -8205,7 +8205,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/fieldPolicy/alpha_user.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/fieldPolicy/alpha_user.idm.json 1`] = ` { "idm": { "fieldPolicy/alpha_user": { @@ -8259,7 +8259,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/fieldPolicy/bravo_user.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/fieldPolicy/bravo_user.idm.json 1`] = ` { "idm": { "fieldPolicy/bravo_user": { @@ -8312,7 +8312,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/internal.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/internal.idm.json 1`] = ` { "idm": { "internal": { @@ -8349,7 +8349,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/alpha_application.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/alpha_application.managed.json 1`] = ` { "name": "alpha_application", "schema": { @@ -8642,7 +8642,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/alpha_assignment.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/alpha_assignment.managed.json 1`] = ` { "attributeEncryption": {}, "name": "alpha_assignment", @@ -8887,7 +8887,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/alpha_group.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/alpha_group.managed.json 1`] = ` { "name": "alpha_group", "schema": { @@ -9027,7 +9027,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/alpha_organization.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/alpha_organization.managed.json 1`] = ` { "name": "alpha_organization", "schema": { @@ -9425,7 +9425,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/alpha_role.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/alpha_role.managed.json 1`] = ` { "name": "alpha_role", "schema": { @@ -9667,7 +9667,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/alpha_user.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/alpha_user.managed.json 1`] = ` { "lastSync": { "effectiveAssignmentsProperty": "effectiveAssignments", @@ -11193,7 +11193,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/bravo_application.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/bravo_application.managed.json 1`] = ` { "name": "bravo_application", "schema": { @@ -11486,7 +11486,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/bravo_assignment.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/bravo_assignment.managed.json 1`] = ` { "attributeEncryption": {}, "name": "bravo_assignment", @@ -11731,7 +11731,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/bravo_group.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/bravo_group.managed.json 1`] = ` { "name": "bravo_group", "schema": { @@ -11871,7 +11871,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/bravo_organization.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/bravo_organization.managed.json 1`] = ` { "name": "bravo_organization", "schema": { @@ -12269,7 +12269,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/bravo_role.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/bravo_role.managed.json 1`] = ` { "name": "bravo_role", "schema": { @@ -12511,7 +12511,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/bravo_user.managed.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/bravo_user.managed.json 1`] = ` { "lastSync": { "effectiveAssignmentsProperty": "effectiveAssignments", @@ -14037,7 +14037,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/managed/managed.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/managed/managed.idm.json 1`] = ` { "idm": { "managed": { @@ -14061,7 +14061,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/managedAlpha_assignment_managedBravo_assignment.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/managedAlpha_assignment_managedBravo_assignment.idm.json 1`] = ` { "idm": { "mapping/managedAlpha_assignment_managedBravo_assignment": { @@ -14132,7 +14132,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/managedAlpha_user_systemAzureUser.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/managedAlpha_user_systemAzureUser.idm.json 1`] = ` { "idm": { "mapping/managedAlpha_user_systemAzureUser": { @@ -14282,7 +14282,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/managedBravo_group_managedBravo_group.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/managedBravo_group_managedBravo_group.idm.json 1`] = ` { "idm": { "mapping/managedBravo_group_managedBravo_group": { @@ -14353,7 +14353,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/managedBravo_user_managedBravo_user0.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/managedBravo_user_managedBravo_user0.idm.json 1`] = ` { "idm": { "mapping/managedBravo_user_managedBravo_user0": { @@ -14424,7 +14424,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/mapping12.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/mapping12.idm.json 1`] = ` { "idm": { "mapping/mapping12": { @@ -14443,7 +14443,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/systemAzure__group___managedAlpha_assignment.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/systemAzure__group___managedAlpha_assignment.idm.json 1`] = ` { "idm": { "mapping/systemAzure__group___managedAlpha_assignment": { @@ -14569,7 +14569,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/systemAzureDirectoryrole_managedAlpha_assignment.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/systemAzureDirectoryrole_managedAlpha_assignment.idm.json 1`] = ` { "idm": { "mapping/systemAzureDirectoryrole_managedAlpha_assignment": { @@ -14695,7 +14695,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/systemAzureServiceplan_managedAlpha_assignment.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/systemAzureServiceplan_managedAlpha_assignment.idm.json 1`] = ` { "idm": { "mapping/systemAzureServiceplan_managedAlpha_assignment": { @@ -14821,7 +14821,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/mapping/systemAzureUser_managedAlpha_user.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/mapping/systemAzureUser_managedAlpha_user.idm.json 1`] = ` { "idm": { "mapping/systemAzureUser_managedAlpha_user": { @@ -14934,7 +14934,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/policy.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/policy.idm.json 1`] = ` { "idm": { "policy": { @@ -14946,7 +14946,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/privilegeAssignments.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/privilegeAssignments.idm.json 1`] = ` { "idm": { "privilegeAssignments": { @@ -14980,7 +14980,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/privileges.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/privileges.idm.json 1`] = ` { "idm": { "privileges": { @@ -14991,7 +14991,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/provisioner.openic/GoogleApps.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/provisioner.openic/GoogleApps.idm.json 1`] = ` { "idm": { "provisioner.openic/GoogleApps": { @@ -15436,7 +15436,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/provisioner.openicf.connectorinfoprovider.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/provisioner.openicf.connectorinfoprovider.idm.json 1`] = ` { "idm": { "provisioner.openicf.connectorinfoprovider": { @@ -15457,7 +15457,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/provisioner.openicf/Azure.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/provisioner.openicf/Azure.idm.json 1`] = ` { "idm": { "provisioner.openicf/Azure": { @@ -16195,7 +16195,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/provisioner.openicf/GoogleApps.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/provisioner.openicf/GoogleApps.idm.json 1`] = ` { "idm": { "provisioner.openicf/GoogleApps": { @@ -16640,7 +16640,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/repo.ds.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/repo.ds.idm.json 1`] = ` { "idm": { "repo.ds": { @@ -18772,7 +18772,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/router.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/router.idm.json 1`] = ` { "idm": { "router": { @@ -18783,7 +18783,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/script.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/script.idm.json 1`] = ` { "idm": { "script": { @@ -18829,7 +18829,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/secrets.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/secrets.idm.json 1`] = ` { "idm": { "secrets": { @@ -18946,7 +18946,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/selfservice.kba.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/selfservice.kba.idm.json 1`] = ` { "idm": { "selfservice.kba": { @@ -18964,7 +18964,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/selfservice.terms.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/selfservice.terms.idm.json 1`] = ` { "idm": { "selfservice.terms": { @@ -18989,7 +18989,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/servletfilter/cors.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/servletfilter/cors.idm.json 1`] = ` { "idm": { "servletfilter/cors": { @@ -19010,7 +19010,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/servletfilter/payload.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/servletfilter/payload.idm.json 1`] = ` { "idm": { "servletfilter/payload": { @@ -19026,7 +19026,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/servletfilter/upload.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/servletfilter/upload.idm.json 1`] = ` { "idm": { "servletfilter/upload": { @@ -19042,7 +19042,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/sync.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/sync.idm.json 1`] = ` { "idm": { "sync": { @@ -19053,7 +19053,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui.context/admin.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui.context/admin.idm.json 1`] = ` { "idm": { "ui.context/admin": { @@ -19070,7 +19070,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui.context/api.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui.context/api.idm.json 1`] = ` { "idm": { "ui.context/api": { @@ -19086,7 +19086,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui.context/enduser.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui.context/enduser.idm.json 1`] = ` { "idm": { "ui.context/enduser": { @@ -19102,7 +19102,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui.context/oauth.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui.context/oauth.idm.json 1`] = ` { "idm": { "ui.context/oauth": { @@ -19117,7 +19117,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui/configuration.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui/configuration.idm.json 1`] = ` { "idm": { "ui/configuration": { @@ -19159,7 +19159,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui/dashboard.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui/dashboard.idm.json 1`] = ` { "idm": { "ui/dashboard": { @@ -19340,7 +19340,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui/profile.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui/profile.idm.json 1`] = ` { "idm": { "ui/profile": { @@ -19388,7 +19388,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui/themeconfig.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui/themeconfig.idm.json 1`] = ` { "idm": { "ui/themeconfig": { @@ -19422,7 +19422,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/ui/themerealm.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/ui/themerealm.idm.json 1`] = ` { "idm": { "ui/themerealm": { @@ -21427,7 +21427,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/uilocale/fr.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/uilocale/fr.idm.json 1`] = ` { "idm": { "uilocale/fr": { @@ -21477,7 +21477,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ } `; -exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory testDir5": should export all idm config entities to separate files in the "testDir5" directory: testDir5/undefined.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separate-objects --directory idmTestDir5": should export all idm config entities to separate files in the "idmTestDir5" directory: idmTestDir5/undefined.idm.json 1`] = ` { "idm": { "undefined": { @@ -21604,11 +21604,11 @@ exports[`frodo idm export "frodo idm export --entity-id script": should export t } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory 1`] = `1`; +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory 1`] = `1`; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory 2`] = `""`; +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory 2`] = `""`; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/access.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/access.idm.json 1`] = ` { "idm": { "access": { @@ -21940,7 +21940,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/alphaOrgPrivileges.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/alphaOrgPrivileges.idm.json 1`] = ` { "idm": { "alphaOrgPrivileges": { @@ -22705,7 +22705,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/audit.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/audit.idm.json 1`] = ` { "idm": { "audit": { @@ -22827,7 +22827,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/authentication.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/authentication.idm.json 1`] = ` { "idm": { "authentication": { @@ -22875,7 +22875,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/bravoOrgPrivileges.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/bravoOrgPrivileges.idm.json 1`] = ` { "idm": { "bravoOrgPrivileges": { @@ -23640,7 +23640,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/baselineDemoEmailVerification.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/baselineDemoEmailVerification.idm.json 1`] = ` { "idm": { "emailTemplate/baselineDemoEmailVerification": { @@ -23713,7 +23713,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/baselineDemoMagicLink.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/baselineDemoMagicLink.idm.json 1`] = ` { "idm": { "emailTemplate/baselineDemoMagicLink": { @@ -23786,7 +23786,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/forgottenUsername.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/forgottenUsername.idm.json 1`] = ` { "idm": { "emailTemplate/forgottenUsername": { @@ -23814,7 +23814,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frEmailUpdated.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/frEmailUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frEmailUpdated": { @@ -23835,7 +23835,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frForgotUsername.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/frForgotUsername.idm.json 1`] = ` { "idm": { "emailTemplate/frForgotUsername": { @@ -23856,7 +23856,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frOnboarding.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/frOnboarding.idm.json 1`] = ` { "idm": { "emailTemplate/frOnboarding": { @@ -23877,7 +23877,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frPasswordUpdated.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/frPasswordUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frPasswordUpdated": { @@ -23898,7 +23898,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frProfileUpdated.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/frProfileUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frProfileUpdated": { @@ -23919,7 +23919,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frResetPassword.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/frResetPassword.idm.json 1`] = ` { "idm": { "emailTemplate/frResetPassword": { @@ -23940,7 +23940,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frUsernameUpdated.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/frUsernameUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frUsernameUpdated": { @@ -23961,7 +23961,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/idv.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/idv.idm.json 1`] = ` { "idm": { "emailTemplate/idv": { @@ -23993,7 +23993,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/joiner.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/joiner.idm.json 1`] = ` { "idm": { "emailTemplate/joiner": { @@ -24053,7 +24053,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/registerPasswordlessDevice.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/registerPasswordlessDevice.idm.json 1`] = ` { "idm": { "emailTemplate/registerPasswordlessDevice": { @@ -24100,7 +24100,7 @@ a { } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/registration.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/registration.idm.json 1`] = ` { "idm": { "emailTemplate/registration": { @@ -24128,7 +24128,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/resetPassword.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/resetPassword.idm.json 1`] = ` { "idm": { "emailTemplate/resetPassword": { @@ -24151,7 +24151,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/updatePassword.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/updatePassword.idm.json 1`] = ` { "idm": { "emailTemplate/updatePassword": { @@ -24176,7 +24176,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/welcome.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/emailTemplate/welcome.idm.json 1`] = ` { "idm": { "emailTemplate/welcome": { @@ -24219,7 +24219,7 @@ a{ } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/entityId.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/entityId.idm.json 1`] = ` { "idm": { "entityId": { @@ -24241,7 +24241,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/external.email.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/external.email.idm.json 1`] = ` { "idm": { "external.email": { @@ -24272,7 +24272,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/external.emailDefault.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/external.emailDefault.idm.json 1`] = ` { "idm": { "external.emailDefault": { @@ -24303,7 +24303,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/fieldPolicy/alpha_user.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/fieldPolicy/alpha_user.idm.json 1`] = ` { "idm": { "fieldPolicy/alpha_user": { @@ -24358,7 +24358,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/fieldPolicy/bravo_user.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/fieldPolicy/bravo_user.idm.json 1`] = ` { "idm": { "fieldPolicy/bravo_user": { @@ -24412,7 +24412,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/internal.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/internal.idm.json 1`] = ` { "idm": { "internal": { @@ -24450,7 +24450,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/managed.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/managed.idm.json 1`] = ` { "idm": { "managed": { @@ -30131,7 +30131,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/managedAlpha_assignment_managedBravo_assignment.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/managedAlpha_assignment_managedBravo_assignment.idm.json 1`] = ` { "idm": { "mapping/managedAlpha_assignment_managedBravo_assignment": { @@ -30203,7 +30203,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/managedAlpha_user_systemAzureUser.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/managedAlpha_user_systemAzureUser.idm.json 1`] = ` { "idm": { "mapping/managedAlpha_user_systemAzureUser": { @@ -30354,7 +30354,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/managedBravo_group_managedBravo_group.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/managedBravo_group_managedBravo_group.idm.json 1`] = ` { "idm": { "mapping/managedBravo_group_managedBravo_group": { @@ -30426,7 +30426,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/managedBravo_user_managedBravo_user0.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/managedBravo_user_managedBravo_user0.idm.json 1`] = ` { "idm": { "mapping/managedBravo_user_managedBravo_user0": { @@ -30498,7 +30498,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/mapping12.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/mapping12.idm.json 1`] = ` { "idm": { "mapping/mapping12": { @@ -30518,7 +30518,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/systemAzure__group___managedAlpha_assignment.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/systemAzure__group___managedAlpha_assignment.idm.json 1`] = ` { "idm": { "mapping/systemAzure__group___managedAlpha_assignment": { @@ -30645,7 +30645,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/systemAzureDirectoryrole_managedAlpha_assignment.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/systemAzureDirectoryrole_managedAlpha_assignment.idm.json 1`] = ` { "idm": { "mapping/systemAzureDirectoryrole_managedAlpha_assignment": { @@ -30772,7 +30772,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/systemAzureServiceplan_managedAlpha_assignment.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/systemAzureServiceplan_managedAlpha_assignment.idm.json 1`] = ` { "idm": { "mapping/systemAzureServiceplan_managedAlpha_assignment": { @@ -30899,7 +30899,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/systemAzureUser_managedAlpha_user.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/mapping/systemAzureUser_managedAlpha_user.idm.json 1`] = ` { "idm": { "mapping/systemAzureUser_managedAlpha_user": { @@ -31013,7 +31013,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/policy.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/policy.idm.json 1`] = ` { "idm": { "policy": { @@ -31026,7 +31026,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/privilegeAssignments.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/privilegeAssignments.idm.json 1`] = ` { "idm": { "privilegeAssignments": { @@ -31061,7 +31061,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/privileges.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/privileges.idm.json 1`] = ` { "idm": { "privileges": { @@ -31073,7 +31073,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/provisioner.openic/GoogleApps.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/provisioner.openic/GoogleApps.idm.json 1`] = ` { "idm": { "provisioner.openic/GoogleApps": { @@ -31519,7 +31519,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/provisioner.openicf.connectorinfoprovider.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/provisioner.openicf.connectorinfoprovider.idm.json 1`] = ` { "idm": { "provisioner.openicf.connectorinfoprovider": { @@ -31541,7 +31541,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/provisioner.openicf/Azure.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/provisioner.openicf/Azure.idm.json 1`] = ` { "idm": { "provisioner.openicf/Azure": { @@ -32280,7 +32280,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/provisioner.openicf/GoogleApps.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/provisioner.openicf/GoogleApps.idm.json 1`] = ` { "idm": { "provisioner.openicf/GoogleApps": { @@ -32726,7 +32726,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/repo.ds.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/repo.ds.idm.json 1`] = ` { "idm": { "repo.ds": { @@ -34859,7 +34859,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/router.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/router.idm.json 1`] = ` { "idm": { "router": { @@ -34871,7 +34871,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/script.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/script.idm.json 1`] = ` { "idm": { "script": { @@ -34918,7 +34918,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/secrets.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/secrets.idm.json 1`] = ` { "idm": { "secrets": { @@ -35036,7 +35036,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/selfservice.kba.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/selfservice.kba.idm.json 1`] = ` { "idm": { "selfservice.kba": { @@ -35055,7 +35055,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/selfservice.terms.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/selfservice.terms.idm.json 1`] = ` { "idm": { "selfservice.terms": { @@ -35081,7 +35081,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/servletfilter/cors.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/servletfilter/cors.idm.json 1`] = ` { "idm": { "servletfilter/cors": { @@ -35103,7 +35103,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/servletfilter/payload.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/servletfilter/payload.idm.json 1`] = ` { "idm": { "servletfilter/payload": { @@ -35120,7 +35120,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/servletfilter/upload.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/servletfilter/upload.idm.json 1`] = ` { "idm": { "servletfilter/upload": { @@ -35137,7 +35137,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/sync.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/sync.idm.json 1`] = ` { "idm": { "sync": { @@ -35676,7 +35676,7 @@ isGoogleEligible; } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui.context/admin.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui.context/admin.idm.json 1`] = ` { "idm": { "ui.context/admin": { @@ -35694,7 +35694,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui.context/api.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui.context/api.idm.json 1`] = ` { "idm": { "ui.context/api": { @@ -35711,7 +35711,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui.context/enduser.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui.context/enduser.idm.json 1`] = ` { "idm": { "ui.context/enduser": { @@ -35728,7 +35728,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui.context/oauth.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui.context/oauth.idm.json 1`] = ` { "idm": { "ui.context/oauth": { @@ -35744,7 +35744,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui/configuration.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui/configuration.idm.json 1`] = ` { "idm": { "ui/configuration": { @@ -35787,7 +35787,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui/dashboard.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui/dashboard.idm.json 1`] = ` { "idm": { "ui/dashboard": { @@ -35969,7 +35969,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui/profile.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui/profile.idm.json 1`] = ` { "idm": { "ui/profile": { @@ -36018,7 +36018,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui/themeconfig.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui/themeconfig.idm.json 1`] = ` { "idm": { "ui/themeconfig": { @@ -36053,7 +36053,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui/themerealm.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/ui/themerealm.idm.json 1`] = ` { "idm": { "ui/themerealm": { @@ -38059,7 +38059,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/uilocale/fr.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/uilocale/fr.idm.json 1`] = ` { "idm": { "uilocale/fr": { @@ -38110,7 +38110,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/undefined.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir1": should export all idm config entities to separate files in the "idmTestDir" directory: idmTestDir1/undefined.idm.json 1`] = ` { "idm": { "undefined": { @@ -38187,894 +38187,27400 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm } `; -exports[`frodo idm export "frodo idm export -Ni sync": should export the idm config entity with idm id "sync" separately 1`] = `0`; +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm 1`] = `0`; -exports[`frodo idm export "frodo idm export -Ni sync": should export the idm config entity with idm id "sync" separately 2`] = `""`; +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm 2`] = `""`; -exports[`frodo idm export "frodo idm export -Ni sync": should export the idm config entity with idm id "sync" separately: sync.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/access.idm.json 1`] = ` { "idm": { - "sync": { - "_id": "sync", - "mappings": [ + "access": { + "_id": "access", + "configs": [ { - "_id": "sync/managedBravo_user_managedBravo_user", - "consentRequired": false, - "displayName": "managedBravo_user_managedBravo_user", - "icon": null, - "name": "managedBravo_user_managedBravo_user", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", + "actions": "", + "methods": "read", + "pattern": "health", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "info/*", + "roles": "*", + }, + { + "actions": "login,logout", + "methods": "read,action", + "pattern": "authentication", + "roles": "*", + }, + { + "actions": "validate", + "methods": "action", + "pattern": "util/validateQueryFilter", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themeconfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/theme-*", + "roles": "*", + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled(['registration', 'passwordReset'])", + "methods": "read", + "pattern": "config/selfservice/kbaConfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/dashboard", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "query", + "pattern": "info/features", + "roles": "*", + }, + { + "actions": "listPrivileges", + "methods": "action", + "pattern": "privilege", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "privilege/*", + "roles": "*", + }, + { + "actions": "submitRequirements", + "methods": "read,action", + "pattern": "selfservice/termsAndConditions", + "roles": "*", + }, + { + "actions": "submitRequirements", + "methods": "read,action", + "pattern": "selfservice/kbaUpdate", + "roles": "*", + }, + { + "actions": "", + "customAuthz": "isMyProfile()", + "methods": "read,query", + "pattern": "profile/*", + "roles": "*", + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled('kba')", + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/openidm-authorized", + }, + { + "customAuthz": "checkIfApiRequest()", + "methods": "read", + "pattern": "*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "excludePatterns": "repo,repo/*", + "methods": "*", + "pattern": "*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "", + "methods": "create,read,update,delete,patch,query", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "methods": "script", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "test,testConfig,createconfiguration,liveSync,authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "command", + "customAuthz": "request.additionalParameters.commandId === 'delete-mapping-links'", + "methods": "action", + "pattern": "repo/link", + "roles": "internal/role/openidm-admin", + }, + { + "methods": "create,read,query,patch", + "pattern": "managed/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read,query", + "pattern": "internal/role/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "create,read,action,update", + "pattern": "profile/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/terms", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "sendTemplate", + "methods": "action", + "pattern": "external/email", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "reauthenticate", + "methods": "action", + "pattern": "authentication", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "bind,unbind", + "customAuthz": "ownDataOnly()", + "methods": "read,action,delete", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('user', []) && reauthIfProtectedAttributeChange()", + "methods": "update,patch,action", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "endpoint/getprocessesforuser", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "query", + "pattern": "endpoint/gettasksview", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "complete", + "customAuthz": "isMyTask()", + "methods": "action", + "pattern": "workflow/taskinstance/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "canUpdateTask()", + "methods": "read,update", + "pattern": "workflow/taskinstance/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "isAllowedToStartProcess()", + "methods": "create", + "pattern": "workflow/processinstance", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "read", + "methods": "*", + "pattern": "workflow/processdefinition/*", + "roles": "internal/role/openidm-authorized", + }, + { + "customAuthz": "restrictPatchToFields(['password'])", + "methods": "patch", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-cert", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_meta', false)", + "methods": "read", + "pattern": "internal/usermeta/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_notifications', true)", + "methods": "read,delete", + "pattern": "internal/notification/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['idps','_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "deleteNotificationsForTarget", + "customAuthz": "request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)", + "methods": "action", + "pattern": "notification", + "roles": "internal/role/openidm-authorized", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/apiVersion.idm.json 1`] = ` +{ + "idm": { + "apiVersion": { + "_id": "apiVersion", + "warning": { + "enabled": { + "$bool": "&{openidm.apiVersion.warning.enabled|false}", + }, + "includeScripts": { + "$bool": "&{openidm.apiVersion.warning.includeScripts|false}", + }, + "logFilterResourcePaths": [ + "audit", + "authentication", + "cluster", + "config", + "consent", + "csv", + "external/rest", + "identityProviders", + "info", + "internal", + "internal/role", + "internal/user", + "internal/usermeta", + "managed", + "managed/assignment", + "managed/organization", + "managed/role", + "managed/user", + "notification", + "policy", + "privilege", + "profile", + "recon", + "recon/assoc", + "repo", + "selfservice/kba", + "selfservice/terms", + "scheduler/job", + "scheduler/trigger", + "schema", + "sync", + "sync/mappings", + "system", + "taskscanner", + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/audit.idm.json 1`] = ` +{ + "idm": { + "audit": { + "_id": "audit", + "auditServiceConfig": { + "availableAuditEventHandlers": [ + "org.forgerock.audit.handlers.csv.CsvAuditEventHandler", + "org.forgerock.audit.handlers.jms.JmsAuditEventHandler", + "org.forgerock.audit.handlers.json.JsonAuditEventHandler", + "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", + "org.forgerock.openidm.audit.impl.RouterAuditEventHandler", + "org.forgerock.audit.handlers.syslog.SyslogAuditEventHandler", + ], + "caseInsensitiveFields": [ + "/access/http/request/headers", + "/access/http/response/headers", + ], + "filterPolicies": { + "field": { + "excludeIf": [], + "includeIf": [], + }, + }, + "handlerForQueries": "json", + }, + "eventHandlers": [ + { + "class": "org.forgerock.audit.handlers.json.JsonAuditEventHandler", + "config": { + "buffering": { + "maxSize": 100000, + "writeInterval": "100 millis", }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + "enabled": { + "$bool": "&{openidm.audit.handler.json.enabled|true}", }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", + "logDirectory": "&{idm.data.dir}/audit", + "name": "json", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], + }, + }, + { + "class": "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "config": { + "enabled": { + "$bool": "&{openidm.audit.handler.stdout.enabled|false}", }, - { - "action": "ASYNC", - "situation": "MISSING", + "name": "stdout", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], + }, + }, + { + "class": "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", + "config": { + "enabled": { + "$bool": "&{openidm.audit.handler.repo.enabled|false}", }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "name": "repo", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], + }, + }, + ], + "eventTopics": { + "access": { + "defaultEvents": true, + "filter": { + "script": { + "globals": {}, + "source": "//seantest", + "type": "groovy", }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", + }, + "name": "access", + }, + "activity": { + "defaultEvents": true, + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", + ], + }, + "name": "activity", + "passwordFields": [ + "password", + ], + "watchedFields": [], + }, + "authentication": { + "defaultEvents": true, + "filter": { + "script": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + }, + "name": "authentication", + }, + "config": { + "defaultEvents": true, + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", + ], + }, + "name": "config", + }, + "recon": { + "defaultEvents": true, + "name": "recon", + }, + "sync": { + "defaultEvents": true, + "name": "sync", + }, + }, + "exceptionFormatter": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/authentication.idm.json 1`] = ` +{ + "idm": { + "authentication": { + "_id": "authentication", + "serverAuthContext": { + "authModules": [ + { + "enabled": true, + "name": "STATIC_USER", + "properties": { + "augmentSecurityContext": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "defaultUserRoles": [ + "internal/role/openidm-reg", + ], + "password": { + "$crypto": { + "type": "x-simple-encryption", + "value": { + "cipher": "AES/CBC/PKCS5Padding", + "data": "fzE1J3P9LZOmuCuecCDnaQ==", + "iv": "nhI8UHymNRChGIyOC+5Sag==", + "keySize": 32, + "mac": "XfF7VE/o5Shv6AqW1Xe3TQ==", + "purpose": "idm.config.encryption", + "salt": "v0NHakffrjBJNL3zjhEOtg==", + "stableId": "openidm-sym-default", + }, + }, + }, + "queryOnResource": "internal/user", + "username": "anonymous", }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", + }, + { + "enabled": true, + "name": "STATIC_USER", + "properties": { + "defaultUserRoles": [ + "internal/role/openidm-authorized", + "internal/role/openidm-admin", + ], + "password": "&{openidm.admin.password}", + "queryOnResource": "internal/user", + "username": "openidm-admin", }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", + }, + { + "enabled": true, + "name": "MANAGED_USER", + "properties": { + "augmentSecurityContext": { + "source": "var augmentYield = require('auth/customAuthz').setProtectedAttributes(security);require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments', augmentYield);", + "type": "text/javascript", + }, + "defaultUserRoles": [ + "internal/role/openidm-authorized", + ], + "propertyMapping": { + "additionalUserFields": [ + "adminOfOrg", + "ownerOfOrg", + ], + "authenticationId": "username", + "userCredential": "password", + "userRoles": "authzRoles", + }, + "queryId": "credential-query", + "queryOnResource": "managed/user", }, - ], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [], - "target": "managed/bravo_user", + }, + ], + "sessionModule": { + "name": "JWT_SESSION", + "properties": { + "enableDynamicRoles": false, + "isHttpOnly": true, + "maxTokenLifeMinutes": 120, + "sessionOnly": true, + "tokenIdleTimeMinutes": 30, + }, }, - { - "_id": "sync/managedAlpha_application_managedBravo_application", - "consentRequired": true, - "displayName": "Test Application Mapping", - "icon": null, - "name": "managedAlpha_application_managedBravo_application", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [ - { - "source": "authoritative", - "target": "_id", - }, - ], - "source": "managed/alpha_application", - "sourceQuery": { - "_queryFilter": "(eq "" or eq "")", - }, - "syncAfter": [ - "managedBravo_user_managedBravo_user", - ], - "target": "managed/bravo_application", - "targetQuery": { - "_queryFilter": "!(eq "")", - }, - }, - { - "_id": "sync/managedAlpha_user_managedBravo_user", - "consentRequired": true, - "displayName": "Test Mapping for Frodo", - "icon": null, - "name": "managedAlpha_user_managedBravo_user", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [ - { - "condition": { - "globals": {}, - "source": "console.log("Hello World!");", - "type": "text/javascript", - }, - "default": [ - "Default value string", - ], - "source": "accountStatus", - "target": "applications", - "transform": { - "globals": {}, - "source": "console.log("hello");", - "type": "text/javascript", - }, - }, - ], - "source": "managed/alpha_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - ], - "target": "managed/bravo_user", - }, - { - "_id": "sync/managedBravo_user_managedAlpha_user", - "consentRequired": false, - "displayName": "Frodo test mapping", - "icon": null, - "name": "managedBravo_user_managedAlpha_user", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - "managedAlpha_user_managedBravo_user", - ], - "target": "managed/alpha_user", - }, - { - "_id": "sync/AlphaUser2GoogleApps", - "consentRequired": false, - "correlationQuery": [ - { - "expressionTree": { - "all": [ - "__NAME__", - ], - }, - "file": "ui/correlateTreeToQueryFilter.js", - "linkQualifier": "default", - "mapping": "AlphaUser2GoogleApps", - "type": "text/javascript", - }, - ], - "displayName": "AlphaUser2GoogleApps", - "enableSync": { - "$bool": "&{esv.gac.enable.mapping}", - }, - "icon": null, - "name": "AlphaUser2GoogleApps", - "onCreate": { - "globals": {}, - "source": "target.orgUnitPath = "/NewAccounts";", - "type": "text/javascript", - }, - "onUpdate": { - "globals": {}, - "source": "//testing1234 -target.givenName = oldTarget.givenName; -target.familyName = oldTarget.familyName; -target.__NAME__ = oldTarget.__NAME__;", - "type": "text/javascript", - }, - "policies": [ - { - "action": "EXCEPTION", - "situation": "AMBIGUOUS", - }, - { - "action": "UNLINK", - "situation": "SOURCE_MISSING", - }, - { - "action": { - "globals": {}, - "source": "// Timing Constants -var ATTEMPT = 6; // Number of attempts to find the Google user. -var SLEEP_TIME = 500; // Milliseconds between retries. -var SYSTEM_ENDPOINT = "system/GoogleApps/__ACCOUNT__"; -var MAPPING_NAME = "AlphaUser2GoogleApps"; -var GOOGLE_DOMAIN = identityServer.getProperty("esv.gac.domain"); -var googleEmail = source.userName + "@" + GOOGLE_DOMAIN; -var frUserGUID = source._id; -var resultingAction = "ASYNC"; - -// Get the Google GUID -var linkQueryParams = {'_queryFilter': 'firstId eq "' + frUserGUID + '" and linkType eq "' + MAPPING_NAME + '"'}; -var linkResults = openidm.query("repo/link/", linkQueryParams, null); -var googleGUID; - -if (linkResults.resultCount === 1) { - googleGUID = linkResults.result[0].secondId; -} - -var queryResults; // Resulting query from looking for the Google user. -var params = {'_queryFilter': '__UID__ eq "' + googleGUID + '"'}; - -for (var i = 1; i <= ATTEMPT; i++) { - queryResults = openidm.query(SYSTEM_ENDPOINT, params); - if (queryResults.result && queryResults.result.length > 0) { - logger.info("idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in " + i + " attempts. Query result: " + JSON.stringify(queryResults)); - resultingAction = "UPDATE"; - break; - } - java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again. -} - -if (!queryResults.result || queryResults.resultCount === 0) { - logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); - resultingAction = "UNLINK"; -} -resultingAction; -", - "type": "text/javascript", - }, - "situation": "MISSING", - }, - { - "action": "EXCEPTION", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "IGNORE", - "situation": "UNQUALIFIED", - }, - { - "action": "IGNORE", - "situation": "UNASSIGNED", - }, - { - "action": "UNLINK", - "situation": "LINK_ONLY", - }, - { - "action": "IGNORE", - "situation": "TARGET_IGNORED", - }, - { - "action": "IGNORE", - "situation": "SOURCE_IGNORED", - }, - { - "action": "IGNORE", - "situation": "ALL_GONE", - }, - { - "action": "UPDATE", - "situation": "CONFIRMED", - }, - { - "action": "LINK", - "situation": "FOUND", - }, - { - "action": "CREATE", - "situation": "ABSENT", - }, - ], - "properties": [ - { - "condition": { - "globals": {}, - "source": "object.custom_password_encrypted != null", - "type": "text/javascript", - }, - "source": "custom_password_encrypted", - "target": "__PASSWORD__", - "transform": { - "globals": {}, - "source": "openidm.decrypt(source);", - "type": "text/javascript", - }, - }, - { - "source": "cn", - "target": "__NAME__", - "transform": { - "globals": {}, - "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", - "type": "text/javascript", - }, - }, - { - "source": "givenName", - "target": "givenName", - }, - { - "source": "", - "target": "familyName", - "transform": { - "globals": {}, - "source": "if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) { - source.sn + " (Student)" -} else { - source.sn -}", - "type": "text/javascript", - }, - }, - ], - "queuedSync": { - "enabled": true, - "maxQueueSize": 20000, - "maxRetries": 5, - "pageSize": 100, - "pollingInterval": 1000, - "postRetryAction": "logged-ignore", - "retryDelay": 1000, - }, - "source": "managed/alpha_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - "managedAlpha_user_managedBravo_user", - "managedBravo_user_managedAlpha_user", - ], - "target": "system/GoogleApps/__ACCOUNT__", - "validSource": { - "globals": {}, - "source": "var isGoogleEligible = true; -//var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + " cn: " + source.cn + ") -"; -var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + ") -"; - -//Get Applicable userTypes (no Parent accounts) -if (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) { - isGoogleEligible = false; - logMsg = logMsg + " Account type not eligible."; -} - -//Make sure the account has a valid encrypted password. -if (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) { - isGoogleEligible = false; - logMsg = logMsg + " No encrypted password yet."; + }, + }, + }, + "meta": Any, } +`; -//Check that CN exists and has no space. -if (source.cn && source.cn.includes(' ')) { - isGoogleEligible = false; - logMsg = logMsg + " CN with a space is not allowed."; +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/cluster.idm.json 1`] = ` +{ + "idm": { + "cluster": { + "_id": "cluster", + "enabled": true, + "instanceCheckInInterval": 5000, + "instanceCheckInOffset": 0, + "instanceId": "&{openidm.node.id}", + "instanceRecoveryTimeout": 30000, + "instanceTimeout": 30000, + }, + }, + "meta": Any, } +`; -if (!isGoogleEligible) { - logMsg = logMsg + " Not sent to Google." - logger.info(logMsg); -} - -if (isGoogleEligible) { - logMsg = logMsg + " Sent to Google." - logger.info(logMsg); +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/emailTemplate/forgottenUsername.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/forgottenUsername": { + "_id": "emailTemplate/forgottenUsername", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

", + }, + "mimeType": "text/html", + "subject": { + "en": "Account Information - username", + "fr": "Informations sur le compte - nom d'utilisateur", + }, + }, + }, + "meta": Any, } +`; -isGoogleEligible; -", - "type": "text/javascript", - }, - }, - ], +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/emailTemplate/registration.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/registration": { + "_id": "emailTemplate/registration", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", + }, + "mimeType": "text/html", + "subject": { + "en": "Register new account", + "fr": "Créer un nouveau compte", + }, }, }, + "meta": Any, } `; -exports[`frodo idm export "frodo idm export -a": should export all idm config entities to a single file 1`] = `1`; - -exports[`frodo idm export "frodo idm export -a": should export all idm config entities to a single file 2`] = `""`; - -exports[`frodo idm export "frodo idm export -a": should export all idm config entities to a single file: all.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/emailTemplate/resetPassword.idm.json 1`] = ` { "idm": { - "access": { - "_id": "access", - "configs": [ - { - "actions": "*", - "methods": "read", - "pattern": "info/*", - "roles": "*", - }, - { - "actions": "login,logout", - "methods": "read,action", - "pattern": "authentication", - "roles": "*", - }, - { - "actions": "*", - "methods": "read", - "pattern": "config/fidc/*", - "roles": "*", - }, - { - "actions": "*", - "methods": "*", - "pattern": "config/fidc/*", - "roles": "internal/role/openidm-admin", - }, - { - "actions": "*", - "methods": "read", - "pattern": "config/ui/themeconfig", - "roles": "*", - }, - { - "actions": "*", - "methods": "read", - "pattern": "config/ui/themerealm", - "roles": "*", - }, - { - "actions": "*", - "methods": "read", - "pattern": "config/uilocale/*", - "roles": "*", - }, - { - "actions": "*", - "methods": "read", - "pattern": "config/fieldPolicy/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "methods": "read", - "pattern": "info/uiconfig", - "roles": "*", - }, - { - "actions": "*", - "methods": "read", - "pattern": "config/ui/dashboard", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "methods": "query", - "pattern": "info/features", - "roles": "*", - }, - { - "actions": "listPrivileges", - "methods": "action", - "pattern": "privilege", - "roles": "*", - }, - { - "actions": "*", - "methods": "read", - "pattern": "privilege/*", - "roles": "*", - }, - { - "actions": "validate", - "methods": "action", - "pattern": "util/validateQueryFilter", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "customAuthz": "checkIfAnyFeatureEnabled('kba')", - "methods": "read", - "pattern": "selfservice/kba", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "methods": "read", - "pattern": "schema/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "methods": "action,query", - "pattern": "consent", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "excludePatterns": "repo,repo/*", - "methods": "*", - "pattern": "*", - "roles": "internal/role/openidm-admin", - }, - { - "actions": "", - "methods": "create,read,update,delete,patch,query", - "pattern": "system/*", - "roles": "internal/role/openidm-admin", - }, - { - "actions": "*", - "methods": "script", - "pattern": "system/*", - "roles": "internal/role/openidm-admin", - }, - { - "actions": "test,testConfig,createconfiguration,liveSync,authenticate", - "methods": "action", - "pattern": "system/*", - "roles": "internal/role/openidm-admin", - }, - { - "actions": "*", - "customAuthz": "disallowCommandAction()", - "methods": "*", - "pattern": "repo", - "roles": "internal/role/openidm-admin", - }, - { - "actions": "*", - "customAuthz": "disallowCommandAction()", - "methods": "*", - "pattern": "repo/*", - "roles": "internal/role/openidm-admin", - }, - { - "actions": "command", - "customAuthz": "request.additionalParameters.commandId === 'delete-mapping-links'", - "methods": "action", - "pattern": "repo/link", - "roles": "internal/role/openidm-admin", - }, - { - "methods": "create,read,query,patch", - "pattern": "managed/*", - "roles": "internal/role/platform-provisioning", - }, - { - "methods": "read,query", - "pattern": "internal/role/*", - "roles": "internal/role/platform-provisioning", - }, - { - "actions": "*", - "methods": "create,read,action,update", - "pattern": "profile/*", - "roles": "internal/role/platform-provisioning", - }, - { - "actions": "*", - "methods": "read,action", - "pattern": "policy/*", - "roles": "internal/role/platform-provisioning", - }, - { - "methods": "read", - "pattern": "schema/*", - "roles": "internal/role/platform-provisioning", - }, - { - "actions": "*", - "methods": "action,query", - "pattern": "consent", - "roles": "internal/role/platform-provisioning", - }, - { - "methods": "read", - "pattern": "selfservice/kba", - "roles": "internal/role/platform-provisioning", - }, - { - "methods": "read", - "pattern": "selfservice/terms", - "roles": "internal/role/platform-provisioning", - }, - { - "methods": "read", - "pattern": "identityProviders", - "roles": "internal/role/platform-provisioning", - }, - { - "actions": "sendTemplate", - "methods": "action", - "pattern": "external/email", - "roles": "internal/role/platform-provisioning", - }, - { - "actions": "authenticate", - "methods": "action", - "pattern": "system/*", - "roles": "internal/role/platform-provisioning", - }, - { - "actions": "*", - "methods": "read,action", - "pattern": "policy/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "methods": "read", - "pattern": "config/ui/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "bind,unbind", - "customAuthz": "ownDataOnly()", - "methods": "read,action,delete", - "pattern": "*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "patch", - "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('user', [])", - "methods": "update,patch,action", - "pattern": "*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "patch", - "customAuthz": "(request.resourcePath === 'selfservice/user/' + context.security.authorization.id) && onlyEditableManagedObjectProperties('user', [])", - "methods": "patch,action", - "pattern": "selfservice/user/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "patch", - "customAuthz": "isQueryOneOf({'managed/user': ['for-userName']}) && restrictPatchToFields(['password'])", - "methods": "patch,action", - "pattern": "managed/user", - "roles": "internal/role/openidm-cert", - }, - { - "actions": "*", - "customAuthz": "ownRelationshipProperty('_meta', false)", - "methods": "read", - "pattern": "internal/usermeta/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "customAuthz": "ownRelationshipProperty('_notifications', true)", - "methods": "read,delete", - "pattern": "internal/notification/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", - "methods": "read,query", - "pattern": "managed/user/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "", - "customAuthz": "ownDataOnly()", - "methods": "read,delete", - "pattern": "managed/alpha_user/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "patch", - "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('alpha_user', [])", - "methods": "update,patch,action", - "pattern": "managed/alpha_user/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "*", - "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", - "methods": "read,query", - "pattern": "managed/alpha_user/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "", - "customAuthz": "ownDataOnly()", - "methods": "read,delete", - "pattern": "managed/bravo_user/*", - "roles": "internal/role/openidm-authorized", - }, - { - "actions": "patch", - "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('bravo_user', [])", - "methods": "update,patch,action", - "pattern": "managed/bravo_user/*", - "roles": "internal/role/openidm-authorized", - }, + "emailTemplate/resetPassword": { + "_id": "emailTemplate/resetPassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Click to reset your password

Password reset link

", + "fr": "

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

", + }, + "mimeType": "text/html", + "subject": { + "en": "Reset your password", + "fr": "Réinitialisez votre mot de passe", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/emailTemplate/updatePassword.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/updatePassword": { + "_id": "emailTemplate/updatePassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Verify email to update password

Update password link

", + }, + "mimeType": "text/html", + "subject": { + "en": "Update your password", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/emailTemplate/welcome.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Welcome to OpenIDM. Your username is '{{object.userName}}'.

", + "fr": "

Bienvenue sur OpenIDM. Votre nom d'utilisateur est '{{object.userName}}'.

", + }, + "mimeType": "text/html", + "subject": { + "en": "Your account has been created", + "fr": "Votre compte vient d’être créé !", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/getavailableuserstoassign.idm.json 1`] = ` +{ + "idm": { + "endpoint/getavailableuserstoassign": { + "_id": "endpoint/getavailableuserstoassign", + "file": "workflow/getavailableuserstoassign.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/getprocessesforuser.idm.json 1`] = ` +{ + "idm": { + "endpoint/getprocessesforuser": { + "_id": "endpoint/getprocessesforuser", + "file": "workflow/getprocessesforuser.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/gettasksview.idm.json 1`] = ` +{ + "idm": { + "endpoint/gettasksview": { + "_id": "endpoint/gettasksview", + "file": "workflow/gettasksview.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/mappingDetails.idm.json 1`] = ` +{ + "idm": { + "endpoint/mappingDetails": { + "_id": "endpoint/mappingDetails", + "context": "endpoint/mappingDetails", + "file": "mappingDetails.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/oauthproxy.idm.json 1`] = ` +{ + "idm": { + "endpoint/oauthproxy": { + "_id": "endpoint/oauthproxy", + "context": "endpoint/oauthproxy", + "file": "oauthProxy.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/removeRepoPathFromRelationships.idm.json 1`] = ` +{ + "idm": { + "endpoint/removeRepoPathFromRelationships": { + "_id": "endpoint/removeRepoPathFromRelationships", + "file": "update/removeRepoPathFromRelationships.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/repairMetadata.idm.json 1`] = ` +{ + "idm": { + "endpoint/repairMetadata": { + "_id": "endpoint/repairMetadata", + "file": "meta/metadataScanner.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/updateInternalUserAndInternalRoleEntries.idm.json 1`] = ` +{ + "idm": { + "endpoint/updateInternalUserAndInternalRoleEntries": { + "_id": "endpoint/updateInternalUserAndInternalRoleEntries", + "file": "update/updateInternalUserAndInternalRoleEntries.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/endpoint/validateQueryFilter.idm.json 1`] = ` +{ + "idm": { + "endpoint/validateQueryFilter": { + "_id": "endpoint/validateQueryFilter", + "context": "util/validateQueryFilter", + "source": "try { org.forgerock.openidm.query.StringQueryFilters.parse(request.content._queryFilter).accept(new org.forgerock.util.query.MapFilterVisitor(), null); } catch (e) { throw { 'code' : 400, 'message' : e.message } };", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/external.rest.idm.json 1`] = ` +{ + "idm": { + "external.rest": { + "_id": "external.rest", + "hostnameVerifier": "&{openidm.external.rest.hostnameVerifier}", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/internal.idm.json 1`] = ` +{ + "idm": { + "internal": { + "_id": "internal", + "objects": [ { - "actions": "*", - "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", - "methods": "read,query", - "pattern": "managed/bravo_user/*", - "roles": "internal/role/openidm-authorized", + "name": "role", + "properties": { + "authzMembers": { + "items": { + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + }, + }, + }, }, { - "actions": "deleteNotificationsForTarget", - "customAuthz": "request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)", - "methods": "action", - "pattern": "notification", - "roles": "internal/role/openidm-authorized", + "name": "notification", + "properties": { + "target": { + "reversePropertyName": "_notifications", + }, + }, }, ], }, - "alphaOrgPrivileges": { - "_id": "alphaOrgPrivileges", - "privileges": [ + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/managed.idm.json 1`] = ` +{ + "idm": { + "managed": { + "_id": "managed", + "objects": [ { - "accessFlags": [ - { - "attribute": "name", - "readOnly": false, - }, - { - "attribute": "description", - "readOnly": false, - }, - { - "attribute": "owners", + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "user", + "notifications": { + "property": "_notifications", + }, + "postDelete": { + "source": "require('postDelete-idp-cleanup').removeConnectedIdpData(oldObject, resourceName, request);require('postDelete-notification-cleanup').removeConnectedNotificationData(oldObject, resourceName, request);", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "sn", + "mail", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "activeDate", + "inactiveDate", + ], + "properties": { + "_id": { + "description": "User ID", + "isPersonal": false, + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "policies": [ + { + "params": { + "regexp": "^(active|inactive)$", + }, + "policyId": "regexpMatches", + }, + ], + "searchable": true, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "activeDate": { + "description": "Active Date", + "format": "datetime", + "isPersonal": false, + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": false, + "title": "Active Date", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "authzRoles": { + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Authorization Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "city": { + "description": "City", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "consentedMappings": { + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "order": [ + "mapping", + "consentDate", + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "format": "datetime", + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": true, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mapping": { + "description": "Mapping", + "searchable": true, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "mapping", + "consentDate", + ], + "title": "Consented Mapping", + "type": "object", + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "country": { + "description": "Country", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "description": { + "description": "Description", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveRoles": { + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles", + ], + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "givenName": { + "description": "First Name", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "inactiveDate": { + "description": "Inactive Date", + "format": "datetime", + "isPersonal": false, + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": false, + "title": "Inactive Date", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId", + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string", + }, + "customQuestion": { + "description": "Custom question", + "type": "string", + }, + "questionId": { + "description": "Question ID", + "type": "string", + }, + }, + "required": [], + "title": "KBA Info Items", + "type": "object", + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "lastSync": { + "description": "Last Sync timestamp", + "isPersonal": false, + "order": [ + "effectiveAssignments", + "timestamp", + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "title": "Effective Assignments", + "type": "array", + }, + "timestamp": { + "description": "Timestamp", + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "type": "string", + }, + }, + "required": [], + "scope": "private", + "searchable": false, + "title": "Last Sync timestamp", + "type": "object", + "usageDescription": "", + "viewable": false, + }, + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Email Address", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Manager _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "memberOfOrg": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations to which I Belong", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "memberOfOrgIDs": { + "isVirtual": true, + "items": { + "title": "org identifiers", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "memberOfOrg", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "password": { + "description": "Password", + "encryption": { + "purpose": "idm.password.encryption", + }, + "isPersonal": false, + "isProtected": true, + "policies": [ + { + "params": { + "minLength": 8, + }, + "policyId": "minimum-length", + }, + { + "params": { + "numCaps": 1, + }, + "policyId": "at-least-X-capitals", + }, + { + "params": { + "numNums": 1, + }, + "policyId": "at-least-X-numbers", + }, + { + "params": { + "disallowedFields": [ + "userName", + "givenName", + "sn", + ], + }, + "policyId": "cannot-contain-others", + }, + ], + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing", + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean", + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean", + }, + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "reports": { + "description": "Direct Reports", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Direct Reports Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Provisioning Roles Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Provisioning Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "sn": { + "description": "Last Name", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "userName": { + "description": "Username", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-username", + }, + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "userName", + "givenName", + "sn", + "mail", + ], + "title": "User", + "type": "object", + "viewable": true, + }, + }, + { + "name": "role", + "onCreate": { + "globals": {}, + "source": "//asdfasdfadsfasdf", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-check-square", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "condition", + "temporalConstraints", + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "assignments": { + "description": "Managed Assignments", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Assignments Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Managed Assignments Items", + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": false, + "title": "Managed Assignments", + "type": "array", + "viewable": true, + }, + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Role Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Members Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Role Members", + "type": "array", + "viewable": true, + }, + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique", + }, + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, + "items": { + "order": [ + "duration", + ], + "properties": { + "duration": { + "description": "Duration", + "type": "string", + }, + }, + "required": [ + "duration", + ], + "title": "Temporal Constraints Items", + "type": "object", + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Role", + "type": "object", + }, + }, + { + "attributeEncryption": {}, + "name": "assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight", + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value", + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string", + }, + "name": { + "description": "Name", + "type": "string", + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string", + }, + "value": { + "description": "Value", + "type": "string", + }, + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object", + }, + "notifyRelationships": [ + "roles", + "members", + ], + "title": "Assignment Attributes", + "type": "array", + "viewable": true, + }, + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", + "items": { + "title": "Link Qualifiers Items", + "type": "string", + }, + "title": "Link Qualifiers", + "type": "array", + "viewable": true, + }, + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists", + }, + ], + "searchable": true, + "title": "Mapping", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Assignment Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Assignment Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Assignment Members Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignment Members", + "type": "array", + "viewable": true, + }, + "name": { + "description": "The assignment name, used for display purposes.", + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "roles": { + "description": "Managed Roles", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Managed Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Managed Roles", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members", + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null", + ], + "viewable": true, + }, + }, + "required": [ + "name", + "description", + "mapping", + ], + "title": "Assignment", + "type": "object", + }, + }, + { + "name": "organization", + "onCreate": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "onRead": { + "globals": {}, + "source": "//seantest", + "type": "groovy", + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs", + ], + "properties": { + "adminIDs": { + "isVirtual": true, + "items": { + "title": "admin ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "admins", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Admin user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "admins": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "adminOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Administrators", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "children": { + "description": "Child Organizations", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "parent", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Child Organizations", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "description": { + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "members": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "memberOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "owners", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Owner user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "owners": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members", + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "parentAdminIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent admins", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent admins", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentIDs": { + "isVirtual": true, + "items": { + "title": "parent org ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentOwnerIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent owners", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", + "type": "array", + "userEditable": false, + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Organization", + "type": "object", + }, + }, + { + "name": "seantestmanagedobject", + "schema": { + "description": null, + "icon": "fa-database", + "mat-icon": null, + "title": null, + }, + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/mapping/mappingtest.idm.json 1`] = ` +{ + "idm": { + "mapping/mappingtest": { + "_id": "mapping/mappingtest", + "consentRequired": false, + "displayName": "mappingtest", + "icon": null, + "name": "mappingtest", + "policies": [ + { + "action": { + "globals": {}, + "source": "//asdfasdf", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "groovy", + }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "target": "managed/organization", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/mapping/seantestmapping.idm.json 1`] = ` +{ + "idm": { + "mapping/seantestmapping": { + "_id": "mapping/seantestmapping", + "consentRequired": false, + "displayName": "seantestmapping", + "icon": null, + "name": "seantestmapping", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/assignment", + "target": "managed/organization", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/metrics.idm.json 1`] = ` +{ + "idm": { + "metrics": { + "_id": "metrics", + "enabled": false, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/notification/passwordUpdate.idm.json 1`] = ` +{ + "idm": { + "notification/passwordUpdate": { + "_id": "notification/passwordUpdate", + "condition": { + "file": "propertiesModifiedFilter.groovy", + "globals": { + "propertiesToCheck": [ + "password", + ], + }, + "type": "groovy", + }, + "enabled": { + "$bool": "&{openidm.notifications.passwordUpdate|false}", + }, + "methods": [ + "update", + "patch", + ], + "notification": { + "message": "Your password has been updated.", + "notificationType": "info", + }, + "path": "managed/user/*", + "target": { + "resource": "managed/user/{{response/_id}}", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/notification/profileUpdate.idm.json 1`] = ` +{ + "idm": { + "notification/profileUpdate": { + "_id": "notification/profileUpdate", + "condition": { + "file": "propertiesModifiedFilter.groovy", + "globals": { + "propertiesToCheck": [ + "userName", + "givenName", + "sn", + "mail", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "preferences", + ], + }, + "type": "groovy", + }, + "enabled": { + "$bool": "&{openidm.notifications.profileUpdate|false}", + }, + "methods": [ + "update", + "patch", + ], + "notification": { + "message": "Your profile has been updated.", + "notificationType": "info", + }, + "path": "managed/user/*", + "target": { + "resource": "managed/user/{{response/_id}}", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/notificationFactory.idm.json 1`] = ` +{ + "idm": { + "notificationFactory": { + "_id": "notificationFactory", + "enabled": { + "$bool": "&{openidm.notifications|false}", + }, + "threadPool": { + "maxPoolThreads": 2, + "maxQueueSize": 20000, + "steadyPoolThreads": 1, + "threadKeepAlive": 60, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/policy.idm.json 1`] = ` +{ + "idm": { + "policy": { + "_id": "policy", + "additionalFiles": [], + "file": "policy.js", + "resources": [ + { + "calculatedProperties": { + "source": "require('selfServicePolicies').getRegistrationProperties()", + "type": "text/javascript", + }, + "resource": "selfservice/registration", + }, + { + "calculatedProperties": { + "source": "require('selfServicePolicies').getResetProperties()", + "type": "text/javascript", + }, + "resource": "selfservice/reset", + }, + { + "properties": [ + { + "name": "_id", + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + }, + { + "name": "password", + "policies": [ + { + "params": { + "minLength": 8, + }, + "policyId": "minimum-length", + }, + ], + }, + ], + "resource": "internal/user/*", + }, + { + "properties": [ + { + "name": "name", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + }, + { + "name": "temporalConstraints", + "policies": [ + { + "policyId": "valid-temporal-constraints", + }, + ], + }, + { + "name": "condition", + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + }, + { + "name": "privileges", + "policies": [ + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "params": { + "properties": [ + { + "name": "name", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "string", + ], + }, + "policyId": "valid-type", + }, + ], + }, + { + "name": "path", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "policyId": "valid-privilege-path", + }, + ], + }, + { + "name": "accessFlags", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-accessFlags-object", + }, + ], + }, + { + "name": "actions", + "policies": [ + { + "policyId": "required", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + ], + }, + { + "name": "permissions", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-permissions", + }, + ], + }, + { + "name": "filter", + "policies": [ + { + "params": { + "types": [ + "string", + "null", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-query-filter", + }, + ], + }, + ], + }, + "policyId": "valid-array-items", + }, + ], + }, + ], + "resource": "internal/role/*", + }, + { + "properties": [ + { + "name": "temporalConstraints", + "policies": [ + { + "policyId": "valid-temporal-constraints", + }, + ], + }, + { + "name": "condition", + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + }, + ], + "resource": "managed/role/*", + }, + { + "properties": [ + { + "name": "objects", + "policies": [ + { + "policyId": "valid-event-scripts", + }, + ], + }, + ], + "resource": "config/managed", + }, + ], + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/privilegeAssignments.idm.json 1`] = ` +{ + "idm": { + "privilegeAssignments": { + "_id": "privilegeAssignments", + "privilegeAssignments": [ + { + "name": "ownerPrivileges", + "privileges": [ + "owner-view-update-delete-orgs", + "owner-create-orgs", + "owner-view-update-delete-admins-and-members", + "owner-create-admins", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "ownerOfOrg", + }, + { + "name": "adminPrivileges", + "privileges": [ + "admin-view-update-delete-orgs", + "admin-create-orgs", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "adminOfOrg", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/privileges.idm.json 1`] = ` +{ + "idm": { + "privileges": { + "_id": "privileges", + "privileges": [ + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/ownerIDs eq "{{_id}}" or /parentOwnerIDs eq "{{_id}}"", + "name": "owner-view-update-delete-orgs", + "path": "managed/organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "owner-create-orgs", + "path": "managed/organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "owner-view-update-delete-admins-and-members", + "path": "managed/user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)", + "name": "owner-create-admins", + "path": "managed/user", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/adminIDs eq "{{_id}}" or /parentAdminIDs eq "{{_id}}"", + "name": "admin-view-update-delete-orgs", + "path": "managed/organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "admin-create-orgs", + "path": "managed/organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "admin-view-update-delete-members", + "path": "managed/user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)", + "name": "admin-create-members", + "path": "managed/user", + "permissions": [ + "CREATE", + ], + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/process/access.idm.json 1`] = ` +{ + "idm": { + "process/access": { + "_id": "process/access", + "workflowAccess": [ + { + "propertiesCheck": { + "matches": ".*", + "property": "_id", + "requiresRole": "internal/role/openidm-authorized", + }, + }, + { + "propertiesCheck": { + "matches": ".*", + "property": "_id", + "requiresRole": "internal/role/openidm-admin", + }, + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/repo.ds.idm.json 1`] = ` +{ + "idm": { + "repo.ds": { + "_id": "repo.ds", + "commands": { + "delete-mapping-links": { + "_queryFilter": "/linkType eq "\${mapping}"", + "operation": "DELETE", + }, + "delete-target-ids-for-recon": { + "_queryFilter": "/reconId eq "\${reconId}"", + "operation": "DELETE", + }, + }, + "embedded": false, + "ldapConnectionFactories": { + "bind": { + "connectionPoolSize": 50, + "connectionSecurity": "startTLS", + "heartBeatIntervalSeconds": 60, + "heartBeatTimeoutMilliSeconds": 10000, + "primaryLdapServers": [ + { + "hostname": "opendj-frodo-dev.classic.com", + "port": 2389, + }, + ], + "secondaryLdapServers": [], + }, + "root": { + "authentication": { + "simple": { + "bindDn": "uid=admin", + "bindPassword": { + "$crypto": { + "type": "x-simple-encryption", + "value": { + "cipher": "AES/CBC/PKCS5Padding", + "data": "lJ/B6T9e9CDKHCN8TxkD4g==", + "iv": "EdrerzwEUUkHG582cLDw5w==", + "keySize": 32, + "mac": "Aty9fXUtl4pexGlHOc+CBg==", + "purpose": "idm.config.encryption", + "salt": "BITSKlnPeT5klcuEZbngzw==", + "stableId": "openidm-sym-default", + }, + }, + }, + }, + }, + "inheritFrom": "bind", + }, + }, + "maxConnectionAttempts": 5, + "resourceMapping": { + "defaultMapping": { + "dnTemplate": "ou=generic,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "explicitMapping": { + "clusteredrecontargetids": { + "dnTemplate": "ou=clusteredrecontargetids,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-recon-clusteredTargetIds", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "reconId": { + "ldapAttribute": "fr-idm-recon-id", + "type": "simple", + }, + "targetIds": { + "ldapAttribute": "fr-idm-recon-targetIds", + "type": "json", + }, + }, + }, + "dsconfig/attributeValue": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-attribute-value-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "checkSubstrings": { + "ldapAttribute": "ds-cfg-check-substrings", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "matchAttribute": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-match-attribute", + "type": "simple", + }, + "minSubstringLength": { + "ldapAttribute": "ds-cfg-min-substring-length", + "type": "simple", + }, + "testReversedPassword": { + "isRequired": true, + "ldapAttribute": "ds-cfg-test-reversed-password", + "type": "simple", + }, + }, + }, + "dsconfig/characterSet": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-character-set-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "allowUnclassifiedCharacters": { + "isRequired": true, + "ldapAttribute": "ds-cfg-allow-unclassified-characters", + "type": "simple", + }, + "characterSet": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-character-set", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minCharacterSets": { + "ldapAttribute": "ds-cfg-min-character-sets", + "type": "simple", + }, + }, + }, + "dsconfig/dictionary": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-dictionary-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "checkSubstrings": { + "ldapAttribute": "ds-cfg-check-substrings", + "type": "simple", + }, + "dictionaryFile": { + "isRequired": true, + "ldapAttribute": "ds-cfg-dictionary-file", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minSubstringLength": { + "ldapAttribute": "ds-cfg-min-substring-length", + "type": "simple", + }, + "testReversedPassword": { + "isRequired": true, + "ldapAttribute": "ds-cfg-test-reversed-password", + "type": "simple", + }, + }, + }, + "dsconfig/lengthBased": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-length-based-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "maxPasswordLength": { + "ldapAttribute": "ds-cfg-max-password-length", + "type": "simple", + }, + "minPasswordLength": { + "ldapAttribute": "ds-cfg-min-password-length", + "type": "simple", + }, + }, + }, + "dsconfig/passwordPolicies": { + "dnTemplate": "cn=Password Policies,cn=config", + "objectClasses": [ + "ds-cfg-password-policy", + "ds-cfg-authentication-policy", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "defaultPasswordStorageScheme": { + "isMultiValued": true, + "isRequired": true, + "ldapAttribute": "ds-cfg-default-password-storage-scheme", + "type": "simple", + }, + "maxPasswordAge": { + "ldapAttribute": "ds-cfg-max-password-age", + "type": "simple", + }, + "passwordAttribute": { + "isRequired": true, + "ldapAttribute": "ds-cfg-password-attribute", + "type": "simple", + }, + "passwordHistoryCount": { + "ldapAttribute": "ds-cfg-password-history-count", + "type": "simple", + }, + "validator": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-password-validator", + "type": "simple", + }, + }, + }, + "dsconfig/repeatedCharacters": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-repeated-characters-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "maxConsecutiveLength": { + "isRequired": true, + "ldapAttribute": "ds-cfg-max-consecutive-length", + "type": "simple", + }, + }, + }, + "dsconfig/similarityBased": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-similarity-based-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minPasswordDifference": { + "isRequired": true, + "ldapAttribute": "ds-cfg-min-password-difference", + "type": "simple", + }, + }, + }, + "dsconfig/uniqueCharacters": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-unique-characters-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minUniqueCharacters": { + "isRequired": true, + "ldapAttribute": "ds-cfg-min-unique-characters", + "type": "simple", + }, + }, + }, + "dsconfig/userDefinedVirtualAttribute": { + "dnTemplate": "cn=Virtual Attributes,cn=config", + "objectClasses": [ + "ds-cfg-user-defined-virtual-attribute", + "ds-cfg-virtual-attribute", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "attributeType": { + "isRequired": true, + "ldapAttribute": "ds-cfg-attribute-type", + "type": "simple", + }, + "baseDn": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-base-dn", + "type": "simple", + }, + "conflictBehavior": { + "ldapAttribute": "ds-cfg-conflict-behavior", + "type": "simple", + }, + "enabled": { + "isRequired": true, + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "filter": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-filter", + "type": "simple", + }, + "groupDn": { + "ldapAttribute": "ds-cfg-group-dn", + "type": "simple", + }, + "javaClass": { + "isRequired": true, + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "scope": { + "ldapAttribute": "ds-cfg-scope", + "type": "simple", + }, + "value": { + "isMultiValued": true, + "isRequired": true, + "ldapAttribute": "ds-cfg-value", + "type": "simple", + }, + }, + }, + "internal/role": { + "dnTemplate": "ou=roles,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "fr-idm-internal-role", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "authzMembers": { + "isMultiValued": true, + "propertyName": "authzRoles", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "condition": { + "ldapAttribute": "fr-idm-condition", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "name": { + "ldapAttribute": "fr-idm-name", + "type": "simple", + }, + "privileges": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-privilege", + "type": "json", + }, + "temporalConstraints": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-temporal-constraints", + "type": "json", + }, + }, + }, + "internal/user": { + "dnTemplate": "ou=users,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-internal-user", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "password": { + "ldapAttribute": "fr-idm-password", + "type": "json", + }, + }, + }, + "link": { + "dnTemplate": "ou=links,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-link", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "firstId": { + "ldapAttribute": "fr-idm-link-firstId", + "type": "simple", + }, + "linkQualifier": { + "ldapAttribute": "fr-idm-link-qualifier", + "type": "simple", + }, + "linkType": { + "ldapAttribute": "fr-idm-link-type", + "type": "simple", + }, + "secondId": { + "ldapAttribute": "fr-idm-link-secondId", + "type": "simple", + }, + }, + }, + "locks": { + "dnTemplate": "ou=locks,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-lock", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "nodeId": { + "ldapAttribute": "fr-idm-lock-nodeid", + "type": "simple", + }, + }, + }, + "recon/assoc": { + "dnTemplate": "ou=assoc,ou=recon,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "namingStrategy": { + "dnAttribute": "fr-idm-reconassoc-reconid", + "type": "clientDnNaming", + }, + "objectClasses": [ + "fr-idm-reconassoc", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "fr-idm-reconassoc-reconid", + "type": "simple", + }, + "finishTime": { + "ldapAttribute": "fr-idm-reconassoc-finishtime", + "type": "simple", + }, + "isAnalysis": { + "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-reconassoc-mapping", + "type": "simple", + }, + "sourceResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "type": "simple", + }, + "targetResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "type": "simple", + }, + }, + "subResources": { + "entry": { + "namingStrategy": { + "dnAttribute": "uid", + "type": "clientDnNaming", + }, + "resource": "recon-assoc-entry", + "type": "collection", + }, + }, + }, + "recon/assoc/entry": { + "objectClasses": [ + "uidObject", + "fr-idm-reconassocentry", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + }, + "action": { + "ldapAttribute": "fr-idm-reconassocentry-action", + "type": "simple", + }, + "ambiguousTargetObjectIds": { + "ldapAttribute": "fr-idm-reconassocentry-ambiguoustargetobjectids", + "type": "simple", + }, + "exception": { + "ldapAttribute": "fr-idm-reconassocentry-exception", + "type": "simple", + }, + "isAnalysis": { + "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "type": "simple", + }, + "linkQualifier": { + "ldapAttribute": "fr-idm-reconassocentry-linkqualifier", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-reconassoc-mapping", + "type": "simple", + }, + "message": { + "ldapAttribute": "fr-idm-reconassocentry-message", + "type": "simple", + }, + "messageDetail": { + "ldapAttribute": "fr-idm-reconassocentry-messagedetail", + "type": "simple", + }, + "phase": { + "ldapAttribute": "fr-idm-reconassocentry-phase", + "type": "simple", + }, + "reconId": { + "ldapAttribute": "fr-idm-reconassocentry-reconid", + "type": "simple", + }, + "situation": { + "ldapAttribute": "fr-idm-reconassocentry-situation", + "type": "simple", + }, + "sourceObjectId": { + "ldapAttribute": "fr-idm-reconassocentry-sourceObjectId", + "type": "simple", + }, + "sourceResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "type": "simple", + }, + "status": { + "ldapAttribute": "fr-idm-reconassocentry-status", + "type": "simple", + }, + "targetObjectId": { + "ldapAttribute": "fr-idm-reconassocentry-targetObjectId", + "type": "simple", + }, + "targetResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "type": "simple", + }, + }, + "resourceName": "recon-assoc-entry", + "subResourceRouting": [ + { + "prefix": "entry", + "template": "recon/assoc/{reconId}/entry", + }, + ], + }, + "sync/queue": { + "dnTemplate": "ou=queue,ou=sync,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-syncqueue", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "context": { + "ldapAttribute": "fr-idm-syncqueue-context", + "type": "json", + }, + "createDate": { + "ldapAttribute": "fr-idm-syncqueue-createdate", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-syncqueue-mapping", + "type": "simple", + }, + "newObject": { + "ldapAttribute": "fr-idm-syncqueue-newobject", + "type": "json", + }, + "nodeId": { + "ldapAttribute": "fr-idm-syncqueue-nodeid", + "type": "simple", + }, + "objectRev": { + "ldapAttribute": "fr-idm-syncqueue-objectRev", + "type": "simple", + }, + "oldObject": { + "ldapAttribute": "fr-idm-syncqueue-oldobject", + "type": "json", + }, + "resourceCollection": { + "ldapAttribute": "fr-idm-syncqueue-resourcecollection", + "type": "simple", + }, + "resourceId": { + "ldapAttribute": "fr-idm-syncqueue-resourceid", + "type": "simple", + }, + "state": { + "ldapAttribute": "fr-idm-syncqueue-state", + "type": "simple", + }, + "syncAction": { + "ldapAttribute": "fr-idm-syncqueue-syncaction", + "type": "simple", + }, + }, + }, + }, + "genericMapping": { + "cluster/*": { + "dnTemplate": "ou=cluster,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-cluster-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchClusterObject", + "objectClasses": [ + "uidObject", + "fr-idm-cluster-obj", + ], + }, + "config": { + "dnTemplate": "ou=config,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "file": { + "dnTemplate": "ou=file,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "import": { + "dnTemplate": "ou=import,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "import/*": { + "dnTemplate": "ou=import,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "internal/notification": { + "dnTemplate": "ou=notification,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-notification-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-notification", + ], + "properties": { + "target": { + "propertyName": "_notifications", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + }, + }, + "internal/usermeta": { + "dnTemplate": "ou=usermeta,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + }, + }, + "jsonstorage": { + "dnTemplate": "ou=jsonstorage,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "managed/*": { + "dnTemplate": "ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "managed/assignment": { + "dnTemplate": "ou=assignment,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-assignment-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-assignment", + ], + "properties": { + "condition": { + "ldapAttribute": "fr-idm-assignment-condition", + "type": "simple", + }, + "members": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/role", + "type": "reverseReference", + }, + }, + }, + "managed/organization": { + "dnTemplate": "ou=organization,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + ], + "properties": { + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/organization", + "type": "reverseReference", + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + }, + }, + "managed/role": { + "dnTemplate": "ou=role,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role", + ], + "properties": { + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-assignments", + "primaryKey": "uid", + "resourcePath": "managed/assignment", + "type": "reference", + }, + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + }, + }, + "managed/user": { + "dnTemplate": "ou=user,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-user-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedUser", + "objectClasses": [ + "uidObject", + "fr-idm-managed-user", + ], + "properties": { + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "internal/usermeta", + "type": "reference", + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference", + }, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-assignment-member", + "primaryKey": "uid", + "resourcePath": "managed/assignment", + "type": "reference", + }, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", + }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/user", + "type": "reference", + }, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + "passwordExpirationTime": { + "ldapAttribute": "pwdExpirationTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", + }, + "passwordLastChangedTime": { + "ldapAttribute": "pwdChangedTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", + }, + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/role", + "type": "reference", + }, + }, + }, + "reconprogressstate": { + "dnTemplate": "ou=reconprogressstate,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "relationships": { + "dnTemplate": "ou=relationships,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-relationship-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchRelationship", + "objectClasses": [ + "uidObject", + "fr-idm-relationship", + ], + }, + "scheduler": { + "dnTemplate": "ou=scheduler,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "scheduler/*": { + "dnTemplate": "ou=scheduler,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "ui/*": { + "dnTemplate": "ou=ui,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "updates": { + "dnTemplate": "ou=updates,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + }, + }, + "rest2LdapOptions": { + "mvccAttribute": "etag", + "readOnUpdatePolicy": "controls", + "returnNullForMissingProperties": true, + "useMvcc": true, + "usePermissiveModify": true, + "useSubtreeDelete": false, + }, + "security": { + "fileBasedTrustManagerFile": "&{idm.install.dir}/security/truststore", + "fileBasedTrustManagerPasswordFile": "&{idm.install.dir}/security/storepass", + "fileBasedTrustManagerType": "JKS", + "trustManager": "file", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/repo.init.idm.json 1`] = ` +{ + "idm": { + "repo.init": { + "_id": "repo.init", + "insert": { + "internal/role": [ + { + "description": "Administrative access", + "id": "openidm-admin", + "name": "openidm-admin", + }, + { + "description": "Basic minimum user", + "id": "openidm-authorized", + "name": "openidm-authorized", + }, + { + "description": "Anonymous access", + "id": "openidm-reg", + "name": "openidm-reg", + }, + { + "description": "Authenticated via certificate", + "id": "openidm-cert", + "name": "openidm-cert", + }, + { + "description": "Allowed to reassign workflow tasks", + "id": "openidm-tasks-manager", + "name": "openidm-tasks-manager", + }, + { + "description": "Platform provisioning access", + "id": "platform-provisioning", + "name": "platform-provisioning", + }, + ], + "internal/user": [ + { + "id": "openidm-admin", + "password": "&{openidm.admin.password}", + }, + { + "id": "anonymous", + "password": "anonymous", + }, + { + "id": "idm-provisioning", + }, + { + "id": "connector-server-client", + }, + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/router.idm.json 1`] = ` +{ + "idm": { + "router": { + "_id": "router", + "filters": [ + { + "methods": [ + "create", + "update", + ], + "onRequest": { + "file": "policyFilter.js", + "type": "text/javascript", + }, + "pattern": "^(managed|internal)($|(/.+))", + }, + { + "methods": [ + "update", + ], + "onRequest": { + "file": "policyFilter.js", + "type": "text/javascript", + }, + "pattern": "^config/managed$", + }, + { + "condition": { + "source": "(context.caller.external === true) && (typeof context.privilege === 'undefined' || Object.keys(context.privilege.matchingPrivileges).length === 0)", + "type": "text/javascript", + }, + "onResponse": { + "source": "require('relationshipFilter').filterResponse()", + "type": "text/javascript", + }, + "pattern": "^(managed|internal)($|(/.+))", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/schedule/seantest.idm.json 1`] = ` +{ + "idm": { + "schedule/seantest": { + "_id": "schedule/seantest", + "concurrentExecution": false, + "enabled": false, + "endTime": null, + "invokeContext": { + "script": { + "globals": {}, + "source": "//sean has changed this script. Let's see if it is still working. qqqqqqqqqqqqqqSchedule1 +", + "type": "text/javascript", + }, + }, + "invokeLogLevel": "info", + "invokeService": "script", + "misfirePolicy": "fireAndProceed", + "persisted": true, + "recoverable": false, + "repeatCount": 0, + "repeatInterval": 0, + "schedule": null, + "startTime": null, + "type": "simple", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/schedule/taskscan_activate.idm.json 1`] = ` +{ + "idm": { + "schedule/taskscan_activate": { + "_id": "schedule/taskscan_activate", + "concurrentExecution": false, + "enabled": false, + "invokeContext": { + "numberOfThreads": 5, + "scan": { + "_queryFilter": "((/activeDate le "\${Time.nowWithOffset}") AND (!(/inactiveDate pr) or /inactiveDate ge "\${Time.nowWithOffset}"))", + "object": "managed/user", + "recovery": { + "timeout": "10m", + }, + "taskState": { + "completed": "/activateAccount/task-completed", + "started": "/activateAccount/task-started", + }, + }, + "task": { + "script": { + "globals": {}, + "source": "var patch = [{ "operation" : "replace", "field" : "/accountStatus", "value" : "active" }]; + +logger.debug("Performing Activate Account Task on {} ({})", input.mail, objectID); + +openidm.patch(objectID, null, patch); true;", + "type": "text/javascript", + }, + }, + "waitForCompletion": false, + }, + "invokeService": "taskscanner", + "persisted": true, + "repeatInterval": 86400000, + "type": "simple", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/schedule/taskscan_expire.idm.json 1`] = ` +{ + "idm": { + "schedule/taskscan_expire": { + "_id": "schedule/taskscan_expire", + "concurrentExecution": false, + "enabled": false, + "invokeContext": { + "numberOfThreads": 5, + "scan": { + "_queryFilter": "((/inactiveDate lt "\${Time.nowWithOffset}") AND (!(/activeDate pr) or /activeDate le "\${Time.nowWithOffset}"))", + "object": "managed/user", + "recovery": { + "timeout": "10m", + }, + "taskState": { + "completed": "/expireAccount/task-completed", + "started": "/expireAccount/task-started", + }, + }, + "task": { + "script": { + "globals": {}, + "source": "var patch = [{ "operation" : "replace", "field" : "/accountStatus", "value" : "inactive" }]; + +logger.debug("Performing Expire Account Task on {} ({})", input.mail, objectID); + +openidm.patch(objectID, null, patch); true;", + "type": "text/javascript", + }, + }, + "waitForCompletion": false, + }, + "invokeService": "taskscanner", + "persisted": true, + "repeatInterval": 86400000, + "type": "simple", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/scheduler.idm.json 1`] = ` +{ + "idm": { + "scheduler": { + "_id": "scheduler", + "scheduler": { + "executePersistentSchedules": { + "$bool": "&{openidm.scheduler.execute.persistent.schedules}", + }, + }, + "threadPool": { + "threadCount": 10, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/script.idm.json 1`] = ` +{ + "idm": { + "script": { + "ECMAScript": { + "javascript.optimization.level": 9, + "javascript.recompile.minimumInterval": 60000, + }, + "Groovy": { + "#groovy.disabled.global.ast.transformations": "", + "#groovy.errors.tolerance": 10, + "#groovy.output.debug": false, + "#groovy.output.verbose": false, + "#groovy.script.base": "#any class extends groovy.lang.Script", + "#groovy.script.extension": ".groovy", + "#groovy.target.bytecode": "1.8", + "#groovy.target.directory": "&{idm.data.dir}/classes", + "#groovy.target.indy": true, + "#groovy.warnings": "likely errors #othere values [none,likely,possible,paranoia]", + "groovy.classpath": "&{idm.install.dir}/lib", + "groovy.recompile": true, + "groovy.recompile.minimumInterval": 60000, + "groovy.source.encoding": "UTF-8", + }, + "_id": "script", + "properties": {}, + "sources": { + "default": { + "directory": "&{idm.install.dir}/bin/defaults/script", + }, + "install": { + "directory": "&{idm.install.dir}", + }, + "project": { + "directory": "&{idm.instance.dir}", + }, + "project-script": { + "directory": "&{idm.instance.dir}/script", + }, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/secrets.idm.json 1`] = ` +{ + "idm": { + "secrets": { + "_id": "secrets", + "stores": [ + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}", + "mappings": [ + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.default", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.config.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.password.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.https.keystore.cert.alias|openidm-localhost}", + ], + "secretId": "idm.jwt.session.module.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}", + ], + "secretId": "idm.jwt.session.module.signing", + "types": [ + "SIGN", + "VERIFY", + ], + }, + { + "aliases": [ + "selfservice", + ], + "secretId": "idm.selfservice.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}", + ], + "secretId": "idm.selfservice.signing", + "types": [ + "SIGN", + "VERIFY", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.assignment.attribute.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + ], + "providerName": "&{openidm.keystore.provider|SunJCE}", + "storePassword": "&{openidm.keystore.password|changeit}", + "storetype": "&{openidm.keystore.type|JCEKS}", + }, + "name": "mainKeyStore", + }, + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.truststore.location|&{idm.install.dir}/security/truststore}", + "mappings": [], + "providerName": "&{openidm.truststore.provider|SUN}", + "storePassword": "&{openidm.truststore.password|changeit}", + "storetype": "&{openidm.truststore.type|JKS}", + }, + "name": "mainTrustStore", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/selfservice.kba.idm.json 1`] = ` +{ + "idm": { + "selfservice.kba": { + "_id": "selfservice.kba", + "kbaPropertyName": "kbaInfo", + "minimumAnswersToDefine": 2, + "minimumAnswersToVerify": 1, + "questions": { + "1": { + "en": "What's your favorite color?", + "en_GB": "What is your favourite colour?", + "fr": "Quelle est votre couleur préférée?", + }, + "2": { + "en": "Who was your first employer?", + }, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/selfservice.propertymap.idm.json 1`] = ` +{ + "idm": { + "selfservice.propertymap": { + "_id": "selfservice.propertymap", + "properties": [ + { + "source": "givenName", + "target": "givenName", + }, + { + "source": "familyName", + "target": "sn", + }, + { + "source": "email", + "target": "mail", + }, + { + "condition": "/object/postalAddress pr", + "source": "postalAddress", + "target": "postalAddress", + }, + { + "condition": "/object/addressLocality pr", + "source": "addressLocality", + "target": "city", + }, + { + "condition": "/object/addressRegion pr", + "source": "addressRegion", + "target": "stateProvince", + }, + { + "condition": "/object/postalCode pr", + "source": "postalCode", + "target": "postalCode", + }, + { + "condition": "/object/country pr", + "source": "country", + "target": "country", + }, + { + "condition": "/object/phone pr", + "source": "phone", + "target": "telephoneNumber", + }, + { + "source": "username", + "target": "userName", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/selfservice.terms.idm.json 1`] = ` +{ + "idm": { + "selfservice.terms": { + "_id": "selfservice.terms", + "active": "0.0", + "uiConfig": { + "buttonText": "Accept", + "displayName": "We've updated our terms", + "purpose": "You must accept the updated terms in order to proceed.", + }, + "versions": [ + { + "createDate": "2019-10-28T04:20:11.320Z", + "termsTranslations": { + "en": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + }, + "version": "0.0", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/servletfilter/cors.idm.json 1`] = ` +{ + "idm": { + "servletfilter/cors": { + "_id": "servletfilter/cors", + "filterClass": "org.eclipse.jetty.ee10.servlets.CrossOriginFilter", + "initParams": { + "allowCredentials": true, + "allowedHeaders": "accept,x-openidm-password,x-openidm-nosession,x-openidm-username,content-type,origin,x-requested-with", + "allowedMethods": "GET,POST,PUT,DELETE,PATCH", + "allowedOrigins": "https://localhost:&{openidm.port.https}", + "chainPreflight": false, + }, + "urlPatterns": [ + "/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/servletfilter/payload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/payload": { + "_id": "servletfilter/payload", + "filterClass": "org.forgerock.openidm.jetty.LargePayloadServletFilter", + "initParams": { + "maxRequestSizeInMegabytes": 5, + }, + "urlPatterns": [ + "&{openidm.servlet.alias}/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/servletfilter/upload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/upload": { + "_id": "servletfilter/upload", + "filterClass": "org.forgerock.openidm.jetty.LargePayloadServletFilter", + "initParams": { + "maxRequestSizeInMegabytes": 50, + }, + "urlPatterns": [ + "&{openidm.servlet.upload.alias}/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + { + "_id": "sync/managedOrganization_managedRole", + "consentRequired": false, + "displayName": "managedOrganization_managedRole", + "icon": null, + "name": "managedOrganization_managedRole", + "policies": [ + { + "action": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "//seantest", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": "//seantest", + "type": "groovy", + }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [], + "target": "managed/role", + }, + { + "_id": "sync/managedOrganization_managedSeantestmanagedobject", + "consentRequired": false, + "displayName": "managedOrganization_managedSeantestmanagedobject", + "icon": null, + "name": "managedOrganization_managedSeantestmanagedobject", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [ + "managedOrganization_managedRole", + ], + "target": "managed/seantestmanagedobject", + }, + { + "_id": "sync/managedAssignment_managedUser", + "consentRequired": false, + "displayName": "managedAssignment_managedUser", + "icon": null, + "name": "managedAssignment_managedUser", + "policies": [ + { + "action": { + "globals": {}, + "source": "//asdfasdf", + "type": "groovy", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": "//asdfasdf", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "text/javascript", + }, + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + ], + "target": "managed/user", + }, + { + "_id": "sync/seantestmapping", + "consentRequired": false, + "displayName": "seantestmapping", + "icon": null, + "name": "seantestmapping", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + ], + "target": "managed/organization", + }, + { + "_id": "sync/managedSeantestmanagedobject_managedUser", + "consentRequired": false, + "displayName": "managedSeantestmanagedobject_managedUser", + "icon": null, + "name": "managedSeantestmanagedobject_managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/seantestmanagedobject", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "seantestmapping", + ], + "target": "managed/user", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/ui.context/admin.idm.json 1`] = ` +{ + "idm": { + "ui.context/admin": { + "_id": "ui.context/admin", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/admin/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/admin/extension", + "responseHeaders": { + "X-Frame-Options": "SAMEORIGIN", + }, + "urlContextRoot": "/admin", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/ui.context/api.idm.json 1`] = ` +{ + "idm": { + "ui.context/api": { + "_id": "ui.context/api", + "authEnabled": true, + "cacheEnabled": false, + "defaultDir": "&{idm.install.dir}/ui/api/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/api/extension", + "urlContextRoot": "/api", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/ui.context/enduser.idm.json 1`] = ` +{ + "idm": { + "ui.context/enduser": { + "_id": "ui.context/enduser", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/enduser", + "enabled": true, + "responseHeaders": { + "X-Frame-Options": "DENY", + }, + "urlContextRoot": "/", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/ui.context/oauth.idm.json 1`] = ` +{ + "idm": { + "ui.context/oauth": { + "_id": "ui.context/oauth", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/oauth/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/oauth/extension", + "urlContextRoot": "/oauthReturn", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/ui/configuration.idm.json 1`] = ` +{ + "idm": { + "ui/configuration": { + "_id": "ui/configuration", + "configuration": { + "defaultNotificationType": "info", + "forgotUsername": false, + "lang": "en", + "notificationTypes": { + "error": { + "iconPath": "images/notifications/error.png", + "name": "common.notification.types.error", + }, + "info": { + "iconPath": "images/notifications/info.png", + "name": "common.notification.types.info", + }, + "warning": { + "iconPath": "images/notifications/warning.png", + "name": "common.notification.types.warning", + }, + }, + "passwordReset": false, + "passwordResetLink": "", + "roles": { + "internal/role/openidm-admin": "ui-admin", + "internal/role/openidm-authorized": "ui-user", + }, + "selfRegistration": false, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/ui/dashboard.idm.json 1`] = ` +{ + "idm": { + "ui/dashboard": { + "_id": "ui/dashboard", + "adminDashboards": [ + { + "isDefault": true, + "name": "Quick Start", + "widgets": [ + { + "cards": [ + { + "href": "#connectors/add/", + "icon": "fa-database", + "name": "Add Connector", + }, + { + "href": "#mapping/add/", + "icon": "fa-map-marker", + "name": "Create Mapping", + }, + { + "href": "#resource/managed/role/list/", + "icon": "fa-check-square-o", + "name": "Manage Roles", + }, + { + "href": "#managed/add/", + "icon": "fa-tablet", + "name": "Add Device", + }, + { + "href": "#selfservice/userregistration/", + "icon": "fa-gear", + "name": "Configure Registration", + }, + { + "href": "#selfservice/passwordreset/", + "icon": "fa-gear", + "name": "Configure Password Reset", + }, + { + "href": "#resource/managed/user/list/", + "icon": "fa-user", + "name": "Manage Users", + }, + { + "href": "#settings/", + "icon": "fa-user", + "name": "Configure System Preferences", + }, + ], + "size": "large", + "type": "quickStart", + }, + ], + }, + { + "isDefault": false, + "name": "System Monitoring", + "widgets": [ + { + "legendRange": { + "month": [ + 500, + 2500, + 5000, + ], + "week": [ + 10, + 30, + 90, + 270, + 810, + ], + "year": [ + 10000, + 40000, + 100000, + 250000, + ], + }, + "maxRange": "#24423c", + "minRange": "#b0d4cd", + "size": "large", + "type": "audit", + }, + { + "size": "large", + "type": "clusterStatus", + }, + { + "size": "large", + "type": "systemHealthFull", + }, + { + "barchart": "false", + "size": "large", + "type": "lastRecon", + }, + ], + }, + { + "isDefault": false, + "name": "Resource Report", + "widgets": [ + { + "selected": "activeUsers", + "size": "x-small", + "type": "counter", + }, + { + "selected": "rolesEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "activeConnectors", + "size": "x-small", + "type": "counter", + }, + { + "size": "large", + "type": "resourceList", + }, + ], + }, + { + "isDefault": false, + "name": "Business Report", + "widgets": [ + { + "graphType": "fa-pie-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "signIns", + "widgetTitle": "Sign-Ins", + }, + { + "graphType": "fa-bar-chart", + "size": "x-small", + "type": "passwordResets", + "widgetTitle": "Password Resets", + }, + { + "graphType": "fa-line-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "newRegistrations", + "widgetTitle": "New Registrations", + }, + { + "size": "x-small", + "timezone": { + "hours": "07", + "minutes": "00", + "negative": true, + }, + "type": "socialLogin", + }, + { + "selected": "socialEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "manualRegistrations", + "size": "x-small", + "type": "counter", + }, + ], + }, + { + "isDefault": false, + "name": "seantestdashboard", + "widgets": [ + { + "size": "large", + "type": "resourceList", + }, + ], + }, + ], + "dashboard": { + "widgets": [ + { + "size": "large", + "type": "Welcome", + }, + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/ui/profile.idm.json 1`] = ` +{ + "idm": { + "ui/profile": { + "_id": "ui/profile", + "tabs": [ + { + "name": "personalInfoTab", + "view": "org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab", + }, + { + "name": "signInAndSecurity", + "view": "org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab", + }, + { + "name": "preference", + "view": "org/forgerock/openidm/ui/user/profile/PreferencesTab", + }, + { + "name": "trustedDevice", + "view": "org/forgerock/openidm/ui/user/profile/TrustedDevicesTab", + }, + { + "name": "oauthApplication", + "view": "org/forgerock/openidm/ui/user/profile/OauthApplicationsTab", + }, + { + "name": "privacyAndConsent", + "view": "org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab", + }, + { + "name": "sharing", + "view": "org/forgerock/openidm/ui/user/profile/uma/SharingTab", + }, + { + "name": "auditHistory", + "view": "org/forgerock/openidm/ui/user/profile/uma/ActivityTab", + }, + { + "name": "accountControls", + "view": "org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/ui/themeconfig.idm.json 1`] = ` +{ + "idm": { + "ui/themeconfig": { + "_id": "ui/themeconfig", + "icon": "favicon.ico", + "path": "", + "settings": { + "footer": { + "mailto": "info@pingidentity.com", + }, + "loginLogo": { + "alt": "Ping Identity", + "height": "120px", + "src": "images/login-logo-dark.png", + "title": "Ping Identity", + "width": "120px", + }, + "logo": { + "alt": "Ping Identity", + "src": "images/logo-horizontal-white.png", + "title": "Ping Identity", + }, + }, + "stylesheets": [ + "css/bootstrap-3.4.1-custom.css", + "css/structure.css", + "css/theme.css", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/webserver.idm.json 1`] = ` +{ + "idm": { + "webserver": { + "_id": "webserver", + "gzip": { + "enabled": true, + "includedMethods": [ + "GET", + ], + }, + "maxThreads": { + "$int": "&{openidm.webserver.max.threads|&{org.ops4j.pax.web.server.maxThreads|200}}", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/webserver.listener/http.idm.json 1`] = ` +{ + "idm": { + "webserver.listener/http": { + "_id": "webserver.listener/http", + "enabled": { + "$bool": "&{openidm.http.enabled|true}", + }, + "port": { + "$int": "&{openidm.port.http|8080}", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/webserver.listener/https.idm.json 1`] = ` +{ + "idm": { + "webserver.listener/https": { + "_id": "webserver.listener/https", + "enabled": { + "$bool": "&{openidm.https.enabled|true}", + }, + "port": { + "$int": "&{openidm.port.https|8443}", + }, + "secure": true, + "sslCertAlias": "&{openidm.https.keystore.cert.alias|openidm-localhost}", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AD idmTestDir6 -m idm": should export all idm config entities for on prem idm: idmTestDir6/webserver.listener/mutualAuth.idm.json 1`] = ` +{ + "idm": { + "webserver.listener/mutualAuth": { + "_id": "webserver.listener/mutualAuth", + "enabled": { + "$bool": "&{openidm.mutualauth.enabled|true}", + }, + "mutualAuth": true, + "port": { + "$int": "&{openidm.port.mutualauth|8444}", + }, + "secure": true, + "sslCertAlias": "&{openidm.https.keystore.cert.alias|openidm-localhost}", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm 1`] = `0`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm 2`] = `""`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/access.idm.json 1`] = ` +{ + "idm": { + "access": { + "_id": "access", + "configs": [ + { + "actions": "", + "methods": "read", + "pattern": "health", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "info/*", + "roles": "*", + }, + { + "actions": "login,logout", + "methods": "read,action", + "pattern": "authentication", + "roles": "*", + }, + { + "actions": "validate", + "methods": "action", + "pattern": "util/validateQueryFilter", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themeconfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/theme-*", + "roles": "*", + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled(['registration', 'passwordReset'])", + "methods": "read", + "pattern": "config/selfservice/kbaConfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/dashboard", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "query", + "pattern": "info/features", + "roles": "*", + }, + { + "actions": "listPrivileges", + "methods": "action", + "pattern": "privilege", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "privilege/*", + "roles": "*", + }, + { + "actions": "submitRequirements", + "methods": "read,action", + "pattern": "selfservice/termsAndConditions", + "roles": "*", + }, + { + "actions": "submitRequirements", + "methods": "read,action", + "pattern": "selfservice/kbaUpdate", + "roles": "*", + }, + { + "actions": "", + "customAuthz": "isMyProfile()", + "methods": "read,query", + "pattern": "profile/*", + "roles": "*", + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled('kba')", + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/openidm-authorized", + }, + { + "customAuthz": "checkIfApiRequest()", + "methods": "read", + "pattern": "*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "excludePatterns": "repo,repo/*", + "methods": "*", + "pattern": "*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "", + "methods": "create,read,update,delete,patch,query", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "methods": "script", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "test,testConfig,createconfiguration,liveSync,authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "command", + "customAuthz": "request.additionalParameters.commandId === 'delete-mapping-links'", + "methods": "action", + "pattern": "repo/link", + "roles": "internal/role/openidm-admin", + }, + { + "methods": "create,read,query,patch", + "pattern": "managed/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read,query", + "pattern": "internal/role/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "create,read,action,update", + "pattern": "profile/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/terms", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "sendTemplate", + "methods": "action", + "pattern": "external/email", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "reauthenticate", + "methods": "action", + "pattern": "authentication", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "bind,unbind", + "customAuthz": "ownDataOnly()", + "methods": "read,action,delete", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('user', []) && reauthIfProtectedAttributeChange()", + "methods": "update,patch,action", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "endpoint/getprocessesforuser", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "query", + "pattern": "endpoint/gettasksview", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "complete", + "customAuthz": "isMyTask()", + "methods": "action", + "pattern": "workflow/taskinstance/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "canUpdateTask()", + "methods": "read,update", + "pattern": "workflow/taskinstance/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "isAllowedToStartProcess()", + "methods": "create", + "pattern": "workflow/processinstance", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "read", + "methods": "*", + "pattern": "workflow/processdefinition/*", + "roles": "internal/role/openidm-authorized", + }, + { + "customAuthz": "restrictPatchToFields(['password'])", + "methods": "patch", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-cert", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_meta', false)", + "methods": "read", + "pattern": "internal/usermeta/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_notifications', true)", + "methods": "read,delete", + "pattern": "internal/notification/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['idps','_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "deleteNotificationsForTarget", + "customAuthz": "request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)", + "methods": "action", + "pattern": "notification", + "roles": "internal/role/openidm-authorized", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/apiVersion.idm.json 1`] = ` +{ + "idm": { + "apiVersion": { + "_id": "apiVersion", + "warning": { + "enabled": { + "$bool": "&{openidm.apiVersion.warning.enabled|false}", + }, + "includeScripts": { + "$bool": "&{openidm.apiVersion.warning.includeScripts|false}", + }, + "logFilterResourcePaths": [ + "audit", + "authentication", + "cluster", + "config", + "consent", + "csv", + "external/rest", + "identityProviders", + "info", + "internal", + "internal/role", + "internal/user", + "internal/usermeta", + "managed", + "managed/assignment", + "managed/organization", + "managed/role", + "managed/user", + "notification", + "policy", + "privilege", + "profile", + "recon", + "recon/assoc", + "repo", + "selfservice/kba", + "selfservice/terms", + "scheduler/job", + "scheduler/trigger", + "schema", + "sync", + "sync/mappings", + "system", + "taskscanner", + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/audit.idm.json 1`] = ` +{ + "idm": { + "audit": { + "_id": "audit", + "auditServiceConfig": { + "availableAuditEventHandlers": [ + "org.forgerock.audit.handlers.csv.CsvAuditEventHandler", + "org.forgerock.audit.handlers.jms.JmsAuditEventHandler", + "org.forgerock.audit.handlers.json.JsonAuditEventHandler", + "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", + "org.forgerock.openidm.audit.impl.RouterAuditEventHandler", + "org.forgerock.audit.handlers.syslog.SyslogAuditEventHandler", + ], + "caseInsensitiveFields": [ + "/access/http/request/headers", + "/access/http/response/headers", + ], + "filterPolicies": { + "field": { + "excludeIf": [], + "includeIf": [], + }, + }, + "handlerForQueries": "json", + }, + "eventHandlers": [ + { + "class": "org.forgerock.audit.handlers.json.JsonAuditEventHandler", + "config": { + "buffering": { + "maxSize": 100000, + "writeInterval": "100 millis", + }, + "enabled": { + "$bool": "&{openidm.audit.handler.json.enabled|true}", + }, + "logDirectory": "&{idm.data.dir}/audit", + "name": "json", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], + }, + }, + { + "class": "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "config": { + "enabled": { + "$bool": "&{openidm.audit.handler.stdout.enabled|false}", + }, + "name": "stdout", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], + }, + }, + { + "class": "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", + "config": { + "enabled": { + "$bool": "&{openidm.audit.handler.repo.enabled|false}", + }, + "name": "repo", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], + }, + }, + ], + "eventTopics": { + "access": { + "defaultEvents": true, + "filter": { + "script": { + "globals": {}, + "source": "file://audit.idm.scripts/eventTopics.access.filter.script.script.groovy", + "type": "groovy", + }, + }, + "name": "access", + }, + "activity": { + "defaultEvents": true, + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", + ], + }, + "name": "activity", + "passwordFields": [ + "password", + ], + "watchedFields": [], + }, + "authentication": { + "defaultEvents": true, + "filter": { + "script": { + "globals": {}, + "source": "file://audit.idm.scripts/eventTopics.authentication.filter.script.script.js", + "type": "text/javascript", + }, + }, + "name": "authentication", + }, + "config": { + "defaultEvents": true, + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", + ], + }, + "name": "config", + }, + "recon": { + "defaultEvents": true, + "name": "recon", + }, + "sync": { + "defaultEvents": true, + "name": "sync", + }, + }, + "exceptionFormatter": { + "globals": {}, + "source": "file://audit.idm.scripts/exceptionFormatter.script.js", + "type": "text/javascript", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/audit.idm.scripts/eventTopics.access.filter.script.script.groovy 1`] = ` +"//seantest +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/audit.idm.scripts/eventTopics.authentication.filter.script.script.js 1`] = ` +"//seantest +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/audit.idm.scripts/exceptionFormatter.script.js 1`] = ` +"//seantest + +console.log("hello world");console.log("hello world");console.log("hello world"); +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/authentication.idm.json 1`] = ` +{ + "idm": { + "authentication": { + "_id": "authentication", + "serverAuthContext": { + "authModules": [ + { + "enabled": true, + "name": "STATIC_USER", + "properties": { + "augmentSecurityContext": { + "globals": {}, + "source": "file://authentication.idm.scripts/serverAuthContext.authModules.0.properties.augmentSecurityContext.script.js", + "type": "text/javascript", + }, + "defaultUserRoles": [ + "internal/role/openidm-reg", + ], + "password": { + "$crypto": { + "type": "x-simple-encryption", + "value": { + "cipher": "AES/CBC/PKCS5Padding", + "data": "fzE1J3P9LZOmuCuecCDnaQ==", + "iv": "nhI8UHymNRChGIyOC+5Sag==", + "keySize": 32, + "mac": "XfF7VE/o5Shv6AqW1Xe3TQ==", + "purpose": "idm.config.encryption", + "salt": "v0NHakffrjBJNL3zjhEOtg==", + "stableId": "openidm-sym-default", + }, + }, + }, + "queryOnResource": "internal/user", + "username": "anonymous", + }, + }, + { + "enabled": true, + "name": "STATIC_USER", + "properties": { + "defaultUserRoles": [ + "internal/role/openidm-authorized", + "internal/role/openidm-admin", + ], + "password": "&{openidm.admin.password}", + "queryOnResource": "internal/user", + "username": "openidm-admin", + }, + }, + { + "enabled": true, + "name": "MANAGED_USER", + "properties": { + "augmentSecurityContext": { + "source": "file://authentication.idm.scripts/serverAuthContext.authModules.2.properties.augmentSecurityContext.script.js", + "type": "text/javascript", + }, + "defaultUserRoles": [ + "internal/role/openidm-authorized", + ], + "propertyMapping": { + "additionalUserFields": [ + "adminOfOrg", + "ownerOfOrg", + ], + "authenticationId": "username", + "userCredential": "password", + "userRoles": "authzRoles", + }, + "queryId": "credential-query", + "queryOnResource": "managed/user", + }, + }, + ], + "sessionModule": { + "name": "JWT_SESSION", + "properties": { + "enableDynamicRoles": false, + "isHttpOnly": true, + "maxTokenLifeMinutes": 120, + "sessionOnly": true, + "tokenIdleTimeMinutes": 30, + }, + }, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/authentication.idm.scripts/serverAuthContext.authModules.0.properties.augmentSecurityContext.script.js 1`] = ` +"//seantest +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/authentication.idm.scripts/serverAuthContext.authModules.2.properties.augmentSecurityContext.script.js 1`] = ` +"var augmentYield = require('auth/customAuthz').setProtectedAttributes(security);require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments', augmentYield); +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/cluster.idm.json 1`] = ` +{ + "idm": { + "cluster": { + "_id": "cluster", + "enabled": true, + "instanceCheckInInterval": 5000, + "instanceCheckInOffset": 0, + "instanceId": "&{openidm.node.id}", + "instanceRecoveryTimeout": 30000, + "instanceTimeout": 30000, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/emailTemplate/forgottenUsername.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/forgottenUsername": { + "_id": "emailTemplate/forgottenUsername", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

", + }, + "mimeType": "text/html", + "subject": { + "en": "Account Information - username", + "fr": "Informations sur le compte - nom d'utilisateur", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/emailTemplate/registration.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/registration": { + "_id": "emailTemplate/registration", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", + }, + "mimeType": "text/html", + "subject": { + "en": "Register new account", + "fr": "Créer un nouveau compte", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/emailTemplate/resetPassword.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/resetPassword": { + "_id": "emailTemplate/resetPassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Click to reset your password

Password reset link

", + "fr": "

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

", + }, + "mimeType": "text/html", + "subject": { + "en": "Reset your password", + "fr": "Réinitialisez votre mot de passe", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/emailTemplate/updatePassword.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/updatePassword": { + "_id": "emailTemplate/updatePassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Verify email to update password

Update password link

", + }, + "mimeType": "text/html", + "subject": { + "en": "Update your password", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/emailTemplate/welcome.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Welcome to OpenIDM. Your username is '{{object.userName}}'.

", + "fr": "

Bienvenue sur OpenIDM. Votre nom d'utilisateur est '{{object.userName}}'.

", + }, + "mimeType": "text/html", + "subject": { + "en": "Your account has been created", + "fr": "Votre compte vient d’être créé !", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/getavailableuserstoassign.idm.json 1`] = ` +{ + "idm": { + "endpoint/getavailableuserstoassign": { + "_id": "endpoint/getavailableuserstoassign", + "file": "workflow/getavailableuserstoassign.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/getprocessesforuser.idm.json 1`] = ` +{ + "idm": { + "endpoint/getprocessesforuser": { + "_id": "endpoint/getprocessesforuser", + "file": "workflow/getprocessesforuser.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/gettasksview.idm.json 1`] = ` +{ + "idm": { + "endpoint/gettasksview": { + "_id": "endpoint/gettasksview", + "file": "workflow/gettasksview.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/mappingDetails.idm.json 1`] = ` +{ + "idm": { + "endpoint/mappingDetails": { + "_id": "endpoint/mappingDetails", + "context": "endpoint/mappingDetails", + "file": "mappingDetails.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/oauthproxy.idm.json 1`] = ` +{ + "idm": { + "endpoint/oauthproxy": { + "_id": "endpoint/oauthproxy", + "context": "endpoint/oauthproxy", + "file": "oauthProxy.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/removeRepoPathFromRelationships.idm.json 1`] = ` +{ + "idm": { + "endpoint/removeRepoPathFromRelationships": { + "_id": "endpoint/removeRepoPathFromRelationships", + "file": "update/removeRepoPathFromRelationships.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/repairMetadata.idm.json 1`] = ` +{ + "idm": { + "endpoint/repairMetadata": { + "_id": "endpoint/repairMetadata", + "file": "meta/metadataScanner.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/updateInternalUserAndInternalRoleEntries.idm.json 1`] = ` +{ + "idm": { + "endpoint/updateInternalUserAndInternalRoleEntries": { + "_id": "endpoint/updateInternalUserAndInternalRoleEntries", + "file": "update/updateInternalUserAndInternalRoleEntries.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/validateQueryFilter.idm.json 1`] = ` +{ + "idm": { + "endpoint/validateQueryFilter": { + "_id": "endpoint/validateQueryFilter", + "context": "util/validateQueryFilter", + "source": "file://validateQueryFilter.script.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/endpoint/validateQueryFilter.script.js 1`] = ` +"try { org.forgerock.openidm.query.StringQueryFilters.parse(request.content._queryFilter).accept(new org.forgerock.util.query.MapFilterVisitor(), null); } catch (e) { throw { 'code' : 400, 'message' : e.message } }; +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/external.rest.idm.json 1`] = ` +{ + "idm": { + "external.rest": { + "_id": "external.rest", + "hostnameVerifier": "&{openidm.external.rest.hostnameVerifier}", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/internal.idm.json 1`] = ` +{ + "idm": { + "internal": { + "_id": "internal", + "objects": [ + { + "name": "role", + "properties": { + "authzMembers": { + "items": { + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + }, + }, + }, + }, + { + "name": "notification", + "properties": { + "target": { + "reversePropertyName": "_notifications", + }, + }, + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/assignment.managed.json 1`] = ` +{ + "attributeEncryption": {}, + "name": "assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight", + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value", + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string", + }, + "name": { + "description": "Name", + "type": "string", + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string", + }, + "value": { + "description": "Value", + "type": "string", + }, + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object", + }, + "notifyRelationships": [ + "roles", + "members", + ], + "title": "Assignment Attributes", + "type": "array", + "viewable": true, + }, + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", + "items": { + "title": "Link Qualifiers Items", + "type": "string", + }, + "title": "Link Qualifiers", + "type": "array", + "viewable": true, + }, + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists", + }, + ], + "searchable": true, + "title": "Mapping", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Assignment Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Assignment Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Assignment Members Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignment Members", + "type": "array", + "viewable": true, + }, + "name": { + "description": "The assignment name, used for display purposes.", + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "roles": { + "description": "Managed Roles", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Managed Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Managed Roles", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members", + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null", + ], + "viewable": true, + }, + }, + "required": [ + "name", + "description", + "mapping", + ], + "title": "Assignment", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/managed.idm.json 1`] = ` +{ + "idm": { + "managed": { + "_id": "managed", + "objects": [ + "file://user.managed.json", + "file://role.managed.json", + "file://assignment.managed.json", + "file://organization.managed.json", + "file://seantestmanagedobject.managed.json", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/organization.managed.json 1`] = ` +{ + "name": "organization", + "onCreate": { + "globals": {}, + "source": "file://organization.managed.scripts/onCreate.script.js", + "type": "text/javascript", + }, + "onRead": { + "globals": {}, + "source": "file://organization.managed.scripts/onRead.script.groovy", + "type": "groovy", + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs", + ], + "properties": { + "adminIDs": { + "isVirtual": true, + "items": { + "title": "admin ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "admins", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Admin user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "admins": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "adminOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Administrators", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "children": { + "description": "Child Organizations", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "parent", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Child Organizations", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "description": { + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "members": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "memberOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "owners", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Owner user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "owners": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members", + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "parentAdminIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent admins", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent admins", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentIDs": { + "isVirtual": true, + "items": { + "title": "parent org ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentOwnerIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent owners", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", + "type": "array", + "userEditable": false, + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Organization", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/organization.managed.scripts/onCreate.script.js 1`] = ` +"//seantest +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/organization.managed.scripts/onRead.script.groovy 1`] = ` +"//seantest +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/role.managed.json 1`] = ` +{ + "name": "role", + "onCreate": { + "globals": {}, + "source": "file://role.managed.scripts/onCreate.script.js", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-check-square", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "condition", + "temporalConstraints", + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "assignments": { + "description": "Managed Assignments", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Assignments Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Managed Assignments Items", + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": false, + "title": "Managed Assignments", + "type": "array", + "viewable": true, + }, + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Role Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Members Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Role Members", + "type": "array", + "viewable": true, + }, + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique", + }, + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, + "items": { + "order": [ + "duration", + ], + "properties": { + "duration": { + "description": "Duration", + "type": "string", + }, + }, + "required": [ + "duration", + ], + "title": "Temporal Constraints Items", + "type": "object", + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Role", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/role.managed.scripts/onCreate.script.js 1`] = ` +"//asdfasdfadsfasdf + + +//tests +//test +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/seantestmanagedobject.managed.json 1`] = ` +{ + "name": "seantestmanagedobject", + "schema": { + "description": null, + "icon": "fa-database", + "mat-icon": null, + "title": null, + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/user.managed.json 1`] = ` +{ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "user", + "notifications": { + "property": "_notifications", + }, + "postDelete": { + "source": "file://user.managed.scripts/postDelete.script.js", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "sn", + "mail", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "activeDate", + "inactiveDate", + ], + "properties": { + "_id": { + "description": "User ID", + "isPersonal": false, + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "policies": [ + { + "params": { + "regexp": "^(active|inactive)$", + }, + "policyId": "regexpMatches", + }, + ], + "searchable": true, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "activeDate": { + "description": "Active Date", + "format": "datetime", + "isPersonal": false, + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": false, + "title": "Active Date", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "authzRoles": { + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Authorization Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "city": { + "description": "City", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "consentedMappings": { + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "order": [ + "mapping", + "consentDate", + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "format": "datetime", + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": true, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mapping": { + "description": "Mapping", + "searchable": true, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "mapping", + "consentDate", + ], + "title": "Consented Mapping", + "type": "object", + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "country": { + "description": "Country", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "description": { + "description": "Description", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveRoles": { + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles", + ], + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "givenName": { + "description": "First Name", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "inactiveDate": { + "description": "Inactive Date", + "format": "datetime", + "isPersonal": false, + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": false, + "title": "Inactive Date", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId", + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string", + }, + "customQuestion": { + "description": "Custom question", + "type": "string", + }, + "questionId": { + "description": "Question ID", + "type": "string", + }, + }, + "required": [], + "title": "KBA Info Items", + "type": "object", + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "lastSync": { + "description": "Last Sync timestamp", + "isPersonal": false, + "order": [ + "effectiveAssignments", + "timestamp", + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "title": "Effective Assignments", + "type": "array", + }, + "timestamp": { + "description": "Timestamp", + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "type": "string", + }, + }, + "required": [], + "scope": "private", + "searchable": false, + "title": "Last Sync timestamp", + "type": "object", + "usageDescription": "", + "viewable": false, + }, + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Email Address", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Manager _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "memberOfOrg": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations to which I Belong", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "memberOfOrgIDs": { + "isVirtual": true, + "items": { + "title": "org identifiers", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "memberOfOrg", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "password": { + "description": "Password", + "encryption": { + "purpose": "idm.password.encryption", + }, + "isPersonal": false, + "isProtected": true, + "policies": [ + { + "params": { + "minLength": 8, + }, + "policyId": "minimum-length", + }, + { + "params": { + "numCaps": 1, + }, + "policyId": "at-least-X-capitals", + }, + { + "params": { + "numNums": 1, + }, + "policyId": "at-least-X-numbers", + }, + { + "params": { + "disallowedFields": [ + "userName", + "givenName", + "sn", + ], + }, + "policyId": "cannot-contain-others", + }, + ], + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing", + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean", + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean", + }, + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "reports": { + "description": "Direct Reports", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Direct Reports Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Provisioning Roles Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Provisioning Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "sn": { + "description": "Last Name", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "userName": { + "description": "Username", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-username", + }, + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "userName", + "givenName", + "sn", + "mail", + ], + "title": "User", + "type": "object", + "viewable": true, + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/managed/user.managed.scripts/postDelete.script.js 1`] = ` +"//seantest exract mapping UPDATED + +//seantest test test adsfasdf updated +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/mapping/mappingtest.idm.json 1`] = ` +{ + "idm": { + "mapping/mappingtest": { + "_id": "mapping/mappingtest", + "consentRequired": false, + "displayName": "mappingtest", + "icon": null, + "name": "mappingtest", + "policies": [ + { + "action": { + "globals": {}, + "source": "file://mappingtest.mapping.script/policies.AMBIGUOUS.action.script.js", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "file://mappingtest.mapping.script/policies.MISSING.action.script.groovy", + "type": "groovy", + }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "target": "managed/organization", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/mapping/mappingtest.mapping.script/policies.AMBIGUOUS.action.script.js 1`] = ` +"//asdfasdf +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/mapping/mappingtest.mapping.script/policies.MISSING.action.script.groovy 1`] = ` +"//asdfasdfasdf +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/mapping/seantestmapping.idm.json 1`] = ` +{ + "idm": { + "mapping/seantestmapping": { + "_id": "mapping/seantestmapping", + "consentRequired": false, + "displayName": "seantestmapping", + "icon": null, + "name": "seantestmapping", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/assignment", + "target": "managed/organization", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/metrics.idm.json 1`] = ` +{ + "idm": { + "metrics": { + "_id": "metrics", + "enabled": false, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/notification/passwordUpdate.idm.json 1`] = ` +{ + "idm": { + "notification/passwordUpdate": { + "_id": "notification/passwordUpdate", + "condition": { + "file": "propertiesModifiedFilter.groovy", + "globals": { + "propertiesToCheck": [ + "password", + ], + }, + "type": "groovy", + }, + "enabled": { + "$bool": "&{openidm.notifications.passwordUpdate|false}", + }, + "methods": [ + "update", + "patch", + ], + "notification": { + "message": "Your password has been updated.", + "notificationType": "info", + }, + "path": "managed/user/*", + "target": { + "resource": "managed/user/{{response/_id}}", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/notification/profileUpdate.idm.json 1`] = ` +{ + "idm": { + "notification/profileUpdate": { + "_id": "notification/profileUpdate", + "condition": { + "file": "propertiesModifiedFilter.groovy", + "globals": { + "propertiesToCheck": [ + "userName", + "givenName", + "sn", + "mail", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "preferences", + ], + }, + "type": "groovy", + }, + "enabled": { + "$bool": "&{openidm.notifications.profileUpdate|false}", + }, + "methods": [ + "update", + "patch", + ], + "notification": { + "message": "Your profile has been updated.", + "notificationType": "info", + }, + "path": "managed/user/*", + "target": { + "resource": "managed/user/{{response/_id}}", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/notificationFactory.idm.json 1`] = ` +{ + "idm": { + "notificationFactory": { + "_id": "notificationFactory", + "enabled": { + "$bool": "&{openidm.notifications|false}", + }, + "threadPool": { + "maxPoolThreads": 2, + "maxQueueSize": 20000, + "steadyPoolThreads": 1, + "threadKeepAlive": 60, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/policy.idm.json 1`] = ` +{ + "idm": { + "policy": { + "_id": "policy", + "additionalFiles": [], + "file": "policy.js", + "resources": [ + { + "calculatedProperties": { + "source": "file://policy.idm.scripts/resources.0.calculatedProperties.script.js", + "type": "text/javascript", + }, + "resource": "selfservice/registration", + }, + { + "calculatedProperties": { + "source": "file://policy.idm.scripts/resources.1.calculatedProperties.script.js", + "type": "text/javascript", + }, + "resource": "selfservice/reset", + }, + { + "properties": [ + { + "name": "_id", + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + }, + { + "name": "password", + "policies": [ + { + "params": { + "minLength": 8, + }, + "policyId": "minimum-length", + }, + ], + }, + ], + "resource": "internal/user/*", + }, + { + "properties": [ + { + "name": "name", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + }, + { + "name": "temporalConstraints", + "policies": [ + { + "policyId": "valid-temporal-constraints", + }, + ], + }, + { + "name": "condition", + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + }, + { + "name": "privileges", + "policies": [ + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "params": { + "properties": [ + { + "name": "name", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "string", + ], + }, + "policyId": "valid-type", + }, + ], + }, + { + "name": "path", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "policyId": "valid-privilege-path", + }, + ], + }, + { + "name": "accessFlags", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-accessFlags-object", + }, + ], + }, + { + "name": "actions", + "policies": [ + { + "policyId": "required", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + ], + }, + { + "name": "permissions", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-permissions", + }, + ], + }, + { + "name": "filter", + "policies": [ + { + "params": { + "types": [ + "string", + "null", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-query-filter", + }, + ], + }, + ], + }, + "policyId": "valid-array-items", + }, + ], + }, + ], + "resource": "internal/role/*", + }, + { + "properties": [ + { + "name": "temporalConstraints", + "policies": [ + { + "policyId": "valid-temporal-constraints", + }, + ], + }, + { + "name": "condition", + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + }, + ], + "resource": "managed/role/*", + }, + { + "properties": [ + { + "name": "objects", + "policies": [ + { + "policyId": "valid-event-scripts", + }, + ], + }, + ], + "resource": "config/managed", + }, + ], + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/policy.idm.scripts/resources.0.calculatedProperties.script.js 1`] = ` +"require('selfServicePolicies').getRegistrationProperties() +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/policy.idm.scripts/resources.1.calculatedProperties.script.js 1`] = ` +"require('selfServicePolicies').getResetProperties() +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/privilegeAssignments.idm.json 1`] = ` +{ + "idm": { + "privilegeAssignments": { + "_id": "privilegeAssignments", + "privilegeAssignments": [ + { + "name": "ownerPrivileges", + "privileges": [ + "owner-view-update-delete-orgs", + "owner-create-orgs", + "owner-view-update-delete-admins-and-members", + "owner-create-admins", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "ownerOfOrg", + }, + { + "name": "adminPrivileges", + "privileges": [ + "admin-view-update-delete-orgs", + "admin-create-orgs", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "adminOfOrg", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/privileges.idm.json 1`] = ` +{ + "idm": { + "privileges": { + "_id": "privileges", + "privileges": [ + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/ownerIDs eq "{{_id}}" or /parentOwnerIDs eq "{{_id}}"", + "name": "owner-view-update-delete-orgs", + "path": "managed/organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "owner-create-orgs", + "path": "managed/organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "owner-view-update-delete-admins-and-members", + "path": "managed/user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)", + "name": "owner-create-admins", + "path": "managed/user", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/adminIDs eq "{{_id}}" or /parentAdminIDs eq "{{_id}}"", + "name": "admin-view-update-delete-orgs", + "path": "managed/organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "admin-create-orgs", + "path": "managed/organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "admin-view-update-delete-members", + "path": "managed/user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)", + "name": "admin-create-members", + "path": "managed/user", + "permissions": [ + "CREATE", + ], + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/process/access.idm.json 1`] = ` +{ + "idm": { + "process/access": { + "_id": "process/access", + "workflowAccess": [ + { + "propertiesCheck": { + "matches": ".*", + "property": "_id", + "requiresRole": "internal/role/openidm-authorized", + }, + }, + { + "propertiesCheck": { + "matches": ".*", + "property": "_id", + "requiresRole": "internal/role/openidm-admin", + }, + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/provisioner.openicf/csvFileConnector.idm.json 1`] = ` +{ + "idm": { + "provisioner.openicf/csvFileConnector": { + "_id": "provisioner.openicf/csvFileConnector", + "configurationProperties": { + "csvFile": "/home/trivir/Work/csv-file-connector/csvtest.csv", + "escapeCharacter": "\\", + "fieldDelimiter": ",", + "headerPassword": "password", + "headerUid": "uid", + "newlineString": " +", + "quoteCharacter": """, + "spaceReplacementString": "_", + "syncFileRetentionCount": "3", + }, + "connectorRef": { + "bundleName": "org.forgerock.openicf.connectors.csvfile-connector", + "bundleVersion": "1.5.20.28", + "connectorHostRef": "", + "connectorName": "org.forgerock.openicf.csvfile.CSVFileConnector", + "displayName": "CSV File Connector", + "systemType": "provisioner.openicf", + }, + "enabled": true, + "objectTypes": { + "__ACCOUNT__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ACCOUNT__", + "nativeType": "__ACCOUNT__", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "email": { + "nativeName": "email", + "nativeType": "string", + "type": "string", + }, + "firstName": { + "nativeName": "firstName", + "nativeType": "string", + "type": "string", + }, + "lastName": { + "nativeName": "lastName", + "nativeType": "string", + "type": "string", + }, + "name": { + "nativeName": "name", + "nativeType": "string", + "type": "string", + }, + }, + "type": "object", + }, + }, + "operationTimeout": { + "AUTHENTICATE": -1, + "CREATE": -1, + "DELETE": -1, + "GET": -1, + "RESOLVEUSERNAME": -1, + "SCHEMA": -1, + "SCRIPT_ON_CONNECTOR": -1, + "SCRIPT_ON_RESOURCE": -1, + "SEARCH": -1, + "SYNC": -1, + "TEST": -1, + "UPDATE": -1, + "VALIDATE": -1, + }, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, + }, + "syncFailureHandler": { + "maxRetries": 5, + "postRetryAction": "logged-ignore", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/provisioner.openicf/csvSampleConnector.idm.json 1`] = ` +{ + "idm": { + "provisioner.openicf/csvSampleConnector": { + "_id": "provisioner.openicf/csvSampleConnector", + "configurationProperties": { + "csvFile": "/home/trivir/Work/csv-file-connector/csvConnectorData.csv", + "escapeCharacter": "\\", + "fieldDelimiter": ",", + "headerPassword": "password", + "headerUid": "uid", + "newlineString": " +", + "quoteCharacter": """, + "spaceReplacementString": "_", + "syncFileRetentionCount": "3", + }, + "connectorRef": { + "bundleName": "org.forgerock.openicf.connectors.csvfile-connector", + "bundleVersion": "1.5.20.28", + "connectorHostRef": "", + "connectorName": "org.forgerock.openicf.csvfile.CSVFileConnector", + "displayName": "CSV File Connector", + "systemType": "provisioner.openicf", + }, + "enabled": true, + "objectTypes": { + "__ACCOUNT__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ACCOUNT__", + "nativeType": "__ACCOUNT__", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "description": { + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "email": { + "nativeName": "email", + "nativeType": "string", + "type": "string", + }, + "firstname": { + "nativeName": "firstname", + "nativeType": "string", + "type": "string", + }, + "lastname": { + "nativeName": "lastname", + "nativeType": "string", + "type": "string", + }, + "mobileTelephoneNumber": { + "nativeName": "mobileTelephoneNumber", + "nativeType": "string", + "type": "string", + }, + "roles": { + "nativeName": "roles", + "nativeType": "string", + "type": "string", + }, + "username": { + "nativeName": "username", + "nativeType": "string", + "type": "string", + }, + }, + "type": "object", + }, + }, + "operationTimeout": { + "AUTHENTICATE": -1, + "CREATE": -1, + "DELETE": -1, + "GET": -1, + "RESOLVEUSERNAME": -1, + "SCHEMA": -1, + "SCRIPT_ON_CONNECTOR": -1, + "SCRIPT_ON_RESOURCE": -1, + "SEARCH": -1, + "SYNC": -1, + "TEST": -1, + "UPDATE": -1, + "VALIDATE": -1, + }, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/repo.ds.idm.json 1`] = ` +{ + "idm": { + "repo.ds": { + "_id": "repo.ds", + "commands": { + "delete-mapping-links": { + "_queryFilter": "/linkType eq "\${mapping}"", + "operation": "DELETE", + }, + "delete-target-ids-for-recon": { + "_queryFilter": "/reconId eq "\${reconId}"", + "operation": "DELETE", + }, + }, + "embedded": false, + "ldapConnectionFactories": { + "bind": { + "connectionPoolSize": 50, + "connectionSecurity": "startTLS", + "heartBeatIntervalSeconds": 60, + "heartBeatTimeoutMilliSeconds": 10000, + "primaryLdapServers": [ + { + "hostname": "opendj-frodo-dev.classic.com", + "port": 2389, + }, + ], + "secondaryLdapServers": [], + }, + "root": { + "authentication": { + "simple": { + "bindDn": "uid=admin", + "bindPassword": { + "$crypto": { + "type": "x-simple-encryption", + "value": { + "cipher": "AES/CBC/PKCS5Padding", + "data": "lJ/B6T9e9CDKHCN8TxkD4g==", + "iv": "EdrerzwEUUkHG582cLDw5w==", + "keySize": 32, + "mac": "Aty9fXUtl4pexGlHOc+CBg==", + "purpose": "idm.config.encryption", + "salt": "BITSKlnPeT5klcuEZbngzw==", + "stableId": "openidm-sym-default", + }, + }, + }, + }, + }, + "inheritFrom": "bind", + }, + }, + "maxConnectionAttempts": 5, + "resourceMapping": { + "defaultMapping": { + "dnTemplate": "ou=generic,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "explicitMapping": { + "clusteredrecontargetids": { + "dnTemplate": "ou=clusteredrecontargetids,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-recon-clusteredTargetIds", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "reconId": { + "ldapAttribute": "fr-idm-recon-id", + "type": "simple", + }, + "targetIds": { + "ldapAttribute": "fr-idm-recon-targetIds", + "type": "json", + }, + }, + }, + "dsconfig/attributeValue": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-attribute-value-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "checkSubstrings": { + "ldapAttribute": "ds-cfg-check-substrings", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "matchAttribute": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-match-attribute", + "type": "simple", + }, + "minSubstringLength": { + "ldapAttribute": "ds-cfg-min-substring-length", + "type": "simple", + }, + "testReversedPassword": { + "isRequired": true, + "ldapAttribute": "ds-cfg-test-reversed-password", + "type": "simple", + }, + }, + }, + "dsconfig/characterSet": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-character-set-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "allowUnclassifiedCharacters": { + "isRequired": true, + "ldapAttribute": "ds-cfg-allow-unclassified-characters", + "type": "simple", + }, + "characterSet": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-character-set", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minCharacterSets": { + "ldapAttribute": "ds-cfg-min-character-sets", + "type": "simple", + }, + }, + }, + "dsconfig/dictionary": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-dictionary-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "checkSubstrings": { + "ldapAttribute": "ds-cfg-check-substrings", + "type": "simple", + }, + "dictionaryFile": { + "isRequired": true, + "ldapAttribute": "ds-cfg-dictionary-file", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minSubstringLength": { + "ldapAttribute": "ds-cfg-min-substring-length", + "type": "simple", + }, + "testReversedPassword": { + "isRequired": true, + "ldapAttribute": "ds-cfg-test-reversed-password", + "type": "simple", + }, + }, + }, + "dsconfig/lengthBased": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-length-based-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "maxPasswordLength": { + "ldapAttribute": "ds-cfg-max-password-length", + "type": "simple", + }, + "minPasswordLength": { + "ldapAttribute": "ds-cfg-min-password-length", + "type": "simple", + }, + }, + }, + "dsconfig/passwordPolicies": { + "dnTemplate": "cn=Password Policies,cn=config", + "objectClasses": [ + "ds-cfg-password-policy", + "ds-cfg-authentication-policy", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "defaultPasswordStorageScheme": { + "isMultiValued": true, + "isRequired": true, + "ldapAttribute": "ds-cfg-default-password-storage-scheme", + "type": "simple", + }, + "maxPasswordAge": { + "ldapAttribute": "ds-cfg-max-password-age", + "type": "simple", + }, + "passwordAttribute": { + "isRequired": true, + "ldapAttribute": "ds-cfg-password-attribute", + "type": "simple", + }, + "passwordHistoryCount": { + "ldapAttribute": "ds-cfg-password-history-count", + "type": "simple", + }, + "validator": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-password-validator", + "type": "simple", + }, + }, + }, + "dsconfig/repeatedCharacters": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-repeated-characters-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "maxConsecutiveLength": { + "isRequired": true, + "ldapAttribute": "ds-cfg-max-consecutive-length", + "type": "simple", + }, + }, + }, + "dsconfig/similarityBased": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-similarity-based-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minPasswordDifference": { + "isRequired": true, + "ldapAttribute": "ds-cfg-min-password-difference", + "type": "simple", + }, + }, + }, + "dsconfig/uniqueCharacters": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-unique-characters-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minUniqueCharacters": { + "isRequired": true, + "ldapAttribute": "ds-cfg-min-unique-characters", + "type": "simple", + }, + }, + }, + "dsconfig/userDefinedVirtualAttribute": { + "dnTemplate": "cn=Virtual Attributes,cn=config", + "objectClasses": [ + "ds-cfg-user-defined-virtual-attribute", + "ds-cfg-virtual-attribute", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "attributeType": { + "isRequired": true, + "ldapAttribute": "ds-cfg-attribute-type", + "type": "simple", + }, + "baseDn": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-base-dn", + "type": "simple", + }, + "conflictBehavior": { + "ldapAttribute": "ds-cfg-conflict-behavior", + "type": "simple", + }, + "enabled": { + "isRequired": true, + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "filter": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-filter", + "type": "simple", + }, + "groupDn": { + "ldapAttribute": "ds-cfg-group-dn", + "type": "simple", + }, + "javaClass": { + "isRequired": true, + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "scope": { + "ldapAttribute": "ds-cfg-scope", + "type": "simple", + }, + "value": { + "isMultiValued": true, + "isRequired": true, + "ldapAttribute": "ds-cfg-value", + "type": "simple", + }, + }, + }, + "internal/role": { + "dnTemplate": "ou=roles,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "fr-idm-internal-role", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "authzMembers": { + "isMultiValued": true, + "propertyName": "authzRoles", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "condition": { + "ldapAttribute": "fr-idm-condition", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "name": { + "ldapAttribute": "fr-idm-name", + "type": "simple", + }, + "privileges": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-privilege", + "type": "json", + }, + "temporalConstraints": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-temporal-constraints", + "type": "json", + }, + }, + }, + "internal/user": { + "dnTemplate": "ou=users,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-internal-user", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "password": { + "ldapAttribute": "fr-idm-password", + "type": "json", + }, + }, + }, + "link": { + "dnTemplate": "ou=links,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-link", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "firstId": { + "ldapAttribute": "fr-idm-link-firstId", + "type": "simple", + }, + "linkQualifier": { + "ldapAttribute": "fr-idm-link-qualifier", + "type": "simple", + }, + "linkType": { + "ldapAttribute": "fr-idm-link-type", + "type": "simple", + }, + "secondId": { + "ldapAttribute": "fr-idm-link-secondId", + "type": "simple", + }, + }, + }, + "locks": { + "dnTemplate": "ou=locks,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-lock", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "nodeId": { + "ldapAttribute": "fr-idm-lock-nodeid", + "type": "simple", + }, + }, + }, + "recon/assoc": { + "dnTemplate": "ou=assoc,ou=recon,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "namingStrategy": { + "dnAttribute": "fr-idm-reconassoc-reconid", + "type": "clientDnNaming", + }, + "objectClasses": [ + "fr-idm-reconassoc", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "fr-idm-reconassoc-reconid", + "type": "simple", + }, + "finishTime": { + "ldapAttribute": "fr-idm-reconassoc-finishtime", + "type": "simple", + }, + "isAnalysis": { + "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-reconassoc-mapping", + "type": "simple", + }, + "sourceResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "type": "simple", + }, + "targetResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "type": "simple", + }, + }, + "subResources": { + "entry": { + "namingStrategy": { + "dnAttribute": "uid", + "type": "clientDnNaming", + }, + "resource": "recon-assoc-entry", + "type": "collection", + }, + }, + }, + "recon/assoc/entry": { + "objectClasses": [ + "uidObject", + "fr-idm-reconassocentry", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + }, + "action": { + "ldapAttribute": "fr-idm-reconassocentry-action", + "type": "simple", + }, + "ambiguousTargetObjectIds": { + "ldapAttribute": "fr-idm-reconassocentry-ambiguoustargetobjectids", + "type": "simple", + }, + "exception": { + "ldapAttribute": "fr-idm-reconassocentry-exception", + "type": "simple", + }, + "isAnalysis": { + "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "type": "simple", + }, + "linkQualifier": { + "ldapAttribute": "fr-idm-reconassocentry-linkqualifier", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-reconassoc-mapping", + "type": "simple", + }, + "message": { + "ldapAttribute": "fr-idm-reconassocentry-message", + "type": "simple", + }, + "messageDetail": { + "ldapAttribute": "fr-idm-reconassocentry-messagedetail", + "type": "simple", + }, + "phase": { + "ldapAttribute": "fr-idm-reconassocentry-phase", + "type": "simple", + }, + "reconId": { + "ldapAttribute": "fr-idm-reconassocentry-reconid", + "type": "simple", + }, + "situation": { + "ldapAttribute": "fr-idm-reconassocentry-situation", + "type": "simple", + }, + "sourceObjectId": { + "ldapAttribute": "fr-idm-reconassocentry-sourceObjectId", + "type": "simple", + }, + "sourceResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "type": "simple", + }, + "status": { + "ldapAttribute": "fr-idm-reconassocentry-status", + "type": "simple", + }, + "targetObjectId": { + "ldapAttribute": "fr-idm-reconassocentry-targetObjectId", + "type": "simple", + }, + "targetResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "type": "simple", + }, + }, + "resourceName": "recon-assoc-entry", + "subResourceRouting": [ + { + "prefix": "entry", + "template": "recon/assoc/{reconId}/entry", + }, + ], + }, + "sync/queue": { + "dnTemplate": "ou=queue,ou=sync,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-syncqueue", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "context": { + "ldapAttribute": "fr-idm-syncqueue-context", + "type": "json", + }, + "createDate": { + "ldapAttribute": "fr-idm-syncqueue-createdate", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-syncqueue-mapping", + "type": "simple", + }, + "newObject": { + "ldapAttribute": "fr-idm-syncqueue-newobject", + "type": "json", + }, + "nodeId": { + "ldapAttribute": "fr-idm-syncqueue-nodeid", + "type": "simple", + }, + "objectRev": { + "ldapAttribute": "fr-idm-syncqueue-objectRev", + "type": "simple", + }, + "oldObject": { + "ldapAttribute": "fr-idm-syncqueue-oldobject", + "type": "json", + }, + "resourceCollection": { + "ldapAttribute": "fr-idm-syncqueue-resourcecollection", + "type": "simple", + }, + "resourceId": { + "ldapAttribute": "fr-idm-syncqueue-resourceid", + "type": "simple", + }, + "state": { + "ldapAttribute": "fr-idm-syncqueue-state", + "type": "simple", + }, + "syncAction": { + "ldapAttribute": "fr-idm-syncqueue-syncaction", + "type": "simple", + }, + }, + }, + }, + "genericMapping": { + "cluster/*": { + "dnTemplate": "ou=cluster,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-cluster-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchClusterObject", + "objectClasses": [ + "uidObject", + "fr-idm-cluster-obj", + ], + }, + "config": { + "dnTemplate": "ou=config,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "file": { + "dnTemplate": "ou=file,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "import": { + "dnTemplate": "ou=import,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "import/*": { + "dnTemplate": "ou=import,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "internal/notification": { + "dnTemplate": "ou=notification,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-notification-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-notification", + ], + "properties": { + "target": { + "propertyName": "_notifications", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + }, + }, + "internal/usermeta": { + "dnTemplate": "ou=usermeta,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + }, + }, + "jsonstorage": { + "dnTemplate": "ou=jsonstorage,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "managed/*": { + "dnTemplate": "ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "managed/assignment": { + "dnTemplate": "ou=assignment,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-assignment-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-assignment", + ], + "properties": { + "condition": { + "ldapAttribute": "fr-idm-assignment-condition", + "type": "simple", + }, + "members": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/role", + "type": "reverseReference", + }, + }, + }, + "managed/organization": { + "dnTemplate": "ou=organization,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + ], + "properties": { + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/organization", + "type": "reverseReference", + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + }, + }, + "managed/role": { + "dnTemplate": "ou=role,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role", + ], + "properties": { + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-assignments", + "primaryKey": "uid", + "resourcePath": "managed/assignment", + "type": "reference", + }, + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + }, + }, + "managed/user": { + "dnTemplate": "ou=user,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-user-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedUser", + "objectClasses": [ + "uidObject", + "fr-idm-managed-user", + ], + "properties": { + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "internal/usermeta", + "type": "reference", + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference", + }, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-assignment-member", + "primaryKey": "uid", + "resourcePath": "managed/assignment", + "type": "reference", + }, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", + }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/user", + "type": "reference", + }, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + "passwordExpirationTime": { + "ldapAttribute": "pwdExpirationTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", + }, + "passwordLastChangedTime": { + "ldapAttribute": "pwdChangedTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", + }, + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/role", + "type": "reference", + }, + }, + }, + "reconprogressstate": { + "dnTemplate": "ou=reconprogressstate,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "relationships": { + "dnTemplate": "ou=relationships,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-relationship-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchRelationship", + "objectClasses": [ + "uidObject", + "fr-idm-relationship", + ], + }, + "scheduler": { + "dnTemplate": "ou=scheduler,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "scheduler/*": { + "dnTemplate": "ou=scheduler,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "ui/*": { + "dnTemplate": "ou=ui,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "updates": { + "dnTemplate": "ou=updates,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + }, + }, + "rest2LdapOptions": { + "mvccAttribute": "etag", + "readOnUpdatePolicy": "controls", + "returnNullForMissingProperties": true, + "useMvcc": true, + "usePermissiveModify": true, + "useSubtreeDelete": false, + }, + "security": { + "fileBasedTrustManagerFile": "&{idm.install.dir}/security/truststore", + "fileBasedTrustManagerPasswordFile": "&{idm.install.dir}/security/storepass", + "fileBasedTrustManagerType": "JKS", + "trustManager": "file", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/repo.init.idm.json 1`] = ` +{ + "idm": { + "repo.init": { + "_id": "repo.init", + "insert": { + "internal/role": [ + { + "description": "Administrative access", + "id": "openidm-admin", + "name": "openidm-admin", + }, + { + "description": "Basic minimum user", + "id": "openidm-authorized", + "name": "openidm-authorized", + }, + { + "description": "Anonymous access", + "id": "openidm-reg", + "name": "openidm-reg", + }, + { + "description": "Authenticated via certificate", + "id": "openidm-cert", + "name": "openidm-cert", + }, + { + "description": "Allowed to reassign workflow tasks", + "id": "openidm-tasks-manager", + "name": "openidm-tasks-manager", + }, + { + "description": "Platform provisioning access", + "id": "platform-provisioning", + "name": "platform-provisioning", + }, + ], + "internal/user": [ + { + "id": "openidm-admin", + "password": "&{openidm.admin.password}", + }, + { + "id": "anonymous", + "password": "anonymous", + }, + { + "id": "idm-provisioning", + }, + { + "id": "connector-server-client", + }, + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/router.idm.json 1`] = ` +{ + "idm": { + "router": { + "_id": "router", + "filters": [ + { + "methods": [ + "create", + "update", + ], + "onRequest": { + "file": "policyFilter.js", + "type": "text/javascript", + }, + "pattern": "^(managed|internal)($|(/.+))", + }, + { + "methods": [ + "update", + ], + "onRequest": { + "file": "policyFilter.js", + "type": "text/javascript", + }, + "pattern": "^config/managed$", + }, + { + "condition": { + "source": "file://router.idm.scripts/filters.2.condition.script.js", + "type": "text/javascript", + }, + "onResponse": { + "source": "file://router.idm.scripts/filters.2.onResponse.script.js", + "type": "text/javascript", + }, + "pattern": "^(managed|internal)($|(/.+))", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/router.idm.scripts/filters.2.condition.script.js 1`] = ` +"(context.caller.external === true) && (typeof context.privilege === 'undefined' || Object.keys(context.privilege.matchingPrivileges).length === 0) +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/router.idm.scripts/filters.2.onResponse.script.js 1`] = ` +"require('relationshipFilter').filterResponse() +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/schedule/seantest.idm.json 1`] = ` +{ + "idm": { + "schedule/seantest": { + "_id": "schedule/seantest", + "concurrentExecution": false, + "enabled": false, + "endTime": null, + "invokeContext": { + "script": { + "globals": {}, + "source": "file://seantest.invokeContext.script.script.js", + "type": "text/javascript", + }, + }, + "invokeLogLevel": "info", + "invokeService": "script", + "misfirePolicy": "fireAndProceed", + "persisted": true, + "recoverable": false, + "repeatCount": 0, + "repeatInterval": 0, + "schedule": null, + "startTime": null, + "type": "simple", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/schedule/seantest.invokeContext.script.script.js 1`] = ` +"//sean has changed this script. Let's see if it is still working. qqqqqqqqqqqqqqSchedule1 +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/schedule/taskscan_activate.idm.json 1`] = ` +{ + "idm": { + "schedule/taskscan_activate": { + "_id": "schedule/taskscan_activate", + "concurrentExecution": false, + "enabled": false, + "invokeContext": { + "numberOfThreads": 5, + "scan": { + "_queryFilter": "((/activeDate le "\${Time.nowWithOffset}") AND (!(/inactiveDate pr) or /inactiveDate ge "\${Time.nowWithOffset}"))", + "object": "managed/user", + "recovery": { + "timeout": "10m", + }, + "taskState": { + "completed": "/activateAccount/task-completed", + "started": "/activateAccount/task-started", + }, + }, + "task": { + "script": { + "globals": {}, + "source": "file://taskscan_activate.invokeContext.task.script.script.js", + "type": "text/javascript", + }, + }, + "waitForCompletion": false, + }, + "invokeService": "taskscanner", + "persisted": true, + "repeatInterval": 86400000, + "type": "simple", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/schedule/taskscan_activate.invokeContext.task.script.script.js 1`] = ` +"var patch = [{ "operation" : "replace", "field" : "/accountStatus", "value" : "active" }]; + +logger.debug("Performing Activate Account Task on {} ({})", input.mail, objectID); + +openidm.patch(objectID, null, patch); true; +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/schedule/taskscan_expire.idm.json 1`] = ` +{ + "idm": { + "schedule/taskscan_expire": { + "_id": "schedule/taskscan_expire", + "concurrentExecution": false, + "enabled": false, + "invokeContext": { + "numberOfThreads": 5, + "scan": { + "_queryFilter": "((/inactiveDate lt "\${Time.nowWithOffset}") AND (!(/activeDate pr) or /activeDate le "\${Time.nowWithOffset}"))", + "object": "managed/user", + "recovery": { + "timeout": "10m", + }, + "taskState": { + "completed": "/expireAccount/task-completed", + "started": "/expireAccount/task-started", + }, + }, + "task": { + "script": { + "globals": {}, + "source": "file://taskscan_expire.invokeContext.task.script.script.js", + "type": "text/javascript", + }, + }, + "waitForCompletion": false, + }, + "invokeService": "taskscanner", + "persisted": true, + "repeatInterval": 86400000, + "type": "simple", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/schedule/taskscan_expire.invokeContext.task.script.script.js 1`] = ` +"var patch = [{ "operation" : "replace", "field" : "/accountStatus", "value" : "inactive" }]; + +logger.debug("Performing Expire Account Task on {} ({})", input.mail, objectID); + +openidm.patch(objectID, null, patch); true; +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/scheduler.idm.json 1`] = ` +{ + "idm": { + "scheduler": { + "_id": "scheduler", + "scheduler": { + "executePersistentSchedules": { + "$bool": "&{openidm.scheduler.execute.persistent.schedules}", + }, + }, + "threadPool": { + "threadCount": 10, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/script.idm.json 1`] = ` +{ + "idm": { + "script": { + "ECMAScript": { + "javascript.optimization.level": 9, + "javascript.recompile.minimumInterval": 60000, + }, + "Groovy": { + "#groovy.disabled.global.ast.transformations": "", + "#groovy.errors.tolerance": 10, + "#groovy.output.debug": false, + "#groovy.output.verbose": false, + "#groovy.script.base": "#any class extends groovy.lang.Script", + "#groovy.script.extension": ".groovy", + "#groovy.target.bytecode": "1.8", + "#groovy.target.directory": "&{idm.data.dir}/classes", + "#groovy.target.indy": true, + "#groovy.warnings": "likely errors #othere values [none,likely,possible,paranoia]", + "groovy.classpath": "&{idm.install.dir}/lib", + "groovy.recompile": true, + "groovy.recompile.minimumInterval": 60000, + "groovy.source.encoding": "UTF-8", + }, + "_id": "script", + "properties": {}, + "sources": { + "default": { + "directory": "&{idm.install.dir}/bin/defaults/script", + }, + "install": { + "directory": "&{idm.install.dir}", + }, + "project": { + "directory": "&{idm.instance.dir}", + }, + "project-script": { + "directory": "&{idm.instance.dir}/script", + }, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/secrets.idm.json 1`] = ` +{ + "idm": { + "secrets": { + "_id": "secrets", + "stores": [ + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}", + "mappings": [ + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.default", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.config.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.password.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.https.keystore.cert.alias|openidm-localhost}", + ], + "secretId": "idm.jwt.session.module.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}", + ], + "secretId": "idm.jwt.session.module.signing", + "types": [ + "SIGN", + "VERIFY", + ], + }, + { + "aliases": [ + "selfservice", + ], + "secretId": "idm.selfservice.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}", + ], + "secretId": "idm.selfservice.signing", + "types": [ + "SIGN", + "VERIFY", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.assignment.attribute.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + ], + "providerName": "&{openidm.keystore.provider|SunJCE}", + "storePassword": "&{openidm.keystore.password|changeit}", + "storetype": "&{openidm.keystore.type|JCEKS}", + }, + "name": "mainKeyStore", + }, + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.truststore.location|&{idm.install.dir}/security/truststore}", + "mappings": [], + "providerName": "&{openidm.truststore.provider|SUN}", + "storePassword": "&{openidm.truststore.password|changeit}", + "storetype": "&{openidm.truststore.type|JKS}", + }, + "name": "mainTrustStore", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/selfservice.kba.idm.json 1`] = ` +{ + "idm": { + "selfservice.kba": { + "_id": "selfservice.kba", + "kbaPropertyName": "kbaInfo", + "minimumAnswersToDefine": 2, + "minimumAnswersToVerify": 1, + "questions": { + "1": { + "en": "What's your favorite color?", + "en_GB": "What is your favourite colour?", + "fr": "Quelle est votre couleur préférée?", + }, + "2": { + "en": "Who was your first employer?", + }, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/selfservice.propertymap.idm.json 1`] = ` +{ + "idm": { + "selfservice.propertymap": { + "_id": "selfservice.propertymap", + "properties": [ + { + "source": "givenName", + "target": "givenName", + }, + { + "source": "familyName", + "target": "sn", + }, + { + "source": "email", + "target": "mail", + }, + { + "condition": "/object/postalAddress pr", + "source": "postalAddress", + "target": "postalAddress", + }, + { + "condition": "/object/addressLocality pr", + "source": "addressLocality", + "target": "city", + }, + { + "condition": "/object/addressRegion pr", + "source": "addressRegion", + "target": "stateProvince", + }, + { + "condition": "/object/postalCode pr", + "source": "postalCode", + "target": "postalCode", + }, + { + "condition": "/object/country pr", + "source": "country", + "target": "country", + }, + { + "condition": "/object/phone pr", + "source": "phone", + "target": "telephoneNumber", + }, + { + "source": "username", + "target": "userName", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/selfservice.terms.idm.json 1`] = ` +{ + "idm": { + "selfservice.terms": { + "_id": "selfservice.terms", + "active": "0.0", + "uiConfig": { + "buttonText": "Accept", + "displayName": "We've updated our terms", + "purpose": "You must accept the updated terms in order to proceed.", + }, + "versions": [ + { + "createDate": "2019-10-28T04:20:11.320Z", + "termsTranslations": { + "en": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + }, + "version": "0.0", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/servletfilter/cors.idm.json 1`] = ` +{ + "idm": { + "servletfilter/cors": { + "_id": "servletfilter/cors", + "filterClass": "org.eclipse.jetty.ee10.servlets.CrossOriginFilter", + "initParams": { + "allowCredentials": true, + "allowedHeaders": "accept,x-openidm-password,x-openidm-nosession,x-openidm-username,content-type,origin,x-requested-with", + "allowedMethods": "GET,POST,PUT,DELETE,PATCH", + "allowedOrigins": "https://localhost:&{openidm.port.https}", + "chainPreflight": false, + }, + "urlPatterns": [ + "/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/servletfilter/payload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/payload": { + "_id": "servletfilter/payload", + "filterClass": "org.forgerock.openidm.jetty.LargePayloadServletFilter", + "initParams": { + "maxRequestSizeInMegabytes": 5, + }, + "urlPatterns": [ + "&{openidm.servlet.alias}/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/servletfilter/upload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/upload": { + "_id": "servletfilter/upload", + "filterClass": "org.forgerock.openidm.jetty.LargePayloadServletFilter", + "initParams": { + "maxRequestSizeInMegabytes": 50, + }, + "urlPatterns": [ + "&{openidm.servlet.upload.alias}/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedAssignment_managedUser.sync.json 1`] = ` +{ + "_id": "sync/managedAssignment_managedUser", + "consentRequired": false, + "displayName": "managedAssignment_managedUser", + "icon": null, + "name": "managedAssignment_managedUser", + "policies": [ + { + "action": { + "globals": {}, + "source": "file://managedAssignment_managedUser.sync.scripts/policies.AMBIGUOUS.action.script.groovy", + "type": "groovy", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "file://managedAssignment_managedUser.sync.scripts/policies.SOURCE_MISSING.action.script.js", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "file://managedAssignment_managedUser.sync.scripts/policies.SOURCE_MISSING.condition.script.groovy", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": "file://managedAssignment_managedUser.sync.scripts/policies.SOURCE_MISSING.postAction.script.js", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": { + "globals": {}, + "source": "file://managedAssignment_managedUser.sync.scripts/policies.UNASSIGNED.action.script.js", + "type": "text/javascript", + }, + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + ], + "target": "managed/user", +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedAssignment_managedUser.sync.scripts/policies.AMBIGUOUS.action.script.groovy 1`] = ` +"//asdfasdf UPDATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedAssignment_managedUser.sync.scripts/policies.SOURCE_MISSING.action.script.js 1`] = ` +"//asdfasdfasdfas UPDATED POLICIES SOURCE_MISSING ACTION SCRIPT +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedAssignment_managedUser.sync.scripts/policies.SOURCE_MISSING.condition.script.groovy 1`] = ` +"//asdfasdfasdf +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedAssignment_managedUser.sync.scripts/policies.SOURCE_MISSING.postAction.script.js 1`] = ` +" +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedAssignment_managedUser.sync.scripts/policies.UNASSIGNED.action.script.js 1`] = ` +"//asdfasdfasdf +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedOrganization_managedRole.sync.json 1`] = ` +{ + "_id": "sync/managedOrganization_managedRole", + "consentRequired": false, + "displayName": "managedOrganization_managedRole", + "icon": null, + "name": "managedOrganization_managedRole", + "policies": [ + { + "action": { + "globals": {}, + "source": "file://managedOrganization_managedRole.sync.scripts/policies.AMBIGUOUS.action.script.js", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "file://managedOrganization_managedRole.sync.scripts/policies.SOURCE_MISSING.action.script.js", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "file://managedOrganization_managedRole.sync.scripts/policies.SOURCE_MISSING.condition.script.js", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "file://managedOrganization_managedRole.sync.scripts/policies.MISSING.action.script.groovy", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": "file://managedOrganization_managedRole.sync.scripts/policies.MISSING.postAction.script.groovy", + "type": "groovy", + }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [], + "target": "managed/role", +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedOrganization_managedRole.sync.scripts/policies.AMBIGUOUS.action.script.js 1`] = ` +"//seantest +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedOrganization_managedRole.sync.scripts/policies.MISSING.action.script.groovy 1`] = ` +"//seantest +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedOrganization_managedRole.sync.scripts/policies.MISSING.postAction.script.groovy 1`] = ` +" +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedOrganization_managedRole.sync.scripts/policies.SOURCE_MISSING.action.script.js 1`] = ` +"//seantest + + +//extract test +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedOrganization_managedRole.sync.scripts/policies.SOURCE_MISSING.condition.script.js 1`] = ` +"//seantest + +//seantesttttt + +//testsss +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedOrganization_managedSeantestmanagedobject.sync.json 1`] = ` +{ + "_id": "sync/managedOrganization_managedSeantestmanagedobject", + "consentRequired": false, + "displayName": "managedOrganization_managedSeantestmanagedobject", + "icon": null, + "name": "managedOrganization_managedSeantestmanagedobject", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [ + "managedOrganization_managedRole", + ], + "target": "managed/seantestmanagedobject", +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/managedSeantestmanagedobject_managedUser.sync.json 1`] = ` +{ + "_id": "sync/managedSeantestmanagedobject_managedUser", + "consentRequired": false, + "displayName": "managedSeantestmanagedobject_managedUser", + "icon": null, + "name": "managedSeantestmanagedobject_managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/seantestmanagedobject", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + ], + "target": "managed/user", +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/seantestmapping.sync.json 1`] = ` +{ + "_id": "sync/seantestmapping", + "consentRequired": false, + "displayName": "seantestmapping", + "icon": null, + "name": "seantestmapping", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + ], + "target": "managed/organization", +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + "file://managedOrganization_managedRole.sync.json", + "file://managedOrganization_managedSeantestmanagedobject.sync.json", + "file://managedAssignment_managedUser.sync.json", + "file://managedSeantestmanagedobject_managedUser.sync.json", + "file://seantestmapping.sync.json", + "file://systemCsvfileconnector__ACCOUNT___managedUser.sync.json", + "file://systemCsvsampleconnector__ACCOUNT___managedUser.sync.json", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/systemCsvfileconnector__ACCOUNT___managedUser.sync.json 1`] = ` +{ + "_id": "sync/systemCsvfileconnector__ACCOUNT___managedUser", + "consentRequired": false, + "displayName": "systemCsvfileconnector__ACCOUNT___managedUser", + "icon": null, + "name": "systemCsvfileconnector__ACCOUNT___managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "UPDATE", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "source": "name", + "target": "userName", + }, + { + "source": "firstName", + "target": "givenName", + }, + { + "source": "lastName", + "target": "sn", + }, + { + "source": "email", + "target": "mail", + }, + ], + "source": "system/csvFileConnector/__ACCOUNT__", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + "seantestmapping", + ], + "target": "managed/user", +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/sync/systemCsvsampleconnector__ACCOUNT___managedUser.sync.json 1`] = ` +{ + "_id": "sync/systemCsvsampleconnector__ACCOUNT___managedUser", + "consentRequired": false, + "displayName": "systemCsvsampleconnector__ACCOUNT___managedUser", + "icon": null, + "name": "systemCsvsampleconnector__ACCOUNT___managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "UPDATE", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "source": "email", + "target": "mail", + }, + { + "source": "lastname", + "target": "sn", + }, + { + "source": "description", + "target": "description", + }, + { + "source": "username", + "target": "userName", + }, + { + "source": "firstname", + "target": "givenName", + }, + ], + "source": "system/csvSampleConnector/__ACCOUNT__", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + "seantestmapping", + "systemCsvfileconnector__ACCOUNT___managedUser", + ], + "target": "managed/user", +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/ui.context/admin.idm.json 1`] = ` +{ + "idm": { + "ui.context/admin": { + "_id": "ui.context/admin", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/admin/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/admin/extension", + "responseHeaders": { + "X-Frame-Options": "SAMEORIGIN", + }, + "urlContextRoot": "/admin", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/ui.context/api.idm.json 1`] = ` +{ + "idm": { + "ui.context/api": { + "_id": "ui.context/api", + "authEnabled": true, + "cacheEnabled": false, + "defaultDir": "&{idm.install.dir}/ui/api/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/api/extension", + "urlContextRoot": "/api", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/ui.context/enduser.idm.json 1`] = ` +{ + "idm": { + "ui.context/enduser": { + "_id": "ui.context/enduser", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/enduser", + "enabled": true, + "responseHeaders": { + "X-Frame-Options": "DENY", + }, + "urlContextRoot": "/", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/ui.context/oauth.idm.json 1`] = ` +{ + "idm": { + "ui.context/oauth": { + "_id": "ui.context/oauth", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/oauth/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/oauth/extension", + "urlContextRoot": "/oauthReturn", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/ui/configuration.idm.json 1`] = ` +{ + "idm": { + "ui/configuration": { + "_id": "ui/configuration", + "configuration": { + "defaultNotificationType": "info", + "forgotUsername": false, + "lang": "en", + "notificationTypes": { + "error": { + "iconPath": "images/notifications/error.png", + "name": "common.notification.types.error", + }, + "info": { + "iconPath": "images/notifications/info.png", + "name": "common.notification.types.info", + }, + "warning": { + "iconPath": "images/notifications/warning.png", + "name": "common.notification.types.warning", + }, + }, + "passwordReset": false, + "passwordResetLink": "", + "roles": { + "internal/role/openidm-admin": "ui-admin", + "internal/role/openidm-authorized": "ui-user", + }, + "selfRegistration": false, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/ui/dashboard.idm.json 1`] = ` +{ + "idm": { + "ui/dashboard": { + "_id": "ui/dashboard", + "adminDashboards": [ + { + "isDefault": true, + "name": "Quick Start", + "widgets": [ + { + "cards": [ + { + "href": "#connectors/add/", + "icon": "fa-database", + "name": "Add Connector", + }, + { + "href": "#mapping/add/", + "icon": "fa-map-marker", + "name": "Create Mapping", + }, + { + "href": "#resource/managed/role/list/", + "icon": "fa-check-square-o", + "name": "Manage Roles", + }, + { + "href": "#managed/add/", + "icon": "fa-tablet", + "name": "Add Device", + }, + { + "href": "#selfservice/userregistration/", + "icon": "fa-gear", + "name": "Configure Registration", + }, + { + "href": "#selfservice/passwordreset/", + "icon": "fa-gear", + "name": "Configure Password Reset", + }, + { + "href": "#resource/managed/user/list/", + "icon": "fa-user", + "name": "Manage Users", + }, + { + "href": "#settings/", + "icon": "fa-user", + "name": "Configure System Preferences", + }, + ], + "size": "large", + "type": "quickStart", + }, + ], + }, + { + "isDefault": false, + "name": "System Monitoring", + "widgets": [ + { + "legendRange": { + "month": [ + 500, + 2500, + 5000, + ], + "week": [ + 10, + 30, + 90, + 270, + 810, + ], + "year": [ + 10000, + 40000, + 100000, + 250000, + ], + }, + "maxRange": "#24423c", + "minRange": "#b0d4cd", + "size": "large", + "type": "audit", + }, + { + "size": "large", + "type": "clusterStatus", + }, + { + "size": "large", + "type": "systemHealthFull", + }, + { + "barchart": "false", + "size": "large", + "type": "lastRecon", + }, + ], + }, + { + "isDefault": false, + "name": "Resource Report", + "widgets": [ + { + "selected": "activeUsers", + "size": "x-small", + "type": "counter", + }, + { + "selected": "rolesEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "activeConnectors", + "size": "x-small", + "type": "counter", + }, + { + "size": "large", + "type": "resourceList", + }, + ], + }, + { + "isDefault": false, + "name": "Business Report", + "widgets": [ + { + "graphType": "fa-pie-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "signIns", + "widgetTitle": "Sign-Ins", + }, + { + "graphType": "fa-bar-chart", + "size": "x-small", + "type": "passwordResets", + "widgetTitle": "Password Resets", + }, + { + "graphType": "fa-line-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "newRegistrations", + "widgetTitle": "New Registrations", + }, + { + "size": "x-small", + "timezone": { + "hours": "07", + "minutes": "00", + "negative": true, + }, + "type": "socialLogin", + }, + { + "selected": "socialEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "manualRegistrations", + "size": "x-small", + "type": "counter", + }, + ], + }, + { + "isDefault": false, + "name": "seantestdashboard", + "widgets": [ + { + "size": "large", + "type": "resourceList", + }, + ], + }, + ], + "dashboard": { + "widgets": [ + { + "size": "large", + "type": "Welcome", + }, + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/ui/profile.idm.json 1`] = ` +{ + "idm": { + "ui/profile": { + "_id": "ui/profile", + "tabs": [ + { + "name": "personalInfoTab", + "view": "org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab", + }, + { + "name": "signInAndSecurity", + "view": "org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab", + }, + { + "name": "preference", + "view": "org/forgerock/openidm/ui/user/profile/PreferencesTab", + }, + { + "name": "trustedDevice", + "view": "org/forgerock/openidm/ui/user/profile/TrustedDevicesTab", + }, + { + "name": "oauthApplication", + "view": "org/forgerock/openidm/ui/user/profile/OauthApplicationsTab", + }, + { + "name": "privacyAndConsent", + "view": "org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab", + }, + { + "name": "sharing", + "view": "org/forgerock/openidm/ui/user/profile/uma/SharingTab", + }, + { + "name": "auditHistory", + "view": "org/forgerock/openidm/ui/user/profile/uma/ActivityTab", + }, + { + "name": "accountControls", + "view": "org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/ui/themeconfig.idm.json 1`] = ` +{ + "idm": { + "ui/themeconfig": { + "_id": "ui/themeconfig", + "icon": "favicon.ico", + "path": "", + "settings": { + "footer": { + "mailto": "info@pingidentity.com", + }, + "loginLogo": { + "alt": "Ping Identity", + "height": "120px", + "src": "images/login-logo-dark.png", + "title": "Ping Identity", + "width": "120px", + }, + "logo": { + "alt": "Ping Identity", + "src": "images/logo-horizontal-white.png", + "title": "Ping Identity", + }, + }, + "stylesheets": [ + "css/bootstrap-3.4.1-custom.css", + "css/structure.css", + "css/theme.css", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/webserver.idm.json 1`] = ` +{ + "idm": { + "webserver": { + "_id": "webserver", + "gzip": { + "enabled": true, + "includedMethods": [ + "GET", + ], + }, + "maxThreads": { + "$int": "&{openidm.webserver.max.threads|&{org.ops4j.pax.web.server.maxThreads|200}}", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/webserver.listener/http.idm.json 1`] = ` +{ + "idm": { + "webserver.listener/http": { + "_id": "webserver.listener/http", + "enabled": { + "$bool": "&{openidm.http.enabled|true}", + }, + "port": { + "$int": "&{openidm.port.http|8080}", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/webserver.listener/https.idm.json 1`] = ` +{ + "idm": { + "webserver.listener/https": { + "_id": "webserver.listener/https", + "enabled": { + "$bool": "&{openidm.https.enabled|true}", + }, + "port": { + "$int": "&{openidm.port.https|8443}", + }, + "secure": true, + "sslCertAlias": "&{openidm.https.keystore.cert.alias|openidm-localhost}", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir8 -m idm": should export all idm config entities for on prem idm: idmTestDir8/webserver.listener/mutualAuth.idm.json 1`] = ` +{ + "idm": { + "webserver.listener/mutualAuth": { + "_id": "webserver.listener/mutualAuth", + "enabled": { + "$bool": "&{openidm.mutualauth.enabled|true}", + }, + "mutualAuth": true, + "port": { + "$int": "&{openidm.port.mutualauth|8444}", + }, + "secure": true, + "sslCertAlias": "&{openidm.https.keystore.cert.alias|openidm-localhost}", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm 1`] = `0`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm 2`] = `""`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/access.idm.json 1`] = ` +{ + "idm": { + "access": { + "_id": "access", + "configs": [ + { + "actions": "*", + "methods": "read", + "pattern": "info/*", + "roles": "*", + }, + { + "actions": "login,logout", + "methods": "read,action", + "pattern": "authentication", + "roles": "*", + }, + { + "actions": "*", + "methods": "*", + "pattern": "config/fidc/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themeconfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themerealm", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/uilocale/*", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/fieldPolicy/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "info/uiconfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/dashboard", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "query", + "pattern": "info/features", + "roles": "*", + }, + { + "actions": "listPrivileges", + "methods": "action", + "pattern": "privilege", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "privilege/*", + "roles": "*", + }, + { + "actions": "validate", + "methods": "action", + "pattern": "util/validateQueryFilter", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled('kba')", + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/openidm-authorized", + }, + { + "methods": "read", + "pattern": "*", + "roles": "~rcsclient-authorized", + "servlet": "openicf", + }, + { + "actions": "*", + "excludePatterns": "repo,repo/*", + "methods": "*", + "pattern": "*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "", + "methods": "create,read,update,delete,patch,query", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "methods": "script", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "test,testConfig,createconfiguration,liveSync,authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "command", + "customAuthz": "request.additionalParameters.commandId === 'delete-mapping-links'", + "methods": "action", + "pattern": "repo/link", + "roles": "internal/role/openidm-admin", + }, + { + "methods": "create,read,query,patch", + "pattern": "managed/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read,query", + "pattern": "internal/role/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "create,read,action,update", + "pattern": "profile/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/terms", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "sendTemplate", + "methods": "action", + "pattern": "external/email", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "bind,unbind", + "customAuthz": "ownDataOnly()", + "methods": "read,action,delete", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('user', [])", + "methods": "update,patch,action", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "isQueryOneOf({'managed/user': ['for-userName']}) && restrictPatchToFields(['password'])", + "methods": "patch,action", + "pattern": "managed/user", + "roles": "internal/role/openidm-cert", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_meta', false)", + "methods": "read", + "pattern": "internal/usermeta/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_notifications', true)", + "methods": "read,delete", + "pattern": "internal/notification/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "", + "customAuthz": "ownDataOnly()", + "methods": "read,delete", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('alpha_user', [])", + "methods": "update,patch,action", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "", + "customAuthz": "ownDataOnly()", + "methods": "read,delete", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('bravo_user', [])", + "methods": "update,patch,action", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "deleteNotificationsForTarget", + "customAuthz": "request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)", + "methods": "action", + "pattern": "notification", + "roles": "internal/role/openidm-authorized", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/alphaOrgPrivileges.idm.json 1`] = ` +{ + "idm": { + "alphaOrgPrivileges": { + "_id": "alphaOrgPrivileges", + "privileges": [ + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/ownerIDs eq "{{_id}}" or /parentOwnerIDs eq "{{_id}}"", + "name": "owner-view-update-delete-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "owner-create-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "groups", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "effectiveGroups", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "owner-view-update-delete-admins-and-members", + "path": "managed/alpha_user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "groups", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "effectiveGroups", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)", + "name": "owner-create-admins", + "path": "managed/alpha_user", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/adminIDs eq "{{_id}}" or /parentAdminIDs eq "{{_id}}"", + "name": "admin-view-update-delete-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "admin-create-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "groups", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "effectiveGroups", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "admin-view-update-delete-members", + "path": "managed/alpha_user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "groups", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "effectiveGroups", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)", + "name": "admin-create-members", + "path": "managed/alpha_user", + "permissions": [ + "CREATE", + ], + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/audit.idm.json 1`] = ` +{ + "idm": { + "audit": { + "_id": "audit", + "auditServiceConfig": { + "availableAuditEventHandlers": [ + "org.forgerock.audit.handlers.csv.CsvAuditEventHandler", + "org.forgerock.audit.handlers.jms.JmsAuditEventHandler", + "org.forgerock.audit.handlers.json.JsonAuditEventHandler", + "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", + "org.forgerock.openidm.audit.impl.RouterAuditEventHandler", + "org.forgerock.audit.handlers.syslog.SyslogAuditEventHandler", + ], + "caseInsensitiveFields": [ + "/access/http/request/headers", + "/access/http/response/headers", + ], + "filterPolicies": { + "value": { + "excludeIf": [ + "/access/http/request/cookies/&{com.iplanet.am.cookie.name}", + "/access/http/request/cookies/session-jwt", + "/access/http/request/headers/&{com.sun.identity.auth.cookieName}", + "/access/http/request/headers/&{com.iplanet.am.cookie.name}", + "/access/http/request/headers/accept-encoding", + "/access/http/request/headers/accept-language", + "/access/http/request/headers/Authorization", + "/access/http/request/headers/cache-control", + "/access/http/request/headers/connection", + "/access/http/request/headers/content-length", + "/access/http/request/headers/content-type", + "/access/http/request/headers/proxy-authorization", + "/access/http/request/headers/X-OpenAM-Password", + "/access/http/request/headers/X-OpenIDM-Password", + "/access/http/request/queryParameters/access_token", + "/access/http/request/queryParameters/IDToken1", + "/access/http/request/queryParameters/id_token_hint", + "/access/http/request/queryParameters/Login.Token1", + "/access/http/request/queryParameters/redirect_uri", + "/access/http/request/queryParameters/requester", + "/access/http/request/queryParameters/sessionUpgradeSSOTokenId", + "/access/http/request/queryParameters/tokenId", + "/access/http/response/headers/Authorization", + "/access/http/response/headers/Set-Cookie", + "/access/http/response/headers/X-OpenIDM-Password", + ], + "includeIf": [], + }, + }, + "handlerForQueries": "json", + }, + "eventHandlers": [ + { + "class": "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "config": { + "name": "json", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], + }, + }, + ], + "eventTopics": { + "activity": { + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", + ], + }, + "passwordFields": [ + "password", + ], + "watchedFields": [ + "*", + ], + }, + "config": { + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", + ], + }, + }, + }, + "exceptionFormatter": { + "file": "bin/defaults/script/audit/stacktraceFormatter.js", + "type": "text/javascript", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/authentication.idm.json 1`] = ` +{ + "idm": { + "authentication": { + "_id": "authentication", + "rsFilter": { + "augmentSecurityContext": { + "source": "file://authentication.idm.scripts/rsFilter.augmentSecurityContext.script.js", + "type": "text/javascript", + }, + "cache": { + "maxTimeout": "300 seconds", + }, + "scopes": [ + "fr:idm:*", + ], + "staticUserMapping": [], + "subjectMapping": [ + { + "additionalUserFields": [ + "adminOfOrg", + "ownerOfOrg", + ], + "defaultRoles": [ + "internal/role/openidm-authorized", + ], + "propertyMapping": { + "sub": "_id", + }, + "queryOnResource": "managed/{{substring realm 1}}_user", + "userRoles": "authzRoles/*", + }, + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/authentication.idm.scripts/rsFilter.augmentSecurityContext.script.js 1`] = ` +"require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, security.authorization.component.includes('/alpha_') ? 'alphaOrgPrivileges' : 'bravoOrgPrivileges', 'privilegeAssignments'); +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/bravoOrgPrivileges.idm.json 1`] = ` +{ + "idm": { + "bravoOrgPrivileges": { + "_id": "bravoOrgPrivileges", + "privileges": [ + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/ownerIDs eq "{{_id}}" or /parentOwnerIDs eq "{{_id}}"", + "name": "owner-view-update-delete-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "owner-create-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "groups", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "effectiveGroups", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "owner-view-update-delete-admins-and-members", + "path": "managed/bravo_user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "groups", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "effectiveGroups", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)", + "name": "owner-create-admins", + "path": "managed/bravo_user", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/adminIDs eq "{{_id}}" or /parentAdminIDs eq "{{_id}}"", + "name": "admin-view-update-delete-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "admin-create-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "groups", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "effectiveGroups", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "admin-view-update-delete-members", + "path": "managed/bravo_user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false, + }, + { + "attribute": "password", + "readOnly": false, + }, + { + "attribute": "givenName", + "readOnly": false, + }, + { + "attribute": "sn", + "readOnly": false, + }, + { + "attribute": "mail", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "accountStatus", + "readOnly": false, + }, + { + "attribute": "telephoneNumber", + "readOnly": false, + }, + { + "attribute": "postalAddress", + "readOnly": false, + }, + { + "attribute": "city", + "readOnly": false, + }, + { + "attribute": "postalCode", + "readOnly": false, + }, + { + "attribute": "country", + "readOnly": false, + }, + { + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "groups", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "effectiveGroups", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)", + "name": "admin-create-members", + "path": "managed/bravo_user", + "permissions": [ + "CREATE", + ], + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/emailTemplate/forgottenUsername.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/forgottenUsername": { + "_id": "emailTemplate/forgottenUsername", + "defaultLocale": "en", + "enabled": true, + "from": "", + "html": { + "en": "{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

", + }, + "message": { + "en": "

{{#if object.userName}}Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "
{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

", + }, + "mimeType": "text/html", + "styles": "body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}", + "subject": { + "en": "Account Information - username", + "fr": "Informations sur le compte - nom d'utilisateur", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/emailTemplate/registration.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/registration": { + "_id": "emailTemplate/registration", + "defaultLocale": "en", + "enabled": true, + "from": "", + "html": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", + }, + "message": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", + }, + "mimeType": "text/html", + "styles": "body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}", + "subject": { + "en": "Register new account", + "fr": "Créer un nouveau compte", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/emailTemplate/resetPassword.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/resetPassword": { + "_id": "emailTemplate/resetPassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Click to reset your password

Password reset link

", + "fr": "

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

", + }, + "mimeType": "text/html", + "subject": { + "en": "Reset your password", + "fr": "Réinitialisez votre mot de passe", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/emailTemplate/updatePassword.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/updatePassword": { + "_id": "emailTemplate/updatePassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "html": { + "en": "

Verify email to update password

Update password link

", + }, + "message": { + "en": "

Verify email to update password

Update password link

", + }, + "mimeType": "text/html", + "styles": "body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}", + "subject": { + "en": "Update your password", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/emailTemplate/welcome.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "enabled": true, + "from": "", + "html": { + "en": "

Welcome. Your username is '{{object.userName}}'.

", + }, + "message": { + "en": "

Welcome. Your username is '{{object.userName}}'.

", + }, + "mimeType": "text/html", + "styles": "body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}", + "subject": { + "en": "Your account has been created", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/endpoint/extractscripttest.idm.json 1`] = ` +{ + "idm": { + "endpoint/extractscripttest": { + "_id": "endpoint/extractscripttest", + "description": "", + "globalsObject": "" {\\n \\"request\\": {\\n \\"method\\": \\"create\\"\\n }\\n }"", + "source": "file://extractscripttest.script.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/endpoint/extractscripttest.script.js 1`] = ` +"//extract idm script test + +//test +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/external.email.idm.json 1`] = ` +{ + "idm": { + "external.email": { + "_id": "external.email", + "auth": { + "enable": true, + "password": "&{aic.customer.sasl.pass}", + "username": "&{aic.customer.sasl.user|donotuse@pingidentity.com}", + }, + "connectiontimeout": 300000, + "debug": false, + "from": "&{email.sender.address}", + "host": "&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}", + "port": 25, + "smtpProperties": [], + "ssl": { + "enable": false, + }, + "starttls": { + "enable": false, + }, + "threadPoolSize": 20, + "timeout": 300000, + "writetimeout": 300000, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/external.emailDefault.idm.json 1`] = ` +{ + "idm": { + "external.emailDefault": { + "_id": "external.emailDefault", + "auth": { + "enable": true, + "password": "&{aic.customer.sasl.pass}", + "username": "&{aic.customer.sasl.user|donotuse@pingidentity.com}", + }, + "connectiontimeout": 300000, + "debug": false, + "from": "&{email.sender.address}", + "host": "&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}", + "port": 25, + "smtpProperties": [], + "ssl": { + "enable": false, + }, + "starttls": { + "enable": false, + }, + "threadPoolSize": 20, + "timeout": 300000, + "writetimeout": 300000, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/fieldPolicy/alpha_user.idm.json 1`] = ` +{ + "idm": { + "fieldPolicy/alpha_user": { + "_id": "fieldPolicy/alpha_user", + "defaultPasswordStorageScheme": [ + { + "_id": "PBKDF2-HMAC-SHA256", + }, + ], + "passwordAttribute": "password", + "resourceCollection": "managed/alpha_user", + "type": "password-policy", + "validator": [ + { + "_id": "alpha_userPasswordPolicy-length-based-password-validator", + "enabled": true, + "maxPasswordLength": 0, + "minPasswordLength": 8, + "type": "length-based", + }, + { + "_id": "alpha_userPasswordPolicy-attribute-value-password-validator", + "checkSubstrings": true, + "enabled": true, + "matchAttribute": [ + "userName", + "givenName", + "sn", + ], + "minSubstringLength": 5, + "testReversedPassword": true, + "type": "attribute-value", + }, + { + "_id": "alpha_userPasswordPolicy-character-set-password-validator", + "allowUnclassifiedCharacters": true, + "characterSet": [ + "0:abcdefghijklmnopqrstuvwxyz", + "0:ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "0:0123456789", + "0:~!@#$%^&*()-_=+[]{}|;:,.<>/?"'\\\`", + ], + "enabled": true, + "minCharacterSets": 4, + "type": "character-set", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/fieldPolicy/bravo_user.idm.json 1`] = ` +{ + "idm": { + "fieldPolicy/bravo_user": { + "_id": "fieldPolicy/bravo_user", + "defaultPasswordStorageScheme": [ + { + "_id": "PBKDF2-HMAC-SHA256", + }, + ], + "passwordAttribute": "password", + "resourceCollection": "managed/bravo_user", + "type": "password-policy", + "validator": [ + { + "_id": "bravo_userPasswordPolicy-length-based-password-validator", + "enabled": true, + "maxPasswordLength": 0, + "minPasswordLength": 8, + "type": "length-based", + }, + { + "_id": "bravo_userPasswordPolicy-attribute-value-password-validator", + "checkSubstrings": true, + "enabled": true, + "matchAttribute": [ + "mail", + "userName", + "givenName", + "sn", + ], + "minSubstringLength": 5, + "testReversedPassword": true, + "type": "attribute-value", + }, + { + "_id": "bravo_userPasswordPolicy-character-set-password-validator", + "allowUnclassifiedCharacters": true, + "characterSet": [ + "1:abcdefghijklmnopqrstuvwxyz", + "1:ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "1:0123456789", + "1:~!@#$%^&*()-_=+[]{}|;:,.<>/?"'\\\`", + ], + "enabled": true, + "type": "character-set", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/internal.idm.json 1`] = ` +{ + "idm": { + "internal": { + "_id": "internal", + "objects": [ + { + "name": "role", + "properties": { + "authzMembers": { + "items": { + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + }, + }, + }, + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/alpha_application.managed.json 1`] = ` +{ + "name": "alpha_application", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "Application Object", + "icon": "fa-folder", + "order": [ + "name", + "description", + "url", + "icon", + "mappingNames", + "owners", + "roles", + "members", + ], + "properties": { + "_id": { + "description": "Application ID", + "isPersonal": false, + "searchable": false, + "type": "string", + "userEditable": false, + "viewable": false, + }, + "authoritative": { + "description": "Is this an authoritative application", + "searchable": false, + "title": "Authoritative", + "type": "boolean", + "viewable": false, + }, + "connectorId": { + "description": "Id of the connector associated with the application", + "searchable": false, + "title": "Connector ID", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "description": { + "description": "Application Description", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "icon": { + "searchable": true, + "title": "Icon", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mappingNames": { + "description": "Names of the sync mappings used by an application with provisioning configured.", + "items": { + "title": "Mapping Name Items", + "type": "string", + }, + "searchable": true, + "title": "Sync Mapping Names", + "type": "array", + "viewable": true, + }, + "members": { + "description": "Application Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string", + }, + }, + "title": "Group Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "applications", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "description": "Application name", + "notifyRelationships": [ + "roles", + "members", + ], + "policies": [ + { + "policyId": "unique", + }, + ], + "returnByDefault": true, + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "owners": { + "description": "Application Owners", + "items": { + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Application _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "ownerOfApp", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Owners", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "roles": { + "description": "Roles granting users the application", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/alpha_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "applications", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Roles", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "ssoEntities": { + "description": "SSO Entity Id", + "properties": { + "domain": { + "type": "string", + }, + "federatedDomain": { + "type": "string", + }, + "idpLocation": { + "type": "string", + }, + "idpLoginUrl": { + "type": "string", + }, + "idpPrivateId": { + "type": "string", + }, + "key": { + "type": "string", + }, + "oidcId": { + "type": "string", + }, + "pfApcId": { + "type": "string", + }, + "pfIdpAdapterId": { + "type": "string", + }, + "pfPolicyId": { + "type": "string", + }, + "pfSigningCertId": { + "type": "string", + }, + "pfSpConnectionId": { + "type": "string", + }, + "spLocation": { + "type": "string", + }, + "spPrivate": { + "type": "string", + }, + "spPrivateId": { + "type": "string", + }, + }, + "searchable": false, + "title": "SSO Entity Id", + "type": "object", + "userEditable": false, + "viewable": false, + }, + "templateName": { + "description": "Name of the template the application was created from", + "searchable": false, + "title": "Template Name", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "templateVersion": { + "description": "The template version", + "searchable": false, + "title": "Template Version", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "uiConfig": { + "description": "UI Config", + "isPersonal": false, + "properties": {}, + "searchable": false, + "title": "UI Config", + "type": "object", + "usageDescription": "", + "viewable": false, + }, + "url": { + "searchable": true, + "title": "Url", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "name", + ], + "title": "Alpha realm - Application", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/alpha_assignment.managed.json 1`] = ` +{ + "attributeEncryption": {}, + "name": "alpha_assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "type", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight", + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value", + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string", + }, + "name": { + "description": "Name", + "type": "string", + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string", + }, + "value": { + "description": "Value", + "type": "string", + }, + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object", + }, + "notifyRelationships": [ + "roles", + "members", + ], + "title": "Assignment Attributes", + "type": "array", + "viewable": true, + }, + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", + "items": { + "title": "Link Qualifiers Items", + "type": "string", + }, + "title": "Link Qualifiers", + "type": "array", + "viewable": true, + }, + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists", + }, + ], + "searchable": true, + "title": "Mapping", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Assignment Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string", + }, + }, + "title": "Assignment Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Assignment Members Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignment Members", + "type": "array", + "viewable": true, + }, + "name": { + "description": "The assignment name, used for display purposes.", + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "roles": { + "description": "Managed Roles", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/alpha_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Managed Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Managed Roles", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "type": { + "description": "The type of object this assignment represents", + "title": "Type", + "type": "string", + "viewable": true, + }, + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members", + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null", + ], + "viewable": true, + }, + }, + "required": [ + "name", + "description", + "mapping", + ], + "title": "Alpha realm - Assignment", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/alpha_group.managed.json 1`] = ` +{ + "name": "alpha_group", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-group", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group", + "mat-icon": "group", + "order": [ + "_id", + "name", + "description", + "condition", + "members", + ], + "properties": { + "_id": { + "description": "Group ID", + "isPersonal": false, + "policies": [ + { + "params": { + "propertyName": "name", + }, + "policyId": "id-must-equal-property", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "condition": { + "description": "A filter for conditionally assigned members", + "isConditional": true, + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "Group Description", + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": false, + "viewable": true, + }, + "members": { + "description": "Group Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Group Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "groups", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "description": "Group Name", + "policies": [ + { + "policyId": "required", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + }, + "required": [ + "name", + ], + "title": "Alpha realm - Group", + "viewable": true, + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/alpha_organization.managed.json 1`] = ` +{ + "name": "alpha_organization", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs", + ], + "properties": { + "adminIDs": { + "isVirtual": true, + "items": { + "title": "admin ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "admins", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Admin user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "admins": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "adminOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Administrators", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "children": { + "description": "Child Organizations", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "parent", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Child Organizations", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "description": { + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "members": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "memberOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "owners", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Owner user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "owners": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members", + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "parentAdminIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent admins", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent admins", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentIDs": { + "isVirtual": true, + "items": { + "title": "parent org ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentOwnerIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent owners", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", + "type": "array", + "userEditable": false, + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Alpha realm - Organization", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/alpha_role.managed.json 1`] = ` +{ + "name": "alpha_role", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "", + "icon": "fa-check-square-o", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "applications", + "condition", + "temporalConstraints", + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "applications": { + "description": "Role Applications", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Application Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Application Items", + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "members", + ], + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "viewable": false, + }, + "assignments": { + "description": "Managed Assignments", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Assignments Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/alpha_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Managed Assignments Items", + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": false, + "title": "Managed Assignments", + "type": "array", + "viewable": true, + }, + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Role Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Members Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Role Members", + "type": "array", + "viewable": true, + }, + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique", + }, + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, + "items": { + "order": [ + "duration", + ], + "properties": { + "duration": { + "description": "Duration", + "type": "string", + }, + }, + "required": [ + "duration", + ], + "title": "Temporal Constraints Items", + "type": "object", + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Alpha realm - Role", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/alpha_user.managed.json 1`] = ` +{ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "alpha_user", + "notifications": {}, + "onCreate": { + "globals": {}, + "source": "file://alpha_user.managed.scripts/onCreate.script.js", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "cn", + "sn", + "mail", + "profileImage", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "groups", + "applications", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "effectiveGroups", + "effectiveApplications", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "ownerOfApp", + "passwordLastChangedTime", + "passwordExpirationTime", + "frIndexedString1", + "frIndexedString2", + "frIndexedString3", + "frIndexedString4", + "frIndexedString5", + "frIndexedString6", + "frIndexedString7", + "frIndexedString8", + "frIndexedString9", + "frIndexedString10", + "frIndexedString11", + "frIndexedString12", + "frIndexedString13", + "frIndexedString14", + "frIndexedString15", + "frIndexedString16", + "frIndexedString17", + "frIndexedString18", + "frIndexedString19", + "frIndexedString20", + "frUnindexedString1", + "frUnindexedString2", + "frUnindexedString3", + "frUnindexedString4", + "frUnindexedString5", + "frIndexedMultivalued1", + "frIndexedMultivalued2", + "frIndexedMultivalued3", + "frIndexedMultivalued4", + "frIndexedMultivalued5", + "frUnindexedMultivalued1", + "frUnindexedMultivalued2", + "frUnindexedMultivalued3", + "frUnindexedMultivalued4", + "frUnindexedMultivalued5", + "frIndexedDate1", + "frIndexedDate2", + "frIndexedDate3", + "frIndexedDate4", + "frIndexedDate5", + "frUnindexedDate1", + "frUnindexedDate2", + "frUnindexedDate3", + "frUnindexedDate4", + "frUnindexedDate5", + "frIndexedInteger1", + "frIndexedInteger2", + "frIndexedInteger3", + "frIndexedInteger4", + "frIndexedInteger5", + "frUnindexedInteger1", + "frUnindexedInteger2", + "frUnindexedInteger3", + "frUnindexedInteger4", + "frUnindexedInteger5", + "assignedDashboard", + "devicePrintProfiles", + "deviceProfiles", + "oathDeviceProfiles", + "pushDeviceProfiles", + "webauthnDeviceProfiles", + ], + "properties": { + "_id": { + "description": "User ID", + "isPersonal": false, + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "searchable": false, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "aliasList": { + "description": "List of identity aliases used primarily to record social IdP subjects for this user", + "isVirtual": false, + "items": { + "title": "User Alias Names Items", + "type": "string", + }, + "returnByDefault": false, + "searchable": false, + "title": "User Alias Names List", + "type": "array", + "userEditable": true, + "viewable": false, + }, + "applications": { + "description": "Applications", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string", + }, + }, + "title": "Groups Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "assignedDashboard": { + "description": "List of items to click on for this user", + "isVirtual": true, + "items": { + "title": "Assigned Dashboard Items", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], + }, + "searchable": false, + "title": "Assigned Dashboard", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/alpha_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "authzRoles": { + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Authorization Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "city": { + "description": "City", + "isPersonal": false, + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "cn": { + "default": "{{givenName}} {{sn}}", + "description": "Common Name", + "isPersonal": true, + "scope": "private", + "searchable": false, + "title": "Common Name", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "consentedMappings": { + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "items": { + "order": [ + "mapping", + "consentDate", + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "searchable": false, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mapping": { + "description": "Mapping", + "searchable": false, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "mapping", + "consentDate", + ], + "title": "Consented Mappings Item", + "type": "object", + }, + "title": "Consented Mappings Items", + "type": "array", + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "country": { + "description": "Country", + "isPersonal": false, + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "description": { + "description": "Description", + "isPersonal": false, + "searchable": false, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "devicePrintProfiles": { + "description": "Device Print Profiles Information", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Device Print Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + "deviceProfiles": { + "description": "Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Device Profiles", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "effectiveApplications": { + "description": "Effective Applications", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assigned Application Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Applications", + "type": "array", + "viewable": false, + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveGroups": { + "description": "Effective Groups", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Groups Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "groups", + ], + }, + "returnByDefault": true, + "title": "Effective Groups", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveRoles": { + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles", + ], + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "frIndexedDate1": { + "description": "Generic Indexed Date 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate2": { + "description": "Generic Indexed Date 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate3": { + "description": "Generic Indexed Date 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate4": { + "description": "Generic Indexed Date 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate5": { + "description": "Generic Indexed Date 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger1": { + "description": "Generic Indexed Integer 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger2": { + "description": "Generic Indexed Integer 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger3": { + "description": "Generic Indexed Integer 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger4": { + "description": "Generic Indexed Integer 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger5": { + "description": "Generic Indexed Integer 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued1": { + "description": "Generic Indexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued2": { + "description": "Generic Indexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued3": { + "description": "Generic Indexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued4": { + "description": "Generic Indexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued5": { + "description": "Generic Indexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString1": { + "description": "Generic Indexed String 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString10": { + "description": "Generic Indexed String 10", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 10", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString11": { + "description": "Generic Indexed String 11", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 11", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString12": { + "description": "Generic Indexed String 12", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 12", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString13": { + "description": "Generic Indexed String 13", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 13", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString14": { + "description": "Generic Indexed String 14", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 14", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString15": { + "description": "Generic Indexed String 15", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 15", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString16": { + "description": "Generic Indexed String 16", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 16", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString17": { + "description": "Generic Indexed String 17", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 17", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString18": { + "description": "Generic Indexed String 18", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 18", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString19": { + "description": "Generic Indexed String 19", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 19", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString2": { + "description": "Generic Indexed String 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString20": { + "description": "Generic Indexed String 20", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 20", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString3": { + "description": "Generic Indexed String 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString4": { + "description": "Generic Indexed String 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString5": { + "description": "Generic Indexed String 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString6": { + "description": "Generic Indexed String 6", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 6", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString7": { + "description": "Generic Indexed String 7", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 7", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString8": { + "description": "Generic Indexed String 8", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 8", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString9": { + "description": "Generic Indexed String 9", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 9", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate1": { + "description": "Generic Unindexed Date 1", + "isPersonal": false, + "title": "Generic Unindexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate2": { + "description": "Generic Unindexed Date 2", + "isPersonal": false, + "title": "Generic Unindexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate3": { + "description": "Generic Unindexed Date 3", + "isPersonal": false, + "title": "Generic Unindexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate4": { + "description": "Generic Unindexed Date 4", + "isPersonal": false, + "title": "Generic Unindexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate5": { + "description": "Generic Unindexed Date 5", + "isPersonal": false, + "title": "Generic Unindexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger1": { + "description": "Generic Unindexed Integer 1", + "isPersonal": false, + "title": "Generic Unindexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger2": { + "description": "Generic Unindexed Integer 2", + "isPersonal": false, + "title": "Generic Unindexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger3": { + "description": "Generic Unindexed Integer 3", + "isPersonal": false, + "title": "Generic Unindexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger4": { + "description": "Generic Unindexed Integer 4", + "isPersonal": false, + "title": "Generic Unindexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger5": { + "description": "Generic Unindexed Integer 5", + "isPersonal": false, + "title": "Generic Unindexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued1": { + "description": "Generic Unindexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued2": { + "description": "Generic Unindexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued3": { + "description": "Generic Unindexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued4": { + "description": "Generic Unindexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued5": { + "description": "Generic Unindexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString1": { + "description": "Generic Unindexed String 1", + "isPersonal": false, + "title": "Generic Unindexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString2": { + "description": "Generic Unindexed String 2", + "isPersonal": false, + "title": "Generic Unindexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString3": { + "description": "Generic Unindexed String 3", + "isPersonal": false, + "title": "Generic Unindexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString4": { + "description": "Generic Unindexed String 4", + "isPersonal": false, + "title": "Generic Unindexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString5": { + "description": "Generic Unindexed String 5", + "isPersonal": false, + "title": "Generic Unindexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "givenName": { + "description": "First Name", + "isPersonal": true, + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "groups": { + "description": "Groups", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Groups Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Group", + "path": "managed/alpha_group", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": false, + "returnByDefault": false, + "title": "Groups", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId", + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string", + }, + "customQuestion": { + "description": "Custom question", + "type": "string", + }, + "questionId": { + "description": "Question ID", + "type": "string", + }, + }, + "required": [], + "title": "KBA Info Items", + "type": "object", + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "lastSync": { + "description": "Last Sync timestamp", + "isPersonal": false, + "order": [ + "effectiveAssignments", + "timestamp", + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "title": "Effective Assignments", + "type": "array", + }, + "timestamp": { + "description": "Timestamp", + "type": "string", + }, + }, + "required": [], + "scope": "private", + "searchable": false, + "title": "Last Sync timestamp", + "type": "object", + "usageDescription": "", + "viewable": false, + }, + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format", + }, + ], + "searchable": true, + "title": "Email Address", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Manager _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "memberOfOrg": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations to which I Belong", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "memberOfOrgIDs": { + "isVirtual": true, + "items": { + "title": "org identifiers", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "memberOfOrg", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "oathDeviceProfiles": { + "description": "Oath Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Oath Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + "ownerOfApp": { + "items": { + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Applications I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "password": { + "description": "Password", + "isPersonal": false, + "isProtected": true, + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "passwordExpirationTime": { + "description": "Password Expiration Time", + "searchable": true, + "title": "Password Expiration Time", + "type": "string", + "userEditable": false, + "viewable": true, + }, + "passwordLastChangedTime": { + "description": "Password Last Changed Time", + "searchable": true, + "title": "Password Last Changed Time", + "type": "string", + "userEditable": false, + "viewable": true, + }, + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing", + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean", + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean", + }, + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "profileImage": { + "description": "Profile Image", + "isPersonal": true, + "searchable": false, + "title": "Profile Image", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "pushDeviceProfiles": { + "description": "Push Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Push Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + "reports": { + "description": "Direct Reports", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Direct Reports Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/alpha_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Provisioning Roles Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Provisioning Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "sn": { + "description": "Last Name", + "isPersonal": true, + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "userName": { + "description": "Username", + "isPersonal": true, + "minLength": 1, + "policies": [ + { + "policyId": "valid-username", + }, + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "webauthnDeviceProfiles": { + "description": "Web AuthN Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Web AuthN Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "userName", + "givenName", + "sn", + "mail", + ], + "title": "Alpha realm - User", + "type": "object", + "viewable": true, + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/alpha_user.managed.scripts/onCreate.script.js 1`] = ` +"//extract script test UPDATED + + +//test UPDATED + +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/bravo_application.managed.json 1`] = ` +{ + "name": "bravo_application", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "Application Object", + "icon": "fa-folder", + "order": [ + "name", + "description", + "url", + "icon", + "mappingNames", + "owners", + "roles", + "members", + ], + "properties": { + "_id": { + "description": "Application ID", + "isPersonal": false, + "searchable": false, + "type": "string", + "userEditable": false, + "viewable": false, + }, + "authoritative": { + "description": "Is this an authoritative application", + "searchable": false, + "title": "Authoritative", + "type": "boolean", + "viewable": false, + }, + "connectorId": { + "description": "Id of the connector associated with the application", + "searchable": false, + "title": "Connector ID", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "description": { + "description": "Application Description", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "icon": { + "searchable": true, + "title": "Icon", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mappingNames": { + "description": "Names of the sync mappings used by an application with provisioning configured.", + "items": { + "title": "Mapping Name Items", + "type": "string", + }, + "searchable": true, + "title": "Sync Mapping Names", + "type": "array", + "viewable": true, + }, + "members": { + "description": "Application Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string", + }, + }, + "title": "Group Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "applications", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "description": "Application name", + "notifyRelationships": [ + "roles", + "members", + ], + "policies": [ + { + "policyId": "unique", + }, + ], + "returnByDefault": true, + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "owners": { + "description": "Application Owners", + "items": { + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Application _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "ownerOfApp", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Owners", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "roles": { + "description": "Roles granting users the application", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/bravo_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "applications", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Roles", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "ssoEntities": { + "description": "SSO Entity Id", + "properties": { + "domain": { + "type": "string", + }, + "federatedDomain": { + "type": "string", + }, + "idpLocation": { + "type": "string", + }, + "idpLoginUrl": { + "type": "string", + }, + "idpPrivateId": { + "type": "string", + }, + "key": { + "type": "string", + }, + "oidcId": { + "type": "string", + }, + "pfApcId": { + "type": "string", + }, + "pfIdpAdapterId": { + "type": "string", + }, + "pfPolicyId": { + "type": "string", + }, + "pfSigningCertId": { + "type": "string", + }, + "pfSpConnectionId": { + "type": "string", + }, + "spLocation": { + "type": "string", + }, + "spPrivate": { + "type": "string", + }, + }, + "searchable": false, + "title": "SSO Entity Id", + "type": "object", + "userEditable": false, + "viewable": false, + }, + "templateName": { + "description": "Name of the template the application was created from", + "searchable": false, + "title": "Template Name", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "templateVersion": { + "description": "The template version", + "searchable": false, + "title": "Template Version", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "uiConfig": { + "description": "UI Config", + "isPersonal": false, + "properties": {}, + "searchable": false, + "title": "UI Config", + "type": "object", + "usageDescription": "", + "viewable": false, + }, + "url": { + "searchable": true, + "title": "Url", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "name", + ], + "title": "Bravo realm - Application", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/bravo_assignment.managed.json 1`] = ` +{ + "attributeEncryption": {}, + "name": "bravo_assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "type", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight", + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value", + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string", + }, + "name": { + "description": "Name", + "type": "string", + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string", + }, + "value": { + "description": "Value", + "type": "string", + }, + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object", + }, + "notifyRelationships": [ + "roles", + "members", + ], + "title": "Assignment Attributes", + "type": "array", + "viewable": true, + }, + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", + "items": { + "title": "Link Qualifiers Items", + "type": "string", + }, + "title": "Link Qualifiers", + "type": "array", + "viewable": true, + }, + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists", + }, + ], + "searchable": true, + "title": "Mapping", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Assignment Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string", + }, + }, + "title": "Assignment Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Assignment Members Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignment Members", + "type": "array", + "viewable": true, + }, + "name": { + "description": "The assignment name, used for display purposes.", + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "roles": { + "description": "Managed Roles", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/bravo_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Managed Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Managed Roles", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "type": { + "description": "The type of object this assignment represents", + "title": "Type", + "type": "string", + "viewable": true, + }, + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members", + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null", + ], + "viewable": true, + }, + }, + "required": [ + "name", + "description", + "mapping", + ], + "title": "Bravo realm - Assignment", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/bravo_group.managed.json 1`] = ` +{ + "name": "bravo_group", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-group", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group", + "mat-icon": "group", + "order": [ + "_id", + "name", + "description", + "condition", + "members", + ], + "properties": { + "_id": { + "description": "Group ID", + "isPersonal": false, + "policies": [ + { + "params": { + "propertyName": "name", + }, + "policyId": "id-must-equal-property", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "condition": { + "description": "A filter for conditionally assigned members", + "isConditional": true, + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "Group Description", + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": false, + "viewable": true, + }, + "members": { + "description": "Group Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Group Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "groups", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "description": "Group Name", + "policies": [ + { + "policyId": "required", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + }, + "required": [ + "name", + ], + "title": "Bravo realm - Group", + "viewable": true, + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/bravo_organization.managed.json 1`] = ` +{ + "name": "bravo_organization", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs", + ], + "properties": { + "adminIDs": { + "isVirtual": true, + "items": { + "title": "admin ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "admins", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Admin user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "admins": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "adminOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Administrators", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "children": { + "description": "Child Organizations", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "parent", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Child Organizations", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "description": { + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "members": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "memberOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "owners", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Owner user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "owners": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members", + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "parentAdminIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent admins", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent admins", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentIDs": { + "isVirtual": true, + "items": { + "title": "parent org ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentOwnerIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent owners", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", + "type": "array", + "userEditable": false, + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Bravo realm - Organization", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/bravo_role.managed.json 1`] = ` +{ + "name": "bravo_role", + "onValidate": { + "globals": {}, + "source": "file://bravo_role.managed.scripts/onValidate.script.js", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-check-square-o", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "applications", + "condition", + "temporalConstraints", + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "applications": { + "description": "Role Applications", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Application Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Application Items", + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "members", + ], + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "viewable": false, + }, + "assignments": { + "description": "Managed Assignments", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Assignments Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/bravo_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Managed Assignments Items", + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": false, + "title": "Managed Assignments", + "type": "array", + "viewable": true, + }, + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Role Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Members Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Role Members", + "type": "array", + "viewable": true, + }, + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique", + }, + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, + "items": { + "order": [ + "duration", + ], + "properties": { + "duration": { + "description": "Duration", + "type": "string", + }, + }, + "required": [ + "duration", + ], + "title": "Temporal Constraints Items", + "type": "object", + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Bravo realm - Role", + "type": "object", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/bravo_role.managed.scripts/onValidate.script.js 1`] = ` +"//extract script test UPDATED ONVALIDATE + +//test UPDATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/bravo_user.managed.json 1`] = ` +{ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "bravo_user", + "notifications": {}, + "postUpdate": { + "globals": {}, + "source": "file://bravo_user.managed.scripts/postUpdate.script.js", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "cn", + "sn", + "mail", + "profileImage", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "groups", + "applications", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "effectiveGroups", + "effectiveApplications", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "ownerOfApp", + "passwordLastChangedTime", + "passwordExpirationTime", + "frIndexedString1", + "frIndexedString2", + "frIndexedString3", + "frIndexedString4", + "frIndexedString5", + "frIndexedString6", + "frIndexedString7", + "frIndexedString8", + "frIndexedString9", + "frIndexedString10", + "frIndexedString11", + "frIndexedString12", + "frIndexedString13", + "frIndexedString14", + "frIndexedString15", + "frIndexedString16", + "frIndexedString17", + "frIndexedString18", + "frIndexedString19", + "frIndexedString20", + "frUnindexedString1", + "frUnindexedString2", + "frUnindexedString3", + "frUnindexedString4", + "frUnindexedString5", + "frIndexedMultivalued1", + "frIndexedMultivalued2", + "frIndexedMultivalued3", + "frIndexedMultivalued4", + "frIndexedMultivalued5", + "frUnindexedMultivalued1", + "frUnindexedMultivalued2", + "frUnindexedMultivalued3", + "frUnindexedMultivalued4", + "frUnindexedMultivalued5", + "frIndexedDate1", + "frIndexedDate2", + "frIndexedDate3", + "frIndexedDate4", + "frIndexedDate5", + "frUnindexedDate1", + "frUnindexedDate2", + "frUnindexedDate3", + "frUnindexedDate4", + "frUnindexedDate5", + "frIndexedInteger1", + "frIndexedInteger2", + "frIndexedInteger3", + "frIndexedInteger4", + "frIndexedInteger5", + "frUnindexedInteger1", + "frUnindexedInteger2", + "frUnindexedInteger3", + "frUnindexedInteger4", + "frUnindexedInteger5", + "assignedDashboard", + "devicePrintProfiles", + "deviceProfiles", + "oathDeviceProfiles", + "pushDeviceProfiles", + "webauthnDeviceProfiles", + ], + "properties": { + "_id": { + "description": "User ID", + "isPersonal": false, + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "searchable": false, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "aliasList": { + "description": "List of identity aliases used primarily to record social IdP subjects for this user", + "isVirtual": false, + "items": { + "title": "User Alias Names Items", + "type": "string", + }, + "returnByDefault": false, + "searchable": false, + "title": "User Alias Names List", + "type": "array", + "userEditable": true, + "viewable": false, + }, + "applications": { + "description": "Applications", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string", + }, + }, + "title": "Groups Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "assignedDashboard": { + "description": "List of items to click on for this user", + "isVirtual": true, + "items": { + "title": "Assigned Dashboard Items", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], + }, + "searchable": false, + "title": "Assigned Dashboard", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/bravo_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "authzRoles": { + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Authorization Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "city": { + "description": "City", + "isPersonal": false, + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "cn": { + "default": "{{givenName}} {{sn}}", + "description": "Common Name", + "isPersonal": true, + "scope": "private", + "searchable": false, + "title": "Common Name", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "consentedMappings": { + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "items": { + "order": [ + "mapping", + "consentDate", + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "searchable": false, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mapping": { + "description": "Mapping", + "searchable": false, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "mapping", + "consentDate", + ], + "title": "Consented Mappings Item", + "type": "object", + }, + "title": "Consented Mappings Items", + "type": "array", + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "country": { + "description": "Country", + "isPersonal": false, + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "description": { + "description": "Description", + "isPersonal": false, + "searchable": false, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "devicePrintProfiles": { + "description": "Device Print Profiles Information", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Device Print Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + "deviceProfiles": { + "description": "Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + "effectiveApplications": { + "description": "Effective Applications", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assigned Application Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Applications", + "type": "array", + "viewable": false, + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveGroups": { + "description": "Effective Groups", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Groups Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "groups", + ], + }, + "returnByDefault": true, + "title": "Effective Groups", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveRoles": { + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles", + ], + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "frIndexedDate1": { + "description": "Generic Indexed Date 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate2": { + "description": "Generic Indexed Date 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate3": { + "description": "Generic Indexed Date 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate4": { + "description": "Generic Indexed Date 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate5": { + "description": "Generic Indexed Date 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger1": { + "description": "Generic Indexed Integer 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger2": { + "description": "Generic Indexed Integer 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger3": { + "description": "Generic Indexed Integer 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger4": { + "description": "Generic Indexed Integer 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger5": { + "description": "Generic Indexed Integer 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued1": { + "description": "Generic Indexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued2": { + "description": "Generic Indexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued3": { + "description": "Generic Indexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued4": { + "description": "Generic Indexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued5": { + "description": "Generic Indexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "searchable": true, + "title": "Generic Indexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString1": { + "description": "Generic Indexed String 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString10": { + "description": "Generic Indexed String 10", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 10", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString11": { + "description": "Generic Indexed String 11", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 11", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString12": { + "description": "Generic Indexed String 12", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 12", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString13": { + "description": "Generic Indexed String 13", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 13", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString14": { + "description": "Generic Indexed String 14", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 14", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString15": { + "description": "Generic Indexed String 15", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 15", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString16": { + "description": "Generic Indexed String 16", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 16", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString17": { + "description": "Generic Indexed String 17", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 17", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString18": { + "description": "Generic Indexed String 18", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 18", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString19": { + "description": "Generic Indexed String 19", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 19", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString2": { + "description": "Generic Indexed String 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString20": { + "description": "Generic Indexed String 20", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 20", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString3": { + "description": "Generic Indexed String 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString4": { + "description": "Generic Indexed String 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString5": { + "description": "Generic Indexed String 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString6": { + "description": "Generic Indexed String 6", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 6", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString7": { + "description": "Generic Indexed String 7", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 7", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString8": { + "description": "Generic Indexed String 8", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 8", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString9": { + "description": "Generic Indexed String 9", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 9", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate1": { + "description": "Generic Unindexed Date 1", + "isPersonal": false, + "title": "Generic Unindexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate2": { + "description": "Generic Unindexed Date 2", + "isPersonal": false, + "title": "Generic Unindexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate3": { + "description": "Generic Unindexed Date 3", + "isPersonal": false, + "title": "Generic Unindexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate4": { + "description": "Generic Unindexed Date 4", + "isPersonal": false, + "title": "Generic Unindexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate5": { + "description": "Generic Unindexed Date 5", + "isPersonal": false, + "title": "Generic Unindexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger1": { + "description": "Generic Unindexed Integer 1", + "isPersonal": false, + "title": "Generic Unindexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger2": { + "description": "Generic Unindexed Integer 2", + "isPersonal": false, + "title": "Generic Unindexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger3": { + "description": "Generic Unindexed Integer 3", + "isPersonal": false, + "title": "Generic Unindexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger4": { + "description": "Generic Unindexed Integer 4", + "isPersonal": false, + "title": "Generic Unindexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger5": { + "description": "Generic Unindexed Integer 5", + "isPersonal": false, + "title": "Generic Unindexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued1": { + "description": "Generic Unindexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued2": { + "description": "Generic Unindexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued3": { + "description": "Generic Unindexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued4": { + "description": "Generic Unindexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued5": { + "description": "Generic Unindexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString1": { + "description": "Generic Unindexed String 1", + "isPersonal": false, + "title": "Generic Unindexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString2": { + "description": "Generic Unindexed String 2", + "isPersonal": false, + "title": "Generic Unindexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString3": { + "description": "Generic Unindexed String 3", + "isPersonal": false, + "title": "Generic Unindexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString4": { + "description": "Generic Unindexed String 4", + "isPersonal": false, + "title": "Generic Unindexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString5": { + "description": "Generic Unindexed String 5", + "isPersonal": false, + "title": "Generic Unindexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "givenName": { + "description": "First Name", + "isPersonal": true, + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "groups": { + "description": "Groups", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Groups Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Group", + "path": "managed/bravo_group", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": false, + "returnByDefault": false, + "title": "Groups", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId", + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string", + }, + "customQuestion": { + "description": "Custom question", + "type": "string", + }, + "questionId": { + "description": "Question ID", + "type": "string", + }, + }, + "required": [], + "title": "KBA Info Items", + "type": "object", + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "lastSync": { + "description": "Last Sync timestamp", + "isPersonal": false, + "order": [ + "effectiveAssignments", + "timestamp", + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "title": "Effective Assignments", + "type": "array", + }, + "timestamp": { + "description": "Timestamp", + "type": "string", + }, + }, + "required": [], + "scope": "private", + "searchable": false, + "title": "Last Sync timestamp", + "type": "object", + "usageDescription": "", + "viewable": false, + }, + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format", + }, + ], + "searchable": true, + "title": "Email Address", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Manager _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "memberOfOrg": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations to which I Belong", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "memberOfOrgIDs": { + "isVirtual": true, + "items": { + "title": "org identifiers", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "memberOfOrg", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "oathDeviceProfiles": { + "description": "Oath Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Oath Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + "ownerOfApp": { + "items": { + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Applications I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "password": { + "description": "Password", + "isPersonal": false, + "isProtected": true, + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "passwordExpirationTime": { + "description": "Password Expiration Time", + "searchable": true, + "title": "Password Expiration Time", + "type": "string", + "userEditable": false, + "viewable": true, + }, + "passwordLastChangedTime": { + "description": "Password Last Changed Time", + "searchable": true, + "title": "Password Last Changed Time", + "type": "string", + "userEditable": false, + "viewable": true, + }, + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing", + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean", + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean", + }, + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "profileImage": { + "description": "Profile Image", + "isPersonal": true, + "searchable": false, + "title": "Profile Image", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "pushDeviceProfiles": { + "description": "Push Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Push Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + "reports": { + "description": "Direct Reports", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Direct Reports Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/bravo_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Provisioning Roles Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Provisioning Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "sn": { + "description": "Last Name", + "isPersonal": true, + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "userName": { + "description": "Username", + "isPersonal": true, + "minLength": 1, + "policies": [ + { + "policyId": "valid-username", + }, + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "webauthnDeviceProfiles": { + "description": "Web AuthN Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", + }, + "searchable": false, + "title": "Web AuthN Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "userName", + "givenName", + "sn", + "mail", + ], + "title": "Bravo realm - User", + "type": "object", + "viewable": true, + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/bravo_user.managed.scripts/postUpdate.script.js 1`] = ` +"//extract feature test UPDATED POSTUPDATE SCRIPT + + +//test UPDATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/managed/managed.idm.json 1`] = ` +{ + "idm": { + "managed": { + "_id": "managed", + "objects": [ + "file://alpha_user.managed.json", + "file://bravo_user.managed.json", + "file://alpha_role.managed.json", + "file://bravo_role.managed.json", + "file://alpha_assignment.managed.json", + "file://bravo_assignment.managed.json", + "file://alpha_organization.managed.json", + "file://bravo_organization.managed.json", + "file://alpha_group.managed.json", + "file://bravo_group.managed.json", + "file://alpha_application.managed.json", + "file://bravo_application.managed.json", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/policy.idm.json 1`] = ` +{ + "idm": { + "policy": { + "_id": "policy", + "additionalFiles": [], + "resources": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/privilegeAssignments.idm.json 1`] = ` +{ + "idm": { + "privilegeAssignments": { + "_id": "privilegeAssignments", + "privilegeAssignments": [ + { + "name": "ownerPrivileges", + "privileges": [ + "owner-view-update-delete-orgs", + "owner-create-orgs", + "owner-view-update-delete-admins-and-members", + "owner-create-admins", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "ownerOfOrg", + }, + { + "name": "adminPrivileges", + "privileges": [ + "admin-view-update-delete-orgs", + "admin-create-orgs", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "adminOfOrg", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/privileges.idm.json 1`] = ` +{ + "idm": { + "privileges": { + "_id": "privileges", + "privileges": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/repo.ds.idm.json 1`] = ` +{ + "idm": { + "repo.ds": { + "_id": "repo.ds", + "resourceMapping": { + "genericMapping": { + "managed/alpha_application": { + "dnTemplate": "ou=application,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-application-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-application", + ], + "properties": { + "members": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-application-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfApp", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/alpha_role", + "type": "reverseReference", + }, + }, + }, + "managed/alpha_assignment": { + "dnTemplate": "ou=assignment,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-assignment-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-assignment", + ], + "properties": { + "condition": { + "ldapAttribute": "fr-idm-assignment-condition", + "type": "simple", + }, + "members": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/alpha_role", + "type": "reverseReference", + }, + }, + }, + "managed/alpha_group": { + "dnTemplate": "ou=groups,o=alpha,o=root,ou=identities", + "idGenerator": { + "propertyName": "name", + "type": "property", + }, + "jsonAttribute": "fr-idm-managed-group-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "cn", + "type": "clientDnNaming", + }, + "nativeId": false, + "objectClasses": [ + "top", + "groupOfURLs", + "fr-idm-managed-group", + ], + "properties": { + "_id": { + "ldapAttribute": "cn", + "primaryKey": true, + "type": "simple", + "writability": "createOnly", + }, + "condition": { + "ldapAttribute": "fr-idm-managed-group-condition", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "members": { + "isMultiValued": true, + "propertyName": "groups", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + }, + }, + "managed/alpha_organization": { + "dnTemplate": "ou=organization,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + "fr-ext-attrs", + ], + "properties": { + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/alpha_organization", + "type": "reverseReference", + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + }, + }, + "managed/alpha_role": { + "dnTemplate": "ou=role,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role", + ], + "properties": { + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-applications", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference", + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-assignments", + "primaryKey": "uid", + "resourcePath": "managed/alpha_assignment", + "type": "reference", + }, + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + }, + }, + "managed/alpha_user": { + "dnTemplate": "ou=user,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-custom-attrs", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "fr-idm-uuid", + "type": "clientDnNaming", + }, + "nativeId": false, + "objectClasses": [ + "person", + "organizationalPerson", + "inetOrgPerson", + "iplanet-am-user-service", + "devicePrintProfilesContainer", + "deviceProfilesContainer", + "kbaInfoContainer", + "fr-idm-managed-user-explicit", + "forgerock-am-dashboard-service", + "inetuser", + "iplanet-am-auth-configuration-service", + "iplanet-am-managed-person", + "iPlanetPreferences", + "oathDeviceProfilesContainer", + "pushDeviceProfilesContainer", + "sunAMAuthAccountLockout", + "sunFMSAML2NameIdentifier", + "webauthnDeviceProfilesContainer", + "fr-idm-hybrid-obj", + "fr-ext-attrs", + ], + "properties": { + "_id": { + "ldapAttribute": "fr-idm-uuid", + "primaryKey": true, + "type": "simple", + }, + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "managed/alpha_usermeta", + "type": "reference", + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference", + }, + "accountStatus": { + "ldapAttribute": "inetUserStatus", + "type": "simple", + }, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + "aliasList": { + "isMultiValued": true, + "ldapAttribute": "iplanet-am-user-alias-list", + "type": "simple", + }, + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference", + }, + "assignedDashboard": { + "isMultiValued": true, + "ldapAttribute": "assignedDashboard", + "type": "simple", + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-assignment-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_assignment", + "type": "reference", + }, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", + }, + "city": { + "ldapAttribute": "l", + "type": "simple", + }, + "cn": { + "ldapAttribute": "cn", + "type": "simple", + }, + "consentedMappings": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-consentedMapping", + "type": "json", + }, + "country": { + "ldapAttribute": "co", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "devicePrintProfiles": { + "isMultiValued": true, + "ldapAttribute": "devicePrintProfiles", + "type": "simple", + }, + "deviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "deviceProfiles", + "type": "simple", + }, + "displayName": { + "ldapAttribute": "displayName", + "type": "simple", + }, + "effectiveApplications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveApplications", + "type": "json", + }, + "effectiveAssignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveAssignment", + "type": "json", + }, + "effectiveGroups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveGroup", + "type": "json", + }, + "effectiveRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveRole", + "type": "json", + }, + "frIndexedDate1": { + "ldapAttribute": "fr-attr-idate1", + "type": "simple", + }, + "frIndexedDate2": { + "ldapAttribute": "fr-attr-idate2", + "type": "simple", + }, + "frIndexedDate3": { + "ldapAttribute": "fr-attr-idate3", + "type": "simple", + }, + "frIndexedDate4": { + "ldapAttribute": "fr-attr-idate4", + "type": "simple", + }, + "frIndexedDate5": { + "ldapAttribute": "fr-attr-idate5", + "type": "simple", + }, + "frIndexedInteger1": { + "ldapAttribute": "fr-attr-iint1", + "type": "simple", + }, + "frIndexedInteger2": { + "ldapAttribute": "fr-attr-iint2", + "type": "simple", + }, + "frIndexedInteger3": { + "ldapAttribute": "fr-attr-iint3", + "type": "simple", + }, + "frIndexedInteger4": { + "ldapAttribute": "fr-attr-iint4", + "type": "simple", + }, + "frIndexedInteger5": { + "ldapAttribute": "fr-attr-iint5", + "type": "simple", + }, + "frIndexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti1", + "type": "simple", + }, + "frIndexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti2", + "type": "simple", + }, + "frIndexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti3", + "type": "simple", + }, + "frIndexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti4", + "type": "simple", + }, + "frIndexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti5", + "type": "simple", + }, + "frIndexedString1": { + "ldapAttribute": "fr-attr-istr1", + "type": "simple", + }, + "frIndexedString10": { + "ldapAttribute": "fr-attr-istr10", + "type": "simple", + }, + "frIndexedString11": { + "ldapAttribute": "fr-attr-istr11", + "type": "simple", + }, + "frIndexedString12": { + "ldapAttribute": "fr-attr-istr12", + "type": "simple", + }, + "frIndexedString13": { + "ldapAttribute": "fr-attr-istr13", + "type": "simple", + }, + "frIndexedString14": { + "ldapAttribute": "fr-attr-istr14", + "type": "simple", + }, + "frIndexedString15": { + "ldapAttribute": "fr-attr-istr15", + "type": "simple", + }, + "frIndexedString16": { + "ldapAttribute": "fr-attr-istr16", + "type": "simple", + }, + "frIndexedString17": { + "ldapAttribute": "fr-attr-istr17", + "type": "simple", + }, + "frIndexedString18": { + "ldapAttribute": "fr-attr-istr18", + "type": "simple", + }, + "frIndexedString19": { + "ldapAttribute": "fr-attr-istr19", + "type": "simple", + }, + "frIndexedString2": { + "ldapAttribute": "fr-attr-istr2", + "type": "simple", + }, + "frIndexedString20": { + "ldapAttribute": "fr-attr-istr20", + "type": "simple", + }, + "frIndexedString3": { + "ldapAttribute": "fr-attr-istr3", + "type": "simple", + }, + "frIndexedString4": { + "ldapAttribute": "fr-attr-istr4", + "type": "simple", + }, + "frIndexedString5": { + "ldapAttribute": "fr-attr-istr5", + "type": "simple", + }, + "frIndexedString6": { + "ldapAttribute": "fr-attr-istr6", + "type": "simple", + }, + "frIndexedString7": { + "ldapAttribute": "fr-attr-istr7", + "type": "simple", + }, + "frIndexedString8": { + "ldapAttribute": "fr-attr-istr8", + "type": "simple", + }, + "frIndexedString9": { + "ldapAttribute": "fr-attr-istr9", + "type": "simple", + }, + "frUnindexedDate1": { + "ldapAttribute": "fr-attr-date1", + "type": "simple", + }, + "frUnindexedDate2": { + "ldapAttribute": "fr-attr-date2", + "type": "simple", + }, + "frUnindexedDate3": { + "ldapAttribute": "fr-attr-date3", + "type": "simple", + }, + "frUnindexedDate4": { + "ldapAttribute": "fr-attr-date4", + "type": "simple", + }, + "frUnindexedDate5": { + "ldapAttribute": "fr-attr-date5", + "type": "simple", + }, + "frUnindexedInteger1": { + "ldapAttribute": "fr-attr-int1", + "type": "simple", + }, + "frUnindexedInteger2": { + "ldapAttribute": "fr-attr-int2", + "type": "simple", + }, + "frUnindexedInteger3": { + "ldapAttribute": "fr-attr-int3", + "type": "simple", + }, + "frUnindexedInteger4": { + "ldapAttribute": "fr-attr-int4", + "type": "simple", + }, + "frUnindexedInteger5": { + "ldapAttribute": "fr-attr-int5", + "type": "simple", + }, + "frUnindexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi1", + "type": "simple", + }, + "frUnindexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi2", + "type": "simple", + }, + "frUnindexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi3", + "type": "simple", + }, + "frUnindexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi4", + "type": "simple", + }, + "frUnindexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi5", + "type": "simple", + }, + "frUnindexedString1": { + "ldapAttribute": "fr-attr-str1", + "type": "simple", + }, + "frUnindexedString2": { + "ldapAttribute": "fr-attr-str2", + "type": "simple", + }, + "frUnindexedString3": { + "ldapAttribute": "fr-attr-str3", + "type": "simple", + }, + "frUnindexedString4": { + "ldapAttribute": "fr-attr-str4", + "type": "simple", + }, + "frUnindexedString5": { + "ldapAttribute": "fr-attr-str5", + "type": "simple", + }, + "givenName": { + "ldapAttribute": "givenName", + "type": "simple", + }, + "groups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-groups", + "primaryKey": "cn", + "resourcePath": "managed/alpha_group", + "type": "reference", + }, + "kbaInfo": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-kbaInfo", + "type": "json", + }, + "lastSync": { + "ldapAttribute": "fr-idm-lastSync", + "type": "json", + }, + "mail": { + "ldapAttribute": "mail", + "type": "simple", + }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/alpha_user", + "type": "reference", + }, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + "memberOfOrgIDs": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-memberoforgid", + "type": "simple", + }, + "oathDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "oathDeviceProfiles", + "type": "simple", + }, + "ownerOfApp": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-owner", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference", + }, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + "password": { + "ldapAttribute": "userPassword", + "type": "simple", + }, + "passwordExpirationTime": { + "ldapAttribute": "pwdExpirationTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", + }, + "passwordLastChangedTime": { + "ldapAttribute": "pwdChangedTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", + }, + "postalAddress": { + "ldapAttribute": "street", + "type": "simple", + }, + "postalCode": { + "ldapAttribute": "postalCode", + "type": "simple", + }, + "preferences": { + "ldapAttribute": "fr-idm-preferences", + "type": "json", + }, + "profileImage": { + "ldapAttribute": "labeledURI", + "type": "simple", + }, + "pushDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "pushDeviceProfiles", + "type": "simple", + }, + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/alpha_role", + "type": "reference", + }, + "sn": { + "ldapAttribute": "sn", + "type": "simple", + }, + "stateProvince": { + "ldapAttribute": "st", + "type": "simple", + }, + "telephoneNumber": { + "ldapAttribute": "telephoneNumber", + "type": "simple", + }, + "userName": { + "ldapAttribute": "uid", + "type": "simple", + }, + "webauthnDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "webauthnDeviceProfiles", + "type": "simple", + }, + }, + }, + "managed/alpha_usermeta": { + "dnTemplate": "ou=usermeta,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + }, + }, + "managed/bravo_application": { + "dnTemplate": "ou=application,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-application-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-application", + ], + "properties": { + "members": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-application-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfApp", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/bravo_role", + "type": "reverseReference", + }, + }, + }, + "managed/bravo_assignment": { + "dnTemplate": "ou=assignment,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-assignment-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-assignment", + ], + "properties": { + "condition": { + "ldapAttribute": "fr-idm-assignment-condition", + "type": "simple", + }, + "members": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/bravo_role", + "type": "reverseReference", + }, + }, + }, + "managed/bravo_group": { + "dnTemplate": "ou=groups,o=bravo,o=root,ou=identities", + "idGenerator": { + "propertyName": "name", + "type": "property", + }, + "jsonAttribute": "fr-idm-managed-group-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "cn", + "type": "clientDnNaming", + }, + "nativeId": false, + "objectClasses": [ + "top", + "groupOfURLs", + "fr-idm-managed-group", + ], + "properties": { + "_id": { + "ldapAttribute": "cn", + "primaryKey": true, + "type": "simple", + "writability": "createOnly", + }, + "condition": { + "ldapAttribute": "fr-idm-managed-group-condition", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "members": { + "isMultiValued": true, + "propertyName": "groups", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + }, + }, + "managed/bravo_organization": { + "dnTemplate": "ou=organization,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + "fr-ext-attrs", + ], + "properties": { + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/bravo_organization", + "type": "reverseReference", + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", + }, + }, + }, + "managed/bravo_role": { + "dnTemplate": "ou=role,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role", + ], + "properties": { + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-applications", + "primaryKey": "uid", + "resourcePath": "managed/bravo_application", + "type": "reference", + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-assignments", + "primaryKey": "uid", + "resourcePath": "managed/bravo_assignment", + "type": "reference", + }, + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + }, + }, + "managed/bravo_user": { + "dnTemplate": "ou=user,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-custom-attrs", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "fr-idm-uuid", + "type": "clientDnNaming", + }, + "nativeId": false, + "objectClasses": [ + "person", + "organizationalPerson", + "inetOrgPerson", + "iplanet-am-user-service", + "devicePrintProfilesContainer", + "deviceProfilesContainer", + "kbaInfoContainer", + "fr-idm-managed-user-explicit", + "forgerock-am-dashboard-service", + "inetuser", + "iplanet-am-auth-configuration-service", + "iplanet-am-managed-person", + "iPlanetPreferences", + "oathDeviceProfilesContainer", + "pushDeviceProfilesContainer", + "sunAMAuthAccountLockout", + "sunFMSAML2NameIdentifier", + "webauthnDeviceProfilesContainer", + "fr-idm-hybrid-obj", + "fr-ext-attrs", + ], + "properties": { + "_id": { + "ldapAttribute": "fr-idm-uuid", + "primaryKey": true, + "type": "simple", + }, + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "managed/bravo_usermeta", + "type": "reference", + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference", + }, + "accountStatus": { + "ldapAttribute": "inetUserStatus", + "type": "simple", + }, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", + }, + "aliasList": { + "isMultiValued": true, + "ldapAttribute": "iplanet-am-user-alias-list", + "type": "simple", + }, + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-member", + "primaryKey": "uid", + "resourcePath": "managed/bravo_application", + "type": "reference", + }, + "assignedDashboard": { + "isMultiValued": true, + "ldapAttribute": "assignedDashboard", + "type": "simple", + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-assignment-member", + "primaryKey": "uid", + "resourcePath": "managed/bravo_assignment", + "type": "reference", + }, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", + }, + "city": { + "ldapAttribute": "l", + "type": "simple", + }, + "cn": { + "ldapAttribute": "cn", + "type": "simple", + }, + "consentedMappings": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-consentedMapping", + "type": "json", + }, + "country": { + "ldapAttribute": "co", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "devicePrintProfiles": { + "isMultiValued": true, + "ldapAttribute": "devicePrintProfiles", + "type": "simple", + }, + "deviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "deviceProfiles", + "type": "simple", + }, + "displayName": { + "ldapAttribute": "displayName", + "type": "simple", + }, + "effectiveApplications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveApplications", + "type": "json", + }, + "effectiveAssignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveAssignment", + "type": "json", + }, + "effectiveGroups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveGroup", + "type": "json", + }, + "effectiveRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveRole", + "type": "json", + }, + "frIndexedDate1": { + "ldapAttribute": "fr-attr-idate1", + "type": "simple", + }, + "frIndexedDate2": { + "ldapAttribute": "fr-attr-idate2", + "type": "simple", + }, + "frIndexedDate3": { + "ldapAttribute": "fr-attr-idate3", + "type": "simple", + }, + "frIndexedDate4": { + "ldapAttribute": "fr-attr-idate4", + "type": "simple", + }, + "frIndexedDate5": { + "ldapAttribute": "fr-attr-idate5", + "type": "simple", + }, + "frIndexedInteger1": { + "ldapAttribute": "fr-attr-iint1", + "type": "simple", + }, + "frIndexedInteger2": { + "ldapAttribute": "fr-attr-iint2", + "type": "simple", + }, + "frIndexedInteger3": { + "ldapAttribute": "fr-attr-iint3", + "type": "simple", + }, + "frIndexedInteger4": { + "ldapAttribute": "fr-attr-iint4", + "type": "simple", + }, + "frIndexedInteger5": { + "ldapAttribute": "fr-attr-iint5", + "type": "simple", + }, + "frIndexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti1", + "type": "simple", + }, + "frIndexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti2", + "type": "simple", + }, + "frIndexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti3", + "type": "simple", + }, + "frIndexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti4", + "type": "simple", + }, + "frIndexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti5", + "type": "simple", + }, + "frIndexedString1": { + "ldapAttribute": "fr-attr-istr1", + "type": "simple", + }, + "frIndexedString10": { + "ldapAttribute": "fr-attr-istr10", + "type": "simple", + }, + "frIndexedString11": { + "ldapAttribute": "fr-attr-istr11", + "type": "simple", + }, + "frIndexedString12": { + "ldapAttribute": "fr-attr-istr12", + "type": "simple", + }, + "frIndexedString13": { + "ldapAttribute": "fr-attr-istr13", + "type": "simple", + }, + "frIndexedString14": { + "ldapAttribute": "fr-attr-istr14", + "type": "simple", + }, + "frIndexedString15": { + "ldapAttribute": "fr-attr-istr15", + "type": "simple", + }, + "frIndexedString16": { + "ldapAttribute": "fr-attr-istr16", + "type": "simple", + }, + "frIndexedString17": { + "ldapAttribute": "fr-attr-istr17", + "type": "simple", + }, + "frIndexedString18": { + "ldapAttribute": "fr-attr-istr18", + "type": "simple", + }, + "frIndexedString19": { + "ldapAttribute": "fr-attr-istr19", + "type": "simple", + }, + "frIndexedString2": { + "ldapAttribute": "fr-attr-istr2", + "type": "simple", + }, + "frIndexedString20": { + "ldapAttribute": "fr-attr-istr20", + "type": "simple", + }, + "frIndexedString3": { + "ldapAttribute": "fr-attr-istr3", + "type": "simple", + }, + "frIndexedString4": { + "ldapAttribute": "fr-attr-istr4", + "type": "simple", + }, + "frIndexedString5": { + "ldapAttribute": "fr-attr-istr5", + "type": "simple", + }, + "frIndexedString6": { + "ldapAttribute": "fr-attr-istr6", + "type": "simple", + }, + "frIndexedString7": { + "ldapAttribute": "fr-attr-istr7", + "type": "simple", + }, + "frIndexedString8": { + "ldapAttribute": "fr-attr-istr8", + "type": "simple", + }, + "frIndexedString9": { + "ldapAttribute": "fr-attr-istr9", + "type": "simple", + }, + "frUnindexedDate1": { + "ldapAttribute": "fr-attr-date1", + "type": "simple", + }, + "frUnindexedDate2": { + "ldapAttribute": "fr-attr-date2", + "type": "simple", + }, + "frUnindexedDate3": { + "ldapAttribute": "fr-attr-date3", + "type": "simple", + }, + "frUnindexedDate4": { + "ldapAttribute": "fr-attr-date4", + "type": "simple", + }, + "frUnindexedDate5": { + "ldapAttribute": "fr-attr-date5", + "type": "simple", + }, + "frUnindexedInteger1": { + "ldapAttribute": "fr-attr-int1", + "type": "simple", + }, + "frUnindexedInteger2": { + "ldapAttribute": "fr-attr-int2", + "type": "simple", + }, + "frUnindexedInteger3": { + "ldapAttribute": "fr-attr-int3", + "type": "simple", + }, + "frUnindexedInteger4": { + "ldapAttribute": "fr-attr-int4", + "type": "simple", + }, + "frUnindexedInteger5": { + "ldapAttribute": "fr-attr-int5", + "type": "simple", + }, + "frUnindexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi1", + "type": "simple", + }, + "frUnindexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi2", + "type": "simple", + }, + "frUnindexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi3", + "type": "simple", + }, + "frUnindexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi4", + "type": "simple", + }, + "frUnindexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi5", + "type": "simple", + }, + "frUnindexedString1": { + "ldapAttribute": "fr-attr-str1", + "type": "simple", + }, + "frUnindexedString2": { + "ldapAttribute": "fr-attr-str2", + "type": "simple", + }, + "frUnindexedString3": { + "ldapAttribute": "fr-attr-str3", + "type": "simple", + }, + "frUnindexedString4": { + "ldapAttribute": "fr-attr-str4", + "type": "simple", + }, + "frUnindexedString5": { + "ldapAttribute": "fr-attr-str5", + "type": "simple", + }, + "givenName": { + "ldapAttribute": "givenName", + "type": "simple", + }, + "groups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-groups", + "primaryKey": "cn", + "resourcePath": "managed/bravo_group", + "type": "reference", + }, + "kbaInfo": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-kbaInfo", + "type": "json", + }, + "lastSync": { + "ldapAttribute": "fr-idm-lastSync", + "type": "json", + }, + "mail": { + "ldapAttribute": "mail", + "type": "simple", + }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/bravo_user", + "type": "reference", + }, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", + }, + "memberOfOrgIDs": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-memberoforgid", + "type": "simple", + }, + "oathDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "oathDeviceProfiles", + "type": "simple", + }, + "ownerOfApp": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-owner", + "primaryKey": "uid", + "resourcePath": "managed/bravo_application", + "type": "reference", + }, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", + }, + "password": { + "ldapAttribute": "userPassword", + "type": "simple", + }, + "passwordExpirationTime": { + "ldapAttribute": "pwdExpirationTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", + }, + "passwordLastChangedTime": { + "ldapAttribute": "pwdChangedTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", + }, + "postalAddress": { + "ldapAttribute": "street", + "type": "simple", + }, + "postalCode": { + "ldapAttribute": "postalCode", + "type": "simple", + }, + "preferences": { + "ldapAttribute": "fr-idm-preferences", + "type": "json", + }, + "profileImage": { + "ldapAttribute": "labeledURI", + "type": "simple", + }, + "pushDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "pushDeviceProfiles", + "type": "simple", + }, + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/bravo_role", + "type": "reference", + }, + "sn": { + "ldapAttribute": "sn", + "type": "simple", + }, + "stateProvince": { + "ldapAttribute": "st", + "type": "simple", + }, + "telephoneNumber": { + "ldapAttribute": "telephoneNumber", + "type": "simple", + }, + "userName": { + "ldapAttribute": "uid", + "type": "simple", + }, + "webauthnDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "webauthnDeviceProfiles", + "type": "simple", + }, + }, + }, + "managed/bravo_usermeta": { + "dnTemplate": "ou=usermeta,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + }, + }, + "managed/teammembermeta": { + "dnTemplate": "ou=teammembermeta,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/teammember", + "type": "reverseReference", + }, + }, + }, + }, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/router.idm.json 1`] = ` +{ + "idm": { + "router": { + "_id": "router", + "filters": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/secrets.idm.json 1`] = ` +{ + "idm": { + "secrets": { + "_id": "secrets", + "stores": [ + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}", + "mappings": [ + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + "openidm-localhost", + ], + "secretId": "idm.default", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.config.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.password.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.https.keystore.cert.alias|openidm-localhost}", + ], + "secretId": "idm.jwt.session.module.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}", + ], + "secretId": "idm.jwt.session.module.signing", + "types": [ + "SIGN", + "VERIFY", + ], + }, + { + "aliases": [ + "selfservice", + ], + "secretId": "idm.selfservice.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}", + ], + "secretId": "idm.selfservice.signing", + "types": [ + "SIGN", + "VERIFY", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.assignment.attribute.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + ], + "providerName": "&{openidm.keystore.provider|SunJCE}", + "storePassword": "&{openidm.keystore.password|changeit}", + "storetype": "&{openidm.keystore.type|JCEKS}", + }, + "name": "mainKeyStore", + }, + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.truststore.location|&{idm.install.dir}/security/truststore}", + "mappings": [], + "providerName": "&{openidm.truststore.provider|SUN}", + "storePassword": "&{openidm.truststore.password|changeit}", + "storetype": "&{openidm.truststore.type|JKS}", + }, + "name": "mainTrustStore", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/selfservice.kba.idm.json 1`] = ` +{ + "idm": { + "selfservice.kba": { + "_id": "selfservice.kba", + "kbaPropertyName": "kbaInfo", + "minimumAnswersToDefine": 1, + "minimumAnswersToVerify": 1, + "questions": { + "1": { + "en": "What's your favorite color?", + }, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/selfservice.terms.idm.json 1`] = ` +{ + "idm": { + "selfservice.terms": { + "_id": "selfservice.terms", + "active": "0.0", + "uiConfig": { + "buttonText": "Accept", + "displayName": "We've updated our terms", + "purpose": "You must accept the updated terms in order to proceed.", + }, + "versions": [ + { + "createDate": "2019-10-28T04:20:11.320Z", + "termsTranslations": { + "en": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + }, + "version": "0.0", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/servletfilter/cors.idm.json 1`] = ` +{ + "idm": { + "servletfilter/cors": { + "_id": "servletfilter/cors", + "initParams": { + "allowCredentials": false, + "allowedHeaders": "authorization,accept,content-type,origin,x-requested-with,cache-control,accept-api-version,if-match,if-none-match", + "allowedMethods": "GET,POST,PUT,DELETE,PATCH", + "allowedOrigins": "*", + "chainPreflight": false, + "exposedHeaders": "WWW-Authenticate", + }, + "urlPatterns": [ + "/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/servletfilter/payload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/payload": { + "_id": "servletfilter/payload", + "initParams": { + "maxRequestSizeInMegabytes": 5, + }, + "urlPatterns": [ + "&{openidm.servlet.alias}/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/servletfilter/upload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/upload": { + "_id": "servletfilter/upload", + "initParams": { + "maxRequestSizeInMegabytes": 50, + }, + "urlPatterns": [ + "&{openidm.servlet.upload.alias}/*", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/sync/extract_script_test.sync.json 1`] = ` +{ + "_id": "sync/extract_script_test", + "consentRequired": false, + "correlationScript": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/correlationScript.script.js", + "type": "text/javascript", + }, + "displayName": "extract_script_test", + "icon": null, + "name": "extract_script_test", + "onCreate": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/onCreate.script.js", + "type": "text/javascript", + }, + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "source": "", + "target": "name", + "transform": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/properties.SOURCE.name.transform.script.groovy", + "type": "groovy", + }, + }, + ], + "result": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/result.script.js", + "type": "text/javascript", + }, + "source": "managed/alpha_user", + "syncAfter": [], + "target": "managed/alpha_group", + "validSource": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/validSource.script.js", + "type": "text/javascript", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/sync/extract_script_test.sync.scripts/correlationScript.script.js 1`] = ` +"//extract script test UPDATED CORRELATION QUERY +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/sync/extract_script_test.sync.scripts/onCreate.script.js 1`] = ` +"//test UPDATED ONCREATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/sync/extract_script_test.sync.scripts/properties.SOURCE.name.transform.script.groovy 1`] = ` +"//groovy EXTRACT SCRIPT test UPDATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/sync/extract_script_test.sync.scripts/result.script.js 1`] = ` +"//tests UPDATED RESULT SCRIPT +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/sync/extract_script_test.sync.scripts/validSource.script.js 1`] = ` +"//extract script test UPDATED VALIDSOURCE +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/sync/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + "file://extract_script_test.sync.json", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui.context/admin.idm.json 1`] = ` +{ + "idm": { + "ui.context/admin": { + "_id": "ui.context/admin", + "defaultDir": "&{idm.install.dir}/ui/admin/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/admin/extension", + "responseHeaders": { + "X-Frame-Options": "SAMEORIGIN", + }, + "urlContextRoot": "/admin", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui.context/api.idm.json 1`] = ` +{ + "idm": { + "ui.context/api": { + "_id": "ui.context/api", + "authEnabled": true, + "cacheEnabled": false, + "defaultDir": "&{idm.install.dir}/ui/api/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/api/extension", + "urlContextRoot": "/api", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui.context/enduser.idm.json 1`] = ` +{ + "idm": { + "ui.context/enduser": { + "_id": "ui.context/enduser", + "defaultDir": "&{idm.install.dir}/ui/enduser", + "enabled": true, + "responseHeaders": { + "X-Frame-Options": "DENY", + }, + "urlContextRoot": "/", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui.context/oauth.idm.json 1`] = ` +{ + "idm": { + "ui.context/oauth": { + "_id": "ui.context/oauth", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/oauth/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/oauth/extension", + "urlContextRoot": "/oauthReturn", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui/configuration.idm.json 1`] = ` +{ + "idm": { + "ui/configuration": { + "_id": "ui/configuration", + "configuration": { + "defaultNotificationType": "info", + "forgotUsername": false, + "lang": "en", + "notificationTypes": { + "error": { + "iconPath": "images/notifications/error.png", + "name": "common.notification.types.error", + }, + "info": { + "iconPath": "images/notifications/info.png", + "name": "common.notification.types.info", + }, + "warning": { + "iconPath": "images/notifications/warning.png", + "name": "common.notification.types.warning", + }, + }, + "passwordReset": true, + "passwordResetLink": "", + "platformSettings": { + "adminOauthClient": "idmAdminClient", + "adminOauthClientScopes": "fr:idm:*", + "amUrl": "/am", + "loginUrl": "", + }, + "roles": { + "internal/role/openidm-admin": "ui-admin", + "internal/role/openidm-authorized": "ui-user", + "super-admins": "ui-admin", + "tenant-admins": "ui-admin", + }, + "selfRegistration": true, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui/dashboard.idm.json 1`] = ` +{ + "idm": { + "ui/dashboard": { + "_id": "ui/dashboard", + "adminDashboards": [ + { + "isDefault": true, + "name": "Quick Start", + "widgets": [ + { + "cards": [ + { + "href": "#resource/managed/alpha_user/list/", + "icon": "fa-user", + "name": "Manage Users", + }, + { + "href": "#resource/managed/alpha_role/list/", + "icon": "fa-check-square-o", + "name": "Manage Roles", + }, + { + "href": "#connectors/add/", + "icon": "fa-database", + "name": "Add Connector", + }, + { + "href": "#mapping/add/", + "icon": "fa-map-marker", + "name": "Create Mapping", + }, + { + "href": "#managed/add/", + "icon": "fa-tablet", + "name": "Add Device", + }, + { + "href": "#settings/", + "icon": "fa-user", + "name": "Configure System Preferences", + }, + ], + "size": "large", + "type": "quickStart", + }, + ], + }, + { + "isDefault": false, + "name": "System Monitoring", + "widgets": [ + { + "legendRange": { + "month": [ + 500, + 2500, + 5000, + ], + "week": [ + 10, + 30, + 90, + 270, + 810, + ], + "year": [ + 10000, + 40000, + 100000, + 250000, + ], + }, + "maxRange": "#24423c", + "minRange": "#b0d4cd", + "size": "large", + "type": "audit", + }, + { + "size": "large", + "type": "clusterStatus", + }, + { + "size": "large", + "type": "systemHealthFull", + }, + { + "barchart": "false", + "size": "large", + "type": "lastRecon", + }, + ], + }, + { + "isDefault": false, + "name": "Resource Report", + "widgets": [ + { + "selected": "activeUsers", + "size": "x-small", + "type": "counter", + }, + { + "selected": "rolesEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "activeConnectors", + "size": "x-small", + "type": "counter", + }, + { + "size": "large", + "type": "resourceList", + }, + ], + }, + { + "isDefault": false, + "name": "Business Report", + "widgets": [ + { + "graphType": "fa-pie-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "signIns", + "widgetTitle": "Sign-Ins", + }, + { + "graphType": "fa-bar-chart", + "size": "x-small", + "type": "passwordResets", + "widgetTitle": "Password Resets", + }, + { + "graphType": "fa-line-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "newRegistrations", + "widgetTitle": "New Registrations", + }, + { + "size": "x-small", + "timezone": { + "hours": "07", + "minutes": "00", + "negative": true, + }, + "type": "socialLogin", + }, + { + "selected": "socialEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "manualRegistrations", + "size": "x-small", + "type": "counter", + }, + ], + }, + ], + "dashboard": { + "widgets": [ + { + "size": "large", + "type": "Welcome", + }, + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui/profile.idm.json 1`] = ` +{ + "idm": { + "ui/profile": { + "_id": "ui/profile", + "tabs": [ + { + "name": "personalInfoTab", + "view": "org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab", + }, + { + "name": "signInAndSecurity", + "view": "org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab", + }, + { + "name": "preference", + "view": "org/forgerock/openidm/ui/user/profile/PreferencesTab", + }, + { + "name": "trustedDevice", + "view": "org/forgerock/openidm/ui/user/profile/TrustedDevicesTab", + }, + { + "name": "oauthApplication", + "view": "org/forgerock/openidm/ui/user/profile/OauthApplicationsTab", + }, + { + "name": "privacyAndConsent", + "view": "org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab", + }, + { + "name": "sharing", + "view": "org/forgerock/openidm/ui/user/profile/uma/SharingTab", + }, + { + "name": "auditHistory", + "view": "org/forgerock/openidm/ui/user/profile/uma/ActivityTab", + }, + { + "name": "accountControls", + "view": "org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab", + }, + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui/themeconfig.idm.json 1`] = ` +{ + "idm": { + "ui/themeconfig": { + "_id": "ui/themeconfig", + "icon": "favicon.ico", + "path": "", + "settings": { + "footer": { + "mailto": "info@pingidentity.com", + }, + "loginLogo": { + "alt": "Ping Identity", + "height": "120px", + "src": "images/login-logo-dark.png", + "title": "Ping Identity", + "width": "120px", + }, + "logo": { + "alt": "Ping Identity", + "src": "images/logo-horizontal-white.png", + "title": "Ping Identity", + }, + }, + "stylesheets": [ + "css/bootstrap-3.4.1-custom.css", + "css/structure.css", + "css/theme.css", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export and extract the scripts in idm: idmTestDir9/ui/themerealm.idm.json 1`] = ` +{ + "idm": { + "ui/themerealm": { + "_id": "ui/themerealm", + "realm": { + "alpha": [ + { + "_id": "abb4efed-ae70-4064-91a7-936be552d6fc", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#000000", + "buttonRounded": "0", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#000000", + "linkColor": "#000000", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", + "logoAltText": "Contrast", + "logoEnabled": true, + "logoHeight": "72", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileAltText": "Contrast", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "22", + "logoProfileHeight": "22", + "name": "Contrast", + "pageTitle": "#23282e", + "primaryColor": "#000000", + "primaryOffColor": "#000000", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#000000", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "72ef4fcb-aae2-4c78-a050-d0e373c6a175", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " + +", + "journeyFooterEnabled": true, + "journeyHeader": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#C60819", + "linkColor": "#EB0A1E", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg", + "logoAltText": "", + "logoEnabled": true, + "logoHeight": "40", + "logoProfile": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg", + "logoProfileAltText": "Highlander", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg", + "logoProfileCollapsedAltText": "Highlander", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "28", + "name": "Highlander", + "pageTitle": "#23282e", + "primaryColor": "#EB0A1E", + "primaryOffColor": "#C60819", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#EB0A1E", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "8e756273-9dbb-42dd-babe-52912336ea3d", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": false, + "linkActiveColor": "#49871E", + "linkColor": "#5AA625", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/robroy/logo-robroy-icon.svg", + "logoAltText": "", + "logoEnabled": true, + "logoHeight": "40", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", + "logoProfileAltText": "RobRoy", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "RobRoy", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "28", + "name": "Robroy", + "pageTitle": "#23282e", + "primaryColor": "#5AA625", + "primaryOffColor": "#49871E", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#5AA625", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "33b89c09-2a29-4e9b-9e2b-12fd7e1c7466", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#324054", + "backgroundImage": "", + "bodyText": "#23282e", + "buttonRounded": 5, + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": true, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#0c85cf", + "linkColor": "#109cf1", + "linkedTrees": [], + "logo": "", + "logoAltText": "", + "logoHeight": "40", + "logoProfile": "", + "logoProfileAltText": "", + "logoProfileCollapsed": "", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "40", + "logoProfileHeight": "40", + "name": "Starter Theme", + "pageTitle": "#23282e", + "primaryColor": "#324054", + "primaryOffColor": "#242E3C", + "profileBackgroundColor": "#f6f8fa", + "profileMenuHighlightColor": "#f3f5f8", + "profileMenuHoverColor": "#324054", + "profileMenuHoverTextColor": "#ffffff", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "8ee2e08a-db04-4a16-b3d9-6f52c9aee5cb", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "
+

Uptime & Performance Benchmarking Made Easy

+
+ +", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": true, + "linkActiveColor": "#007661", + "linkColor": "#009C80", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoAltText": "Zardoz Logo", + "logoEnabled": true, + "logoHeight": "47", + "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileAltText": "Zardaz Logo", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileCollapsedAltText": "Zardaz Logo", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "40", + "name": "Zardoz", + "pageTitle": "#23282e", + "primaryColor": "#009C80", + "primaryOffColor": "#007661", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#009C80", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + ], + "bravo": [ + { + "_id": "bf4828bd-6e24-41ba-8773-0a4a349399d3", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#000000", + "buttonRounded": "0", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#000000", + "linkColor": "#000000", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", + "logoAltText": "Contrast", + "logoEnabled": true, + "logoHeight": "72", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileAltText": "Contrast", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "22", + "logoProfileHeight": "22", + "name": "Contrast", + "pageTitle": "#23282e", + "primaryColor": "#000000", + "primaryOffColor": "#000000", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#000000", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "f2bdd040-2e46-4602-a0ab-24ed52103cdc", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " + +", + "journeyFooterEnabled": true, + "journeyHeader": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#C60819", + "linkColor": "#EB0A1E", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg", + "logoAltText": "", + "logoEnabled": true, + "logoHeight": "40", + "logoProfile": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg", + "logoProfileAltText": "Highlander", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg", + "logoProfileCollapsedAltText": "Highlander", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "28", + "name": "Highlander", + "pageTitle": "#23282e", + "primaryColor": "#EB0A1E", + "primaryOffColor": "#C60819", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#EB0A1E", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "62ac2a64-9db9-4f0a-a7e4-74f3d662bc42", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": false, + "linkActiveColor": "#49871E", + "linkColor": "#5AA625", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/robroy/logo-robroy-icon.svg", + "logoAltText": "", + "logoEnabled": true, + "logoHeight": "40", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", + "logoProfileAltText": "RobRoy", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "RobRoy", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "28", + "name": "Robroy", + "pageTitle": "#23282e", + "primaryColor": "#5AA625", + "primaryOffColor": "#49871E", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#5AA625", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "b7d8de5a-f788-4ac8-b80a-3220a5f977ec", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#324054", + "backgroundImage": "", + "bodyText": "#23282e", + "buttonRounded": 5, + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": true, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#0c85cf", + "linkColor": "#109cf1", + "linkedTrees": [], + "logo": "", + "logoAltText": "", + "logoHeight": "40", + "logoProfile": "", + "logoProfileAltText": "", + "logoProfileCollapsed": "", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "40", + "logoProfileHeight": "40", + "name": "Starter Theme", + "pageTitle": "#23282e", + "primaryColor": "#324054", + "primaryOffColor": "#242E3C", + "profileBackgroundColor": "#f6f8fa", + "profileMenuHighlightColor": "#f3f5f8", + "profileMenuHoverColor": "#324054", + "profileMenuHoverTextColor": "#ffffff", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "8dfd6c93-972a-4786-950d-79904f66af4b", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "
+

Uptime & Performance Benchmarking Made Easy

+
+ +", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": true, + "linkActiveColor": "#007661", + "linkColor": "#009C80", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoAltText": "Zardoz Logo", + "logoEnabled": true, + "logoHeight": "47", + "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileAltText": "Zardaz Logo", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileCollapsedAltText": "Zardaz Logo", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "40", + "name": "Zardoz", + "pageTitle": "#23282e", + "primaryColor": "#009C80", + "primaryOffColor": "#007661", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#009C80", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + ], + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -Ni sync": should export the idm config entity with idm id "sync" separately 1`] = `0`; + +exports[`frodo idm export "frodo idm export -Ni sync": should export the idm config entity with idm id "sync" separately 2`] = `""`; + +exports[`frodo idm export "frodo idm export -Ni sync": should export the idm config entity with idm id "sync" separately: sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + { + "_id": "sync/managedBravo_user_managedBravo_user", + "consentRequired": false, + "displayName": "managedBravo_user_managedBravo_user", + "icon": null, + "name": "managedBravo_user_managedBravo_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [], + "target": "managed/bravo_user", + }, + { + "_id": "sync/managedAlpha_application_managedBravo_application", + "consentRequired": true, + "displayName": "Test Application Mapping", + "icon": null, + "name": "managedAlpha_application_managedBravo_application", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "source": "authoritative", + "target": "_id", + }, + ], + "source": "managed/alpha_application", + "sourceQuery": { + "_queryFilter": "(eq "" or eq "")", + }, + "syncAfter": [ + "managedBravo_user_managedBravo_user", + ], + "target": "managed/bravo_application", + "targetQuery": { + "_queryFilter": "!(eq "")", + }, + }, + { + "_id": "sync/managedAlpha_user_managedBravo_user", + "consentRequired": true, + "displayName": "Test Mapping for Frodo", + "icon": null, + "name": "managedAlpha_user_managedBravo_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "condition": { + "globals": {}, + "source": "console.log("Hello World!");", + "type": "text/javascript", + }, + "default": [ + "Default value string", + ], + "source": "accountStatus", + "target": "applications", + "transform": { + "globals": {}, + "source": "console.log("hello");", + "type": "text/javascript", + }, + }, + ], + "source": "managed/alpha_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + ], + "target": "managed/bravo_user", + }, + { + "_id": "sync/managedBravo_user_managedAlpha_user", + "consentRequired": false, + "displayName": "Frodo test mapping", + "icon": null, + "name": "managedBravo_user_managedAlpha_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + "managedAlpha_user_managedBravo_user", + ], + "target": "managed/alpha_user", + }, + { + "_id": "sync/AlphaUser2GoogleApps", + "consentRequired": false, + "correlationQuery": [ + { + "expressionTree": { + "all": [ + "__NAME__", + ], + }, + "file": "ui/correlateTreeToQueryFilter.js", + "linkQualifier": "default", + "mapping": "AlphaUser2GoogleApps", + "type": "text/javascript", + }, + ], + "displayName": "AlphaUser2GoogleApps", + "enableSync": { + "$bool": "&{esv.gac.enable.mapping}", + }, + "icon": null, + "name": "AlphaUser2GoogleApps", + "onCreate": { + "globals": {}, + "source": "target.orgUnitPath = "/NewAccounts";", + "type": "text/javascript", + }, + "onUpdate": { + "globals": {}, + "source": "//testing1234 +target.givenName = oldTarget.givenName; +target.familyName = oldTarget.familyName; +target.__NAME__ = oldTarget.__NAME__;", + "type": "text/javascript", + }, + "policies": [ + { + "action": "EXCEPTION", + "situation": "AMBIGUOUS", + }, + { + "action": "UNLINK", + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "// Timing Constants +var ATTEMPT = 6; // Number of attempts to find the Google user. +var SLEEP_TIME = 500; // Milliseconds between retries. +var SYSTEM_ENDPOINT = "system/GoogleApps/__ACCOUNT__"; +var MAPPING_NAME = "AlphaUser2GoogleApps"; +var GOOGLE_DOMAIN = identityServer.getProperty("esv.gac.domain"); +var googleEmail = source.userName + "@" + GOOGLE_DOMAIN; +var frUserGUID = source._id; +var resultingAction = "ASYNC"; + +// Get the Google GUID +var linkQueryParams = {'_queryFilter': 'firstId eq "' + frUserGUID + '" and linkType eq "' + MAPPING_NAME + '"'}; +var linkResults = openidm.query("repo/link/", linkQueryParams, null); +var googleGUID; + +if (linkResults.resultCount === 1) { + googleGUID = linkResults.result[0].secondId; +} + +var queryResults; // Resulting query from looking for the Google user. +var params = {'_queryFilter': '__UID__ eq "' + googleGUID + '"'}; + +for (var i = 1; i <= ATTEMPT; i++) { + queryResults = openidm.query(SYSTEM_ENDPOINT, params); + if (queryResults.result && queryResults.result.length > 0) { + logger.info("idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in " + i + " attempts. Query result: " + JSON.stringify(queryResults)); + resultingAction = "UPDATE"; + break; + } + java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again. +} + +if (!queryResults.result || queryResults.resultCount === 0) { + logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); + resultingAction = "UNLINK"; +} +resultingAction; +", + "type": "text/javascript", + }, + "situation": "MISSING", + }, + { + "action": "EXCEPTION", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "IGNORE", + "situation": "UNQUALIFIED", + }, + { + "action": "IGNORE", + "situation": "UNASSIGNED", + }, + { + "action": "UNLINK", + "situation": "LINK_ONLY", + }, + { + "action": "IGNORE", + "situation": "TARGET_IGNORED", + }, + { + "action": "IGNORE", + "situation": "SOURCE_IGNORED", + }, + { + "action": "IGNORE", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "LINK", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "condition": { + "globals": {}, + "source": "object.custom_password_encrypted != null", + "type": "text/javascript", + }, + "source": "custom_password_encrypted", + "target": "__PASSWORD__", + "transform": { + "globals": {}, + "source": "openidm.decrypt(source);", + "type": "text/javascript", + }, + }, + { + "source": "cn", + "target": "__NAME__", + "transform": { + "globals": {}, + "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", + "type": "text/javascript", + }, + }, + { + "source": "givenName", + "target": "givenName", + }, + { + "source": "", + "target": "familyName", + "transform": { + "globals": {}, + "source": "if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) { + source.sn + " (Student)" +} else { + source.sn +}", + "type": "text/javascript", + }, + }, + ], + "queuedSync": { + "enabled": true, + "maxQueueSize": 20000, + "maxRetries": 5, + "pageSize": 100, + "pollingInterval": 1000, + "postRetryAction": "logged-ignore", + "retryDelay": 1000, + }, + "source": "managed/alpha_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + "managedAlpha_user_managedBravo_user", + "managedBravo_user_managedAlpha_user", + ], + "target": "system/GoogleApps/__ACCOUNT__", + "validSource": { + "globals": {}, + "source": "var isGoogleEligible = true; +//var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + " cn: " + source.cn + ") -"; +var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + ") -"; + +//Get Applicable userTypes (no Parent accounts) +if (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) { + isGoogleEligible = false; + logMsg = logMsg + " Account type not eligible."; +} + +//Make sure the account has a valid encrypted password. +if (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) { + isGoogleEligible = false; + logMsg = logMsg + " No encrypted password yet."; +} + +//Check that CN exists and has no space. +if (source.cn && source.cn.includes(' ')) { + isGoogleEligible = false; + logMsg = logMsg + " CN with a space is not allowed."; +} + +if (!isGoogleEligible) { + logMsg = logMsg + " Not sent to Google." + logger.info(logMsg); +} + +if (isGoogleEligible) { + logMsg = logMsg + " Sent to Google." + logger.info(logMsg); +} + +isGoogleEligible; +", + "type": "text/javascript", + }, + }, + ], + }, + }, +} +`; + +exports[`frodo idm export "frodo idm export -a": should export all idm config entities to a single file 1`] = `1`; + +exports[`frodo idm export "frodo idm export -a": should export all idm config entities to a single file 2`] = `""`; + +exports[`frodo idm export "frodo idm export -a": should export all idm config entities to a single file: all.idm.json 1`] = ` +{ + "idm": { + "access": { + "_id": "access", + "configs": [ + { + "actions": "*", + "methods": "read", + "pattern": "info/*", + "roles": "*", + }, + { + "actions": "login,logout", + "methods": "read,action", + "pattern": "authentication", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/fidc/*", + "roles": "*", + }, + { + "actions": "*", + "methods": "*", + "pattern": "config/fidc/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themeconfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themerealm", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/uilocale/*", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/fieldPolicy/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "info/uiconfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/dashboard", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "query", + "pattern": "info/features", + "roles": "*", + }, + { + "actions": "listPrivileges", + "methods": "action", + "pattern": "privilege", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "privilege/*", + "roles": "*", + }, + { + "actions": "validate", + "methods": "action", + "pattern": "util/validateQueryFilter", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled('kba')", + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "excludePatterns": "repo,repo/*", + "methods": "*", + "pattern": "*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "", + "methods": "create,read,update,delete,patch,query", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "methods": "script", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "test,testConfig,createconfiguration,liveSync,authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "command", + "customAuthz": "request.additionalParameters.commandId === 'delete-mapping-links'", + "methods": "action", + "pattern": "repo/link", + "roles": "internal/role/openidm-admin", + }, + { + "methods": "create,read,query,patch", + "pattern": "managed/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read,query", + "pattern": "internal/role/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "create,read,action,update", + "pattern": "profile/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/terms", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "identityProviders", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "sendTemplate", + "methods": "action", + "pattern": "external/email", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "bind,unbind", + "customAuthz": "ownDataOnly()", + "methods": "read,action,delete", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('user', [])", + "methods": "update,patch,action", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "(request.resourcePath === 'selfservice/user/' + context.security.authorization.id) && onlyEditableManagedObjectProperties('user', [])", + "methods": "patch,action", + "pattern": "selfservice/user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "isQueryOneOf({'managed/user': ['for-userName']}) && restrictPatchToFields(['password'])", + "methods": "patch,action", + "pattern": "managed/user", + "roles": "internal/role/openidm-cert", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_meta', false)", + "methods": "read", + "pattern": "internal/usermeta/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_notifications', true)", + "methods": "read,delete", + "pattern": "internal/notification/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "", + "customAuthz": "ownDataOnly()", + "methods": "read,delete", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('alpha_user', [])", + "methods": "update,patch,action", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "", + "customAuthz": "ownDataOnly()", + "methods": "read,delete", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('bravo_user', [])", + "methods": "update,patch,action", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "deleteNotificationsForTarget", + "customAuthz": "request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)", + "methods": "action", + "pattern": "notification", + "roles": "internal/role/openidm-authorized", + }, + ], + }, + "alphaOrgPrivileges": { + "_id": "alphaOrgPrivileges", + "privileges": [ + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", "readOnly": true, }, { @@ -41322,174 +67828,2703 @@ a{ "enabled": true, "type": "character-set", }, - ], - }, - "internal": { - "_id": "internal", - "objects": [ + ], + }, + "internal": { + "_id": "internal", + "objects": [ + { + "name": "role", + "properties": { + "authzMembers": { + "items": { + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + }, + }, + }, + }, + ], + }, + "managed": { + "_id": "managed", + "objects": [ + { + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "meta": { + "property": "_meta", + "resourceCollection": "managed/alpha_usermeta", + "trackedProperties": [ + "createDate", + "lastChanged", + ], + }, + "name": "alpha_user", + "notifications": {}, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "cn", + "sn", + "mail", + "profileImage", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "groups", + "applications", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "effectiveGroups", + "effectiveApplications", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "ownerOfApp", + "frIndexedString1", + "frIndexedString2", + "frIndexedString3", + "frIndexedString4", + "frIndexedString5", + "frUnindexedString1", + "frUnindexedString2", + "frUnindexedString3", + "frUnindexedString4", + "frUnindexedString5", + "frIndexedMultivalued1", + "frIndexedMultivalued2", + "frIndexedMultivalued3", + "frIndexedMultivalued4", + "frIndexedMultivalued5", + "frUnindexedMultivalued1", + "frUnindexedMultivalued2", + "frUnindexedMultivalued3", + "frUnindexedMultivalued4", + "frUnindexedMultivalued5", + "frIndexedDate1", + "frIndexedDate2", + "frIndexedDate3", + "frIndexedDate4", + "frIndexedDate5", + "frUnindexedDate1", + "frUnindexedDate2", + "frUnindexedDate3", + "frUnindexedDate4", + "frUnindexedDate5", + "frIndexedInteger1", + "frIndexedInteger2", + "frIndexedInteger3", + "frIndexedInteger4", + "frIndexedInteger5", + "frUnindexedInteger1", + "frUnindexedInteger2", + "frUnindexedInteger3", + "frUnindexedInteger4", + "frUnindexedInteger5", + "assignedDashboard", + ], + "properties": { + "_id": { + "description": "User ID", + "isPersonal": false, + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "searchable": true, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "aliasList": { + "description": "List of identity aliases used primarily to record social IdP subjects for this user", + "isVirtual": false, + "items": { + "title": "User Alias Names Items", + "type": "string", + }, + "returnByDefault": false, + "searchable": false, + "title": "User Alias Names List", + "type": "array", + "userEditable": true, + "viewable": false, + }, + "applications": { + "description": "Applications", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Groups Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "assignedDashboard": { + "description": "List of items to click on for this user", + "isVirtual": true, + "items": { + "title": "Assigned Dashboard Items", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], + }, + "searchable": false, + "title": "Assigned Dashboard", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/alpha_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "authzRoles": { + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Authorization Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "city": { + "description": "City", + "isPersonal": false, + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "cn": { + "default": "{{givenName}} {{sn}}", + "description": "Common Name", + "isPersonal": true, + "scope": "private", + "searchable": false, + "title": "Common Name", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "consentedMappings": { + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "items": { + "order": [ + "mapping", + "consentDate", + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "searchable": true, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mapping": { + "description": "Mapping", + "searchable": true, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "mapping", + "consentDate", + ], + "title": "Consented Mappings Item", + "type": "object", + }, + "title": "Consented Mappings Items", + "type": "array", + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "country": { + "description": "Country", + "isPersonal": false, + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "description": { + "description": "Description", + "isPersonal": false, + "searchable": true, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "effectiveApplications": { + "description": "Effective Applications", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assigned Application Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Applications", + "type": "array", + "viewable": false, + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveGroups": { + "description": "Effective Groups", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Groups Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "groups", + ], + }, + "returnByDefault": true, + "title": "Effective Groups", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveRoles": { + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles", + ], + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "frIndexedDate1": { + "description": "Generic Indexed Date 1", + "isPersonal": false, + "title": "Generic Indexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate2": { + "description": "Generic Indexed Date 2", + "isPersonal": false, + "title": "Generic Indexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate3": { + "description": "Generic Indexed Date 3", + "isPersonal": false, + "title": "Generic Indexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate4": { + "description": "Generic Indexed Date 4", + "isPersonal": false, + "title": "Generic Indexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate5": { + "description": "Generic Indexed Date 5", + "isPersonal": false, + "title": "Generic Indexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger1": { + "description": "Generic Indexed Integer 1", + "isPersonal": false, + "title": "Generic Indexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger2": { + "description": "Generic Indexed Integer 2", + "isPersonal": false, + "title": "Generic Indexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger3": { + "description": "Generic Indexed Integer 3", + "isPersonal": false, + "title": "Generic Indexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger4": { + "description": "Generic Indexed Integer 4", + "isPersonal": false, + "title": "Generic Indexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger5": { + "description": "Generic Indexed Integer 5", + "isPersonal": false, + "title": "Generic Indexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued1": { + "description": "Generic Indexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued2": { + "description": "Generic Indexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued3": { + "description": "Generic Indexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued4": { + "description": "Generic Indexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued5": { + "description": "Generic Indexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString1": { + "description": "Generic Indexed String 1", + "isPersonal": false, + "title": "Generic Indexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString2": { + "description": "Generic Indexed String 2", + "isPersonal": false, + "title": "Generic Indexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString3": { + "description": "Generic Indexed String 3", + "isPersonal": false, + "title": "Generic Indexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString4": { + "description": "Generic Indexed String 4", + "isPersonal": false, + "title": "Generic Indexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString5": { + "description": "Generic Indexed String 5", + "isPersonal": false, + "title": "Generic Indexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate1": { + "description": "Generic Unindexed Date 1", + "isPersonal": false, + "title": "Generic Unindexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate2": { + "description": "Generic Unindexed Date 2", + "isPersonal": false, + "title": "Generic Unindexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate3": { + "description": "Generic Unindexed Date 3", + "isPersonal": false, + "title": "Generic Unindexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate4": { + "description": "Generic Unindexed Date 4", + "isPersonal": false, + "title": "Generic Unindexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate5": { + "description": "Generic Unindexed Date 5", + "isPersonal": false, + "title": "Generic Unindexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger1": { + "description": "Generic Unindexed Integer 1", + "isPersonal": false, + "title": "Generic Unindexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger2": { + "description": "Generic Unindexed Integer 2", + "isPersonal": false, + "title": "Generic Unindexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger3": { + "description": "Generic Unindexed Integer 3", + "isPersonal": false, + "title": "Generic Unindexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger4": { + "description": "Generic Unindexed Integer 4", + "isPersonal": false, + "title": "Generic Unindexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger5": { + "description": "Generic Unindexed Integer 5", + "isPersonal": false, + "title": "Generic Unindexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued1": { + "description": "Generic Unindexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued2": { + "description": "Generic Unindexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued3": { + "description": "Generic Unindexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued4": { + "description": "Generic Unindexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued5": { + "description": "Generic Unindexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString1": { + "description": "Generic Unindexed String 1", + "isPersonal": false, + "title": "Generic Unindexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString2": { + "description": "Generic Unindexed String 2", + "isPersonal": false, + "title": "Generic Unindexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString3": { + "description": "Generic Unindexed String 3", + "isPersonal": false, + "title": "Generic Unindexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString4": { + "description": "Generic Unindexed String 4", + "isPersonal": false, + "title": "Generic Unindexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString5": { + "description": "Generic Unindexed String 5", + "isPersonal": false, + "title": "Generic Unindexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "givenName": { + "description": "First Name", + "isPersonal": true, + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "groups": { + "description": "Groups", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Groups Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Group", + "path": "managed/alpha_group", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": false, + "returnByDefault": false, + "title": "Groups", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId", + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string", + }, + "customQuestion": { + "description": "Custom question", + "type": "string", + }, + "questionId": { + "description": "Question ID", + "type": "string", + }, + }, + "required": [], + "title": "KBA Info Items", + "type": "object", + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "lastSync": { + "description": "Last Sync timestamp", + "isPersonal": false, + "order": [ + "effectiveAssignments", + "timestamp", + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "title": "Effective Assignments", + "type": "array", + }, + "timestamp": { + "description": "Timestamp", + "type": "string", + }, + }, + "required": [], + "scope": "private", + "searchable": false, + "title": "Last Sync timestamp", + "type": "object", + "usageDescription": "", + "viewable": false, + }, + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format", + }, + ], + "searchable": true, + "title": "Email Address", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Manager _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "memberOfOrg": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations to which I Belong", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "memberOfOrgIDs": { + "isVirtual": true, + "items": { + "title": "org identifiers", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "memberOfOrg", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "ownerOfApp": { + "items": { + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Applications I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "password": { + "description": "Password", + "isPersonal": false, + "isProtected": true, + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing", + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean", + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean", + }, + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "profileImage": { + "description": "Profile Image", + "isPersonal": true, + "searchable": true, + "title": "Profile Image", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "reports": { + "description": "Direct Reports", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Direct Reports Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/alpha_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Provisioning Roles Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Provisioning Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "sn": { + "description": "Last Name", + "isPersonal": true, + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "userName": { + "description": "Username", + "isPersonal": true, + "minLength": 1, + "policies": [ + { + "policyId": "valid-username", + }, + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "userName", + "givenName", + "sn", + "mail", + ], + "title": "Alpha realm - User", + "type": "object", + "viewable": true, + }, + }, { - "name": "role", - "properties": { - "authzMembers": { - "items": { - "resourceCollection": [ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "meta": { + "property": "_meta", + "resourceCollection": "managed/bravo_usermeta", + "trackedProperties": [ + "createDate", + "lastChanged", + ], + }, + "name": "bravo_user", + "notifications": {}, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "cn", + "sn", + "mail", + "profileImage", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "groups", + "applications", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "effectiveGroups", + "effectiveApplications", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "ownerOfApp", + "frIndexedString1", + "frIndexedString2", + "frIndexedString3", + "frIndexedString4", + "frIndexedString5", + "frUnindexedString1", + "frUnindexedString2", + "frUnindexedString3", + "frUnindexedString4", + "frUnindexedString5", + "frIndexedMultivalued1", + "frIndexedMultivalued2", + "frIndexedMultivalued3", + "frIndexedMultivalued4", + "frIndexedMultivalued5", + "frUnindexedMultivalued1", + "frUnindexedMultivalued2", + "frUnindexedMultivalued3", + "frUnindexedMultivalued4", + "frUnindexedMultivalued5", + "frIndexedDate1", + "frIndexedDate2", + "frIndexedDate3", + "frIndexedDate4", + "frIndexedDate5", + "frUnindexedDate1", + "frUnindexedDate2", + "frUnindexedDate3", + "frUnindexedDate4", + "frUnindexedDate5", + "frIndexedInteger1", + "frIndexedInteger2", + "frIndexedInteger3", + "frIndexedInteger4", + "frIndexedInteger5", + "frUnindexedInteger1", + "frUnindexedInteger2", + "frUnindexedInteger3", + "frUnindexedInteger4", + "frUnindexedInteger5", + "assignedDashboard", + ], + "properties": { + "_id": { + "description": "User ID", + "isPersonal": false, + "policies": [ { - "conditionalAssociation": true, - "label": "User", - "notify": true, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", + "params": { + "forbiddenChars": [ + "/", ], - "queryFilter": "true", + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "searchable": true, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "aliasList": { + "description": "List of identity aliases used primarily to record social IdP subjects for this user", + "isVirtual": false, + "items": { + "title": "User Alias Names Items", + "type": "string", + }, + "returnByDefault": false, + "searchable": false, + "title": "User Alias Names List", + "type": "array", + "userEditable": true, + "viewable": false, + }, + "applications": { + "description": "Applications", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Groups Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": false, + }, + "assignedDashboard": { + "description": "List of items to click on for this user", + "isVirtual": true, + "items": { + "title": "Assigned Dashboard Items", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], + }, + "searchable": false, + "title": "Assigned Dashboard", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/bravo_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "authzRoles": { + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Authorization Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "city": { + "description": "City", + "isPersonal": false, + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "cn": { + "default": "{{givenName}} {{sn}}", + "description": "Common Name", + "isPersonal": true, + "scope": "private", + "searchable": false, + "title": "Common Name", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "consentedMappings": { + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "items": { + "order": [ + "mapping", + "consentDate", + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "searchable": true, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mapping": { + "description": "Mapping", + "searchable": true, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "mapping", + "consentDate", + ], + "title": "Consented Mappings Item", + "type": "object", + }, + "title": "Consented Mappings Items", + "type": "array", + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "country": { + "description": "Country", + "isPersonal": false, + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "description": { + "description": "Description", + "isPersonal": false, + "searchable": true, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "effectiveApplications": { + "description": "Effective Applications", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assigned Application Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Applications", + "type": "array", + "viewable": false, + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveGroups": { + "description": "Effective Groups", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Groups Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "groups", + ], + }, + "returnByDefault": true, + "title": "Effective Groups", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "effectiveRoles": { + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles", + ], + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false, + }, + "frIndexedDate1": { + "description": "Generic Indexed Date 1", + "isPersonal": false, + "title": "Generic Indexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate2": { + "description": "Generic Indexed Date 2", + "isPersonal": false, + "title": "Generic Indexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate3": { + "description": "Generic Indexed Date 3", + "isPersonal": false, + "title": "Generic Indexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate4": { + "description": "Generic Indexed Date 4", + "isPersonal": false, + "title": "Generic Indexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedDate5": { + "description": "Generic Indexed Date 5", + "isPersonal": false, + "title": "Generic Indexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger1": { + "description": "Generic Indexed Integer 1", + "isPersonal": false, + "title": "Generic Indexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger2": { + "description": "Generic Indexed Integer 2", + "isPersonal": false, + "title": "Generic Indexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger3": { + "description": "Generic Indexed Integer 3", + "isPersonal": false, + "title": "Generic Indexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger4": { + "description": "Generic Indexed Integer 4", + "isPersonal": false, + "title": "Generic Indexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedInteger5": { + "description": "Generic Indexed Integer 5", + "isPersonal": false, + "title": "Generic Indexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued1": { + "description": "Generic Indexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued2": { + "description": "Generic Indexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued3": { + "description": "Generic Indexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued4": { + "description": "Generic Indexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedMultivalued5": { + "description": "Generic Indexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString1": { + "description": "Generic Indexed String 1", + "isPersonal": false, + "title": "Generic Indexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString2": { + "description": "Generic Indexed String 2", + "isPersonal": false, + "title": "Generic Indexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString3": { + "description": "Generic Indexed String 3", + "isPersonal": false, + "title": "Generic Indexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString4": { + "description": "Generic Indexed String 4", + "isPersonal": false, + "title": "Generic Indexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frIndexedString5": { + "description": "Generic Indexed String 5", + "isPersonal": false, + "title": "Generic Indexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate1": { + "description": "Generic Unindexed Date 1", + "isPersonal": false, + "title": "Generic Unindexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate2": { + "description": "Generic Unindexed Date 2", + "isPersonal": false, + "title": "Generic Unindexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate3": { + "description": "Generic Unindexed Date 3", + "isPersonal": false, + "title": "Generic Unindexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate4": { + "description": "Generic Unindexed Date 4", + "isPersonal": false, + "title": "Generic Unindexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedDate5": { + "description": "Generic Unindexed Date 5", + "isPersonal": false, + "title": "Generic Unindexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger1": { + "description": "Generic Unindexed Integer 1", + "isPersonal": false, + "title": "Generic Unindexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger2": { + "description": "Generic Unindexed Integer 2", + "isPersonal": false, + "title": "Generic Unindexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger3": { + "description": "Generic Unindexed Integer 3", + "isPersonal": false, + "title": "Generic Unindexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger4": { + "description": "Generic Unindexed Integer 4", + "isPersonal": false, + "title": "Generic Unindexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedInteger5": { + "description": "Generic Unindexed Integer 5", + "isPersonal": false, + "title": "Generic Unindexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued1": { + "description": "Generic Unindexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued2": { + "description": "Generic Unindexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued3": { + "description": "Generic Unindexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued4": { + "description": "Generic Unindexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued5": { + "description": "Generic Unindexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString1": { + "description": "Generic Unindexed String 1", + "isPersonal": false, + "title": "Generic Unindexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString2": { + "description": "Generic Unindexed String 2", + "isPersonal": false, + "title": "Generic Unindexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString3": { + "description": "Generic Unindexed String 3", + "isPersonal": false, + "title": "Generic Unindexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString4": { + "description": "Generic Unindexed String 4", + "isPersonal": false, + "title": "Generic Unindexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedString5": { + "description": "Generic Unindexed String 5", + "isPersonal": false, + "title": "Generic Unindexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "givenName": { + "description": "First Name", + "isPersonal": true, + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "groups": { + "description": "Groups", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Groups Items _refProperties", + "type": "object", }, }, - ], + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Group", + "path": "managed/bravo_group", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": false, + "returnByDefault": false, + "title": "Groups", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, - }, - }, - }, - ], - }, - "managed": { - "_id": "managed", - "objects": [ - { - "lastSync": { - "effectiveAssignmentsProperty": "effectiveAssignments", - "lastSyncProperty": "lastSync", - }, - "meta": { - "property": "_meta", - "resourceCollection": "managed/alpha_usermeta", - "trackedProperties": [ - "createDate", - "lastChanged", - ], - }, - "name": "alpha_user", - "notifications": {}, - "schema": { - "$schema": "http://json-schema.org/draft-03/schema", - "icon": "fa-user", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", - "mat-icon": "people", - "order": [ - "_id", - "userName", - "password", - "givenName", - "cn", - "sn", - "mail", - "profileImage", - "description", - "accountStatus", - "telephoneNumber", - "postalAddress", - "city", - "postalCode", - "country", - "stateProvince", - "roles", - "assignments", - "groups", - "applications", - "manager", - "authzRoles", - "reports", - "effectiveRoles", - "effectiveAssignments", - "effectiveGroups", - "effectiveApplications", - "lastSync", - "kbaInfo", - "preferences", - "consentedMappings", - "ownerOfOrg", - "adminOfOrg", - "memberOfOrg", - "memberOfOrgIDs", - "ownerOfApp", - "frIndexedString1", - "frIndexedString2", - "frIndexedString3", - "frIndexedString4", - "frIndexedString5", - "frUnindexedString1", - "frUnindexedString2", - "frUnindexedString3", - "frUnindexedString4", - "frUnindexedString5", - "frIndexedMultivalued1", - "frIndexedMultivalued2", - "frIndexedMultivalued3", - "frIndexedMultivalued4", - "frIndexedMultivalued5", - "frUnindexedMultivalued1", - "frUnindexedMultivalued2", - "frUnindexedMultivalued3", - "frUnindexedMultivalued4", - "frUnindexedMultivalued5", - "frIndexedDate1", - "frIndexedDate2", - "frIndexedDate3", - "frIndexedDate4", - "frIndexedDate5", - "frUnindexedDate1", - "frUnindexedDate2", - "frUnindexedDate3", - "frUnindexedDate4", - "frUnindexedDate5", - "frIndexedInteger1", - "frIndexedInteger2", - "frIndexedInteger3", - "frIndexedInteger4", - "frIndexedInteger5", - "frUnindexedInteger1", - "frUnindexedInteger2", - "frUnindexedInteger3", - "frUnindexedInteger4", - "frUnindexedInteger5", - "assignedDashboard", - ], - "properties": { - "_id": { - "description": "User ID", + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId", + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string", + }, + "customQuestion": { + "description": "Custom question", + "type": "string", + }, + "questionId": { + "description": "Question ID", + "type": "string", + }, + }, + "required": [], + "title": "KBA Info Items", + "type": "object", + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "lastSync": { + "description": "Last Sync timestamp", "isPersonal": false, - "policies": [ - { - "params": { - "forbiddenChars": [ - "/", - ], + "order": [ + "effectiveAssignments", + "timestamp", + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object", }, - "policyId": "cannot-contain-characters", + "title": "Effective Assignments", + "type": "array", }, - ], + "timestamp": { + "description": "Timestamp", + "type": "string", + }, + }, + "required": [], + "scope": "private", "searchable": false, - "type": "string", + "title": "Last Sync timestamp", + "type": "object", "usageDescription": "", - "userEditable": false, "viewable": false, }, - "accountStatus": { - "default": "active", - "description": "Status", - "isPersonal": false, + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format", + }, + ], "searchable": true, - "title": "Status", + "title": "Email Address", "type": "string", "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Manager _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", "userEditable": false, + "validate": true, "viewable": true, }, - "adminOfOrg": { + "memberOfOrg": { "items": { - "notifySelf": false, + "notifySelf": true, "properties": { "_ref": { "type": "string", @@ -41508,8 +70543,8 @@ a{ "resourceCollection": [ { "label": "Organization", - "notify": true, - "path": "managed/alpha_organization", + "notify": false, + "path": "managed/bravo_organization", "query": { "fields": [ "name", @@ -41519,7 +70554,7 @@ a{ }, }, ], - "reversePropertyName": "admins", + "reversePropertyName": "members", "reverseRelationship": true, "type": "relationship", "validate": true, @@ -41527,32 +70562,192 @@ a{ "policies": [], "returnByDefault": false, "searchable": false, - "title": "Organizations I Administer", + "title": "Organizations to which I Belong", "type": "array", "userEditable": false, "viewable": true, }, - "aliasList": { - "description": "List of identity aliases used primarily to record social IdP subjects for this user", - "isVirtual": false, + "memberOfOrgIDs": { + "isVirtual": true, "items": { - "title": "User Alias Names Items", + "title": "org identifiers", "type": "string", }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "memberOfOrg", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "ownerOfApp": { + "items": { + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, "returnByDefault": false, "searchable": false, - "title": "User Alias Names List", + "title": "Applications I Own", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", "type": "array", + "userEditable": false, + "viewable": true, + }, + "password": { + "description": "Password", + "isPersonal": false, + "isProtected": true, + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", "userEditable": true, "viewable": false, }, - "applications": { - "description": "Applications", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications", + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing", + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean", + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean", + }, + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "profileImage": { + "description": "Profile Image", + "isPersonal": true, + "searchable": true, + "title": "Profile Image", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, + }, + "reports": { + "description": "Direct Reports", "isPersonal": false, "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items", - "notifySelf": true, + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", "properties": { "_ref": { "description": "References a relationship from a managed object", @@ -41566,72 +70761,249 @@ a{ "type": "string", }, }, - "title": "Groups Items _refProperties", + "title": "Direct Reports Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "label": "Application", - "path": "managed/alpha_application", + "label": "User", + "path": "managed/bravo_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", - "sortKeys": [ + }, + }, + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, + }, + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/bravo_role", + "query": { + "fields": [ "name", ], + "queryFilter": "true", }, }, ], "reversePropertyName": "members", "reverseRelationship": true, - "title": "Groups Items", + "title": "Provisioning Roles Items", "type": "relationship", "validate": true, }, + "relationshipGrantTemporalConstraintsEnforced": true, "returnByDefault": false, - "title": "Applications", + "title": "Provisioning Roles", "type": "array", "usageDescription": "", "userEditable": false, + "viewable": true, + }, + "sn": { + "description": "Last Name", + "isPersonal": true, + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "userName": { + "description": "Username", + "isPersonal": true, + "minLength": 1, + "policies": [ + { + "policyId": "valid-username", + }, + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "userName", + "givenName", + "sn", + "mail", + ], + "title": "Bravo realm - User", + "type": "object", + "viewable": true, + }, + }, + { + "name": "alpha_role", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "", + "icon": "fa-check-square-o", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "applications", + "condition", + "temporalConstraints", + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", "viewable": false, }, - "assignedDashboard": { - "description": "List of items to click on for this user", - "isVirtual": true, + "applications": { + "description": "Role Applications", "items": { - "title": "Assigned Dashboard Items", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "name", - ], - "referencedRelationshipFields": [ - [ - "roles", - "applications", - ], - [ - "applications", - ], + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Application Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, ], - }, - "searchable": false, - "title": "Assigned Dashboard", + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Application Items", + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "members", + ], + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Applications", "type": "array", - "userEditable": false, - "viewable": true, + "viewable": false, }, "assignments": { - "description": "Assignments", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", - "isPersonal": false, + "description": "Managed Assignments", "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", "notifySelf": true, "properties": { "_ref": { @@ -41641,23 +71013,17 @@ a{ "_refProperties": { "description": "Supports metadata within the relationship", "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, "_id": { "description": "_refProperties object ID", "type": "string", }, }, - "title": "Provisioning Roles Items _refProperties", + "title": "Managed Assignments Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "conditionalAssociationField": "condition", "label": "Assignment", "path": "managed/alpha_assignment", "query": { @@ -41668,25 +71034,39 @@ a{ }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "roles", "reverseRelationship": true, - "title": "Assignments Items", + "title": "Managed Assignments Items", "type": "relationship", "validate": true, }, + "notifyRelationships": [ + "members", + ], "returnByDefault": false, - "title": "Assignments", + "title": "Managed Assignments", "type": "array", - "usageDescription": "", - "userEditable": false, "viewable": true, }, - "authzRoles": { - "description": "Authorization Roles", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", - "isPersonal": false, + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "members": { + "description": "Role Members", "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", "properties": { "_ref": { "description": "References a relationship from a managed object", @@ -41695,626 +71075,686 @@ a{ "_refProperties": { "description": "Supports metadata within the relationship", "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, "_id": { "description": "_refProperties object ID", "type": "string", }, }, - "title": "Authorization Roles Items _refProperties", + "title": "Role Members Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "conditionalAssociationField": "condition", - "label": "Internal Role", - "path": "internal/role", + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", }, }, ], - "reversePropertyName": "authzMembers", + "reversePropertyName": "roles", "reverseRelationship": true, - "title": "Authorization Roles Items", + "title": "Role Members Items", "type": "relationship", "validate": true, }, + "relationshipGrantTemporalConstraintsEnforced": true, "returnByDefault": false, - "title": "Authorization Roles", + "title": "Role Members", "type": "array", - "usageDescription": "", - "userEditable": false, - "viewable": true, - }, - "city": { - "description": "City", - "isPersonal": false, - "title": "City", - "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "cn": { - "default": "{{givenName}} {{sn}}", - "description": "Common Name", - "isPersonal": true, - "scope": "private", - "searchable": false, - "title": "Common Name", - "type": "string", - "userEditable": false, - "viewable": false, - }, - "consentedMappings": { - "description": "Consented Mappings", - "isPersonal": false, - "isVirtual": false, - "items": { - "items": { - "order": [ - "mapping", - "consentDate", - ], - "properties": { - "consentDate": { - "description": "Consent Date", - "searchable": true, - "title": "Consent Date", - "type": "string", - "userEditable": true, - "viewable": true, - }, - "mapping": { - "description": "Mapping", - "searchable": true, - "title": "Mapping", - "type": "string", - "userEditable": true, - "viewable": true, - }, - }, - "required": [ - "mapping", - "consentDate", - ], - "title": "Consented Mappings Item", - "type": "object", + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique", }, - "title": "Consented Mappings Items", - "type": "array", - }, - "returnByDefault": false, - "searchable": false, - "title": "Consented Mappings", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": false, - }, - "country": { - "description": "Country", - "isPersonal": false, - "title": "Country", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "description": { - "description": "Description", - "isPersonal": false, + ], "searchable": true, - "title": "Description", + "title": "Name", "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "effectiveApplications": { - "description": "Effective Applications", - "isPersonal": false, - "isVirtual": true, + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, "items": { - "title": "Effective Assigned Application Items", - "type": "object", - }, - "queryConfig": { - "referencedObjectFields": [ - "name", + "order": [ + "duration", ], - "referencedRelationshipFields": [ - [ - "roles", - "applications", - ], - [ - "applications", - ], + "properties": { + "duration": { + "description": "Duration", + "type": "string", + }, + }, + "required": [ + "duration", ], - }, - "returnByDefault": true, - "title": "Effective Applications", - "type": "array", - "viewable": false, - }, - "effectiveAssignments": { - "description": "Effective Assignments", - "isPersonal": false, - "isVirtual": true, - "items": { - "title": "Effective Assignments Items", + "title": "Temporal Constraints Items", "type": "object", }, - "queryConfig": { - "referencedObjectFields": [ - "*", - ], - "referencedRelationshipFields": [ - [ - "roles", - "assignments", - ], - [ - "assignments", - ], - ], - }, + "notifyRelationships": [ + "members", + ], "returnByDefault": true, - "title": "Effective Assignments", + "title": "Temporal Constraints", "type": "array", - "usageDescription": "", "viewable": false, }, - "effectiveGroups": { - "description": "Effective Groups", - "isPersonal": false, - "isVirtual": true, - "items": { - "title": "Effective Groups Items", - "type": "object", - }, - "queryConfig": { - "referencedRelationshipFields": [ - "groups", - ], - }, - "returnByDefault": true, - "title": "Effective Groups", - "type": "array", - "usageDescription": "", + }, + "required": [ + "name", + ], + "title": "Alpha realm - Role", + "type": "object", + }, + }, + { + "name": "bravo_role", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "", + "icon": "fa-check-square-o", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "applications", + "condition", + "temporalConstraints", + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", "viewable": false, }, - "effectiveRoles": { - "description": "Effective Roles", - "isPersonal": false, - "isVirtual": true, + "applications": { + "description": "Role Applications", "items": { - "title": "Effective Roles Items", - "type": "object", - }, - "queryConfig": { - "referencedRelationshipFields": [ - "roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Application Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Application Items", + "type": "relationship", + "validate": true, }, - "returnByDefault": true, - "title": "Effective Roles", + "notifyRelationships": [ + "members", + ], + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Applications", "type": "array", - "usageDescription": "", "viewable": false, }, - "frIndexedDate1": { - "description": "Generic Indexed Date 1", - "isPersonal": false, - "title": "Generic Indexed Date 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedDate2": { - "description": "Generic Indexed Date 2", - "isPersonal": false, - "title": "Generic Indexed Date 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedDate3": { - "description": "Generic Indexed Date 3", - "isPersonal": false, - "title": "Generic Indexed Date 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedDate4": { - "description": "Generic Indexed Date 4", - "isPersonal": false, - "title": "Generic Indexed Date 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedDate5": { - "description": "Generic Indexed Date 5", - "isPersonal": false, - "title": "Generic Indexed Date 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger1": { - "description": "Generic Indexed Integer 1", - "isPersonal": false, - "title": "Generic Indexed Integer 1", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger2": { - "description": "Generic Indexed Integer 2", - "isPersonal": false, - "title": "Generic Indexed Integer 2", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger3": { - "description": "Generic Indexed Integer 3", - "isPersonal": false, - "title": "Generic Indexed Integer 3", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger4": { - "description": "Generic Indexed Integer 4", - "isPersonal": false, - "title": "Generic Indexed Integer 4", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger5": { - "description": "Generic Indexed Integer 5", - "isPersonal": false, - "title": "Generic Indexed Integer 5", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued1": { - "description": "Generic Indexed Multivalue 1", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 1", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued2": { - "description": "Generic Indexed Multivalue 2", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 2", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued3": { - "description": "Generic Indexed Multivalue 3", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 3", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued4": { - "description": "Generic Indexed Multivalue 4", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 4", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued5": { - "description": "Generic Indexed Multivalue 5", - "isPersonal": false, + "assignments": { + "description": "Managed Assignments", "items": { - "type": "string", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Assignments Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/bravo_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Managed Assignments Items", + "type": "relationship", + "validate": true, }, - "title": "Generic Indexed Multivalue 5", + "notifyRelationships": [ + "members", + ], + "returnByDefault": false, + "title": "Managed Assignments", "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedString1": { - "description": "Generic Indexed String 1", - "isPersonal": false, - "title": "Generic Indexed String 1", - "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frIndexedString2": { - "description": "Generic Indexed String 2", - "isPersonal": false, - "title": "Generic Indexed String 2", + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "viewable": false, }, - "frIndexedString3": { - "description": "Generic Indexed String 3", - "isPersonal": false, - "title": "Generic Indexed String 3", + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frIndexedString4": { - "description": "Generic Indexed String 4", - "isPersonal": false, - "title": "Generic Indexed String 4", - "type": "string", - "usageDescription": "", - "userEditable": true, + "members": { + "description": "Role Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Members Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Role Members", + "type": "array", "viewable": true, }, - "frIndexedString5": { - "description": "Generic Indexed String 5", - "isPersonal": false, - "title": "Generic Indexed String 5", + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique", + }, + ], + "searchable": true, + "title": "Name", "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frUnindexedDate1": { - "description": "Generic Unindexed Date 1", - "isPersonal": false, - "title": "Generic Unindexed Date 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, + "items": { + "order": [ + "duration", + ], + "properties": { + "duration": { + "description": "Duration", + "type": "string", + }, + }, + "required": [ + "duration", + ], + "title": "Temporal Constraints Items", + "type": "object", + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false, }, - "frUnindexedDate2": { - "description": "Generic Unindexed Date 2", - "isPersonal": false, - "title": "Generic Unindexed Date 2", + }, + "required": [ + "name", + ], + "title": "Bravo realm - Role", + "type": "object", + }, + }, + { + "attributeEncryption": {}, + "name": "alpha_assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "type", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight", + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "viewable": false, }, - "frUnindexedDate3": { - "description": "Generic Unindexed Date 3", - "isPersonal": false, - "title": "Generic Unindexed Date 3", - "type": "string", - "usageDescription": "", - "userEditable": true, + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value", + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string", + }, + "name": { + "description": "Name", + "type": "string", + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string", + }, + "value": { + "description": "Value", + "type": "string", + }, + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object", + }, + "notifyRelationships": [ + "roles", + "members", + ], + "title": "Assignment Attributes", + "type": "array", "viewable": true, }, - "frUnindexedDate4": { - "description": "Generic Unindexed Date 4", - "isPersonal": false, - "title": "Generic Unindexed Date 4", + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "viewable": false, }, - "frUnindexedDate5": { - "description": "Generic Unindexed Date 5", - "isPersonal": false, - "title": "Generic Unindexed Date 5", + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger1": { - "description": "Generic Unindexed Integer 1", - "isPersonal": false, - "title": "Generic Unindexed Integer 1", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger2": { - "description": "Generic Unindexed Integer 2", - "isPersonal": false, - "title": "Generic Unindexed Integer 2", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger3": { - "description": "Generic Unindexed Integer 3", - "isPersonal": false, - "title": "Generic Unindexed Integer 3", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger4": { - "description": "Generic Unindexed Integer 4", - "isPersonal": false, - "title": "Generic Unindexed Integer 4", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger5": { - "description": "Generic Unindexed Integer 5", - "isPersonal": false, - "title": "Generic Unindexed Integer 5", - "type": "number", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frUnindexedMultivalued1": { - "description": "Generic Unindexed Multivalue 1", - "isPersonal": false, + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", "items": { + "title": "Link Qualifiers Items", "type": "string", }, - "title": "Generic Unindexed Multivalue 1", + "title": "Link Qualifiers", "type": "array", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frUnindexedMultivalued2": { - "description": "Generic Unindexed Multivalue 2", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Unindexed Multivalue 2", - "type": "array", - "usageDescription": "", - "userEditable": true, + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists", + }, + ], + "searchable": true, + "title": "Mapping", + "type": "string", "viewable": true, }, - "frUnindexedMultivalued3": { - "description": "Generic Unindexed Multivalue 3", - "isPersonal": false, + "members": { + "description": "Assignment Members", "items": { - "type": "string", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Assignment Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Assignment Members Items", + "type": "relationship", + "validate": true, }, - "title": "Generic Unindexed Multivalue 3", + "returnByDefault": false, + "title": "Assignment Members", "type": "array", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frUnindexedMultivalued4": { - "description": "Generic Unindexed Multivalue 4", - "isPersonal": false, + "name": { + "description": "The assignment name, used for display purposes.", + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, + }, + "roles": { + "description": "Managed Roles", "items": { - "type": "string", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/alpha_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Managed Roles Items", + "type": "relationship", + "validate": true, }, - "title": "Generic Unindexed Multivalue 4", + "returnByDefault": false, + "title": "Managed Roles", "type": "array", - "usageDescription": "", - "userEditable": true, + "userEditable": false, + "viewable": true, + }, + "type": { + "description": "The type of object this assignment represents", + "title": "Type", + "type": "string", + "viewable": true, + }, + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members", + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null", + ], "viewable": true, }, - "frUnindexedMultivalued5": { - "description": "Generic Unindexed Multivalue 5", - "isPersonal": false, + }, + "required": [ + "name", + "description", + "mapping", + ], + "title": "Alpha realm - Assignment", + "type": "object", + }, + }, + { + "attributeEncryption": {}, + "name": "bravo_assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "type", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight", + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, + }, + "attributes": { + "description": "The attributes operated on by this assignment.", "items": { - "type": "string", + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value", + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string", + }, + "name": { + "description": "Name", + "type": "string", + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string", + }, + "value": { + "description": "Value", + "type": "string", + }, + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object", }, - "title": "Generic Unindexed Multivalue 5", + "notifyRelationships": [ + "roles", + "members", + ], + "title": "Assignment Attributes", "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedString1": { - "description": "Generic Unindexed String 1", - "isPersonal": false, - "title": "Generic Unindexed String 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedString2": { - "description": "Generic Unindexed String 2", - "isPersonal": false, - "title": "Generic Unindexed String 2", - "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frUnindexedString3": { - "description": "Generic Unindexed String 3", - "isPersonal": false, - "title": "Generic Unindexed String 3", + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "viewable": false, }, - "frUnindexedString4": { - "description": "Generic Unindexed String 4", - "isPersonal": false, - "title": "Generic Unindexed String 4", + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frUnindexedString5": { - "description": "Generic Unindexed String 5", - "isPersonal": false, - "title": "Generic Unindexed String 5", - "type": "string", - "usageDescription": "", - "userEditable": true, + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", + "items": { + "title": "Link Qualifiers Items", + "type": "string", + }, + "title": "Link Qualifiers", + "type": "array", "viewable": true, }, - "givenName": { - "description": "First Name", - "isPersonal": true, + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists", + }, + ], "searchable": true, - "title": "First Name", + "title": "Mapping", "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "groups": { - "description": "Groups", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups", - "isPersonal": false, + "members": { + "description": "Assignment Members", "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items", - "notifySelf": true, + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", "properties": { "_ref": { "description": "References a relationship from a managed object", @@ -42333,228 +71773,167 @@ a{ "type": "string", }, }, - "title": "Groups Items _refProperties", + "title": "Assignment Members Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "conditionalAssociationField": "condition", - "label": "Group", - "path": "managed/alpha_group", + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "assignments", "reverseRelationship": true, - "title": "Groups Items", + "title": "Assignment Members Items", "type": "relationship", "validate": true, }, - "relationshipGrantTemporalConstraintsEnforced": false, "returnByDefault": false, - "title": "Groups", + "title": "Assignment Members", "type": "array", - "usageDescription": "", - "userEditable": false, "viewable": true, }, - "kbaInfo": { - "description": "KBA Info", - "isPersonal": true, - "items": { - "order": [ - "answer", - "customQuestion", - "questionId", - ], - "properties": { - "answer": { - "description": "Answer", - "type": "string", - }, - "customQuestion": { - "description": "Custom question", - "type": "string", - }, - "questionId": { - "description": "Question ID", - "type": "string", - }, - }, - "required": [], - "title": "KBA Info Items", - "type": "object", - }, - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": false, - }, - "lastSync": { - "description": "Last Sync timestamp", - "isPersonal": false, - "order": [ - "effectiveAssignments", - "timestamp", - ], - "properties": { - "effectiveAssignments": { - "description": "Effective Assignments", - "items": { - "title": "Effective Assignments Items", - "type": "object", - }, - "title": "Effective Assignments", - "type": "array", - }, - "timestamp": { - "description": "Timestamp", - "type": "string", - }, - }, - "required": [], - "scope": "private", - "searchable": false, - "title": "Last Sync timestamp", - "type": "object", - "usageDescription": "", - "viewable": false, - }, - "mail": { - "description": "Email Address", - "isPersonal": true, - "policies": [ - { - "policyId": "valid-email-address-format", - }, - ], + "name": { + "description": "The assignment name, used for display purposes.", "searchable": true, - "title": "Email Address", + "title": "Name", "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "manager": { - "description": "Manager", - "isPersonal": false, - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Manager _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "reports", - "reverseRelationship": true, - "searchable": false, - "title": "Manager", - "type": "relationship", - "usageDescription": "", - "userEditable": false, - "validate": true, "viewable": true, }, - "memberOfOrg": { + "roles": { + "description": "Managed Roles", "items": { - "notifySelf": true, + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", "properties": { "_ref": { + "description": "References a relationship from a managed object", "type": "string", }, "_refProperties": { + "description": "Supports metadata within the relationship", "properties": { "_id": { - "propName": "_id", - "required": false, + "description": "_refProperties object ID", "type": "string", }, }, + "title": "Managed Roles Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "label": "Organization", - "notify": false, - "path": "managed/alpha_organization", + "label": "Role", + "notify": true, + "path": "managed/bravo_role", "query": { "fields": [ "name", ], "queryFilter": "true", - "sortKeys": [], }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "assignments", "reverseRelationship": true, + "title": "Managed Roles Items", "type": "relationship", "validate": true, }, - "policies": [], "returnByDefault": false, - "searchable": false, - "title": "Organizations to which I Belong", + "title": "Managed Roles", "type": "array", "userEditable": false, "viewable": true, }, - "memberOfOrgIDs": { + "type": { + "description": "The type of object this assignment represents", + "title": "Type", + "type": "string", + "viewable": true, + }, + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members", + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null", + ], + "viewable": true, + }, + }, + "required": [ + "name", + "description", + "mapping", + ], + "title": "Bravo realm - Assignment", + "type": "object", + }, + }, + { + "name": "alpha_organization", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs", + ], + "properties": { + "adminIDs": { "isVirtual": true, "items": { - "title": "org identifiers", + "title": "admin ids", "type": "string", }, "queryConfig": { "flattenProperties": true, "referencedObjectFields": [ "_id", - "parentIDs", ], "referencedRelationshipFields": [ - "memberOfOrg", + "admins", ], }, "returnByDefault": true, "searchable": false, - "title": "MemberOfOrgIDs", + "title": "Admin user ids", "type": "array", "userEditable": false, "viewable": false, }, - "ownerOfApp": { + "admins": { "items": { + "notifySelf": true, "properties": { "_ref": { "type": "string", @@ -42562,7 +71941,8 @@ a{ "_refProperties": { "properties": { "_id": { - "description": "_refProperties object ID", + "propName": "_id", + "required": false, "type": "string", }, }, @@ -42571,34 +71951,39 @@ a{ }, "resourceCollection": [ { - "label": "Application", - "path": "managed/alpha_application", + "label": "User", + "notify": false, + "path": "managed/alpha_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", - "sortKeys": [ - "name", - ], + "sortKeys": [], }, }, ], - "reversePropertyName": "owners", + "reversePropertyName": "adminOfOrg", "reverseRelationship": true, "type": "relationship", "validate": true, }, + "notifyRelationships": [ + "children", + ], "returnByDefault": false, "searchable": false, - "title": "Applications I Own", + "title": "Administrators", "type": "array", "userEditable": false, "viewable": true, }, - "ownerOfOrg": { + "children": { + "description": "Child Organizations", "items": { - "notifySelf": false, + "notifySelf": true, "properties": { "_ref": { "type": "string", @@ -42622,13 +72007,14 @@ a{ "query": { "fields": [ "name", + "description", ], "queryFilter": "true", "sortKeys": [], }, }, ], - "reversePropertyName": "owners", + "reversePropertyName": "parent", "reverseRelationship": true, "type": "relationship", "validate": true, @@ -42636,391 +72022,96 @@ a{ "policies": [], "returnByDefault": false, "searchable": false, - "title": "Organizations I Own", + "title": "Child Organizations", "type": "array", "userEditable": false, - "viewable": true, - }, - "password": { - "description": "Password", - "isPersonal": false, - "isProtected": true, - "scope": "private", - "searchable": false, - "title": "Password", - "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": false, }, - "postalAddress": { - "description": "Address 1", - "isPersonal": true, - "title": "Address 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "postalCode": { - "description": "Postal Code", - "isPersonal": false, - "title": "Postal Code", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "preferences": { - "description": "Preferences", - "isPersonal": false, - "order": [ - "updates", - "marketing", - ], - "properties": { - "marketing": { - "description": "Send me special offers and services", - "type": "boolean", - }, - "updates": { - "description": "Send me news and updates", - "type": "boolean", - }, - }, - "required": [], - "searchable": false, - "title": "Preferences", - "type": "object", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "profileImage": { - "description": "Profile Image", - "isPersonal": true, + "description": { "searchable": true, - "title": "Profile Image", + "title": "Description", "type": "string", - "usageDescription": "", "userEditable": true, - "viewable": false, - }, - "reports": { - "description": "Direct Reports", - "isPersonal": false, - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Direct Reports Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "manager", - "reverseRelationship": true, - "title": "Direct Reports Items", - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "title": "Direct Reports", - "type": "array", - "usageDescription": "", - "userEditable": false, "viewable": true, }, - "roles": { - "description": "Provisioning Roles", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", - "isPersonal": false, + "members": { "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", - "notifySelf": true, + "notifySelf": false, "properties": { "_ref": { - "description": "References a relationship from a managed object", "type": "string", }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, + "_refProperties": { + "properties": { "_id": { - "description": "_refProperties object ID", + "propName": "_id", + "required": false, "type": "string", }, }, - "title": "Provisioning Roles Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "conditionalAssociationField": "condition", - "label": "Role", - "path": "managed/alpha_role", + "label": "User", + "notify": true, + "path": "managed/alpha_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", + "sortKeys": [], }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "memberOfOrg", "reverseRelationship": true, - "title": "Provisioning Roles Items", "type": "relationship", "validate": true, }, - "relationshipGrantTemporalConstraintsEnforced": true, "returnByDefault": false, - "title": "Provisioning Roles", + "searchable": false, + "title": "Members", "type": "array", - "usageDescription": "", "userEditable": false, "viewable": true, }, - "sn": { - "description": "Last Name", - "isPersonal": true, - "searchable": true, - "title": "Last Name", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "stateProvince": { - "description": "State/Province", - "isPersonal": false, - "title": "State/Province", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "telephoneNumber": { - "description": "Telephone Number", - "isPersonal": true, - "pattern": "^\\+?([0-9\\- \\(\\)])*$", - "title": "Telephone Number", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "userName": { - "description": "Username", - "isPersonal": true, - "minLength": 1, - "policies": [ - { - "policyId": "valid-username", - }, - { - "params": { - "forbiddenChars": [ - "/", - ], - }, - "policyId": "cannot-contain-characters", - }, - { - "params": { - "minLength": 1, - }, - "policyId": "minimum-length", - }, - { - "params": { - "maxLength": 255, - }, - "policyId": "maximum-length", - }, - ], + "name": { "searchable": true, - "title": "Username", + "title": "Name", "type": "string", - "usageDescription": "", "userEditable": true, "viewable": true, }, - }, - "required": [ - "userName", - "givenName", - "sn", - "mail", - ], - "title": "Alpha realm - User", - "type": "object", - "viewable": true, - }, - }, - { - "lastSync": { - "effectiveAssignmentsProperty": "effectiveAssignments", - "lastSyncProperty": "lastSync", - }, - "meta": { - "property": "_meta", - "resourceCollection": "managed/bravo_usermeta", - "trackedProperties": [ - "createDate", - "lastChanged", - ], - }, - "name": "bravo_user", - "notifications": {}, - "schema": { - "$schema": "http://json-schema.org/draft-03/schema", - "icon": "fa-user", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", - "mat-icon": "people", - "order": [ - "_id", - "userName", - "password", - "givenName", - "cn", - "sn", - "mail", - "profileImage", - "description", - "accountStatus", - "telephoneNumber", - "postalAddress", - "city", - "postalCode", - "country", - "stateProvince", - "roles", - "assignments", - "groups", - "applications", - "manager", - "authzRoles", - "reports", - "effectiveRoles", - "effectiveAssignments", - "effectiveGroups", - "effectiveApplications", - "lastSync", - "kbaInfo", - "preferences", - "consentedMappings", - "ownerOfOrg", - "adminOfOrg", - "memberOfOrg", - "memberOfOrgIDs", - "ownerOfApp", - "frIndexedString1", - "frIndexedString2", - "frIndexedString3", - "frIndexedString4", - "frIndexedString5", - "frUnindexedString1", - "frUnindexedString2", - "frUnindexedString3", - "frUnindexedString4", - "frUnindexedString5", - "frIndexedMultivalued1", - "frIndexedMultivalued2", - "frIndexedMultivalued3", - "frIndexedMultivalued4", - "frIndexedMultivalued5", - "frUnindexedMultivalued1", - "frUnindexedMultivalued2", - "frUnindexedMultivalued3", - "frUnindexedMultivalued4", - "frUnindexedMultivalued5", - "frIndexedDate1", - "frIndexedDate2", - "frIndexedDate3", - "frIndexedDate4", - "frIndexedDate5", - "frUnindexedDate1", - "frUnindexedDate2", - "frUnindexedDate3", - "frUnindexedDate4", - "frUnindexedDate5", - "frIndexedInteger1", - "frIndexedInteger2", - "frIndexedInteger3", - "frIndexedInteger4", - "frIndexedInteger5", - "frUnindexedInteger1", - "frUnindexedInteger2", - "frUnindexedInteger3", - "frUnindexedInteger4", - "frUnindexedInteger5", - "assignedDashboard", - ], - "properties": { - "_id": { - "description": "User ID", - "isPersonal": false, - "policies": [ - { - "params": { - "forbiddenChars": [ - "/", - ], - }, - "policyId": "cannot-contain-characters", - }, - ], + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "owners", + ], + }, + "returnByDefault": true, "searchable": false, - "type": "string", - "usageDescription": "", + "title": "Owner user ids", + "type": "array", "userEditable": false, "viewable": false, }, - "accountStatus": { - "default": "active", - "description": "Status", - "isPersonal": false, - "searchable": true, - "title": "Status", - "type": "string", - "usageDescription": "", - "userEditable": false, - "viewable": true, - }, - "adminOfOrg": { + "owners": { "items": { - "notifySelf": false, + "notifySelf": true, "properties": { "_ref": { "type": "string", @@ -43038,814 +72129,897 @@ a{ }, "resourceCollection": [ { - "label": "Organization", - "notify": true, - "path": "managed/bravo_organization", + "label": "User", + "notify": false, + "path": "managed/alpha_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", "sortKeys": [], }, }, ], - "reversePropertyName": "admins", + "reversePropertyName": "ownerOfOrg", "reverseRelationship": true, "type": "relationship", "validate": true, }, - "policies": [], + "notifyRelationships": [ + "children", + ], "returnByDefault": false, "searchable": false, - "title": "Organizations I Administer", + "title": "Owner", "type": "array", "userEditable": false, "viewable": true, }, - "aliasList": { - "description": "List of identity aliases used primarily to record social IdP subjects for this user", - "isVirtual": false, + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members", + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, + "viewable": true, + }, + "parentAdminIDs": { + "isVirtual": true, "items": { - "title": "User Alias Names Items", + "title": "user ids of parent admins", "type": "string", }, - "returnByDefault": false, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, "searchable": false, - "title": "User Alias Names List", + "title": "user ids of parent admins", "type": "array", - "userEditable": true, + "userEditable": false, "viewable": false, }, - "applications": { - "description": "Applications", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications", - "isPersonal": false, + "parentIDs": { + "isVirtual": true, + "items": { + "title": "parent org ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentOwnerIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent owners", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", + "type": "array", + "userEditable": false, + "viewable": false, + }, + }, + "required": [ + "name", + ], + "title": "Alpha realm - Organization", + "type": "object", + }, + }, + { + "name": "bravo_organization", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs", + ], + "properties": { + "adminIDs": { + "isVirtual": true, + "items": { + "title": "admin ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "admins", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Admin user ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "admins": { "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items", "notifySelf": true, "properties": { "_ref": { - "description": "References a relationship from a managed object", "type": "string", }, "_refProperties": { - "description": "Supports metadata within the relationship", "properties": { "_id": { - "description": "_refProperties object ID", + "propName": "_id", + "required": false, "type": "string", }, }, - "title": "Groups Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "label": "Application", - "path": "managed/bravo_application", + "label": "User", + "notify": false, + "path": "managed/bravo_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", - "sortKeys": [ - "name", - ], + "sortKeys": [], }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "adminOfOrg", "reverseRelationship": true, - "title": "Groups Items", "type": "relationship", "validate": true, }, + "notifyRelationships": [ + "children", + ], "returnByDefault": false, - "title": "Applications", - "type": "array", - "usageDescription": "", - "userEditable": false, - "viewable": false, - }, - "assignedDashboard": { - "description": "List of items to click on for this user", - "isVirtual": true, - "items": { - "title": "Assigned Dashboard Items", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "name", - ], - "referencedRelationshipFields": [ - [ - "roles", - "applications", - ], - [ - "applications", - ], - ], - }, "searchable": false, - "title": "Assigned Dashboard", + "title": "Administrators", "type": "array", "userEditable": false, "viewable": true, }, - "assignments": { - "description": "Assignments", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", - "isPersonal": false, + "children": { + "description": "Child Organizations", "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", "notifySelf": true, "properties": { "_ref": { - "description": "References a relationship from a managed object", "type": "string", }, "_refProperties": { - "description": "Supports metadata within the relationship", "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, "_id": { - "description": "_refProperties object ID", + "propName": "_id", + "required": false, "type": "string", }, }, - "title": "Provisioning Roles Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "conditionalAssociationField": "condition", - "label": "Assignment", - "path": "managed/bravo_assignment", + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", "query": { "fields": [ "name", + "description", ], "queryFilter": "true", + "sortKeys": [], }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "parent", "reverseRelationship": true, - "title": "Assignments Items", "type": "relationship", "validate": true, }, + "policies": [], "returnByDefault": false, - "title": "Assignments", + "searchable": false, + "title": "Child Organizations", "type": "array", - "usageDescription": "", "userEditable": false, + "viewable": false, + }, + "description": { + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": true, "viewable": true, }, - "authzRoles": { - "description": "Authorization Roles", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", - "isPersonal": false, + "members": { "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "notifySelf": false, "properties": { "_ref": { - "description": "References a relationship from a managed object", "type": "string", }, "_refProperties": { - "description": "Supports metadata within the relationship", "properties": { "_id": { - "description": "_refProperties object ID", + "propName": "_id", + "required": false, "type": "string", }, }, - "title": "Authorization Roles Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "conditionalAssociationField": "condition", - "label": "Internal Role", - "path": "internal/role", + "label": "User", + "notify": true, + "path": "managed/bravo_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", + "sortKeys": [], }, }, ], - "reversePropertyName": "authzMembers", + "reversePropertyName": "memberOfOrg", "reverseRelationship": true, - "title": "Authorization Roles Items", "type": "relationship", "validate": true, }, "returnByDefault": false, - "title": "Authorization Roles", - "type": "array", - "usageDescription": "", - "userEditable": false, - "viewable": true, - }, - "city": { - "description": "City", - "isPersonal": false, - "title": "City", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "cn": { - "default": "{{givenName}} {{sn}}", - "description": "Common Name", - "isPersonal": true, - "scope": "private", - "searchable": false, - "title": "Common Name", - "type": "string", - "userEditable": false, - "viewable": false, - }, - "consentedMappings": { - "description": "Consented Mappings", - "isPersonal": false, - "isVirtual": false, - "items": { - "items": { - "order": [ - "mapping", - "consentDate", - ], - "properties": { - "consentDate": { - "description": "Consent Date", - "searchable": true, - "title": "Consent Date", - "type": "string", - "userEditable": true, - "viewable": true, - }, - "mapping": { - "description": "Mapping", - "searchable": true, - "title": "Mapping", - "type": "string", - "userEditable": true, - "viewable": true, - }, - }, - "required": [ - "mapping", - "consentDate", - ], - "title": "Consented Mappings Item", - "type": "object", - }, - "title": "Consented Mappings Items", - "type": "array", - }, - "returnByDefault": false, "searchable": false, - "title": "Consented Mappings", + "title": "Members", "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": false, - }, - "country": { - "description": "Country", - "isPersonal": false, - "title": "Country", - "type": "string", - "usageDescription": "", - "userEditable": true, + "userEditable": false, "viewable": true, }, - "description": { - "description": "Description", - "isPersonal": false, + "name": { "searchable": true, - "title": "Description", + "title": "Name", "type": "string", - "usageDescription": "", "userEditable": true, "viewable": true, }, - "effectiveApplications": { - "description": "Effective Applications", - "isPersonal": false, - "isVirtual": true, - "items": { - "title": "Effective Assigned Application Items", - "type": "object", - }, - "queryConfig": { - "referencedObjectFields": [ - "name", - ], - "referencedRelationshipFields": [ - [ - "roles", - "applications", - ], - [ - "applications", - ], - ], - }, - "returnByDefault": true, - "title": "Effective Applications", - "type": "array", - "viewable": false, - }, - "effectiveAssignments": { - "description": "Effective Assignments", - "isPersonal": false, + "ownerIDs": { "isVirtual": true, "items": { - "title": "Effective Assignments Items", - "type": "object", + "title": "owner ids", + "type": "string", }, "queryConfig": { + "flattenProperties": true, "referencedObjectFields": [ - "*", - ], - "referencedRelationshipFields": [ - [ - "roles", - "assignments", - ], - [ - "assignments", - ], - ], - }, - "returnByDefault": true, - "title": "Effective Assignments", - "type": "array", - "usageDescription": "", - "viewable": false, - }, - "effectiveGroups": { - "description": "Effective Groups", - "isPersonal": false, - "isVirtual": true, - "items": { - "title": "Effective Groups Items", - "type": "object", - }, - "queryConfig": { - "referencedRelationshipFields": [ - "groups", + "_id", ], - }, - "returnByDefault": true, - "title": "Effective Groups", - "type": "array", - "usageDescription": "", - "viewable": false, - }, - "effectiveRoles": { - "description": "Effective Roles", - "isPersonal": false, - "isVirtual": true, - "items": { - "title": "Effective Roles Items", - "type": "object", - }, - "queryConfig": { "referencedRelationshipFields": [ - "roles", + "owners", ], }, "returnByDefault": true, - "title": "Effective Roles", + "searchable": false, + "title": "Owner user ids", "type": "array", - "usageDescription": "", + "userEditable": false, "viewable": false, }, - "frIndexedDate1": { - "description": "Generic Indexed Date 1", - "isPersonal": false, - "title": "Generic Indexed Date 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedDate2": { - "description": "Generic Indexed Date 2", - "isPersonal": false, - "title": "Generic Indexed Date 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedDate3": { - "description": "Generic Indexed Date 3", - "isPersonal": false, - "title": "Generic Indexed Date 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedDate4": { - "description": "Generic Indexed Date 4", - "isPersonal": false, - "title": "Generic Indexed Date 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedDate5": { - "description": "Generic Indexed Date 5", - "isPersonal": false, - "title": "Generic Indexed Date 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger1": { - "description": "Generic Indexed Integer 1", - "isPersonal": false, - "title": "Generic Indexed Integer 1", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger2": { - "description": "Generic Indexed Integer 2", - "isPersonal": false, - "title": "Generic Indexed Integer 2", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger3": { - "description": "Generic Indexed Integer 3", - "isPersonal": false, - "title": "Generic Indexed Integer 3", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger4": { - "description": "Generic Indexed Integer 4", - "isPersonal": false, - "title": "Generic Indexed Integer 4", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedInteger5": { - "description": "Generic Indexed Integer 5", - "isPersonal": false, - "title": "Generic Indexed Integer 5", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued1": { - "description": "Generic Indexed Multivalue 1", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 1", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued2": { - "description": "Generic Indexed Multivalue 2", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 2", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued3": { - "description": "Generic Indexed Multivalue 3", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 3", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued4": { - "description": "Generic Indexed Multivalue 4", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 4", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedMultivalued5": { - "description": "Generic Indexed Multivalue 5", - "isPersonal": false, + "owners": { "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 5", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedString1": { - "description": "Generic Indexed String 1", - "isPersonal": false, - "title": "Generic Indexed String 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedString2": { - "description": "Generic Indexed String 2", - "isPersonal": false, - "title": "Generic Indexed String 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedString3": { - "description": "Generic Indexed String 3", - "isPersonal": false, - "title": "Generic Indexed String 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedString4": { - "description": "Generic Indexed String 4", - "isPersonal": false, - "title": "Generic Indexed String 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frIndexedString5": { - "description": "Generic Indexed String 5", - "isPersonal": false, - "title": "Generic Indexed String 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedDate1": { - "description": "Generic Unindexed Date 1", - "isPersonal": false, - "title": "Generic Unindexed Date 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedDate2": { - "description": "Generic Unindexed Date 2", - "isPersonal": false, - "title": "Generic Unindexed Date 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedDate3": { - "description": "Generic Unindexed Date 3", - "isPersonal": false, - "title": "Generic Unindexed Date 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedDate4": { - "description": "Generic Unindexed Date 4", - "isPersonal": false, - "title": "Generic Unindexed Date 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedDate5": { - "description": "Generic Unindexed Date 5", - "isPersonal": false, - "title": "Generic Unindexed Date 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger1": { - "description": "Generic Unindexed Integer 1", - "isPersonal": false, - "title": "Generic Unindexed Integer 1", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger2": { - "description": "Generic Unindexed Integer 2", - "isPersonal": false, - "title": "Generic Unindexed Integer 2", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger3": { - "description": "Generic Unindexed Integer 3", - "isPersonal": false, - "title": "Generic Unindexed Integer 3", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedInteger4": { - "description": "Generic Unindexed Integer 4", - "isPersonal": false, - "title": "Generic Unindexed Integer 4", - "type": "number", - "usageDescription": "", - "userEditable": true, + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, "viewable": true, }, - "frUnindexedInteger5": { - "description": "Generic Unindexed Integer 5", - "isPersonal": false, - "title": "Generic Unindexed Integer 5", - "type": "number", - "usageDescription": "", - "userEditable": true, + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members", + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, "viewable": true, }, - "frUnindexedMultivalued1": { - "description": "Generic Unindexed Multivalue 1", - "isPersonal": false, + "parentAdminIDs": { + "isVirtual": true, "items": { + "title": "user ids of parent admins", "type": "string", }, - "title": "Generic Unindexed Multivalue 1", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent admins", "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "userEditable": false, + "viewable": false, }, - "frUnindexedMultivalued2": { - "description": "Generic Unindexed Multivalue 2", - "isPersonal": false, + "parentIDs": { + "isVirtual": true, "items": { + "title": "parent org ids", "type": "string", }, - "title": "Generic Unindexed Multivalue 2", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "userEditable": false, + "viewable": false, }, - "frUnindexedMultivalued3": { - "description": "Generic Unindexed Multivalue 3", - "isPersonal": false, + "parentOwnerIDs": { + "isVirtual": true, "items": { + "title": "user ids of parent owners", "type": "string", }, - "title": "Generic Unindexed Multivalue 3", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "userEditable": false, + "viewable": false, }, - "frUnindexedMultivalued4": { - "description": "Generic Unindexed Multivalue 4", + }, + "required": [ + "name", + ], + "title": "Bravo realm - Organization", + "type": "object", + }, + }, + { + "name": "alpha_group", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-group", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group", + "mat-icon": "group", + "order": [ + "_id", + "name", + "description", + "condition", + "members", + ], + "properties": { + "_id": { + "description": "Group ID", "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Unindexed Multivalue 4", - "type": "array", + "policies": [ + { + "params": { + "propertyName": "name", + }, + "policyId": "id-must-equal-property", + }, + ], + "searchable": false, + "type": "string", "usageDescription": "", - "userEditable": true, + "userEditable": false, + "viewable": false, + }, + "condition": { + "description": "A filter for conditionally assigned members", + "isConditional": true, + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, + }, + "description": { + "description": "Group Description", + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": false, "viewable": true, }, - "frUnindexedMultivalued5": { - "description": "Generic Unindexed Multivalue 5", - "isPersonal": false, + "members": { + "description": "Group Members", "items": { - "type": "string", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Group Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "groups", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true, }, - "title": "Generic Unindexed Multivalue 5", + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", "type": "array", - "usageDescription": "", - "userEditable": true, + "userEditable": false, "viewable": true, }, - "frUnindexedString1": { - "description": "Generic Unindexed String 1", - "isPersonal": false, - "title": "Generic Unindexed String 1", + "name": { + "description": "Group Name", + "policies": [ + { + "policyId": "required", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": true, + "title": "Name", "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frUnindexedString2": { - "description": "Generic Unindexed String 2", + }, + "required": [ + "name", + ], + "title": "Alpha realm - Group", + "viewable": true, + }, + }, + { + "name": "bravo_group", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-group", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group", + "mat-icon": "group", + "order": [ + "_id", + "name", + "description", + "condition", + "members", + ], + "properties": { + "_id": { + "description": "Group ID", "isPersonal": false, - "title": "Generic Unindexed String 2", + "policies": [ + { + "params": { + "propertyName": "name", + }, + "policyId": "id-must-equal-property", + }, + ], + "searchable": false, "type": "string", "usageDescription": "", - "userEditable": true, - "viewable": true, + "userEditable": false, + "viewable": false, }, - "frUnindexedString3": { - "description": "Generic Unindexed String 3", - "isPersonal": false, - "title": "Generic Unindexed String 3", + "condition": { + "description": "A filter for conditionally assigned members", + "isConditional": true, + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + "searchable": false, + "title": "Condition", "type": "string", - "usageDescription": "", - "userEditable": true, + "viewable": false, + }, + "description": { + "description": "Group Description", + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": false, "viewable": true, }, - "frUnindexedString4": { - "description": "Generic Unindexed String 4", - "isPersonal": false, - "title": "Generic Unindexed String 4", + "members": { + "description": "Group Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Group Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "groups", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "name": { + "description": "Group Name", + "policies": [ + { + "policyId": "required", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": true, + "title": "Name", "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "frUnindexedString5": { - "description": "Generic Unindexed String 5", + }, + "required": [ + "name", + ], + "title": "Bravo realm - Group", + "viewable": true, + }, + }, + { + "name": "alpha_application", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "Application Object", + "icon": "fa-folder", + "order": [ + "name", + "description", + "url", + "icon", + "mappingNames", + "owners", + "roles", + "members", + ], + "properties": { + "_id": { + "description": "Application ID", "isPersonal": false, - "title": "Generic Unindexed String 5", + "searchable": false, + "type": "string", + "userEditable": false, + "viewable": false, + }, + "authoritative": { + "description": "Is this an authoritative application", + "searchable": false, + "title": "Authoritative", + "type": "boolean", + "viewable": false, + }, + "connectorId": { + "description": "Id of the connector associated with the application", + "searchable": false, + "title": "Connector ID", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "description": { + "description": "Application Description", + "searchable": true, + "title": "Description", "type": "string", - "usageDescription": "", - "userEditable": true, "viewable": true, }, - "givenName": { - "description": "First Name", - "isPersonal": true, + "icon": { "searchable": true, - "title": "First Name", + "title": "Icon", "type": "string", - "usageDescription": "", "userEditable": true, "viewable": true, }, - "groups": { - "description": "Groups", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups", - "isPersonal": false, + "mappingNames": { + "description": "Names of the sync mappings used by an application with provisioning configured.", "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items", - "notifySelf": true, + "title": "Mapping Name Items", + "type": "string", + }, + "searchable": true, + "title": "Sync Mapping Names", + "type": "array", + "viewable": true, + }, + "members": { + "description": "Application Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items", "properties": { "_ref": { "description": "References a relationship from a managed object", @@ -43864,161 +73038,60 @@ a{ "type": "string", }, }, - "title": "Groups Items _refProperties", + "title": "Group Members Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "conditionalAssociationField": "condition", - "label": "Group", - "path": "managed/bravo_group", + "label": "User", + "notify": true, + "path": "managed/alpha_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "applications", "reverseRelationship": true, - "title": "Groups Items", + "title": "Group Members Items", "type": "relationship", "validate": true, }, - "relationshipGrantTemporalConstraintsEnforced": false, + "policies": [], "returnByDefault": false, - "title": "Groups", + "searchable": false, + "title": "Members", "type": "array", - "usageDescription": "", "userEditable": false, "viewable": true, }, - "kbaInfo": { - "description": "KBA Info", - "isPersonal": true, - "items": { - "order": [ - "answer", - "customQuestion", - "questionId", - ], - "properties": { - "answer": { - "description": "Answer", - "type": "string", - }, - "customQuestion": { - "description": "Custom question", - "type": "string", - }, - "questionId": { - "description": "Question ID", - "type": "string", - }, - }, - "required": [], - "title": "KBA Info Items", - "type": "object", - }, - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": false, - }, - "lastSync": { - "description": "Last Sync timestamp", - "isPersonal": false, - "order": [ - "effectiveAssignments", - "timestamp", + "name": { + "description": "Application name", + "notifyRelationships": [ + "roles", + "members", ], - "properties": { - "effectiveAssignments": { - "description": "Effective Assignments", - "items": { - "title": "Effective Assignments Items", - "type": "object", - }, - "title": "Effective Assignments", - "type": "array", - }, - "timestamp": { - "description": "Timestamp", - "type": "string", - }, - }, - "required": [], - "scope": "private", - "searchable": false, - "title": "Last Sync timestamp", - "type": "object", - "usageDescription": "", - "viewable": false, - }, - "mail": { - "description": "Email Address", - "isPersonal": true, "policies": [ { - "policyId": "valid-email-address-format", + "policyId": "unique", }, ], + "returnByDefault": true, "searchable": true, - "title": "Email Address", + "title": "Name", "type": "string", - "usageDescription": "", "userEditable": true, "viewable": true, }, - "manager": { - "description": "Manager", - "isPersonal": false, - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Manager _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "reports", - "reverseRelationship": true, - "searchable": false, - "title": "Manager", - "type": "relationship", - "usageDescription": "", - "userEditable": false, - "validate": true, - "viewable": true, - }, - "memberOfOrg": { + "owners": { + "description": "Application Owners", "items": { - "notifySelf": true, "properties": { "_ref": { "type": "string", @@ -44026,66 +73099,44 @@ a{ "_refProperties": { "properties": { "_id": { - "propName": "_id", - "required": false, + "description": "_refProperties object ID", "type": "string", }, }, + "title": "Application _refProperties", "type": "object", }, }, "resourceCollection": [ { - "label": "Organization", - "notify": false, - "path": "managed/bravo_organization", + "label": "User", + "path": "managed/alpha_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", - "sortKeys": [], }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "ownerOfApp", "reverseRelationship": true, "type": "relationship", "validate": true, }, - "policies": [], "returnByDefault": false, "searchable": false, - "title": "Organizations to which I Belong", + "title": "Owners", "type": "array", "userEditable": false, "viewable": true, }, - "memberOfOrgIDs": { - "isVirtual": true, - "items": { - "title": "org identifiers", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "_id", - "parentIDs", - ], - "referencedRelationshipFields": [ - "memberOfOrg", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "MemberOfOrgIDs", - "type": "array", - "userEditable": false, - "viewable": false, - }, - "ownerOfApp": { + "roles": { + "description": "Roles granting users the application", "items": { + "notifySelf": true, "properties": { "_ref": { "type": "string", @@ -44093,7 +73144,8 @@ a{ "_refProperties": { "properties": { "_id": { - "description": "_refProperties object ID", + "propName": "_id", + "required": false, "type": "string", }, }, @@ -44102,160 +73154,246 @@ a{ }, "resourceCollection": [ { - "label": "Application", - "path": "managed/bravo_application", + "label": "Role", + "notify": true, + "path": "managed/alpha_role", "query": { "fields": [ "name", ], "queryFilter": "true", - "sortKeys": [ - "name", - ], + "sortKeys": [], }, }, ], - "reversePropertyName": "owners", + "reversePropertyName": "applications", "reverseRelationship": true, "type": "relationship", "validate": true, }, "returnByDefault": false, "searchable": false, - "title": "Applications I Own", + "title": "Roles", "type": "array", "userEditable": false, "viewable": true, }, - "ownerOfOrg": { + "ssoEntities": { + "description": "SSO Entity Id", + "properties": { + "idpLocation": { + "type": "string", + }, + "idpPrivateId": { + "type": "string", + }, + "spLocation": { + "type": "string", + }, + "spPrivate": { + "type": "string", + }, + }, + "searchable": false, + "title": "SSO Entity Id", + "type": "object", + "userEditable": false, + "viewable": false, + }, + "templateName": { + "description": "Name of the template the application was created from", + "searchable": false, + "title": "Template Name", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "templateVersion": { + "description": "The template version", + "searchable": false, + "title": "Template Version", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "uiConfig": { + "description": "UI Config", + "isPersonal": false, + "properties": {}, + "searchable": false, + "title": "UI Config", + "type": "object", + "usageDescription": "", + "viewable": false, + }, + "url": { + "searchable": true, + "title": "Url", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "name", + ], + "title": "Alpha realm - Application", + "type": "object", + }, + }, + { + "name": "bravo_application", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "Application Object", + "icon": "fa-folder", + "order": [ + "name", + "description", + "url", + "icon", + "mappingNames", + "owners", + "roles", + "members", + ], + "properties": { + "_id": { + "description": "Application ID", + "isPersonal": false, + "searchable": false, + "type": "string", + "userEditable": false, + "viewable": false, + }, + "authoritative": { + "description": "Is this an authoritative application", + "searchable": false, + "title": "Authoritative", + "type": "boolean", + "viewable": false, + }, + "connectorId": { + "description": "Id of the connector associated with the application", + "searchable": false, + "title": "Connector ID", + "type": "string", + "userEditable": false, + "viewable": false, + }, + "description": { + "description": "Application Description", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, + }, + "icon": { + "searchable": true, + "title": "Icon", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mappingNames": { + "description": "Names of the sync mappings used by an application with provisioning configured.", "items": { - "notifySelf": false, + "title": "Mapping Name Items", + "type": "string", + }, + "searchable": true, + "title": "Sync Mapping Names", + "type": "array", + "viewable": true, + }, + "members": { + "description": "Application Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items", "properties": { "_ref": { + "description": "References a relationship from a managed object", "type": "string", }, "_refProperties": { + "description": "Supports metadata within the relationship", "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, "_id": { - "propName": "_id", - "required": false, + "description": "_refProperties object ID", "type": "string", }, }, + "title": "Group Members Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "label": "Organization", + "label": "User", "notify": true, - "path": "managed/bravo_organization", + "path": "managed/bravo_user", "query": { "fields": [ - "name", + "userName", + "givenName", + "sn", ], "queryFilter": "true", - "sortKeys": [], }, }, ], - "reversePropertyName": "owners", + "reversePropertyName": "applications", "reverseRelationship": true, + "title": "Group Members Items", "type": "relationship", "validate": true, }, "policies": [], "returnByDefault": false, "searchable": false, - "title": "Organizations I Own", + "title": "Members", "type": "array", "userEditable": false, "viewable": true, }, - "password": { - "description": "Password", - "isPersonal": false, - "isProtected": true, - "scope": "private", - "searchable": false, - "title": "Password", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": false, - }, - "postalAddress": { - "description": "Address 1", - "isPersonal": true, - "title": "Address 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "postalCode": { - "description": "Postal Code", - "isPersonal": false, - "title": "Postal Code", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "preferences": { - "description": "Preferences", - "isPersonal": false, - "order": [ - "updates", - "marketing", + "name": { + "description": "Application name", + "notifyRelationships": [ + "roles", + "members", ], - "properties": { - "marketing": { - "description": "Send me special offers and services", - "type": "boolean", - }, - "updates": { - "description": "Send me news and updates", - "type": "boolean", + "policies": [ + { + "policyId": "unique", }, - }, - "required": [], - "searchable": false, - "title": "Preferences", - "type": "object", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "profileImage": { - "description": "Profile Image", - "isPersonal": true, + ], + "returnByDefault": true, "searchable": true, - "title": "Profile Image", + "title": "Name", "type": "string", - "usageDescription": "", "userEditable": true, - "viewable": false, + "viewable": true, }, - "reports": { - "description": "Direct Reports", - "isPersonal": false, + "owners": { + "description": "Application Owners", "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", "properties": { "_ref": { - "description": "References a relationship from a managed object", "type": "string", }, "_refProperties": { - "description": "Supports metadata within the relationship", "properties": { "_id": { "description": "_refProperties object ID", "type": "string", }, }, - "title": "Direct Reports Items _refProperties", + "title": "Application _refProperties", "type": "object", }, }, @@ -44273,10460 +73411,13835 @@ a{ }, }, ], - "reversePropertyName": "manager", + "reversePropertyName": "ownerOfApp", "reverseRelationship": true, - "title": "Direct Reports Items", "type": "relationship", "validate": true, }, "returnByDefault": false, - "title": "Direct Reports", + "searchable": false, + "title": "Owners", "type": "array", - "usageDescription": "", "userEditable": false, "viewable": true, }, "roles": { - "description": "Provisioning Roles", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", - "isPersonal": false, + "description": "Roles granting users the application", "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", "notifySelf": true, "properties": { "_ref": { - "description": "References a relationship from a managed object", "type": "string", }, "_refProperties": { - "description": "Supports metadata within the relationship", "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, "_id": { - "description": "_refProperties object ID", + "propName": "_id", + "required": false, "type": "string", }, }, - "title": "Provisioning Roles Items _refProperties", "type": "object", }, }, "resourceCollection": [ { - "conditionalAssociationField": "condition", "label": "Role", + "notify": true, "path": "managed/bravo_role", "query": { "fields": [ "name", ], "queryFilter": "true", + "sortKeys": [], }, }, ], - "reversePropertyName": "members", + "reversePropertyName": "applications", "reverseRelationship": true, - "title": "Provisioning Roles Items", "type": "relationship", "validate": true, }, - "relationshipGrantTemporalConstraintsEnforced": true, - "returnByDefault": false, - "title": "Provisioning Roles", - "type": "array", - "usageDescription": "", + "returnByDefault": false, + "searchable": false, + "title": "Roles", + "type": "array", + "userEditable": false, + "viewable": true, + }, + "ssoEntities": { + "description": "SSO Entity Id", + "properties": { + "idpLocation": { + "type": "string", + }, + "idpPrivateId": { + "type": "string", + }, + "spLocation": { + "type": "string", + }, + "spPrivate": { + "type": "string", + }, + }, + "searchable": false, + "title": "SSO Entity Id", + "type": "object", "userEditable": false, - "viewable": true, + "viewable": false, }, - "sn": { - "description": "Last Name", - "isPersonal": true, - "searchable": true, - "title": "Last Name", + "templateName": { + "description": "Name of the template the application was created from", + "searchable": false, + "title": "Template Name", "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "userEditable": false, + "viewable": false, }, - "stateProvince": { - "description": "State/Province", - "isPersonal": false, - "title": "State/Province", + "templateVersion": { + "description": "The template version", + "searchable": false, + "title": "Template Version", "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "userEditable": false, + "viewable": false, }, - "telephoneNumber": { - "description": "Telephone Number", - "isPersonal": true, - "pattern": "^\\+?([0-9\\- \\(\\)])*$", - "title": "Telephone Number", - "type": "string", + "uiConfig": { + "description": "UI Config", + "isPersonal": false, + "properties": {}, + "searchable": false, + "title": "UI Config", + "type": "object", "usageDescription": "", - "userEditable": true, - "viewable": true, + "viewable": false, }, - "userName": { - "description": "Username", - "isPersonal": true, - "minLength": 1, - "policies": [ - { - "policyId": "valid-username", - }, - { - "params": { - "forbiddenChars": [ - "/", - ], - }, - "policyId": "cannot-contain-characters", - }, - { - "params": { - "minLength": 1, - }, - "policyId": "minimum-length", - }, - { - "params": { - "maxLength": 255, - }, - "policyId": "maximum-length", - }, - ], + "url": { "searchable": true, - "title": "Username", + "title": "Url", "type": "string", - "usageDescription": "", "userEditable": true, "viewable": true, }, }, - "required": [ - "userName", - "givenName", - "sn", - "mail", - ], - "title": "Bravo realm - User", - "type": "object", - "viewable": true, + "required": [ + "name", + ], + "title": "Bravo realm - Application", + "type": "object", + }, + }, + ], + }, + "mapping/managedAlpha_assignment_managedBravo_assignment": { + "_id": "mapping/managedAlpha_assignment_managedBravo_assignment", + "consentRequired": false, + "displayName": "managedAlpha_assignment_managedBravo_assignment", + "icon": null, + "name": "managedAlpha_assignment_managedBravo_assignment", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/alpha_assignment", + "target": "managed/bravo_assignment", + }, + "mapping/managedAlpha_user_systemAzureUser": { + "_id": "mapping/managedAlpha_user_systemAzureUser", + "consentRequired": false, + "defaultSourceFields": [ + "*", + "assignments", + ], + "defaultTargetFields": [ + "*", + "memberOf", + "__roles__", + "__servicePlanIds__", + ], + "displayName": "managedAlpha_user_systemAzureUser", + "icon": null, + "name": "managedAlpha_user_systemAzureUser", + "optimizeAssignmentSync": true, + "policies": [ + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "DELETE", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "SOURCE_TARGET_CONFLICT", + }, + { + "action": "INCORPORATE_CHANGES", + "situation": "TARGET_CHANGED", + }, + ], + "properties": [ + { + "source": "mail", + "target": "mail", + }, + { + "source": "givenName", + "target": "givenName", + }, + { + "source": "sn", + "target": "surname", + }, + { + "source": "", + "target": "displayName", + "transform": { + "source": "source.givenName+" "+source.sn", + "type": "text/javascript", + }, + }, + { + "source": "", + "target": "mailNickname", + "transform": { + "source": "source.givenName[0].toLowerCase()+source.sn.toLowerCase()", + "type": "text/javascript", + }, + }, + { + "source": "", + "target": "accountEnabled", + "transform": { + "source": "true", + "type": "text/javascript", + }, + }, + { + "condition": { + "globals": {}, + "source": "(typeof oldTarget === 'undefined' || oldTarget === null)", + "type": "text/javascript", + }, + "source": "", + "target": "__PASSWORD__", + "transform": { + "source": ""!@#$%"[Math.floor(Math.random()*5)] + Math.random().toString(36).slice(2, 13).toUpperCase()+Math.random().toString(36).slice(2,13)", + "type": "text/javascript", + }, + }, + ], + "queuedSync": { + "enabled": true, + "maxRetries": 0, + "pollingInterval": 10000, + }, + "runTargetPhase": false, + "source": "managed/alpha_user", + "sourceCondition": "/source/effectiveApplications[_id eq "0f357b7e-6c54-4351-a094-43916877d7e5"] or /source/effectiveAssignments[(mapping eq "managedAlpha_user_systemAzureUser" and type eq "__ENTITLEMENT__")]", + "sourceQuery": { + "_queryFilter": "effectiveApplications[_id eq "0f357b7e-6c54-4351-a094-43916877d7e5"] or lastSync/managedAlpha_user_systemAzureUser pr or /source/effectiveAssignments[(mapping eq "managedAlpha_user_systemAzureUser" and type eq "__ENTITLEMENT__")]", + }, + "target": "system/Azure/User", + }, + "mapping/managedBravo_group_managedBravo_group": { + "_id": "mapping/managedBravo_group_managedBravo_group", + "consentRequired": false, + "displayName": "managedBravo_group_managedBravo_group", + "icon": null, + "name": "managedBravo_group_managedBravo_group", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_group", + "target": "managed/bravo_group", + }, + "mapping/managedBravo_user_managedBravo_user0": { + "_id": "mapping/managedBravo_user_managedBravo_user0", + "consentRequired": false, + "displayName": "managedBravo_user_managedBravo_user0", + "icon": null, + "name": "managedBravo_user_managedBravo_user0", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "target": "managed/bravo_user", + }, + "mapping/mapping12": { + "_id": "mapping/mapping12", + "consentRequired": false, + "displayName": "mapping12", + "linkQualifiers": [], + "name": "mapping12", + "policies": [], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [], + "target": "managed/bravo_user", + }, + "mapping/systemAzureDirectoryrole_managedAlpha_assignment": { + "_id": "mapping/systemAzureDirectoryrole_managedAlpha_assignment", + "consentRequired": false, + "displayName": "systemAzureDirectoryrole_managedAlpha_assignment", + "icon": null, + "name": "systemAzureDirectoryrole_managedAlpha_assignment", + "policies": [ + { + "action": "EXCEPTION", + "situation": "AMBIGUOUS", + }, + { + "action": "DELETE", + "situation": "SOURCE_MISSING", + }, + { + "action": "CREATE", + "situation": "MISSING", + }, + { + "action": "EXCEPTION", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "DELETE", + "situation": "UNQUALIFIED", + }, + { + "action": "EXCEPTION", + "situation": "UNASSIGNED", + }, + { + "action": "EXCEPTION", + "situation": "LINK_ONLY", + }, + { + "action": "IGNORE", + "situation": "TARGET_IGNORED", + }, + { + "action": "IGNORE", + "situation": "SOURCE_IGNORED", + }, + { + "action": "IGNORE", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "LINK", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "default": "__RESOURCE__", + "target": "type", + }, + { + "source": "", + "target": "description", + "transform": { + "globals": {}, + "source": "(typeof source.description !== "undefined" && source.description !== null) ? source.description : source._id", + "type": "text/javascript", + }, + }, + { + "default": "managedAlpha_user_systemAzureUser", + "target": "mapping", + }, + { + "source": "", + "target": "name", + "transform": { + "globals": {}, + "source": "(typeof source.displayName !== "undefined" && source.displayName !== null) ? source.displayName : source._id", + "type": "text/javascript", + }, + }, + { + "source": "_id", + "target": "attributes", + "transform": { + "globals": {}, + "source": "[ + { + 'name': '__roles__', + 'value': [source] + } +]", + "type": "text/javascript", + }, + }, + { + "source": "_id", + "target": "_id", + "transform": { + "globals": { + "sourceObjectSet": "system_Azure_directoryRole_", + }, + "source": "sourceObjectSet.concat(source)", + "type": "text/javascript", }, }, + ], + "source": "system/Azure/directoryRole", + "target": "managed/alpha_assignment", + "targetQuery": { + "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "__roles__"]", + }, + }, + "mapping/systemAzureServiceplan_managedAlpha_assignment": { + "_id": "mapping/systemAzureServiceplan_managedAlpha_assignment", + "consentRequired": false, + "displayName": "systemAzureServiceplan_managedAlpha_assignment", + "icon": null, + "name": "systemAzureServiceplan_managedAlpha_assignment", + "policies": [ { - "name": "alpha_role", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "description": "", - "icon": "fa-check-square-o", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", - "mat-icon": "assignment_ind", - "order": [ - "_id", - "name", - "description", - "members", - "assignments", - "applications", - "condition", - "temporalConstraints", - ], - "properties": { - "_id": { - "description": "Role ID", - "searchable": false, - "title": "Name", - "type": "string", - "viewable": false, - }, - "applications": { - "description": "Role Applications", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items", - "notifySelf": true, - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Role Application Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Application", - "path": "managed/alpha_application", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "roles", - "reverseRelationship": true, - "title": "Role Application Items", - "type": "relationship", - "validate": true, - }, - "notifyRelationships": [ - "members", - ], - "relationshipGrantTemporalConstraintsEnforced": true, - "returnByDefault": false, - "title": "Applications", - "type": "array", - "viewable": false, - }, - "assignments": { - "description": "Managed Assignments", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", - "notifySelf": true, - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Managed Assignments Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Assignment", - "path": "managed/alpha_assignment", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "roles", - "reverseRelationship": true, - "title": "Managed Assignments Items", - "type": "relationship", - "validate": true, - }, - "notifyRelationships": [ - "members", - ], - "returnByDefault": false, - "title": "Managed Assignments", - "type": "array", - "viewable": true, - }, - "condition": { - "description": "A conditional filter for this role", - "isConditional": true, - "searchable": false, - "title": "Condition", - "type": "string", - "viewable": false, - }, - "description": { - "description": "The role description, used for display purposes.", - "searchable": true, - "title": "Description", - "type": "string", - "viewable": true, - }, - "members": { - "description": "Role Members", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Role Members Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociation": true, - "label": "User", - "notify": true, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "roles", - "reverseRelationship": true, - "title": "Role Members Items", - "type": "relationship", - "validate": true, - }, - "relationshipGrantTemporalConstraintsEnforced": true, - "returnByDefault": false, - "title": "Role Members", - "type": "array", - "viewable": true, - }, - "name": { - "description": "The role name, used for display purposes.", - "policies": [ - { - "policyId": "unique", - }, - ], - "searchable": true, - "title": "Name", - "type": "string", - "viewable": true, - }, - "temporalConstraints": { - "description": "An array of temporal constraints for a role", - "isTemporalConstraint": true, - "items": { - "order": [ - "duration", - ], - "properties": { - "duration": { - "description": "Duration", - "type": "string", - }, - }, - "required": [ - "duration", - ], - "title": "Temporal Constraints Items", - "type": "object", - }, - "notifyRelationships": [ - "members", - ], - "returnByDefault": true, - "title": "Temporal Constraints", - "type": "array", - "viewable": false, - }, + "action": "EXCEPTION", + "situation": "AMBIGUOUS", + }, + { + "action": "DELETE", + "situation": "SOURCE_MISSING", + }, + { + "action": "CREATE", + "situation": "MISSING", + }, + { + "action": "EXCEPTION", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "DELETE", + "situation": "UNQUALIFIED", + }, + { + "action": "EXCEPTION", + "situation": "UNASSIGNED", + }, + { + "action": "EXCEPTION", + "situation": "LINK_ONLY", + }, + { + "action": "IGNORE", + "situation": "TARGET_IGNORED", + }, + { + "action": "IGNORE", + "situation": "SOURCE_IGNORED", + }, + { + "action": "IGNORE", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "LINK", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "default": "__RESOURCE__", + "target": "type", + }, + { + "source": "", + "target": "description", + "transform": { + "globals": {}, + "source": "(typeof source.servicePlanName !== "undefined" && source.servicePlanName !== null) ? source.servicePlanName : source._id", + "type": "text/javascript", + }, + }, + { + "default": "managedAlpha_user_systemAzureUser", + "target": "mapping", + }, + { + "source": "", + "target": "name", + "transform": { + "globals": {}, + "source": "(typeof source.servicePlanName !== "undefined" && source.servicePlanName !== null) ? source.servicePlanName : source._id", + "type": "text/javascript", + }, + }, + { + "source": "_id", + "target": "attributes", + "transform": { + "globals": {}, + "source": "[ + { + 'name': '__servicePlanIds__', + 'value': [source] + } +]", + "type": "text/javascript", + }, + }, + { + "source": "_id", + "target": "_id", + "transform": { + "globals": { + "sourceObjectSet": "system_Azure_servicePlan_", + }, + "source": "sourceObjectSet.concat(source)", + "type": "text/javascript", + }, + }, + ], + "source": "system/Azure/servicePlan", + "target": "managed/alpha_assignment", + "targetQuery": { + "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "__servicePlanIds__"]", + }, + }, + "mapping/systemAzureUser_managedAlpha_user": { + "_id": "mapping/systemAzureUser_managedAlpha_user", + "consentRequired": false, + "correlationQuery": [ + { + "linkQualifier": "default", + "source": "var qry = {'_queryFilter': 'mail eq "' + source.mail + '"'}; qry", + "type": "text/javascript", + }, + ], + "defaultSourceFields": [ + "*", + "memberOf", + "__roles__", + "__servicePlanIds__", + ], + "defaultTargetFields": [ + "*", + "assignments", + ], + "displayName": "systemAzureUser_managedAlpha_user", + "icon": null, + "links": "managedAlpha_user_systemAzureUser", + "name": "systemAzureUser_managedAlpha_user", + "policies": [ + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "ONBOARD", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "SOURCE_TARGET_CONFLICT", + }, + ], + "properties": [ + { + "referencedObjectType": "__GROUP__", + "source": "memberOf", + "target": "assignments", + }, + { + "referencedObjectType": "directoryRole", + "source": "__roles__", + "target": "assignments", + }, + { + "referencedObjectType": "servicePlan", + "source": "__servicePlanIds__", + "target": "assignments", + }, + ], + "reconSourceQueryPageSize": 999, + "reconSourceQueryPaging": true, + "runTargetPhase": false, + "source": "system/Azure/User", + "sourceQueryFullEntry": true, + "target": "managed/alpha_user", + }, + "mapping/systemAzure__group___managedAlpha_assignment": { + "_id": "mapping/systemAzure__group___managedAlpha_assignment", + "consentRequired": false, + "displayName": "systemAzure__group___managedAlpha_assignment", + "icon": null, + "name": "systemAzure__group___managedAlpha_assignment", + "policies": [ + { + "action": "EXCEPTION", + "situation": "AMBIGUOUS", + }, + { + "action": "DELETE", + "situation": "SOURCE_MISSING", + }, + { + "action": "CREATE", + "situation": "MISSING", + }, + { + "action": "EXCEPTION", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "DELETE", + "situation": "UNQUALIFIED", + }, + { + "action": "EXCEPTION", + "situation": "UNASSIGNED", + }, + { + "action": "EXCEPTION", + "situation": "LINK_ONLY", + }, + { + "action": "IGNORE", + "situation": "TARGET_IGNORED", + }, + { + "action": "IGNORE", + "situation": "SOURCE_IGNORED", + }, + { + "action": "IGNORE", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "LINK", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "default": "__RESOURCE__", + "target": "type", + }, + { + "source": "", + "target": "description", + "transform": { + "globals": {}, + "source": "(typeof source.description !== "undefined" && source.description !== null) ? source.description : source._id", + "type": "text/javascript", + }, + }, + { + "default": "managedAlpha_user_systemAzureUser", + "target": "mapping", + }, + { + "source": "", + "target": "name", + "transform": { + "globals": {}, + "source": "(typeof source.displayName !== "undefined" && source.displayName !== null) ? source.displayName : source._id", + "type": "text/javascript", + }, + }, + { + "source": "_id", + "target": "attributes", + "transform": { + "globals": {}, + "source": "[ + { + 'name': 'memberOf', + 'value': [source] + } +]", + "type": "text/javascript", + }, + }, + { + "source": "_id", + "target": "_id", + "transform": { + "globals": { + "sourceObjectSet": "system_Azure___GROUP___", }, - "required": [ - "name", - ], - "title": "Alpha realm - Role", - "type": "object", + "source": "sourceObjectSet.concat(source)", + "type": "text/javascript", }, }, + ], + "source": "system/Azure/__GROUP__", + "target": "managed/alpha_assignment", + "targetQuery": { + "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "memberOf"]", + }, + }, + "policy": { + "_id": "policy", + "additionalFiles": [], + "resources": [], + }, + "privilegeAssignments": { + "_id": "privilegeAssignments", + "privilegeAssignments": [ { - "name": "bravo_role", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "description": "", - "icon": "fa-check-square-o", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", - "mat-icon": "assignment_ind", - "order": [ - "_id", - "name", - "description", - "members", - "assignments", - "applications", - "condition", - "temporalConstraints", - ], - "properties": { - "_id": { - "description": "Role ID", - "searchable": false, - "title": "Name", - "type": "string", - "viewable": false, - }, - "applications": { - "description": "Role Applications", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items", - "notifySelf": true, - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Role Application Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Application", - "path": "managed/bravo_application", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "roles", - "reverseRelationship": true, - "title": "Role Application Items", - "type": "relationship", - "validate": true, - }, - "notifyRelationships": [ - "members", - ], - "relationshipGrantTemporalConstraintsEnforced": true, - "returnByDefault": false, - "title": "Applications", - "type": "array", - "viewable": false, - }, - "assignments": { - "description": "Managed Assignments", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", - "notifySelf": true, - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Managed Assignments Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Assignment", - "path": "managed/bravo_assignment", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "roles", - "reverseRelationship": true, - "title": "Managed Assignments Items", - "type": "relationship", - "validate": true, - }, - "notifyRelationships": [ - "members", - ], - "returnByDefault": false, - "title": "Managed Assignments", - "type": "array", - "viewable": true, - }, - "condition": { - "description": "A conditional filter for this role", - "isConditional": true, - "searchable": false, - "title": "Condition", - "type": "string", - "viewable": false, - }, - "description": { - "description": "The role description, used for display purposes.", - "searchable": true, - "title": "Description", + "name": "ownerPrivileges", + "privileges": [ + "owner-view-update-delete-orgs", + "owner-create-orgs", + "owner-view-update-delete-admins-and-members", + "owner-create-admins", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "ownerOfOrg", + }, + { + "name": "adminPrivileges", + "privileges": [ + "admin-view-update-delete-orgs", + "admin-create-orgs", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "adminOfOrg", + }, + ], + }, + "privileges": { + "_id": "privileges", + "privileges": [], + }, + "provisioner.openic/GoogleApps": { + "_id": "provisioner.openic/GoogleApps", + "configurationProperties": { + "availableLicenses": [ + "101005/1010050001", + "101001/1010010001", + "101031/1010310010", + "101034/1010340002", + "101038/1010380002", + "101034/1010340001", + "101038/1010380003", + "101034/1010340004", + "101034/1010340003", + "101034/1010340006", + "Google-Apps/Google-Apps-For-Business", + "101034/1010340005", + "Google-Vault/Google-Vault", + "Google-Apps/1010020031", + "Google-Apps/1010020030", + "Google-Apps/1010060003", + "Google-Apps/1010060005", + "Google-Apps/Google-Apps-Unlimited", + "Google-Apps/1010020029", + "Google-Apps/Google-Apps-Lite", + "101031/1010310003", + "101033/1010330002", + "101033/1010330004", + "Google-Apps/Google-Apps-For-Education", + "101031/1010310002", + "101033/1010330003", + "Google-Apps/1010020026", + "101031/1010310007", + "Google-Apps/1010020025", + "101031/1010310008", + "Google-Apps/1010020028", + "Google-Apps/Google-Apps-For-Postini", + "101031/1010310005", + "Google-Apps/1010020027", + "101031/1010310006", + "101031/1010310009", + "Google-Vault/Google-Vault-Former-Employee", + "101038/1010370001", + "Google-Apps/1010020020", + "Google-Apps/1010060001", + ], + "clientId": "&{esv.gac.client.id}", + "clientSecret": "&{esv.gac.secret}", + "domain": "&{esv.gac.domain}", + "groupsMaxResults": "200", + "listProductAndSkuMaxResults": "100", + "listProductMaxResults": "100", + "membersMaxResults": "200", + "proxyHost": null, + "proxyPort": 8080, + "refreshToken": "&{esv.gac.refresh}", + "roleAssignmentMaxResults": 100, + "roleMaxResults": 100, + "usersMaxResults": "100", + "validateCertificate": true, + }, + "connectorRef": { + "bundleName": "org.forgerock.openicf.connectors.googleapps-connector", + "bundleVersion": "[1.5.0.0,1.6.0.0)", + "connectorHostRef": "", + "connectorName": "org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector", + "displayName": "GoogleApps Connector", + "systemType": "provisioner.openicf", + }, + "enabled": { + "$bool": "&{esv.gac.enable.connector}", + }, + "objectTypes": { + "__ACCOUNT__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ACCOUNT__", + "nativeType": "__ACCOUNT__", + "properties": { + "__GROUPS__": { + "flags": [ + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "string", "type": "string", - "viewable": true, - }, - "members": { - "description": "Role Members", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Role Members Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociation": true, - "label": "User", - "notify": true, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "roles", - "reverseRelationship": true, - "title": "Role Members Items", - "type": "relationship", - "validate": true, - }, - "relationshipGrantTemporalConstraintsEnforced": true, - "returnByDefault": false, - "title": "Role Members", - "type": "array", - "viewable": true, }, - "name": { - "description": "The role name, used for display purposes.", - "policies": [ - { - "policyId": "unique", - }, - ], - "searchable": true, - "title": "Name", - "type": "string", - "viewable": true, + "nativeName": "__GROUPS__", + "nativeType": "string", + "type": "array", + }, + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "__PASSWORD__": { + "flags": [ + "NOT_READABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "nativeName": "__PASSWORD__", + "nativeType": "JAVA_TYPE_GUARDEDSTRING", + "required": true, + "type": "string", + }, + "__PHOTO__": { + "flags": [ + "NOT_RETURNED_BY_DEFAULT", + ], + "nativeName": "__PHOTO__", + "nativeType": "JAVA_TYPE_BYTE_ARRAY", + "type": "string", + }, + "__SECONDARY_EMAILS__": { + "items": { + "nativeType": "object", + "type": "object", }, - "temporalConstraints": { - "description": "An array of temporal constraints for a role", - "isTemporalConstraint": true, - "items": { - "order": [ - "duration", - ], - "properties": { - "duration": { - "description": "Duration", - "type": "string", - }, - }, - "required": [ - "duration", - ], - "title": "Temporal Constraints Items", - "type": "object", - }, - "notifyRelationships": [ - "members", - ], - "returnByDefault": true, - "title": "Temporal Constraints", - "type": "array", - "viewable": false, + "nativeName": "__SECONDARY_EMAILS__", + "nativeType": "object", + "type": "array", + }, + "__UID__": { + "nativeName": "__UID__", + "nativeType": "string", + "required": false, + "type": "string", + }, + "addresses": { + "items": { + "nativeType": "object", + "type": "object", }, + "nativeName": "addresses", + "nativeType": "object", + "type": "array", }, - "required": [ - "name", - ], - "title": "Bravo realm - Role", - "type": "object", - }, - }, - { - "attributeEncryption": {}, - "name": "alpha_assignment", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "description": "A role assignment", - "icon": "fa-key", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", - "mat-icon": "vpn_key", - "order": [ - "_id", - "name", - "description", - "type", - "mapping", - "attributes", - "linkQualifiers", - "roles", - "members", - "condition", - "weight", - ], - "properties": { - "_id": { - "description": "The assignment ID", - "searchable": false, - "title": "Name", + "agreedToTerms": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "agreedToTerms", + "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", + "type": "boolean", + }, + "aliases": { + "flags": [ + "NOT_CREATABLE", + ], + "items": { + "nativeType": "string", "type": "string", - "viewable": false, - }, - "attributes": { - "description": "The attributes operated on by this assignment.", - "items": { - "order": [ - "assignmentOperation", - "unassignmentOperation", - "name", - "value", - ], - "properties": { - "assignmentOperation": { - "description": "Assignment operation", - "type": "string", - }, - "name": { - "description": "Name", - "type": "string", - }, - "unassignmentOperation": { - "description": "Unassignment operation", - "type": "string", - }, - "value": { - "description": "Value", - "type": "string", - }, - }, - "required": [], - "title": "Assignment Attributes Items", - "type": "object", - }, - "notifyRelationships": [ - "roles", - "members", - ], - "title": "Assignment Attributes", - "type": "array", - "viewable": true, }, - "condition": { - "description": "A conditional filter for this assignment", - "isConditional": true, - "searchable": false, - "title": "Condition", + "nativeName": "aliases", + "nativeType": "string", + "type": "array", + }, + "archived": { + "nativeName": "archived", + "nativeType": "boolean", + "type": "boolean", + }, + "changePasswordAtNextLogin": { + "nativeName": "changePasswordAtNextLogin", + "nativeType": "boolean", + "type": "boolean", + }, + "creationTime": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", "type": "string", - "viewable": false, }, - "description": { - "description": "The assignment description, used for display purposes.", - "searchable": true, - "title": "Description", - "type": "string", - "viewable": true, + "nativeName": "creationTime", + "nativeType": "string", + "type": "array", + }, + "customSchemas": { + "nativeName": "customSchemas", + "nativeType": "object", + "type": "object", + }, + "customerId": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "customerId", + "nativeType": "string", + "type": "string", + }, + "deletionTime": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "deletionTime", + "nativeType": "string", + "type": "string", + }, + "externalIds": { + "items": { + "nativeType": "object", + "type": "object", }, - "linkQualifiers": { - "description": "Conditional link qualifiers to restrict this assignment to.", - "items": { - "title": "Link Qualifiers Items", - "type": "string", - }, - "title": "Link Qualifiers", - "type": "array", - "viewable": true, + "nativeName": "externalIds", + "nativeType": "object", + "type": "array", + }, + "familyName": { + "nativeName": "familyName", + "nativeType": "string", + "type": "string", + }, + "fullName": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "fullName", + "nativeType": "string", + "type": "string", + }, + "givenName": { + "nativeName": "givenName", + "nativeType": "string", + "required": true, + "type": "string", + }, + "hashFunction": { + "flags": [ + "NOT_RETURNED_BY_DEFAULT", + ], + "nativeName": "hashFunction", + "nativeType": "string", + "type": "string", + }, + "ims": { + "items": { + "nativeType": "object", + "type": "object", }, - "mapping": { - "description": "The name of the mapping this assignment applies to", - "policies": [ - { - "policyId": "mapping-exists", - }, - ], - "searchable": true, - "title": "Mapping", - "type": "string", - "viewable": true, + "nativeName": "ims", + "nativeType": "object", + "type": "array", + }, + "includeInGlobalAddressList": { + "nativeName": "includeInGlobalAddressList", + "nativeType": "boolean", + "type": "boolean", + }, + "ipWhitelisted": { + "nativeName": "ipWhitelisted", + "nativeType": "boolean", + "type": "boolean", + }, + "isAdmin": { + "nativeName": "isAdmin", + "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", + "type": "boolean", + }, + "isDelegatedAdmin": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "isDelegatedAdmin", + "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", + "type": "boolean", + }, + "isEnforcedIn2Sv": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "isEnforcedIn2Sv", + "nativeType": "boolean", + "type": "boolean", + }, + "isEnrolledIn2Sv": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "isEnrolledIn2Sv", + "nativeType": "boolean", + "type": "boolean", + }, + "isMailboxSetup": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "isMailboxSetup", + "nativeType": "boolean", + "type": "boolean", + }, + "languages": { + "items": { + "nativeType": "object", + "type": "object", }, - "members": { - "description": "Assignment Members", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Assignment Members Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociation": true, - "label": "User", - "notify": true, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "assignments", - "reverseRelationship": true, - "title": "Assignment Members Items", - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "title": "Assignment Members", - "type": "array", - "viewable": true, + "nativeName": "languages", + "nativeType": "object", + "type": "array", + }, + "lastLoginTime": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", + "type": "string", }, - "name": { - "description": "The assignment name, used for display purposes.", - "searchable": true, - "title": "Name", + "nativeName": "lastLoginTime", + "nativeType": "string", + "type": "array", + }, + "nonEditableAliases": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", "type": "string", - "viewable": true, }, - "roles": { - "description": "Managed Roles", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Managed Roles Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Role", - "notify": true, - "path": "managed/alpha_role", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "assignments", - "reverseRelationship": true, - "title": "Managed Roles Items", - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "title": "Managed Roles", - "type": "array", - "userEditable": false, - "viewable": true, + "nativeName": "nonEditableAliases", + "nativeType": "string", + "type": "array", + }, + "orgUnitPath": { + "nativeName": "orgUnitPath", + "nativeType": "string", + "type": "string", + }, + "organizations": { + "items": { + "nativeType": "object", + "type": "object", }, - "type": { - "description": "The type of object this assignment represents", - "title": "Type", - "type": "string", - "viewable": true, + "nativeName": "organizations", + "nativeType": "object", + "type": "array", + }, + "phones": { + "items": { + "nativeType": "object", + "type": "object", }, - "weight": { - "description": "The weight of the assignment.", - "notifyRelationships": [ - "roles", - "members", - ], - "searchable": false, - "title": "Weight", - "type": [ - "number", - "null", - ], - "viewable": true, + "nativeName": "phones", + "nativeType": "object", + "type": "array", + }, + "primaryEmail": { + "nativeName": "primaryEmail", + "nativeType": "string", + "type": "string", + }, + "recoveryEmail": { + "nativeName": "recoveryEmail", + "nativeType": "string", + "type": "string", + }, + "recoveryPhone": { + "nativeName": "recoveryPhone", + "nativeType": "string", + "type": "string", + }, + "relations": { + "items": { + "nativeType": "object", + "type": "object", }, + "nativeName": "relations", + "nativeType": "object", + "type": "array", + }, + "suspended": { + "nativeName": "suspended", + "nativeType": "boolean", + "type": "boolean", + }, + "suspensionReason": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "suspensionReason", + "nativeType": "string", + "type": "string", + }, + "thumbnailPhotoUrl": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "thumbnailPhotoUrl", + "nativeType": "string", + "type": "string", + }, + }, + "type": "object", + }, + }, + "operationTimeout": { + "AUTHENTICATE": -1, + "CREATE": -1, + "DELETE": -1, + "GET": -1, + "RESOLVEUSERNAME": -1, + "SCHEMA": -1, + "SCRIPT_ON_CONNECTOR": -1, + "SCRIPT_ON_RESOURCE": -1, + "SEARCH": -1, + "SYNC": -1, + "TEST": -1, + "UPDATE": -1, + "VALIDATE": -1, + }, + "poolConfigOption": { + "maxIdle": 10, + "maxObjects": 10, + "maxWait": 150000, + "minEvictableIdleTimeMillis": 120000, + "minIdle": 1, + }, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, + }, + }, + "provisioner.openicf.connectorinfoprovider": { + "_id": "provisioner.openicf.connectorinfoprovider", + "connectorsLocation": "connectors", + "remoteConnectorClients": [ + { + "enabled": true, + "name": "rcs1", + "useSSL": true, + }, + ], + "remoteConnectorClientsGroups": [], + "remoteConnectorServers": [], + "remoteConnectorServersGroups": [], + }, + "provisioner.openicf/Azure": { + "_id": "provisioner.openicf/Azure", + "configurationProperties": { + "clientId": "4b07adcc-329c-434c-aa83-49a14bef3c49", + "clientSecret": { + "$crypto": { + "type": "x-simple-encryption", + "value": { + "cipher": "AES/CBC/PKCS5Padding", + "data": "W63amdvzlmynT40WOTl1wPWDc8FUlGWQZK158lmlFTrnhy9PbWZV5YE4v3VeMUDC", + "iv": "KG/YFc8v26QHJzRI3uFhzw==", + "keySize": 16, + "mac": "mA4BzCNS7tuLhosQ+es1Tg==", + "purpose": "idm.config.encryption", + "salt": "vvPwKk0KqOqMjElQgICqEA==", + "stableId": "openidm-sym-default", }, - "required": [ - "name", - "description", - "mapping", - ], - "title": "Alpha realm - Assignment", - "type": "object", }, }, - { - "attributeEncryption": {}, - "name": "bravo_assignment", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "description": "A role assignment", - "icon": "fa-key", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", - "mat-icon": "vpn_key", - "order": [ - "_id", - "name", - "description", - "type", - "mapping", - "attributes", - "linkQualifiers", - "roles", - "members", - "condition", - "weight", - ], - "properties": { - "_id": { - "description": "The assignment ID", - "searchable": false, - "title": "Name", + "httpProxyHost": null, + "httpProxyPassword": null, + "httpProxyPort": null, + "httpProxyUsername": null, + "licenseCacheExpiryTime": 60, + "performHardDelete": true, + "readRateLimit": null, + "tenant": "711ffa9c-5972-4713-ace3-688c9732614a", + "writeRateLimit": null, + }, + "connectorRef": { + "bundleName": "org.forgerock.openicf.connectors.msgraphapi-connector", + "bundleVersion": "1.5.20.21", + "connectorName": "org.forgerock.openicf.connectors.msgraphapi.MSGraphAPIConnector", + "displayName": "MSGraphAPI Connector", + "systemType": "provisioner.openicf", + }, + "enabled": true, + "objectTypes": { + "User": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ACCOUNT__", + "nativeType": "__ACCOUNT__", + "properties": { + "__PASSWORD__": { + "autocomplete": "new-password", + "flags": [ + "NOT_UPDATEABLE", + "NOT_READABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "nativeName": "__PASSWORD__", + "nativeType": "JAVA_TYPE_GUARDEDSTRING", + "required": true, + "type": "string", + }, + "__roles__": { + "flags": [ + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "string", "type": "string", - "viewable": false, - }, - "attributes": { - "description": "The attributes operated on by this assignment.", - "items": { - "order": [ - "assignmentOperation", - "unassignmentOperation", - "name", - "value", - ], - "properties": { - "assignmentOperation": { - "description": "Assignment operation", - "type": "string", - }, - "name": { - "description": "Name", - "type": "string", - }, - "unassignmentOperation": { - "description": "Unassignment operation", - "type": "string", - }, - "value": { - "description": "Value", - "type": "string", - }, - }, - "required": [], - "title": "Assignment Attributes Items", - "type": "object", - }, - "notifyRelationships": [ - "roles", - "members", - ], - "title": "Assignment Attributes", - "type": "array", - "viewable": true, }, - "condition": { - "description": "A conditional filter for this assignment", - "isConditional": true, - "searchable": false, - "title": "Condition", + "nativeName": "__roles__", + "nativeType": "string", + "type": "array", + }, + "__servicePlanIds__": { + "items": { + "nativeType": "string", "type": "string", - "viewable": false, }, - "description": { - "description": "The assignment description, used for display purposes.", - "searchable": true, - "title": "Description", + "nativeName": "__servicePlanIds__", + "nativeType": "string", + "type": "array", + }, + "accountEnabled": { + "nativeName": "accountEnabled", + "nativeType": "boolean", + "required": true, + "type": "boolean", + }, + "city": { + "nativeName": "city", + "nativeType": "string", + "type": "string", + }, + "companyName": { + "nativeName": "companyName", + "nativeType": "string", + "type": "string", + }, + "country": { + "nativeName": "country", + "nativeType": "string", + "type": "string", + }, + "department": { + "nativeName": "department", + "nativeType": "string", + "type": "string", + }, + "displayName": { + "nativeName": "displayName", + "nativeType": "string", + "required": true, + "type": "string", + }, + "givenName": { + "nativeName": "givenName", + "nativeType": "string", + "type": "string", + }, + "jobTitle": { + "nativeName": "jobTitle", + "nativeType": "string", + "type": "string", + }, + "mail": { + "nativeName": "mail", + "nativeType": "string", + "required": true, + "type": "string", + }, + "mailNickname": { + "nativeName": "mailNickname", + "nativeType": "string", + "required": true, + "type": "string", + }, + "manager": { + "nativeName": "manager", + "nativeType": "object", + "type": "object", + }, + "memberOf": { + "flags": [ + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "string", "type": "string", - "viewable": true, - }, - "linkQualifiers": { - "description": "Conditional link qualifiers to restrict this assignment to.", - "items": { - "title": "Link Qualifiers Items", - "type": "string", - }, - "title": "Link Qualifiers", - "type": "array", - "viewable": true, }, - "mapping": { - "description": "The name of the mapping this assignment applies to", - "policies": [ - { - "policyId": "mapping-exists", - }, - ], - "searchable": true, - "title": "Mapping", + "nativeName": "memberOf", + "nativeType": "string", + "type": "array", + }, + "mobilePhone": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "mobilePhone", + "nativeType": "string", + "type": "string", + }, + "onPremisesImmutableId": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "onPremisesImmutableId", + "nativeType": "string", + "type": "string", + }, + "onPremisesSecurityIdentifier": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "onPremisesSecurityIdentifier", + "nativeType": "string", + "type": "string", + }, + "otherMails": { + "items": { + "nativeType": "string", "type": "string", - "viewable": true, - }, - "members": { - "description": "Assignment Members", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Assignment Members Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociation": true, - "label": "User", - "notify": true, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "assignments", - "reverseRelationship": true, - "title": "Assignment Members Items", - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "title": "Assignment Members", - "type": "array", - "viewable": true, }, - "name": { - "description": "The assignment name, used for display purposes.", - "searchable": true, - "title": "Name", + "nativeName": "otherMails", + "nativeType": "string", + "type": "array", + }, + "postalCode": { + "nativeName": "postalCode", + "nativeType": "string", + "type": "string", + }, + "preferredLanguage": { + "nativeName": "preferredLanguage", + "nativeType": "string", + "type": "string", + }, + "proxyAddresses": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", "type": "string", - "viewable": true, }, - "roles": { - "description": "Managed Roles", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Managed Roles Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Role", - "notify": true, - "path": "managed/bravo_role", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "assignments", - "reverseRelationship": true, - "title": "Managed Roles Items", - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "title": "Managed Roles", - "type": "array", - "userEditable": false, - "viewable": true, + "nativeName": "proxyAddresses", + "nativeType": "string", + "type": "array", + }, + "state": { + "nativeName": "state", + "nativeType": "string", + "type": "string", + }, + "streetAddress": { + "nativeName": "streetAddress", + "nativeType": "string", + "type": "string", + }, + "surname": { + "nativeName": "surname", + "nativeType": "string", + "type": "string", + }, + "usageLocation": { + "nativeName": "usageLocation", + "nativeType": "string", + "type": "string", + }, + "userPrincipalName": { + "nativeName": "userPrincipalName", + "nativeType": "string", + "required": true, + "type": "string", + }, + "userType": { + "nativeName": "userType", + "nativeType": "string", + "type": "string", + }, + }, + "type": "object", + }, + "__GROUP__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__GROUP__", + "nativeType": "__GROUP__", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "required": true, + "type": "string", + }, + "description": { + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "displayName": { + "nativeName": "displayName", + "nativeType": "string", + "required": true, + "type": "string", + }, + "groupTypes": { + "items": { + "nativeType": "string", + "type": "string", }, - "type": { - "description": "The type of object this assignment represents", - "title": "Type", + "nativeName": "groupTypes", + "nativeType": "string", + "type": "string", + }, + "id": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "id", + "type": "string", + }, + "mail": { + "nativeName": "mail", + "nativeType": "string", + "type": "string", + }, + "mailEnabled": { + "nativeName": "mailEnabled", + "nativeType": "boolean", + "required": true, + "type": "boolean", + }, + "onPremisesSecurityIdentifier": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "onPremisesSecurityIdentifier", + "nativeType": "string", + "type": "string", + }, + "proxyAddresses": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", "type": "string", - "viewable": true, - }, - "weight": { - "description": "The weight of the assignment.", - "notifyRelationships": [ - "roles", - "members", - ], - "searchable": false, - "title": "Weight", - "type": [ - "number", - "null", - ], - "viewable": true, }, + "nativeName": "proxyAddresses", + "nativeType": "string", + "type": "array", + }, + "securityEnabled": { + "nativeName": "securityEnabled", + "nativeType": "boolean", + "required": true, + "type": "boolean", + }, + "type": { + "nativeName": "type", + "required": true, + "type": "string", }, - "required": [ - "name", - "description", - "mapping", - ], - "title": "Bravo realm - Assignment", - "type": "object", }, + "type": "object", }, - { - "name": "alpha_organization", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "description": "An organization or tenant, whose resources are managed by organizational admins.", - "icon": "fa-building", - "mat-icon": "domain", - "order": [ - "name", - "description", - "owners", - "admins", - "members", - "parent", - "children", - "adminIDs", - "ownerIDs", - "parentAdminIDs", - "parentOwnerIDs", - "parentIDs", - ], - "properties": { - "adminIDs": { - "isVirtual": true, - "items": { - "title": "admin ids", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "_id", - ], - "referencedRelationshipFields": [ - "admins", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "Admin user ids", - "type": "array", - "userEditable": false, - "viewable": false, + "directoryRole": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "directoryRole", + "nativeType": "directoryRole", + "properties": { + "description": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "displayName": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "displayName", + "nativeType": "string", + "type": "string", + }, + }, + "type": "object", + }, + "servicePlan": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "servicePlan", + "nativeType": "servicePlan", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "appliesTo": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "appliesTo", + "nativeType": "string", + "type": "string", + }, + "provisioningStatus": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "provisioningStatus", + "nativeType": "string", + "type": "string", + }, + "servicePlanId": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "servicePlanId", + "nativeType": "string", + "type": "string", + }, + "servicePlanName": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "servicePlanName", + "nativeType": "string", + "type": "string", + }, + "subscriberSkuId": { + "flags": [ + "NOT_UPDATEABLE", + "NOT_CREATABLE", + ], + "nativeName": "subscriberSkuId", + "type": "string", + }, + }, + "type": "object", + }, + "servicePrincipal": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "servicePrincipal", + "nativeType": "servicePrincipal", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "__addAppRoleAssignedTo__": { + "flags": [ + "NOT_READABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "object", + "type": "object", }, - "admins": { - "items": { - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": false, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "adminOfOrg", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "notifyRelationships": [ - "children", - ], - "returnByDefault": false, - "searchable": false, - "title": "Administrators", - "type": "array", - "userEditable": false, - "viewable": true, + "nativeName": "__addAppRoleAssignedTo__", + "nativeType": "object", + "type": "array", + }, + "__addAppRoleAssignments__": { + "flags": [ + "NOT_READABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "object", + "type": "object", }, - "children": { - "description": "Child Organizations", - "items": { - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Organization", - "notify": true, - "path": "managed/alpha_organization", - "query": { - "fields": [ - "name", - "description", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "parent", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "policies": [], - "returnByDefault": false, - "searchable": false, - "title": "Child Organizations", - "type": "array", - "userEditable": false, - "viewable": false, + "nativeName": "__addAppRoleAssignments__", + "nativeType": "object", + "type": "array", + }, + "__removeAppRoleAssignedTo__": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "string", + "type": "string", }, - "description": { - "searchable": true, - "title": "Description", + "nativeName": "__removeAppRoleAssignedTo__", + "nativeType": "string", + "type": "array", + }, + "__removeAppRoleAssignments__": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "string", "type": "string", - "userEditable": true, - "viewable": true, }, - "members": { - "items": { - "notifySelf": false, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": true, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "memberOfOrg", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "searchable": false, - "title": "Members", - "type": "array", - "userEditable": false, - "viewable": true, + "nativeName": "__removeAppRoleAssignments__", + "nativeType": "string", + "type": "array", + }, + "accountEnabled": { + "nativeName": "accountEnabled", + "nativeType": "boolean", + "type": "boolean", + }, + "addIns": { + "items": { + "nativeType": "object", + "type": "object", }, - "name": { - "searchable": true, - "title": "Name", + "nativeName": "addIns", + "nativeType": "object", + "type": "array", + }, + "alternativeNames": { + "items": { + "nativeType": "string", "type": "string", - "userEditable": true, - "viewable": true, }, - "ownerIDs": { - "isVirtual": true, - "items": { - "title": "owner ids", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "_id", - ], - "referencedRelationshipFields": [ - "owners", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "Owner user ids", - "type": "array", - "userEditable": false, - "viewable": false, + "nativeName": "alternativeNames", + "nativeType": "string", + "type": "array", + }, + "appDescription": { + "nativeName": "appDescription", + "nativeType": "string", + "type": "string", + }, + "appDisplayName": { + "nativeName": "appDisplayName", + "nativeType": "string", + "type": "string", + }, + "appId": { + "nativeName": "appId", + "nativeType": "string", + "type": "string", + }, + "appOwnerOrganizationId": { + "nativeName": "appOwnerOrganizationId", + "nativeType": "string", + "type": "string", + }, + "appRoleAssignmentRequired": { + "nativeName": "appRoleAssignmentRequired", + "nativeType": "boolean", + "type": "boolean", + }, + "appRoles": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "appRoles", + "nativeType": "object", + "type": "array", + }, + "applicationTemplateId": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "applicationTemplateId", + "nativeType": "string", + "type": "string", + }, + "deletedDateTime": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "deletedDateTime", + "nativeType": "string", + "type": "string", + }, + "description": { + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "disabledByMicrosoftStatus": { + "nativeName": "disabledByMicrosoftStatus", + "nativeType": "string", + "type": "string", + }, + "displayName": { + "nativeName": "displayName", + "nativeType": "string", + "type": "string", + }, + "homepage": { + "nativeName": "homepage", + "nativeType": "string", + "type": "string", + }, + "info": { + "nativeName": "info", + "nativeType": "object", + "type": "object", + }, + "keyCredentials": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "keyCredentials", + "nativeType": "object", + "type": "array", + }, + "loginUrl": { + "nativeName": "loginUrl", + "nativeType": "string", + "type": "string", + }, + "logoutUrl": { + "nativeName": "logoutUrl", + "nativeType": "string", + "type": "string", + }, + "notes": { + "nativeName": "notes", + "nativeType": "string", + "type": "string", + }, + "notificationEmailAddresses": { + "items": { + "nativeType": "string", + "type": "string", }, - "owners": { - "items": { - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": false, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "ownerOfOrg", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "notifyRelationships": [ - "children", - ], - "returnByDefault": false, - "searchable": false, - "title": "Owner", - "type": "array", - "userEditable": false, - "viewable": true, + "nativeName": "notificationEmailAddresses", + "nativeType": "string", + "type": "array", + }, + "oauth2PermissionScopes": { + "items": { + "nativeType": "object", + "type": "object", }, - "parent": { - "description": "Parent Organization", - "notifyRelationships": [ - "children", - "members", - ], - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Organization", - "notify": false, - "path": "managed/alpha_organization", - "query": { - "fields": [ - "name", - "description", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "returnByDefault": false, - "reversePropertyName": "children", - "reverseRelationship": true, - "searchable": false, - "title": "Parent Organization", - "type": "relationship", - "userEditable": false, - "validate": true, - "viewable": true, + "nativeName": "oauth2PermissionScopes", + "nativeType": "object", + "type": "array", + }, + "passwordCredentials": { + "items": { + "nativeType": "object", + "type": "object", }, - "parentAdminIDs": { - "isVirtual": true, - "items": { - "title": "user ids of parent admins", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "adminIDs", - "parentAdminIDs", - ], - "referencedRelationshipFields": [ - "parent", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "user ids of parent admins", - "type": "array", - "userEditable": false, - "viewable": false, + "nativeName": "passwordCredentials", + "nativeType": "object", + "type": "array", + }, + "preferredSingleSignOnMode": { + "nativeName": "preferredSingleSignOnMode", + "nativeType": "string", + "type": "string", + }, + "replyUrls": { + "items": { + "nativeType": "string", + "type": "string", }, - "parentIDs": { - "isVirtual": true, - "items": { - "title": "parent org ids", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "_id", - "parentIDs", - ], - "referencedRelationshipFields": [ - "parent", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "parent org ids", - "type": "array", - "userEditable": false, - "viewable": false, + "nativeName": "replyUrls", + "nativeType": "string", + "type": "array", + }, + "resourceSpecificApplicationPermissions": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "object", + "type": "object", }, - "parentOwnerIDs": { - "isVirtual": true, - "items": { - "title": "user ids of parent owners", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "ownerIDs", - "parentOwnerIDs", - ], - "referencedRelationshipFields": [ - "parent", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "user ids of parent owners", - "type": "array", - "userEditable": false, - "viewable": false, + "nativeName": "resourceSpecificApplicationPermissions", + "nativeType": "object", + "type": "array", + }, + "samlSingleSignOnSettings": { + "nativeName": "samlSingleSignOnSettings", + "nativeType": "object", + "type": "object", + }, + "servicePrincipalNames": { + "items": { + "nativeType": "string", + "type": "string", }, + "nativeName": "servicePrincipalNames", + "nativeType": "string", + "type": "array", + }, + "servicePrincipalType": { + "nativeName": "servicePrincipalType", + "nativeType": "string", + "type": "string", + }, + "signInAudience": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "signInAudience", + "nativeType": "string", + "type": "string", + }, + "tags": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "tags", + "nativeType": "string", + "type": "array", + }, + "tokenEncryptionKeyId": { + "nativeName": "tokenEncryptionKeyId", + "nativeType": "string", + "type": "string", + }, + "verifiedPublisher": { + "nativeName": "verifiedPublisher", + "nativeType": "object", + "type": "object", }, - "required": [ - "name", - ], - "title": "Alpha realm - Organization", - "type": "object", }, + "type": "object", }, - { - "name": "bravo_organization", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "description": "An organization or tenant, whose resources are managed by organizational admins.", - "icon": "fa-building", - "mat-icon": "domain", - "order": [ - "name", - "description", - "owners", - "admins", - "members", - "parent", - "children", - "adminIDs", - "ownerIDs", - "parentAdminIDs", - "parentOwnerIDs", - "parentIDs", - ], - "properties": { - "adminIDs": { - "isVirtual": true, - "items": { - "title": "admin ids", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "_id", - ], - "referencedRelationshipFields": [ - "admins", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "Admin user ids", - "type": "array", - "userEditable": false, - "viewable": false, + }, + "operationTimeout": { + "AUTHENTICATE": -1, + "CREATE": -1, + "DELETE": -1, + "GET": -1, + "RESOLVEUSERNAME": -1, + "SCHEMA": -1, + "SCRIPT_ON_CONNECTOR": -1, + "SCRIPT_ON_RESOURCE": -1, + "SEARCH": -1, + "SYNC": -1, + "TEST": -1, + "UPDATE": -1, + "VALIDATE": -1, + }, + "poolConfigOption": { + "maxIdle": 10, + "maxObjects": 10, + "maxWait": 150000, + "minEvictableIdleTimeMillis": 120000, + "minIdle": 1, + }, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, + }, + }, + "provisioner.openicf/GoogleApps": { + "_id": "provisioner.openicf/GoogleApps", + "configurationProperties": { + "availableLicenses": [ + "101005/1010050001", + "101001/1010010001", + "101031/1010310010", + "101034/1010340002", + "101038/1010380002", + "101034/1010340001", + "101038/1010380003", + "101034/1010340004", + "101034/1010340003", + "101034/1010340006", + "Google-Apps/Google-Apps-For-Business", + "101034/1010340005", + "Google-Vault/Google-Vault", + "Google-Apps/1010020031", + "Google-Apps/1010020030", + "Google-Apps/1010060003", + "Google-Apps/1010060005", + "Google-Apps/Google-Apps-Unlimited", + "Google-Apps/1010020029", + "Google-Apps/Google-Apps-Lite", + "101031/1010310003", + "101033/1010330002", + "101033/1010330004", + "Google-Apps/Google-Apps-For-Education", + "101031/1010310002", + "101033/1010330003", + "Google-Apps/1010020026", + "101031/1010310007", + "Google-Apps/1010020025", + "101031/1010310008", + "Google-Apps/1010020028", + "Google-Apps/Google-Apps-For-Postini", + "101031/1010310005", + "Google-Apps/1010020027", + "101031/1010310006", + "101031/1010310009", + "Google-Vault/Google-Vault-Former-Employee", + "101038/1010370001", + "Google-Apps/1010020020", + "Google-Apps/1010060001", + ], + "clientId": "&{esv.gac.client.id}", + "clientSecret": "&{esv.gac.secret}", + "domain": "&{esv.gac.domain}", + "groupsMaxResults": "200", + "listProductAndSkuMaxResults": "100", + "listProductMaxResults": "100", + "membersMaxResults": "200", + "proxyHost": null, + "proxyPort": 8080, + "refreshToken": "&{esv.gac.refresh}", + "roleAssignmentMaxResults": 100, + "roleMaxResults": 100, + "usersMaxResults": "100", + "validateCertificate": true, + }, + "connectorRef": { + "bundleName": "org.forgerock.openicf.connectors.googleapps-connector", + "bundleVersion": "[1.5.0.0,1.6.0.0)", + "connectorHostRef": "", + "connectorName": "org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector", + "displayName": "GoogleApps Connector", + "systemType": "provisioner.openicf", + }, + "enabled": { + "$bool": "&{esv.gac.enable.connector}", + }, + "objectTypes": { + "__ACCOUNT__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ACCOUNT__", + "nativeType": "__ACCOUNT__", + "properties": { + "__GROUPS__": { + "flags": [ + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "string", + "type": "string", }, - "admins": { - "items": { - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": false, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "adminOfOrg", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "notifyRelationships": [ - "children", - ], - "returnByDefault": false, - "searchable": false, - "title": "Administrators", - "type": "array", - "userEditable": false, - "viewable": true, + "nativeName": "__GROUPS__", + "nativeType": "string", + "type": "array", + }, + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "__PASSWORD__": { + "flags": [ + "NOT_READABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "nativeName": "__PASSWORD__", + "nativeType": "JAVA_TYPE_GUARDEDSTRING", + "required": true, + "type": "string", + }, + "__PHOTO__": { + "flags": [ + "NOT_RETURNED_BY_DEFAULT", + ], + "nativeName": "__PHOTO__", + "nativeType": "JAVA_TYPE_BYTE_ARRAY", + "type": "string", + }, + "__SECONDARY_EMAILS__": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "__SECONDARY_EMAILS__", + "nativeType": "object", + "type": "array", + }, + "__UID__": { + "nativeName": "__UID__", + "nativeType": "string", + "required": false, + "type": "string", + }, + "addresses": { + "items": { + "nativeType": "object", + "type": "object", }, - "children": { - "description": "Child Organizations", - "items": { - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Organization", - "notify": true, - "path": "managed/bravo_organization", - "query": { - "fields": [ - "name", - "description", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "parent", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "policies": [], - "returnByDefault": false, - "searchable": false, - "title": "Child Organizations", - "type": "array", - "userEditable": false, - "viewable": false, + "nativeName": "addresses", + "nativeType": "object", + "type": "array", + }, + "agreedToTerms": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "agreedToTerms", + "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", + "type": "boolean", + }, + "aliases": { + "flags": [ + "NOT_CREATABLE", + ], + "items": { + "nativeType": "string", + "type": "string", }, - "description": { - "searchable": true, - "title": "Description", + "nativeName": "aliases", + "nativeType": "string", + "type": "array", + }, + "archived": { + "nativeName": "archived", + "nativeType": "boolean", + "type": "boolean", + }, + "changePasswordAtNextLogin": { + "nativeName": "changePasswordAtNextLogin", + "nativeType": "boolean", + "type": "boolean", + }, + "creationTime": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", "type": "string", - "userEditable": true, - "viewable": true, }, - "members": { - "items": { - "notifySelf": false, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": true, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "memberOfOrg", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "searchable": false, - "title": "Members", - "type": "array", - "userEditable": false, - "viewable": true, + "nativeName": "creationTime", + "nativeType": "string", + "type": "array", + }, + "customSchemas": { + "nativeName": "customSchemas", + "nativeType": "object", + "type": "object", + }, + "customerId": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "customerId", + "nativeType": "string", + "type": "string", + }, + "deletionTime": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "deletionTime", + "nativeType": "string", + "type": "string", + }, + "externalIds": { + "items": { + "nativeType": "object", + "type": "object", }, - "name": { - "searchable": true, - "title": "Name", + "nativeName": "externalIds", + "nativeType": "object", + "type": "array", + }, + "familyName": { + "nativeName": "familyName", + "nativeType": "string", + "type": "string", + }, + "fullName": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "fullName", + "nativeType": "string", + "type": "string", + }, + "givenName": { + "nativeName": "givenName", + "nativeType": "string", + "required": true, + "type": "string", + }, + "hashFunction": { + "flags": [ + "NOT_RETURNED_BY_DEFAULT", + ], + "nativeName": "hashFunction", + "nativeType": "string", + "type": "string", + }, + "ims": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "ims", + "nativeType": "object", + "type": "array", + }, + "includeInGlobalAddressList": { + "nativeName": "includeInGlobalAddressList", + "nativeType": "boolean", + "type": "boolean", + }, + "ipWhitelisted": { + "nativeName": "ipWhitelisted", + "nativeType": "boolean", + "type": "boolean", + }, + "isAdmin": { + "nativeName": "isAdmin", + "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", + "type": "boolean", + }, + "isDelegatedAdmin": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "isDelegatedAdmin", + "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", + "type": "boolean", + }, + "isEnforcedIn2Sv": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "isEnforcedIn2Sv", + "nativeType": "boolean", + "type": "boolean", + }, + "isEnrolledIn2Sv": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "isEnrolledIn2Sv", + "nativeType": "boolean", + "type": "boolean", + }, + "isMailboxSetup": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "isMailboxSetup", + "nativeType": "boolean", + "type": "boolean", + }, + "languages": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "languages", + "nativeType": "object", + "type": "array", + }, + "lastLoginTime": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", "type": "string", - "userEditable": true, - "viewable": true, }, - "ownerIDs": { - "isVirtual": true, - "items": { - "title": "owner ids", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "_id", - ], - "referencedRelationshipFields": [ - "owners", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "Owner user ids", - "type": "array", - "userEditable": false, - "viewable": false, + "nativeName": "lastLoginTime", + "nativeType": "string", + "type": "array", + }, + "nonEditableAliases": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", + "type": "string", }, - "owners": { - "items": { - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": false, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "ownerOfOrg", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "notifyRelationships": [ - "children", - ], - "returnByDefault": false, - "searchable": false, - "title": "Owner", - "type": "array", - "userEditable": false, - "viewable": true, + "nativeName": "nonEditableAliases", + "nativeType": "string", + "type": "array", + }, + "orgUnitPath": { + "nativeName": "orgUnitPath", + "nativeType": "string", + "type": "string", + }, + "organizations": { + "items": { + "nativeType": "object", + "type": "object", }, - "parent": { - "description": "Parent Organization", - "notifyRelationships": [ - "children", - "members", - ], - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Organization", - "notify": false, - "path": "managed/bravo_organization", - "query": { - "fields": [ - "name", - "description", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "returnByDefault": false, - "reversePropertyName": "children", - "reverseRelationship": true, - "searchable": false, - "title": "Parent Organization", - "type": "relationship", - "userEditable": false, - "validate": true, - "viewable": true, + "nativeName": "organizations", + "nativeType": "object", + "type": "array", + }, + "phones": { + "items": { + "nativeType": "object", + "type": "object", }, - "parentAdminIDs": { - "isVirtual": true, - "items": { - "title": "user ids of parent admins", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "adminIDs", - "parentAdminIDs", - ], - "referencedRelationshipFields": [ - "parent", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "user ids of parent admins", - "type": "array", - "userEditable": false, - "viewable": false, + "nativeName": "phones", + "nativeType": "object", + "type": "array", + }, + "primaryEmail": { + "nativeName": "primaryEmail", + "nativeType": "string", + "type": "string", + }, + "recoveryEmail": { + "nativeName": "recoveryEmail", + "nativeType": "string", + "type": "string", + }, + "recoveryPhone": { + "nativeName": "recoveryPhone", + "nativeType": "string", + "type": "string", + }, + "relations": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "relations", + "nativeType": "object", + "type": "array", + }, + "suspended": { + "nativeName": "suspended", + "nativeType": "boolean", + "type": "boolean", + }, + "suspensionReason": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "suspensionReason", + "nativeType": "string", + "type": "string", + }, + "thumbnailPhotoUrl": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "nativeName": "thumbnailPhotoUrl", + "nativeType": "string", + "type": "string", + }, + }, + "type": "object", + }, + }, + "operationTimeout": { + "AUTHENTICATE": -1, + "CREATE": -1, + "DELETE": -1, + "GET": -1, + "RESOLVEUSERNAME": -1, + "SCHEMA": -1, + "SCRIPT_ON_CONNECTOR": -1, + "SCRIPT_ON_RESOURCE": -1, + "SEARCH": -1, + "SYNC": -1, + "TEST": -1, + "UPDATE": -1, + "VALIDATE": -1, + }, + "poolConfigOption": { + "maxIdle": 10, + "maxObjects": 10, + "maxWait": 150000, + "minEvictableIdleTimeMillis": 120000, + "minIdle": 1, + }, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, + }, + }, + "repo.ds": { + "_id": "repo.ds", + "commands": { + "delete-mapping-links": { + "_queryFilter": "/linkType eq "\${mapping}"", + "operation": "DELETE", + }, + "delete-target-ids-for-recon": { + "_queryFilter": "/reconId eq "\${reconId}"", + "operation": "DELETE", + }, + }, + "embedded": false, + "ldapConnectionFactories": { + "bind": { + "availabilityCheckIntervalSeconds": 30, + "availabilityCheckTimeoutMilliSeconds": 10000, + "connectionPoolSize": 50, + "connectionSecurity": "none", + "heartBeatIntervalSeconds": 60, + "heartBeatTimeoutMilliSeconds": 10000, + "primaryLdapServers": [ + { + "hostname": "userstore-0.userstore", + "port": 1389, + }, + ], + "secondaryLdapServers": [ + { + "hostname": "userstore-2.userstore", + "port": 1389, + }, + ], + }, + "root": { + "authentication": { + "simple": { + "bindDn": "uid=admin", + "bindPassword": "&{userstore.password}", + }, + }, + "inheritFrom": "bind", + }, + }, + "maxConnectionAttempts": 5, + "queries": { + "explicit": { + "credential-internaluser-query": { + "_queryFilter": "/_id eq "\${username}"", + }, + "credential-query": { + "_queryFilter": "/userName eq "\${username}"", + }, + "for-userName": { + "_queryFilter": "/userName eq "\${uid}"", + }, + "links-for-firstId": { + "_queryFilter": "/linkType eq "\${linkType}" AND /firstId = "\${firstId}"", + }, + "links-for-linkType": { + "_queryFilter": "/linkType eq "\${linkType}"", + }, + "query-all": { + "_queryFilter": "true", + }, + "query-all-ids": { + "_fields": "_id,_rev", + "_queryFilter": "true", + }, + }, + "generic": { + "credential-internaluser-query": { + "_queryFilter": "/_id eq "\${username}"", + }, + "credential-query": { + "_queryFilter": "/userName eq "\${username}"", + }, + "find-relationship-edges": { + "_queryFilter": "((/firstResourceCollection eq "\${firstResourceCollection}" and /firstResourceId eq "\${firstResourceId}" and /firstPropertyName eq "\${firstPropertyName}") and (/secondResourceCollection eq "\${secondResourceCollection}" and /secondResourceId eq "\${secondResourceId}" and /secondPropertyName eq "\${secondPropertyName}")) or ((/firstResourceCollection eq "\${secondResourceCollection}" and /firstResourceId eq "\${secondResourceId}" and /firstPropertyName eq "\${secondPropertyName}") and (/secondResourceCollection eq "\${firstResourceCollection}" and /secondResourceId eq "\${firstResourceId}" and /secondPropertyName eq "\${firstPropertyName}"))", + }, + "find-relationships-for-resource": { + "_queryFilter": "(/firstResourceCollection eq "\${resourceCollection}" and /firstResourceId eq "\${resourceId}" and /firstPropertyName eq "\${propertyName}") or (/secondResourceCollection eq "\${resourceCollection}" and /secondResourceId eq "\${resourceId}" and /secondPropertyName eq "\${propertyName}")", + }, + "for-userName": { + "_queryFilter": "/userName eq "\${uid}"", + }, + "get-by-field-value": { + "_queryFilter": "/\${field} eq "\${value}"", + }, + "get-notifications-for-user": { + "_queryFilter": "/receiverId eq "\${userId}"", + "_sortKeys": "-createDate", + }, + "get-recons": { + "_fields": "reconId,mapping,activitydate", + "_queryFilter": "/entryType eq "summary"", + "_sortKeys": "-activitydate", + }, + "links-for-firstId": { + "_queryFilter": "/linkType eq "\${linkType}" AND /firstId = "\${firstId}"", + }, + "links-for-linkType": { + "_queryFilter": "/linkType eq "\${linkType}"", + }, + "query-all": { + "_queryFilter": "true", + }, + "query-all-ids": { + "_fields": "_id,_rev", + "_queryFilter": "true", + }, + "query-cluster-events": { + "_queryFilter": "/instanceId eq "\${instanceId}"", + }, + "query-cluster-failed-instances": { + "_queryFilter": "/timestamp le \${timestamp} and (/state eq "1" or /state eq "2")", + }, + "query-cluster-instances": { + "_queryFilter": "true", + }, + "query-cluster-running-instances": { + "_queryFilter": "/state eq 1", + }, + }, + }, + "resourceMapping": { + "defaultMapping": { + "dnTemplate": "ou=generic,dc=openidm,dc=example,dc=com", + }, + "explicitMapping": { + "clusteredrecontargetids": { + "dnTemplate": "ou=clusteredrecontargetids,dc=openidm,dc=example,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-recon-clusteredTargetIds", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", }, - "parentIDs": { - "isVirtual": true, - "items": { - "title": "parent org ids", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "_id", - "parentIDs", - ], - "referencedRelationshipFields": [ - "parent", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "parent org ids", - "type": "array", - "userEditable": false, - "viewable": false, + "reconId": { + "ldapAttribute": "fr-idm-recon-id", + "type": "simple", }, - "parentOwnerIDs": { - "isVirtual": true, - "items": { - "title": "user ids of parent owners", - "type": "string", - }, - "queryConfig": { - "flattenProperties": true, - "referencedObjectFields": [ - "ownerIDs", - "parentOwnerIDs", - ], - "referencedRelationshipFields": [ - "parent", - ], - }, - "returnByDefault": true, - "searchable": false, - "title": "user ids of parent owners", - "type": "array", - "userEditable": false, - "viewable": false, + "targetIds": { + "ldapAttribute": "fr-idm-recon-targetIds", + "type": "json", }, }, - "required": [ - "name", - ], - "title": "Bravo realm - Organization", - "type": "object", }, - }, - { - "name": "alpha_group", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "icon": "fa-group", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group", - "mat-icon": "group", - "order": [ - "_id", - "name", - "description", - "condition", - "members", + "dsconfig/attributeValue": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-attribute-value-password-validator", ], "properties": { "_id": { - "description": "Group ID", - "isPersonal": false, - "policies": [ - { - "params": { - "propertyName": "name", - }, - "policyId": "id-must-equal-property", - }, - ], - "searchable": false, - "type": "string", - "usageDescription": "", - "userEditable": false, - "viewable": false, + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "condition": { - "description": "A filter for conditionally assigned members", - "isConditional": true, - "policies": [ - { - "policyId": "valid-query-filter", - }, - ], - "searchable": false, - "title": "Condition", - "type": "string", - "viewable": false, + "checkSubstrings": { + "ldapAttribute": "ds-cfg-check-substrings", + "type": "simple", }, - "description": { - "description": "Group Description", - "searchable": true, - "title": "Description", - "type": "string", - "userEditable": false, - "viewable": true, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", }, - "members": { - "description": "Group Members", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Group Members Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociation": true, - "label": "User", - "notify": true, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "groups", - "reverseRelationship": true, - "title": "Group Members Items", - "type": "relationship", - "validate": true, - }, - "policies": [], - "returnByDefault": false, - "searchable": false, - "title": "Members", - "type": "array", - "userEditable": false, - "viewable": true, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", }, - "name": { - "description": "Group Name", - "policies": [ - { - "policyId": "required", - }, - { - "params": { - "forbiddenChars": [ - "/*", - ], - }, - "policyId": "cannot-contain-characters", - }, - ], - "searchable": true, - "title": "Name", - "type": "string", - "viewable": true, + "matchAttribute": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-match-attribute", + "type": "simple", + }, + "minSubstringLength": { + "ldapAttribute": "ds-cfg-min-substring-length", + "type": "simple", + }, + "testReversedPassword": { + "isRequired": true, + "ldapAttribute": "ds-cfg-test-reversed-password", + "type": "simple", }, }, - "required": [ - "name", - ], - "title": "Alpha realm - Group", - "viewable": true, }, - }, - { - "name": "bravo_group", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "icon": "fa-group", - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group", - "mat-icon": "group", - "order": [ - "_id", - "name", - "description", - "condition", - "members", + "dsconfig/characterSet": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-character-set-password-validator", ], "properties": { "_id": { - "description": "Group ID", - "isPersonal": false, - "policies": [ - { - "params": { - "propertyName": "name", - }, - "policyId": "id-must-equal-property", - }, - ], - "searchable": false, - "type": "string", - "usageDescription": "", - "userEditable": false, - "viewable": false, - }, - "condition": { - "description": "A filter for conditionally assigned members", - "isConditional": true, - "policies": [ - { - "policyId": "valid-query-filter", - }, - ], - "searchable": false, - "title": "Condition", - "type": "string", - "viewable": false, + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "description": { - "description": "Group Description", - "searchable": true, - "title": "Description", - "type": "string", - "userEditable": false, - "viewable": true, + "allowUnclassifiedCharacters": { + "isRequired": true, + "ldapAttribute": "ds-cfg-allow-unclassified-characters", + "type": "simple", }, - "members": { - "description": "Group Members", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Group Members Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociation": true, - "label": "User", - "notify": true, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "groups", - "reverseRelationship": true, - "title": "Group Members Items", - "type": "relationship", - "validate": true, - }, - "policies": [], - "returnByDefault": false, - "searchable": false, - "title": "Members", - "type": "array", - "userEditable": false, - "viewable": true, + "characterSet": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-character-set", + "type": "simple", }, - "name": { - "description": "Group Name", - "policies": [ - { - "policyId": "required", - }, - { - "params": { - "forbiddenChars": [ - "/*", - ], - }, - "policyId": "cannot-contain-characters", - }, - ], - "searchable": true, - "title": "Name", - "type": "string", - "viewable": true, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minCharacterSets": { + "ldapAttribute": "ds-cfg-min-character-sets", + "type": "simple", }, }, - "required": [ - "name", + }, + "dsconfig/dictionary": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-dictionary-password-validator", ], - "title": "Bravo realm - Group", - "viewable": true, + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "checkSubstrings": { + "ldapAttribute": "ds-cfg-check-substrings", + "type": "simple", + }, + "dictionaryFile": { + "isRequired": true, + "ldapAttribute": "ds-cfg-dictionary-file", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minSubstringLength": { + "ldapAttribute": "ds-cfg-min-substring-length", + "type": "simple", + }, + "testReversedPassword": { + "isRequired": true, + "ldapAttribute": "ds-cfg-test-reversed-password", + "type": "simple", + }, + }, }, - }, - { - "name": "alpha_application", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "description": "Application Object", - "icon": "fa-folder", - "order": [ - "name", - "description", - "url", - "icon", - "mappingNames", - "owners", - "roles", - "members", + "dsconfig/lengthBased": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-length-based-password-validator", ], "properties": { "_id": { - "description": "Application ID", - "isPersonal": false, - "searchable": false, - "type": "string", - "userEditable": false, - "viewable": false, + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "authoritative": { - "description": "Is this an authoritative application", - "searchable": false, - "title": "Authoritative", - "type": "boolean", - "viewable": false, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", }, - "connectorId": { - "description": "Id of the connector associated with the application", - "searchable": false, - "title": "Connector ID", - "type": "string", - "userEditable": false, - "viewable": false, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", }, - "description": { - "description": "Application Description", - "searchable": true, - "title": "Description", - "type": "string", - "viewable": true, + "maxPasswordLength": { + "ldapAttribute": "ds-cfg-max-password-length", + "type": "simple", }, - "icon": { - "searchable": true, - "title": "Icon", - "type": "string", - "userEditable": true, - "viewable": true, + "minPasswordLength": { + "ldapAttribute": "ds-cfg-min-password-length", + "type": "simple", }, - "mappingNames": { - "description": "Names of the sync mappings used by an application with provisioning configured.", - "items": { - "title": "Mapping Name Items", - "type": "string", - }, - "searchable": true, - "title": "Sync Mapping Names", - "type": "array", - "viewable": true, + }, + }, + "dsconfig/passwordPolicies": { + "dnTemplate": "cn=Password Policies,cn=config", + "objectClasses": [ + "ds-cfg-password-policy", + "ds-cfg-authentication-policy", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "members": { - "description": "Application Members", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Group Members Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": true, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "applications", - "reverseRelationship": true, - "title": "Group Members Items", - "type": "relationship", - "validate": true, - }, - "policies": [], - "returnByDefault": false, - "searchable": false, - "title": "Members", - "type": "array", - "userEditable": false, - "viewable": true, + "allowPreEncodedPasswords": { + "ldapAttribute": "ds-cfg-allow-pre-encoded-passwords", + "type": "simple", }, - "name": { - "description": "Application name", - "notifyRelationships": [ - "roles", - "members", - ], - "policies": [ - { - "policyId": "unique", - }, - ], - "returnByDefault": true, - "searchable": true, - "title": "Name", - "type": "string", - "userEditable": true, - "viewable": true, + "defaultPasswordStorageScheme": { + "isMultiValued": true, + "isRequired": true, + "ldapAttribute": "ds-cfg-default-password-storage-scheme", + "type": "simple", }, - "owners": { - "description": "Application Owners", - "items": { - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Application _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "ownerOfApp", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "searchable": false, - "title": "Owners", - "type": "array", - "userEditable": false, - "viewable": true, + "deprecatedPasswordStorageScheme": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-deprecated-password-storage-scheme", + "type": "simple", }, - "roles": { - "description": "Roles granting users the application", - "items": { - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Role", - "notify": true, - "path": "managed/alpha_role", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "applications", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "searchable": false, - "title": "Roles", - "type": "array", - "userEditable": false, - "viewable": true, + "maxPasswordAge": { + "ldapAttribute": "ds-cfg-max-password-age", + "type": "simple", }, - "ssoEntities": { - "description": "SSO Entity Id", - "properties": { - "idpLocation": { - "type": "string", - }, - "idpPrivateId": { - "type": "string", - }, - "spLocation": { - "type": "string", - }, - "spPrivate": { - "type": "string", - }, - }, - "searchable": false, - "title": "SSO Entity Id", - "type": "object", - "userEditable": false, - "viewable": false, + "passwordAttribute": { + "isRequired": true, + "ldapAttribute": "ds-cfg-password-attribute", + "type": "simple", }, - "templateName": { - "description": "Name of the template the application was created from", - "searchable": false, - "title": "Template Name", - "type": "string", - "userEditable": false, - "viewable": false, + "passwordHistoryCount": { + "ldapAttribute": "ds-cfg-password-history-count", + "type": "simple", }, - "templateVersion": { - "description": "The template version", - "searchable": false, - "title": "Template Version", - "type": "string", - "userEditable": false, - "viewable": false, + "validator": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-password-validator", + "type": "simple", }, - "uiConfig": { - "description": "UI Config", - "isPersonal": false, - "properties": {}, - "searchable": false, - "title": "UI Config", - "type": "object", - "usageDescription": "", - "viewable": false, + }, + }, + "dsconfig/repeatedCharacters": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-repeated-characters-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "url": { - "searchable": true, - "title": "Url", - "type": "string", - "userEditable": true, - "viewable": true, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "maxConsecutiveLength": { + "isRequired": true, + "ldapAttribute": "ds-cfg-max-consecutive-length", + "type": "simple", }, }, - "required": [ - "name", + }, + "dsconfig/similarityBased": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-similarity-based-password-validator", ], - "title": "Alpha realm - Application", - "type": "object", + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minPasswordDifference": { + "isRequired": true, + "ldapAttribute": "ds-cfg-min-password-difference", + "type": "simple", + }, + }, }, - }, - { - "name": "bravo_application", - "schema": { - "$schema": "http://forgerock.org/json-schema#", - "description": "Application Object", - "icon": "fa-folder", - "order": [ - "name", - "description", - "url", - "icon", - "mappingNames", - "owners", - "roles", - "members", + "dsconfig/uniqueCharacters": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-unique-characters-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minUniqueCharacters": { + "isRequired": true, + "ldapAttribute": "ds-cfg-min-unique-characters", + "type": "simple", + }, + }, + }, + "dsconfig/userDefinedVirtualAttribute": { + "dnTemplate": "cn=Virtual Attributes,cn=config", + "objectClasses": [ + "ds-cfg-user-defined-virtual-attribute", + "ds-cfg-virtual-attribute", ], "properties": { "_id": { - "description": "Application ID", - "isPersonal": false, - "searchable": false, - "type": "string", - "userEditable": false, - "viewable": false, - }, - "authoritative": { - "description": "Is this an authoritative application", - "searchable": false, - "title": "Authoritative", - "type": "boolean", - "viewable": false, + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "connectorId": { - "description": "Id of the connector associated with the application", - "searchable": false, - "title": "Connector ID", - "type": "string", - "userEditable": false, - "viewable": false, + "attributeType": { + "isRequired": true, + "ldapAttribute": "ds-cfg-attribute-type", + "type": "simple", }, - "description": { - "description": "Application Description", - "searchable": true, - "title": "Description", - "type": "string", - "viewable": true, + "baseDn": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-base-dn", + "type": "simple", }, - "icon": { - "searchable": true, - "title": "Icon", - "type": "string", - "userEditable": true, - "viewable": true, + "conflictBehavior": { + "ldapAttribute": "ds-cfg-conflict-behavior", + "type": "simple", }, - "mappingNames": { - "description": "Names of the sync mappings used by an application with provisioning configured.", - "items": { - "title": "Mapping Name Items", - "type": "string", - }, - "searchable": true, - "title": "Sync Mapping Names", - "type": "array", - "viewable": true, + "enabled": { + "isRequired": true, + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", }, - "members": { - "description": "Application Members", - "items": { - "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items", - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", - }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Group Members Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": true, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "applications", - "reverseRelationship": true, - "title": "Group Members Items", - "type": "relationship", - "validate": true, - }, - "policies": [], - "returnByDefault": false, - "searchable": false, - "title": "Members", - "type": "array", - "userEditable": false, - "viewable": true, + "filter": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-filter", + "type": "simple", }, - "name": { - "description": "Application name", - "notifyRelationships": [ - "roles", - "members", - ], - "policies": [ - { - "policyId": "unique", - }, - ], - "returnByDefault": true, - "searchable": true, - "title": "Name", - "type": "string", - "userEditable": true, - "viewable": true, + "groupDn": { + "ldapAttribute": "ds-cfg-group-dn", + "type": "simple", }, - "owners": { - "description": "Application Owners", - "items": { - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Application _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, - }, - ], - "reversePropertyName": "ownerOfApp", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "searchable": false, - "title": "Owners", - "type": "array", - "userEditable": false, - "viewable": true, + "javaClass": { + "isRequired": true, + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", }, - "roles": { - "description": "Roles granting users the application", - "items": { - "notifySelf": true, - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", - }, - }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Role", - "notify": true, - "path": "managed/bravo_role", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - "sortKeys": [], - }, - }, - ], - "reversePropertyName": "applications", - "reverseRelationship": true, - "type": "relationship", - "validate": true, - }, - "returnByDefault": false, - "searchable": false, - "title": "Roles", - "type": "array", - "userEditable": false, - "viewable": true, + "scope": { + "ldapAttribute": "ds-cfg-scope", + "type": "simple", }, - "ssoEntities": { - "description": "SSO Entity Id", - "properties": { - "idpLocation": { - "type": "string", - }, - "idpPrivateId": { - "type": "string", - }, - "spLocation": { - "type": "string", - }, - "spPrivate": { - "type": "string", - }, - }, - "searchable": false, - "title": "SSO Entity Id", - "type": "object", - "userEditable": false, - "viewable": false, + "value": { + "isMultiValued": true, + "isRequired": true, + "ldapAttribute": "ds-cfg-value", + "type": "simple", }, - "templateName": { - "description": "Name of the template the application was created from", - "searchable": false, - "title": "Template Name", - "type": "string", - "userEditable": false, - "viewable": false, + }, + }, + "identities/admin": { + "dnTemplate": "o=root,ou=identities", + "isReadOnly": true, + "namingStrategy": { + "dnAttribute": "ou", + "type": "clientDnNaming", + }, + "objectClasses": [ + "organizationalunit", + ], + "properties": { + "_id": { + "ldapAttribute": "ou", + "primaryKey": true, + "type": "simple", }, - "templateVersion": { - "description": "The template version", - "searchable": false, - "title": "Template Version", - "type": "string", - "userEditable": false, - "viewable": false, + "count": { + "isRequired": true, + "ldapAttribute": "numSubordinates", + "type": "simple", + "writability": "readOnly", }, - "uiConfig": { - "description": "UI Config", - "isPersonal": false, - "properties": {}, - "searchable": false, - "title": "UI Config", - "type": "object", - "usageDescription": "", - "viewable": false, + }, + }, + "identities/alpha": { + "dnTemplate": "o=alpha,o=root,ou=identities", + "isReadOnly": true, + "namingStrategy": { + "dnAttribute": "ou", + "type": "clientDnNaming", + }, + "objectClasses": [ + "organizationalunit", + ], + "properties": { + "_id": { + "ldapAttribute": "ou", + "primaryKey": true, + "type": "simple", }, - "url": { - "searchable": true, - "title": "Url", - "type": "string", - "userEditable": true, - "viewable": true, + "count": { + "isRequired": true, + "ldapAttribute": "numSubordinates", + "type": "simple", + "writability": "readOnly", }, }, - "required": [ - "name", - ], - "title": "Bravo realm - Application", - "type": "object", - }, - }, - ], - }, - "mapping/managedAlpha_assignment_managedBravo_assignment": { - "_id": "mapping/managedAlpha_assignment_managedBravo_assignment", - "consentRequired": false, - "displayName": "managedAlpha_assignment_managedBravo_assignment", - "icon": null, - "name": "managedAlpha_assignment_managedBravo_assignment", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [], - "source": "managed/alpha_assignment", - "target": "managed/bravo_assignment", - }, - "mapping/managedAlpha_user_systemAzureUser": { - "_id": "mapping/managedAlpha_user_systemAzureUser", - "consentRequired": false, - "defaultSourceFields": [ - "*", - "assignments", - ], - "defaultTargetFields": [ - "*", - "memberOf", - "__roles__", - "__servicePlanIds__", - ], - "displayName": "managedAlpha_user_systemAzureUser", - "icon": null, - "name": "managedAlpha_user_systemAzureUser", - "optimizeAssignmentSync": true, - "policies": [ - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "DELETE", - "situation": "UNQUALIFIED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "UPDATE", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "CREATE", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "SOURCE_TARGET_CONFLICT", - }, - { - "action": "INCORPORATE_CHANGES", - "situation": "TARGET_CHANGED", - }, - ], - "properties": [ - { - "source": "mail", - "target": "mail", - }, - { - "source": "givenName", - "target": "givenName", - }, - { - "source": "sn", - "target": "surname", - }, - { - "source": "", - "target": "displayName", - "transform": { - "source": "source.givenName+" "+source.sn", - "type": "text/javascript", }, - }, - { - "source": "", - "target": "mailNickname", - "transform": { - "source": "source.givenName[0].toLowerCase()+source.sn.toLowerCase()", - "type": "text/javascript", + "identities/bravo": { + "dnTemplate": "o=bravo,o=root,ou=identities", + "isReadOnly": true, + "namingStrategy": { + "dnAttribute": "ou", + "type": "clientDnNaming", + }, + "objectClasses": [ + "organizationalunit", + ], + "properties": { + "_id": { + "ldapAttribute": "ou", + "primaryKey": true, + "type": "simple", + }, + "count": { + "isRequired": true, + "ldapAttribute": "numSubordinates", + "type": "simple", + "writability": "readOnly", + }, + }, }, - }, - { - "source": "", - "target": "accountEnabled", - "transform": { - "source": "true", - "type": "text/javascript", + "internal/role": { + "dnTemplate": "ou=roles,ou=internal,dc=openidm,dc=example,dc=com", + "objectClasses": [ + "fr-idm-internal-role", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "authzMembers": { + "isMultiValued": true, + "propertyName": "authzRoles", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "condition": { + "ldapAttribute": "fr-idm-condition", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "name": { + "ldapAttribute": "fr-idm-name", + "type": "simple", + }, + "privileges": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-privilege", + "type": "json", + }, + "temporalConstraints": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-temporal-constraints", + "type": "json", + }, + }, }, - }, - { - "condition": { - "globals": {}, - "source": "(typeof oldTarget === 'undefined' || oldTarget === null)", - "type": "text/javascript", + "internal/user": { + "dnTemplate": "ou=users,ou=internal,dc=openidm,dc=example,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-internal-user", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "password": { + "ldapAttribute": "fr-idm-password", + "type": "json", + }, + }, }, - "source": "", - "target": "__PASSWORD__", - "transform": { - "source": ""!@#$%"[Math.floor(Math.random()*5)] + Math.random().toString(36).slice(2, 13).toUpperCase()+Math.random().toString(36).slice(2,13)", - "type": "text/javascript", + "link": { + "dnTemplate": "ou=links,dc=openidm,dc=example,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-link", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "firstId": { + "ldapAttribute": "fr-idm-link-firstId", + "type": "simple", + }, + "linkQualifier": { + "ldapAttribute": "fr-idm-link-qualifier", + "type": "simple", + }, + "linkType": { + "ldapAttribute": "fr-idm-link-type", + "type": "simple", + }, + "secondId": { + "ldapAttribute": "fr-idm-link-secondId", + "type": "simple", + }, + }, }, - }, - ], - "queuedSync": { - "enabled": true, - "maxRetries": 0, - "pollingInterval": 10000, - }, - "runTargetPhase": false, - "source": "managed/alpha_user", - "sourceCondition": "/source/effectiveApplications[_id eq "0f357b7e-6c54-4351-a094-43916877d7e5"] or /source/effectiveAssignments[(mapping eq "managedAlpha_user_systemAzureUser" and type eq "__ENTITLEMENT__")]", - "sourceQuery": { - "_queryFilter": "effectiveApplications[_id eq "0f357b7e-6c54-4351-a094-43916877d7e5"] or lastSync/managedAlpha_user_systemAzureUser pr or /source/effectiveAssignments[(mapping eq "managedAlpha_user_systemAzureUser" and type eq "__ENTITLEMENT__")]", - }, - "target": "system/Azure/User", - }, - "mapping/managedBravo_group_managedBravo_group": { - "_id": "mapping/managedBravo_group_managedBravo_group", - "consentRequired": false, - "displayName": "managedBravo_group_managedBravo_group", - "icon": null, - "name": "managedBravo_group_managedBravo_group", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [], - "source": "managed/bravo_group", - "target": "managed/bravo_group", - }, - "mapping/managedBravo_user_managedBravo_user0": { - "_id": "mapping/managedBravo_user_managedBravo_user0", - "consentRequired": false, - "displayName": "managedBravo_user_managedBravo_user0", - "icon": null, - "name": "managedBravo_user_managedBravo_user0", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [], - "source": "managed/bravo_user", - "target": "managed/bravo_user", - }, - "mapping/mapping12": { - "_id": "mapping/mapping12", - "consentRequired": false, - "displayName": "mapping12", - "linkQualifiers": [], - "name": "mapping12", - "policies": [], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [], - "target": "managed/bravo_user", - }, - "mapping/systemAzureDirectoryrole_managedAlpha_assignment": { - "_id": "mapping/systemAzureDirectoryrole_managedAlpha_assignment", - "consentRequired": false, - "displayName": "systemAzureDirectoryrole_managedAlpha_assignment", - "icon": null, - "name": "systemAzureDirectoryrole_managedAlpha_assignment", - "policies": [ - { - "action": "EXCEPTION", - "situation": "AMBIGUOUS", - }, - { - "action": "DELETE", - "situation": "SOURCE_MISSING", - }, - { - "action": "CREATE", - "situation": "MISSING", - }, - { - "action": "EXCEPTION", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "DELETE", - "situation": "UNQUALIFIED", - }, - { - "action": "EXCEPTION", - "situation": "UNASSIGNED", - }, - { - "action": "EXCEPTION", - "situation": "LINK_ONLY", - }, - { - "action": "IGNORE", - "situation": "TARGET_IGNORED", - }, - { - "action": "IGNORE", - "situation": "SOURCE_IGNORED", - }, - { - "action": "IGNORE", - "situation": "ALL_GONE", - }, - { - "action": "UPDATE", - "situation": "CONFIRMED", - }, - { - "action": "LINK", - "situation": "FOUND", - }, - { - "action": "CREATE", - "situation": "ABSENT", - }, - ], - "properties": [ - { - "default": "__RESOURCE__", - "target": "type", - }, - { - "source": "", - "target": "description", - "transform": { - "globals": {}, - "source": "(typeof source.description !== "undefined" && source.description !== null) ? source.description : source._id", - "type": "text/javascript", + "locks": { + "dnTemplate": "ou=locks,dc=openidm,dc=example,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-lock", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "nodeId": { + "ldapAttribute": "fr-idm-lock-nodeid", + "type": "simple", + }, + }, }, - }, - { - "default": "managedAlpha_user_systemAzureUser", - "target": "mapping", - }, - { - "source": "", - "target": "name", - "transform": { - "globals": {}, - "source": "(typeof source.displayName !== "undefined" && source.displayName !== null) ? source.displayName : source._id", - "type": "text/javascript", + "managed/teammember": { + "dnTemplate": "ou=people,o=root,ou=identities", + "namingStrategy": { + "dnAttribute": "fr-idm-uuid", + "type": "clientDnNaming", + }, + "nativeId": false, + "objectClasses": [ + "person", + "organizationalPerson", + "inetOrgPerson", + "fraas-admin", + "iplanet-am-user-service", + "deviceProfilesContainer", + "devicePrintProfilesContainer", + "kbaInfoContainer", + "fr-idm-managed-user-explicit", + "forgerock-am-dashboard-service", + "inetuser", + "iplanet-am-auth-configuration-service", + "iplanet-am-managed-person", + "iPlanetPreferences", + "oathDeviceProfilesContainer", + "pushDeviceProfilesContainer", + "sunAMAuthAccountLockout", + "sunFMSAML2NameIdentifier", + "webauthnDeviceProfilesContainer", + "fr-idm-hybrid-obj", + ], + "properties": { + "_id": { + "ldapAttribute": "fr-idm-uuid", + "primaryKey": true, + "type": "simple", + }, + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "managed/teammembermeta", + "type": "reference", + }, + "accountStatus": { + "ldapAttribute": "inetUserStatus", + "type": "simple", + }, + "cn": { + "ldapAttribute": "cn", + "type": "simple", + }, + "givenName": { + "ldapAttribute": "givenName", + "type": "simple", + }, + "inviteDate": { + "ldapAttribute": "fr-idm-inviteDate", + "type": "simple", + }, + "jurisdiction": { + "ldapAttribute": "fr-idm-jurisdiction", + "type": "simple", + }, + "mail": { + "ldapAttribute": "mail", + "type": "simple", + }, + "onboardDate": { + "ldapAttribute": "fr-idm-onboardDate", + "type": "simple", + }, + "password": { + "ldapAttribute": "userPassword", + "type": "simple", + }, + "sn": { + "ldapAttribute": "sn", + "type": "simple", + }, + "userName": { + "ldapAttribute": "uid", + "type": "simple", + }, + }, }, - }, - { - "source": "_id", - "target": "attributes", - "transform": { - "globals": {}, - "source": "[ - { - 'name': '__roles__', - 'value': [source] - } -]", - "type": "text/javascript", + "managed/teammembergroup": { + "dnTemplate": "ou=groups,o=root,ou=identities", + "objectClasses": [ + "groupofuniquenames", + ], + "properties": { + "_id": { + "ldapAttribute": "cn", + "primaryKey": true, + "type": "simple", + }, + "members": { + "isMultiValued": true, + "ldapAttribute": "uniqueMember", + "type": "simple", + }, + }, + }, + "recon/assoc": { + "dnTemplate": "ou=assoc,ou=recon,dc=openidm,dc=example,dc=com", + "namingStrategy": { + "dnAttribute": "fr-idm-reconassoc-reconid", + "type": "clientDnNaming", + }, + "objectClasses": [ + "fr-idm-reconassoc", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "fr-idm-reconassoc-reconid", + "type": "simple", + }, + "finishTime": { + "ldapAttribute": "fr-idm-reconassoc-finishtime", + "type": "simple", + }, + "isAnalysis": { + "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-reconassoc-mapping", + "type": "simple", + }, + "sourceResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "type": "simple", + }, + "targetResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "type": "simple", + }, + }, + "subResources": { + "entry": { + "namingStrategy": { + "dnAttribute": "uid", + "type": "clientDnNaming", + }, + "resource": "recon-assoc-entry", + "type": "collection", + }, + }, }, - }, - { - "source": "_id", - "target": "_id", - "transform": { - "globals": { - "sourceObjectSet": "system_Azure_directoryRole_", + "recon/assoc/entry": { + "objectClasses": [ + "uidObject", + "fr-idm-reconassocentry", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + }, + "action": { + "ldapAttribute": "fr-idm-reconassocentry-action", + "type": "simple", + }, + "ambiguousTargetObjectIds": { + "ldapAttribute": "fr-idm-reconassocentry-ambiguoustargetobjectids", + "type": "simple", + }, + "exception": { + "ldapAttribute": "fr-idm-reconassocentry-exception", + "type": "simple", + }, + "isAnalysis": { + "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "type": "simple", + }, + "linkQualifier": { + "ldapAttribute": "fr-idm-reconassocentry-linkqualifier", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-reconassoc-mapping", + "type": "simple", + }, + "message": { + "ldapAttribute": "fr-idm-reconassocentry-message", + "type": "simple", + }, + "messageDetail": { + "ldapAttribute": "fr-idm-reconassocentry-messagedetail", + "type": "simple", + }, + "phase": { + "ldapAttribute": "fr-idm-reconassocentry-phase", + "type": "simple", + }, + "reconId": { + "ldapAttribute": "fr-idm-reconassocentry-reconid", + "type": "simple", + }, + "situation": { + "ldapAttribute": "fr-idm-reconassocentry-situation", + "type": "simple", + }, + "sourceObjectId": { + "ldapAttribute": "fr-idm-reconassocentry-sourceObjectId", + "type": "simple", + }, + "sourceResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "type": "simple", + }, + "status": { + "ldapAttribute": "fr-idm-reconassocentry-status", + "type": "simple", + }, + "targetObjectId": { + "ldapAttribute": "fr-idm-reconassocentry-targetObjectId", + "type": "simple", + }, + "targetResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "type": "simple", + }, }, - "source": "sourceObjectSet.concat(source)", - "type": "text/javascript", + "resourceName": "recon-assoc-entry", + "subResourceRouting": [ + { + "prefix": "entry", + "template": "recon/assoc/{reconId}/entry", + }, + ], }, - }, - ], - "source": "system/Azure/directoryRole", - "target": "managed/alpha_assignment", - "targetQuery": { - "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "__roles__"]", - }, - }, - "mapping/systemAzureServiceplan_managedAlpha_assignment": { - "_id": "mapping/systemAzureServiceplan_managedAlpha_assignment", - "consentRequired": false, - "displayName": "systemAzureServiceplan_managedAlpha_assignment", - "icon": null, - "name": "systemAzureServiceplan_managedAlpha_assignment", - "policies": [ - { - "action": "EXCEPTION", - "situation": "AMBIGUOUS", - }, - { - "action": "DELETE", - "situation": "SOURCE_MISSING", - }, - { - "action": "CREATE", - "situation": "MISSING", - }, - { - "action": "EXCEPTION", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "DELETE", - "situation": "UNQUALIFIED", - }, - { - "action": "EXCEPTION", - "situation": "UNASSIGNED", - }, - { - "action": "EXCEPTION", - "situation": "LINK_ONLY", - }, - { - "action": "IGNORE", - "situation": "TARGET_IGNORED", - }, - { - "action": "IGNORE", - "situation": "SOURCE_IGNORED", - }, - { - "action": "IGNORE", - "situation": "ALL_GONE", - }, - { - "action": "UPDATE", - "situation": "CONFIRMED", - }, - { - "action": "LINK", - "situation": "FOUND", - }, - { - "action": "CREATE", - "situation": "ABSENT", - }, - ], - "properties": [ - { - "default": "__RESOURCE__", - "target": "type", - }, - { - "source": "", - "target": "description", - "transform": { - "globals": {}, - "source": "(typeof source.servicePlanName !== "undefined" && source.servicePlanName !== null) ? source.servicePlanName : source._id", - "type": "text/javascript", + "sync/queue": { + "dnTemplate": "ou=queue,ou=sync,dc=openidm,dc=example,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-syncqueue", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "context": { + "ldapAttribute": "fr-idm-syncqueue-context", + "type": "json", + }, + "createDate": { + "ldapAttribute": "fr-idm-syncqueue-createdate", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-syncqueue-mapping", + "type": "simple", + }, + "newObject": { + "ldapAttribute": "fr-idm-syncqueue-newobject", + "type": "json", + }, + "nodeId": { + "ldapAttribute": "fr-idm-syncqueue-nodeid", + "type": "simple", + }, + "objectRev": { + "ldapAttribute": "fr-idm-syncqueue-objectRev", + "type": "simple", + }, + "oldObject": { + "ldapAttribute": "fr-idm-syncqueue-oldobject", + "type": "json", + }, + "remainingRetries": { + "ldapAttribute": "fr-idm-syncqueue-remainingretries", + "type": "simple", + }, + "resourceCollection": { + "ldapAttribute": "fr-idm-syncqueue-resourcecollection", + "type": "simple", + }, + "resourceId": { + "ldapAttribute": "fr-idm-syncqueue-resourceid", + "type": "simple", + }, + "state": { + "ldapAttribute": "fr-idm-syncqueue-state", + "type": "simple", + }, + "syncAction": { + "ldapAttribute": "fr-idm-syncqueue-syncaction", + "type": "simple", + }, + }, }, }, - { - "default": "managedAlpha_user_systemAzureUser", - "target": "mapping", - }, - { - "source": "", - "target": "name", - "transform": { - "globals": {}, - "source": "(typeof source.servicePlanName !== "undefined" && source.servicePlanName !== null) ? source.servicePlanName : source._id", - "type": "text/javascript", + "genericMapping": { + "cluster/*": { + "dnTemplate": "ou=cluster,dc=openidm,dc=example,dc=com", + "jsonAttribute": "fr-idm-cluster-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchClusterObject", + "objectClasses": [ + "uidObject", + "fr-idm-cluster-obj", + ], }, - }, - { - "source": "_id", - "target": "attributes", - "transform": { - "globals": {}, - "source": "[ - { - 'name': '__servicePlanIds__', - 'value': [source] - } -]", - "type": "text/javascript", + "config": { + "dnTemplate": "ou=config,dc=openidm,dc=example,dc=com", }, - }, - { - "source": "_id", - "target": "_id", - "transform": { - "globals": { - "sourceObjectSet": "system_Azure_servicePlan_", - }, - "source": "sourceObjectSet.concat(source)", - "type": "text/javascript", + "file": { + "dnTemplate": "ou=file,dc=openidm,dc=example,dc=com", }, - }, - ], - "source": "system/Azure/servicePlan", - "target": "managed/alpha_assignment", - "targetQuery": { - "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "__servicePlanIds__"]", - }, - }, - "mapping/systemAzureUser_managedAlpha_user": { - "_id": "mapping/systemAzureUser_managedAlpha_user", - "consentRequired": false, - "correlationQuery": [ - { - "linkQualifier": "default", - "source": "var qry = {'_queryFilter': 'mail eq "' + source.mail + '"'}; qry", - "type": "text/javascript", - }, - ], - "defaultSourceFields": [ - "*", - "memberOf", - "__roles__", - "__servicePlanIds__", - ], - "defaultTargetFields": [ - "*", - "assignments", - ], - "displayName": "systemAzureUser_managedAlpha_user", - "icon": null, - "links": "managedAlpha_user_systemAzureUser", - "name": "systemAzureUser_managedAlpha_user", - "policies": [ - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "UPDATE", - "situation": "CONFIRMED", - }, - { - "action": "ONBOARD", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "SOURCE_TARGET_CONFLICT", - }, - ], - "properties": [ - { - "referencedObjectType": "__GROUP__", - "source": "memberOf", - "target": "assignments", - }, - { - "referencedObjectType": "directoryRole", - "source": "__roles__", - "target": "assignments", - }, - { - "referencedObjectType": "servicePlan", - "source": "__servicePlanIds__", - "target": "assignments", - }, - ], - "reconSourceQueryPageSize": 999, - "reconSourceQueryPaging": true, - "runTargetPhase": false, - "source": "system/Azure/User", - "sourceQueryFullEntry": true, - "target": "managed/alpha_user", - }, - "mapping/systemAzure__group___managedAlpha_assignment": { - "_id": "mapping/systemAzure__group___managedAlpha_assignment", - "consentRequired": false, - "displayName": "systemAzure__group___managedAlpha_assignment", - "icon": null, - "name": "systemAzure__group___managedAlpha_assignment", - "policies": [ - { - "action": "EXCEPTION", - "situation": "AMBIGUOUS", - }, - { - "action": "DELETE", - "situation": "SOURCE_MISSING", - }, - { - "action": "CREATE", - "situation": "MISSING", - }, - { - "action": "EXCEPTION", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "DELETE", - "situation": "UNQUALIFIED", - }, - { - "action": "EXCEPTION", - "situation": "UNASSIGNED", - }, - { - "action": "EXCEPTION", - "situation": "LINK_ONLY", - }, - { - "action": "IGNORE", - "situation": "TARGET_IGNORED", - }, - { - "action": "IGNORE", - "situation": "SOURCE_IGNORED", - }, - { - "action": "IGNORE", - "situation": "ALL_GONE", - }, - { - "action": "UPDATE", - "situation": "CONFIRMED", - }, - { - "action": "LINK", - "situation": "FOUND", - }, - { - "action": "CREATE", - "situation": "ABSENT", - }, - ], - "properties": [ - { - "default": "__RESOURCE__", - "target": "type", - }, - { - "source": "", - "target": "description", - "transform": { - "globals": {}, - "source": "(typeof source.description !== "undefined" && source.description !== null) ? source.description : source._id", - "type": "text/javascript", + "internal/notification": { + "dnTemplate": "ou=notification,ou=internal,dc=openidm,dc=example,dc=com", + "jsonAttribute": "fr-idm-notification-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-notification", + ], + "properties": { + "target": { + "propertyName": "_notifications", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + }, }, - }, - { - "default": "managedAlpha_user_systemAzureUser", - "target": "mapping", - }, - { - "source": "", - "target": "name", - "transform": { - "globals": {}, - "source": "(typeof source.displayName !== "undefined" && source.displayName !== null) ? source.displayName : source._id", - "type": "text/javascript", + "internal/usermeta": { + "dnTemplate": "ou=usermeta,ou=internal,dc=openidm,dc=example,dc=com", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + }, }, - }, - { - "source": "_id", - "target": "attributes", - "transform": { - "globals": {}, - "source": "[ - { - 'name': 'memberOf', - 'value': [source] - } -]", - "type": "text/javascript", + "jsonstorage": { + "dnTemplate": "ou=jsonstorage,dc=openidm,dc=example,dc=com", + }, + "managed/*": { + "dnTemplate": "ou=managed,dc=openidm,dc=example,dc=com", + }, + "managed/alpha_group": { + "dnTemplate": "ou=groups,o=alpha,o=root,ou=identities", + "idGenerator": { + "propertyName": "name", + "type": "property", + }, + "jsonAttribute": "fr-idm-managed-group-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "cn", + "type": "clientDnNaming", + }, + "nativeId": false, + "objectClasses": [ + "top", + "groupOfURLs", + "fr-idm-managed-group", + ], + "properties": { + "_id": { + "ldapAttribute": "cn", + "primaryKey": true, + "type": "simple", + "writability": "createOnly", + }, + "condition": { + "ldapAttribute": "fr-idm-managed-group-condition", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "members": { + "isMultiValued": true, + "propertyName": "groups", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + }, + }, + "managed/alpha_organization": { + "dnTemplate": "ou=organization,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + "fr-ext-attrs", + ], + "properties": { + "_id": { + "ldapAttribute": "uid", + "type": "simple", + }, + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/alpha_organization", + "type": "reverseReference", + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + }, + }, + "managed/alpha_role": { + "dnTemplate": "ou=role,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role", + ], + "properties": { + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + }, + }, + "managed/alpha_user": { + "dnTemplate": "ou=user,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-custom-attrs", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "fr-idm-uuid", + "type": "clientDnNaming", + }, + "nativeId": false, + "objectClasses": [ + "person", + "organizationalPerson", + "inetOrgPerson", + "iplanet-am-user-service", + "devicePrintProfilesContainer", + "deviceProfilesContainer", + "kbaInfoContainer", + "fr-idm-managed-user-explicit", + "forgerock-am-dashboard-service", + "inetuser", + "iplanet-am-auth-configuration-service", + "iplanet-am-managed-person", + "iPlanetPreferences", + "oathDeviceProfilesContainer", + "pushDeviceProfilesContainer", + "sunAMAuthAccountLockout", + "sunFMSAML2NameIdentifier", + "webauthnDeviceProfilesContainer", + "fr-idm-hybrid-obj", + "fr-ext-attrs", + ], + "properties": { + "_id": { + "ldapAttribute": "fr-idm-uuid", + "primaryKey": true, + "type": "simple", + }, + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "managed/alpha_usermeta", + "type": "reference", + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference", + }, + "accountStatus": { + "ldapAttribute": "inetUserStatus", + "type": "simple", + }, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + "aliasList": { + "isMultiValued": true, + "ldapAttribute": "iplanet-am-user-alias-list", + "type": "simple", + }, + "assignedDashboard": { + "isMultiValued": true, + "ldapAttribute": "assignedDashboard", + "type": "simple", + }, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", + }, + "city": { + "ldapAttribute": "l", + "type": "simple", + }, + "cn": { + "ldapAttribute": "cn", + "type": "simple", + }, + "consentedMappings": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-consentedMapping", + "type": "json", + }, + "country": { + "ldapAttribute": "co", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "displayName": { + "ldapAttribute": "displayName", + "type": "simple", + }, + "effectiveAssignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveAssignment", + "type": "json", + }, + "effectiveGroups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveGroup", + "type": "json", + }, + "effectiveRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveRole", + "type": "json", + }, + "frIndexedDate1": { + "ldapAttribute": "fr-attr-idate1", + "type": "simple", + }, + "frIndexedDate2": { + "ldapAttribute": "fr-attr-idate2", + "type": "simple", + }, + "frIndexedDate3": { + "ldapAttribute": "fr-attr-idate3", + "type": "simple", + }, + "frIndexedDate4": { + "ldapAttribute": "fr-attr-idate4", + "type": "simple", + }, + "frIndexedDate5": { + "ldapAttribute": "fr-attr-idate5", + "type": "simple", + }, + "frIndexedInteger1": { + "ldapAttribute": "fr-attr-iint1", + "type": "simple", + }, + "frIndexedInteger2": { + "ldapAttribute": "fr-attr-iint2", + "type": "simple", + }, + "frIndexedInteger3": { + "ldapAttribute": "fr-attr-iint3", + "type": "simple", + }, + "frIndexedInteger4": { + "ldapAttribute": "fr-attr-iint4", + "type": "simple", + }, + "frIndexedInteger5": { + "ldapAttribute": "fr-attr-iint5", + "type": "simple", + }, + "frIndexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti1", + "type": "simple", + }, + "frIndexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti2", + "type": "simple", + }, + "frIndexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti3", + "type": "simple", + }, + "frIndexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti4", + "type": "simple", + }, + "frIndexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti5", + "type": "simple", + }, + "frIndexedString1": { + "ldapAttribute": "fr-attr-istr1", + "type": "simple", + }, + "frIndexedString2": { + "ldapAttribute": "fr-attr-istr2", + "type": "simple", + }, + "frIndexedString3": { + "ldapAttribute": "fr-attr-istr3", + "type": "simple", + }, + "frIndexedString4": { + "ldapAttribute": "fr-attr-istr4", + "type": "simple", + }, + "frIndexedString5": { + "ldapAttribute": "fr-attr-istr5", + "type": "simple", + }, + "frUnindexedDate1": { + "ldapAttribute": "fr-attr-date1", + "type": "simple", + }, + "frUnindexedDate2": { + "ldapAttribute": "fr-attr-date2", + "type": "simple", + }, + "frUnindexedDate3": { + "ldapAttribute": "fr-attr-date3", + "type": "simple", + }, + "frUnindexedDate4": { + "ldapAttribute": "fr-attr-date4", + "type": "simple", + }, + "frUnindexedDate5": { + "ldapAttribute": "fr-attr-date5", + "type": "simple", + }, + "frUnindexedInteger1": { + "ldapAttribute": "fr-attr-int1", + "type": "simple", + }, + "frUnindexedInteger2": { + "ldapAttribute": "fr-attr-int2", + "type": "simple", + }, + "frUnindexedInteger3": { + "ldapAttribute": "fr-attr-int3", + "type": "simple", + }, + "frUnindexedInteger4": { + "ldapAttribute": "fr-attr-int4", + "type": "simple", + }, + "frUnindexedInteger5": { + "ldapAttribute": "fr-attr-int5", + "type": "simple", + }, + "frUnindexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi1", + "type": "simple", + }, + "frUnindexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi2", + "type": "simple", + }, + "frUnindexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi3", + "type": "simple", + }, + "frUnindexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi4", + "type": "simple", + }, + "frUnindexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi5", + "type": "simple", + }, + "frUnindexedString1": { + "ldapAttribute": "fr-attr-str1", + "type": "simple", + }, + "frUnindexedString2": { + "ldapAttribute": "fr-attr-str2", + "type": "simple", + }, + "frUnindexedString3": { + "ldapAttribute": "fr-attr-str3", + "type": "simple", + }, + "frUnindexedString4": { + "ldapAttribute": "fr-attr-str4", + "type": "simple", + }, + "frUnindexedString5": { + "ldapAttribute": "fr-attr-str5", + "type": "simple", + }, + "givenName": { + "ldapAttribute": "givenName", + "type": "simple", + }, + "groups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-groups", + "primaryKey": "cn", + "resourcePath": "managed/alpha_group", + "type": "reference", + }, + "kbaInfo": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-kbaInfo", + "type": "json", + }, + "lastSync": { + "ldapAttribute": "fr-idm-lastSync", + "type": "json", + }, + "mail": { + "ldapAttribute": "mail", + "type": "simple", + }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/alpha_user", + "type": "reference", + }, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + "memberOfOrgIDs": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-memberoforgid", + "type": "simple", + }, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + "password": { + "ldapAttribute": "userPassword", + "type": "simple", + }, + "postalAddress": { + "ldapAttribute": "street", + "type": "simple", + }, + "postalCode": { + "ldapAttribute": "postalCode", + "type": "simple", + }, + "preferences": { + "ldapAttribute": "fr-idm-preferences", + "type": "json", + }, + "profileImage": { + "ldapAttribute": "labeledURI", + "type": "simple", + }, + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/alpha_role", + "type": "reference", + }, + "sn": { + "ldapAttribute": "sn", + "type": "simple", + }, + "stateProvince": { + "ldapAttribute": "st", + "type": "simple", + }, + "telephoneNumber": { + "ldapAttribute": "telephoneNumber", + "type": "simple", + }, + "userName": { + "ldapAttribute": "uid", + "type": "simple", + }, + }, }, - }, - { - "source": "_id", - "target": "_id", - "transform": { - "globals": { - "sourceObjectSet": "system_Azure___GROUP___", + "managed/alpha_usermeta": { + "dnTemplate": "ou=usermeta,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, }, - "source": "sourceObjectSet.concat(source)", - "type": "text/javascript", }, - }, - ], - "source": "system/Azure/__GROUP__", - "target": "managed/alpha_assignment", - "targetQuery": { - "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "memberOf"]", - }, - }, - "policy": { - "_id": "policy", - "additionalFiles": [], - "resources": [], - }, - "privilegeAssignments": { - "_id": "privilegeAssignments", - "privilegeAssignments": [ - { - "name": "ownerPrivileges", - "privileges": [ - "owner-view-update-delete-orgs", - "owner-create-orgs", - "owner-view-update-delete-admins-and-members", - "owner-create-admins", - "admin-view-update-delete-members", - "admin-create-members", - ], - "relationshipField": "ownerOfOrg", - }, - { - "name": "adminPrivileges", - "privileges": [ - "admin-view-update-delete-orgs", - "admin-create-orgs", - "admin-view-update-delete-members", - "admin-create-members", - ], - "relationshipField": "adminOfOrg", - }, - ], - }, - "privileges": { - "_id": "privileges", - "privileges": [], - }, - "provisioner.openic/GoogleApps": { - "_id": "provisioner.openic/GoogleApps", - "configurationProperties": { - "availableLicenses": [ - "101005/1010050001", - "101001/1010010001", - "101031/1010310010", - "101034/1010340002", - "101038/1010380002", - "101034/1010340001", - "101038/1010380003", - "101034/1010340004", - "101034/1010340003", - "101034/1010340006", - "Google-Apps/Google-Apps-For-Business", - "101034/1010340005", - "Google-Vault/Google-Vault", - "Google-Apps/1010020031", - "Google-Apps/1010020030", - "Google-Apps/1010060003", - "Google-Apps/1010060005", - "Google-Apps/Google-Apps-Unlimited", - "Google-Apps/1010020029", - "Google-Apps/Google-Apps-Lite", - "101031/1010310003", - "101033/1010330002", - "101033/1010330004", - "Google-Apps/Google-Apps-For-Education", - "101031/1010310002", - "101033/1010330003", - "Google-Apps/1010020026", - "101031/1010310007", - "Google-Apps/1010020025", - "101031/1010310008", - "Google-Apps/1010020028", - "Google-Apps/Google-Apps-For-Postini", - "101031/1010310005", - "Google-Apps/1010020027", - "101031/1010310006", - "101031/1010310009", - "Google-Vault/Google-Vault-Former-Employee", - "101038/1010370001", - "Google-Apps/1010020020", - "Google-Apps/1010060001", - ], - "clientId": "&{esv.gac.client.id}", - "clientSecret": "&{esv.gac.secret}", - "domain": "&{esv.gac.domain}", - "groupsMaxResults": "200", - "listProductAndSkuMaxResults": "100", - "listProductMaxResults": "100", - "membersMaxResults": "200", - "proxyHost": null, - "proxyPort": 8080, - "refreshToken": "&{esv.gac.refresh}", - "roleAssignmentMaxResults": 100, - "roleMaxResults": 100, - "usersMaxResults": "100", - "validateCertificate": true, - }, - "connectorRef": { - "bundleName": "org.forgerock.openicf.connectors.googleapps-connector", - "bundleVersion": "[1.5.0.0,1.6.0.0)", - "connectorHostRef": "", - "connectorName": "org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector", - "displayName": "GoogleApps Connector", - "systemType": "provisioner.openicf", - }, - "enabled": { - "$bool": "&{esv.gac.enable.connector}", - }, - "objectTypes": { - "__ACCOUNT__": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "__ACCOUNT__", - "nativeType": "__ACCOUNT__", - "properties": { - "__GROUPS__": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", + "managed/bravo_group": { + "dnTemplate": "ou=groups,o=bravo,o=root,ou=identities", + "idGenerator": { + "propertyName": "name", + "type": "property", + }, + "jsonAttribute": "fr-idm-managed-group-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "cn", + "type": "clientDnNaming", + }, + "nativeId": false, + "objectClasses": [ + "top", + "groupOfURLs", + "fr-idm-managed-group", + ], + "properties": { + "_id": { + "ldapAttribute": "cn", + "primaryKey": true, + "type": "simple", + "writability": "createOnly", + }, + "condition": { + "ldapAttribute": "fr-idm-managed-group-condition", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "members": { + "isMultiValued": true, + "propertyName": "groups", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", }, - "nativeName": "__GROUPS__", - "nativeType": "string", - "type": "array", }, - "__NAME__": { - "nativeName": "__NAME__", - "nativeType": "string", - "type": "string", + }, + "managed/bravo_organization": { + "dnTemplate": "ou=organization,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + "fr-ext-attrs", + ], + "properties": { + "_id": { + "ldapAttribute": "uid", + "type": "simple", + }, + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/bravo_organization", + "type": "reverseReference", + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", + }, }, - "__PASSWORD__": { - "flags": [ - "NOT_READABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "nativeName": "__PASSWORD__", - "nativeType": "JAVA_TYPE_GUARDEDSTRING", - "required": true, - "type": "string", + }, + "managed/bravo_role": { + "dnTemplate": "ou=role,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role", + ], + "properties": { + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, }, - "__PHOTO__": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "nativeName": "__PHOTO__", - "nativeType": "JAVA_TYPE_BYTE_ARRAY", - "type": "string", + }, + "managed/bravo_user": { + "dnTemplate": "ou=user,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-custom-attrs", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "fr-idm-uuid", + "type": "clientDnNaming", }, - "__SECONDARY_EMAILS__": { - "items": { - "nativeType": "object", - "type": "object", + "nativeId": false, + "objectClasses": [ + "person", + "organizationalPerson", + "inetOrgPerson", + "iplanet-am-user-service", + "devicePrintProfilesContainer", + "deviceProfilesContainer", + "kbaInfoContainer", + "fr-idm-managed-user-explicit", + "forgerock-am-dashboard-service", + "inetuser", + "iplanet-am-auth-configuration-service", + "iplanet-am-managed-person", + "iPlanetPreferences", + "oathDeviceProfilesContainer", + "pushDeviceProfilesContainer", + "sunAMAuthAccountLockout", + "sunFMSAML2NameIdentifier", + "webauthnDeviceProfilesContainer", + "fr-idm-hybrid-obj", + "fr-ext-attrs", + ], + "properties": { + "_id": { + "ldapAttribute": "fr-idm-uuid", + "primaryKey": true, + "type": "simple", + }, + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "managed/bravo_usermeta", + "type": "reference", + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference", + }, + "accountStatus": { + "ldapAttribute": "inetUserStatus", + "type": "simple", + }, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", + }, + "aliasList": { + "isMultiValued": true, + "ldapAttribute": "iplanet-am-user-alias-list", + "type": "simple", + }, + "assignedDashboard": { + "isMultiValued": true, + "ldapAttribute": "assignedDashboard", + "type": "simple", + }, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", + }, + "city": { + "ldapAttribute": "l", + "type": "simple", + }, + "cn": { + "ldapAttribute": "cn", + "type": "simple", + }, + "consentedMappings": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-consentedMapping", + "type": "json", + }, + "country": { + "ldapAttribute": "co", + "type": "simple", + }, + "description": { + "ldapAttribute": "description", + "type": "simple", + }, + "displayName": { + "ldapAttribute": "displayName", + "type": "simple", + }, + "effectiveAssignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveAssignment", + "type": "json", + }, + "effectiveGroups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveGroup", + "type": "json", + }, + "effectiveRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveRole", + "type": "json", + }, + "frIndexedDate1": { + "ldapAttribute": "fr-attr-idate1", + "type": "simple", + }, + "frIndexedDate2": { + "ldapAttribute": "fr-attr-idate2", + "type": "simple", + }, + "frIndexedDate3": { + "ldapAttribute": "fr-attr-idate3", + "type": "simple", + }, + "frIndexedDate4": { + "ldapAttribute": "fr-attr-idate4", + "type": "simple", + }, + "frIndexedDate5": { + "ldapAttribute": "fr-attr-idate5", + "type": "simple", + }, + "frIndexedInteger1": { + "ldapAttribute": "fr-attr-iint1", + "type": "simple", + }, + "frIndexedInteger2": { + "ldapAttribute": "fr-attr-iint2", + "type": "simple", + }, + "frIndexedInteger3": { + "ldapAttribute": "fr-attr-iint3", + "type": "simple", + }, + "frIndexedInteger4": { + "ldapAttribute": "fr-attr-iint4", + "type": "simple", + }, + "frIndexedInteger5": { + "ldapAttribute": "fr-attr-iint5", + "type": "simple", + }, + "frIndexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti1", + "type": "simple", + }, + "frIndexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti2", + "type": "simple", + }, + "frIndexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti3", + "type": "simple", + }, + "frIndexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti4", + "type": "simple", + }, + "frIndexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti5", + "type": "simple", + }, + "frIndexedString1": { + "ldapAttribute": "fr-attr-istr1", + "type": "simple", + }, + "frIndexedString2": { + "ldapAttribute": "fr-attr-istr2", + "type": "simple", }, - "nativeName": "__SECONDARY_EMAILS__", - "nativeType": "object", - "type": "array", - }, - "__UID__": { - "nativeName": "__UID__", - "nativeType": "string", - "required": false, - "type": "string", - }, - "addresses": { - "items": { - "nativeType": "object", - "type": "object", + "frIndexedString3": { + "ldapAttribute": "fr-attr-istr3", + "type": "simple", }, - "nativeName": "addresses", - "nativeType": "object", - "type": "array", - }, - "agreedToTerms": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "agreedToTerms", - "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", - "type": "boolean", - }, - "aliases": { - "flags": [ - "NOT_CREATABLE", - ], - "items": { - "nativeType": "string", - "type": "string", + "frIndexedString4": { + "ldapAttribute": "fr-attr-istr4", + "type": "simple", }, - "nativeName": "aliases", - "nativeType": "string", - "type": "array", - }, - "archived": { - "nativeName": "archived", - "nativeType": "boolean", - "type": "boolean", - }, - "changePasswordAtNextLogin": { - "nativeName": "changePasswordAtNextLogin", - "nativeType": "boolean", - "type": "boolean", - }, - "creationTime": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", + "frIndexedString5": { + "ldapAttribute": "fr-attr-istr5", + "type": "simple", }, - "nativeName": "creationTime", - "nativeType": "string", - "type": "array", - }, - "customSchemas": { - "nativeName": "customSchemas", - "nativeType": "object", - "type": "object", - }, - "customerId": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "customerId", - "nativeType": "string", - "type": "string", - }, - "deletionTime": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "deletionTime", - "nativeType": "string", - "type": "string", - }, - "externalIds": { - "items": { - "nativeType": "object", - "type": "object", + "frUnindexedDate1": { + "ldapAttribute": "fr-attr-date1", + "type": "simple", }, - "nativeName": "externalIds", - "nativeType": "object", - "type": "array", - }, - "familyName": { - "nativeName": "familyName", - "nativeType": "string", - "type": "string", - }, - "fullName": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "fullName", - "nativeType": "string", - "type": "string", - }, - "givenName": { - "nativeName": "givenName", - "nativeType": "string", - "required": true, - "type": "string", - }, - "hashFunction": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "nativeName": "hashFunction", - "nativeType": "string", - "type": "string", - }, - "ims": { - "items": { - "nativeType": "object", - "type": "object", + "frUnindexedDate2": { + "ldapAttribute": "fr-attr-date2", + "type": "simple", }, - "nativeName": "ims", - "nativeType": "object", - "type": "array", - }, - "includeInGlobalAddressList": { - "nativeName": "includeInGlobalAddressList", - "nativeType": "boolean", - "type": "boolean", - }, - "ipWhitelisted": { - "nativeName": "ipWhitelisted", - "nativeType": "boolean", - "type": "boolean", - }, - "isAdmin": { - "nativeName": "isAdmin", - "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", - "type": "boolean", - }, - "isDelegatedAdmin": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isDelegatedAdmin", - "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", - "type": "boolean", - }, - "isEnforcedIn2Sv": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isEnforcedIn2Sv", - "nativeType": "boolean", - "type": "boolean", - }, - "isEnrolledIn2Sv": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isEnrolledIn2Sv", - "nativeType": "boolean", - "type": "boolean", - }, - "isMailboxSetup": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isMailboxSetup", - "nativeType": "boolean", - "type": "boolean", - }, - "languages": { - "items": { - "nativeType": "object", - "type": "object", + "frUnindexedDate3": { + "ldapAttribute": "fr-attr-date3", + "type": "simple", }, - "nativeName": "languages", - "nativeType": "object", - "type": "array", - }, - "lastLoginTime": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedDate4": { + "ldapAttribute": "fr-attr-date4", + "type": "simple", }, - "nativeName": "lastLoginTime", - "nativeType": "string", - "type": "array", - }, - "nonEditableAliases": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedDate5": { + "ldapAttribute": "fr-attr-date5", + "type": "simple", }, - "nativeName": "nonEditableAliases", - "nativeType": "string", - "type": "array", - }, - "orgUnitPath": { - "nativeName": "orgUnitPath", - "nativeType": "string", - "type": "string", - }, - "organizations": { - "items": { - "nativeType": "object", - "type": "object", + "frUnindexedInteger1": { + "ldapAttribute": "fr-attr-int1", + "type": "simple", }, - "nativeName": "organizations", - "nativeType": "object", - "type": "array", - }, - "phones": { - "items": { - "nativeType": "object", - "type": "object", + "frUnindexedInteger2": { + "ldapAttribute": "fr-attr-int2", + "type": "simple", }, - "nativeName": "phones", - "nativeType": "object", - "type": "array", - }, - "primaryEmail": { - "nativeName": "primaryEmail", - "nativeType": "string", - "type": "string", - }, - "recoveryEmail": { - "nativeName": "recoveryEmail", - "nativeType": "string", - "type": "string", - }, - "recoveryPhone": { - "nativeName": "recoveryPhone", - "nativeType": "string", - "type": "string", - }, - "relations": { - "items": { - "nativeType": "object", - "type": "object", + "frUnindexedInteger3": { + "ldapAttribute": "fr-attr-int3", + "type": "simple", }, - "nativeName": "relations", - "nativeType": "object", - "type": "array", - }, - "suspended": { - "nativeName": "suspended", - "nativeType": "boolean", - "type": "boolean", - }, - "suspensionReason": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "suspensionReason", - "nativeType": "string", - "type": "string", - }, - "thumbnailPhotoUrl": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "thumbnailPhotoUrl", - "nativeType": "string", - "type": "string", - }, - }, - "type": "object", - }, - }, - "operationTimeout": { - "AUTHENTICATE": -1, - "CREATE": -1, - "DELETE": -1, - "GET": -1, - "RESOLVEUSERNAME": -1, - "SCHEMA": -1, - "SCRIPT_ON_CONNECTOR": -1, - "SCRIPT_ON_RESOURCE": -1, - "SEARCH": -1, - "SYNC": -1, - "TEST": -1, - "UPDATE": -1, - "VALIDATE": -1, - }, - "poolConfigOption": { - "maxIdle": 10, - "maxObjects": 10, - "maxWait": 150000, - "minEvictableIdleTimeMillis": 120000, - "minIdle": 1, - }, - "resultsHandlerConfig": { - "enableAttributesToGetSearchResultsHandler": true, - "enableCaseInsensitiveFilter": false, - "enableFilteredResultsHandler": false, - "enableNormalizingResultsHandler": false, - }, - }, - "provisioner.openicf.connectorinfoprovider": { - "_id": "provisioner.openicf.connectorinfoprovider", - "connectorsLocation": "connectors", - "remoteConnectorClients": [ - { - "enabled": true, - "name": "rcs1", - "useSSL": true, - }, - ], - "remoteConnectorClientsGroups": [], - "remoteConnectorServers": [], - "remoteConnectorServersGroups": [], - }, - "provisioner.openicf/Azure": { - "_id": "provisioner.openicf/Azure", - "configurationProperties": { - "clientId": "4b07adcc-329c-434c-aa83-49a14bef3c49", - "clientSecret": { - "$crypto": { - "type": "x-simple-encryption", - "value": { - "cipher": "AES/CBC/PKCS5Padding", - "data": "W63amdvzlmynT40WOTl1wPWDc8FUlGWQZK158lmlFTrnhy9PbWZV5YE4v3VeMUDC", - "iv": "KG/YFc8v26QHJzRI3uFhzw==", - "keySize": 16, - "mac": "mA4BzCNS7tuLhosQ+es1Tg==", - "purpose": "idm.config.encryption", - "salt": "vvPwKk0KqOqMjElQgICqEA==", - "stableId": "openidm-sym-default", - }, - }, - }, - "httpProxyHost": null, - "httpProxyPassword": null, - "httpProxyPort": null, - "httpProxyUsername": null, - "licenseCacheExpiryTime": 60, - "performHardDelete": true, - "readRateLimit": null, - "tenant": "711ffa9c-5972-4713-ace3-688c9732614a", - "writeRateLimit": null, - }, - "connectorRef": { - "bundleName": "org.forgerock.openicf.connectors.msgraphapi-connector", - "bundleVersion": "1.5.20.21", - "connectorName": "org.forgerock.openicf.connectors.msgraphapi.MSGraphAPIConnector", - "displayName": "MSGraphAPI Connector", - "systemType": "provisioner.openicf", - }, - "enabled": true, - "objectTypes": { - "User": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "__ACCOUNT__", - "nativeType": "__ACCOUNT__", - "properties": { - "__PASSWORD__": { - "autocomplete": "new-password", - "flags": [ - "NOT_UPDATEABLE", - "NOT_READABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "nativeName": "__PASSWORD__", - "nativeType": "JAVA_TYPE_GUARDEDSTRING", - "required": true, - "type": "string", - }, - "__roles__": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedInteger4": { + "ldapAttribute": "fr-attr-int4", + "type": "simple", }, - "nativeName": "__roles__", - "nativeType": "string", - "type": "array", - }, - "__servicePlanIds__": { - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedInteger5": { + "ldapAttribute": "fr-attr-int5", + "type": "simple", }, - "nativeName": "__servicePlanIds__", - "nativeType": "string", - "type": "array", - }, - "accountEnabled": { - "nativeName": "accountEnabled", - "nativeType": "boolean", - "required": true, - "type": "boolean", - }, - "city": { - "nativeName": "city", - "nativeType": "string", - "type": "string", - }, - "companyName": { - "nativeName": "companyName", - "nativeType": "string", - "type": "string", - }, - "country": { - "nativeName": "country", - "nativeType": "string", - "type": "string", - }, - "department": { - "nativeName": "department", - "nativeType": "string", - "type": "string", - }, - "displayName": { - "nativeName": "displayName", - "nativeType": "string", - "required": true, - "type": "string", - }, - "givenName": { - "nativeName": "givenName", - "nativeType": "string", - "type": "string", - }, - "jobTitle": { - "nativeName": "jobTitle", - "nativeType": "string", - "type": "string", - }, - "mail": { - "nativeName": "mail", - "nativeType": "string", - "required": true, - "type": "string", - }, - "mailNickname": { - "nativeName": "mailNickname", - "nativeType": "string", - "required": true, - "type": "string", - }, - "manager": { - "nativeName": "manager", - "nativeType": "object", - "type": "object", - }, - "memberOf": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi1", + "type": "simple", + }, + "frUnindexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi2", + "type": "simple", }, - "nativeName": "memberOf", - "nativeType": "string", - "type": "array", - }, - "mobilePhone": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "mobilePhone", - "nativeType": "string", - "type": "string", - }, - "onPremisesImmutableId": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "onPremisesImmutableId", - "nativeType": "string", - "type": "string", - }, - "onPremisesSecurityIdentifier": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "onPremisesSecurityIdentifier", - "nativeType": "string", - "type": "string", - }, - "otherMails": { - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi3", + "type": "simple", }, - "nativeName": "otherMails", - "nativeType": "string", - "type": "array", - }, - "postalCode": { - "nativeName": "postalCode", - "nativeType": "string", - "type": "string", - }, - "preferredLanguage": { - "nativeName": "preferredLanguage", - "nativeType": "string", - "type": "string", - }, - "proxyAddresses": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi4", + "type": "simple", }, - "nativeName": "proxyAddresses", - "nativeType": "string", - "type": "array", - }, - "state": { - "nativeName": "state", - "nativeType": "string", - "type": "string", - }, - "streetAddress": { - "nativeName": "streetAddress", - "nativeType": "string", - "type": "string", - }, - "surname": { - "nativeName": "surname", - "nativeType": "string", - "type": "string", - }, - "usageLocation": { - "nativeName": "usageLocation", - "nativeType": "string", - "type": "string", - }, - "userPrincipalName": { - "nativeName": "userPrincipalName", - "nativeType": "string", - "required": true, - "type": "string", - }, - "userType": { - "nativeName": "userType", - "nativeType": "string", - "type": "string", - }, - }, - "type": "object", - }, - "__GROUP__": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "__GROUP__", - "nativeType": "__GROUP__", - "properties": { - "__NAME__": { - "nativeName": "__NAME__", - "nativeType": "string", - "required": true, - "type": "string", - }, - "description": { - "nativeName": "description", - "nativeType": "string", - "type": "string", - }, - "displayName": { - "nativeName": "displayName", - "nativeType": "string", - "required": true, - "type": "string", - }, - "groupTypes": { - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi5", + "type": "simple", }, - "nativeName": "groupTypes", - "nativeType": "string", - "type": "string", - }, - "id": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "id", - "type": "string", - }, - "mail": { - "nativeName": "mail", - "nativeType": "string", - "type": "string", - }, - "mailEnabled": { - "nativeName": "mailEnabled", - "nativeType": "boolean", - "required": true, - "type": "boolean", - }, - "onPremisesSecurityIdentifier": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "onPremisesSecurityIdentifier", - "nativeType": "string", - "type": "string", - }, - "proxyAddresses": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedString1": { + "ldapAttribute": "fr-attr-str1", + "type": "simple", }, - "nativeName": "proxyAddresses", - "nativeType": "string", - "type": "array", - }, - "securityEnabled": { - "nativeName": "securityEnabled", - "nativeType": "boolean", - "required": true, - "type": "boolean", - }, - "type": { - "nativeName": "type", - "required": true, - "type": "string", - }, - }, - "type": "object", - }, - "directoryRole": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "directoryRole", - "nativeType": "directoryRole", - "properties": { - "description": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "description", - "nativeType": "string", - "type": "string", - }, - "displayName": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "displayName", - "nativeType": "string", - "type": "string", - }, - }, - "type": "object", - }, - "servicePlan": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "servicePlan", - "nativeType": "servicePlan", - "properties": { - "__NAME__": { - "nativeName": "__NAME__", - "nativeType": "string", - "type": "string", - }, - "appliesTo": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "appliesTo", - "nativeType": "string", - "type": "string", - }, - "provisioningStatus": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "provisioningStatus", - "nativeType": "string", - "type": "string", - }, - "servicePlanId": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "servicePlanId", - "nativeType": "string", - "type": "string", - }, - "servicePlanName": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "servicePlanName", - "nativeType": "string", - "type": "string", - }, - "subscriberSkuId": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "subscriberSkuId", - "type": "string", - }, - }, - "type": "object", - }, - "servicePrincipal": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "servicePrincipal", - "nativeType": "servicePrincipal", - "properties": { - "__NAME__": { - "nativeName": "__NAME__", - "nativeType": "string", - "type": "string", - }, - "__addAppRoleAssignedTo__": { - "flags": [ - "NOT_READABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "object", - "type": "object", + "frUnindexedString2": { + "ldapAttribute": "fr-attr-str2", + "type": "simple", }, - "nativeName": "__addAppRoleAssignedTo__", - "nativeType": "object", - "type": "array", - }, - "__addAppRoleAssignments__": { - "flags": [ - "NOT_READABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "object", - "type": "object", + "frUnindexedString3": { + "ldapAttribute": "fr-attr-str3", + "type": "simple", }, - "nativeName": "__addAppRoleAssignments__", - "nativeType": "object", - "type": "array", - }, - "__removeAppRoleAssignedTo__": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedString4": { + "ldapAttribute": "fr-attr-str4", + "type": "simple", }, - "nativeName": "__removeAppRoleAssignedTo__", - "nativeType": "string", - "type": "array", - }, - "__removeAppRoleAssignments__": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", + "frUnindexedString5": { + "ldapAttribute": "fr-attr-str5", + "type": "simple", }, - "nativeName": "__removeAppRoleAssignments__", - "nativeType": "string", - "type": "array", - }, - "accountEnabled": { - "nativeName": "accountEnabled", - "nativeType": "boolean", - "type": "boolean", - }, - "addIns": { - "items": { - "nativeType": "object", - "type": "object", + "givenName": { + "ldapAttribute": "givenName", + "type": "simple", }, - "nativeName": "addIns", - "nativeType": "object", - "type": "array", - }, - "alternativeNames": { - "items": { - "nativeType": "string", - "type": "string", + "groups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-groups", + "primaryKey": "cn", + "resourcePath": "managed/bravo_group", + "type": "reference", }, - "nativeName": "alternativeNames", - "nativeType": "string", - "type": "array", - }, - "appDescription": { - "nativeName": "appDescription", - "nativeType": "string", - "type": "string", - }, - "appDisplayName": { - "nativeName": "appDisplayName", - "nativeType": "string", - "type": "string", - }, - "appId": { - "nativeName": "appId", - "nativeType": "string", - "type": "string", - }, - "appOwnerOrganizationId": { - "nativeName": "appOwnerOrganizationId", - "nativeType": "string", - "type": "string", - }, - "appRoleAssignmentRequired": { - "nativeName": "appRoleAssignmentRequired", - "nativeType": "boolean", - "type": "boolean", - }, - "appRoles": { - "items": { - "nativeType": "object", - "type": "object", + "kbaInfo": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-kbaInfo", + "type": "json", }, - "nativeName": "appRoles", - "nativeType": "object", - "type": "array", - }, - "applicationTemplateId": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "applicationTemplateId", - "nativeType": "string", - "type": "string", - }, - "deletedDateTime": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "deletedDateTime", - "nativeType": "string", - "type": "string", - }, - "description": { - "nativeName": "description", - "nativeType": "string", - "type": "string", - }, - "disabledByMicrosoftStatus": { - "nativeName": "disabledByMicrosoftStatus", - "nativeType": "string", - "type": "string", - }, - "displayName": { - "nativeName": "displayName", - "nativeType": "string", - "type": "string", - }, - "homepage": { - "nativeName": "homepage", - "nativeType": "string", - "type": "string", - }, - "info": { - "nativeName": "info", - "nativeType": "object", - "type": "object", - }, - "keyCredentials": { - "items": { - "nativeType": "object", - "type": "object", + "lastSync": { + "ldapAttribute": "fr-idm-lastSync", + "type": "json", + }, + "mail": { + "ldapAttribute": "mail", + "type": "simple", + }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/bravo_user", + "type": "reference", + }, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", + }, + "memberOfOrgIDs": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-memberoforgid", + "type": "simple", + }, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", + }, + "password": { + "ldapAttribute": "userPassword", + "type": "simple", + }, + "postalAddress": { + "ldapAttribute": "street", + "type": "simple", + }, + "postalCode": { + "ldapAttribute": "postalCode", + "type": "simple", + }, + "preferences": { + "ldapAttribute": "fr-idm-preferences", + "type": "json", }, - "nativeName": "keyCredentials", - "nativeType": "object", - "type": "array", - }, - "loginUrl": { - "nativeName": "loginUrl", - "nativeType": "string", - "type": "string", - }, - "logoutUrl": { - "nativeName": "logoutUrl", - "nativeType": "string", - "type": "string", - }, - "notes": { - "nativeName": "notes", - "nativeType": "string", - "type": "string", - }, - "notificationEmailAddresses": { - "items": { - "nativeType": "string", - "type": "string", + "profileImage": { + "ldapAttribute": "labeledURI", + "type": "simple", }, - "nativeName": "notificationEmailAddresses", - "nativeType": "string", - "type": "array", - }, - "oauth2PermissionScopes": { - "items": { - "nativeType": "object", - "type": "object", + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", }, - "nativeName": "oauth2PermissionScopes", - "nativeType": "object", - "type": "array", - }, - "passwordCredentials": { - "items": { - "nativeType": "object", - "type": "object", + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/bravo_role", + "type": "reference", }, - "nativeName": "passwordCredentials", - "nativeType": "object", - "type": "array", - }, - "preferredSingleSignOnMode": { - "nativeName": "preferredSingleSignOnMode", - "nativeType": "string", - "type": "string", - }, - "replyUrls": { - "items": { - "nativeType": "string", - "type": "string", + "sn": { + "ldapAttribute": "sn", + "type": "simple", }, - "nativeName": "replyUrls", - "nativeType": "string", - "type": "array", - }, - "resourceSpecificApplicationPermissions": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "object", - "type": "object", + "stateProvince": { + "ldapAttribute": "st", + "type": "simple", }, - "nativeName": "resourceSpecificApplicationPermissions", - "nativeType": "object", - "type": "array", - }, - "samlSingleSignOnSettings": { - "nativeName": "samlSingleSignOnSettings", - "nativeType": "object", - "type": "object", - }, - "servicePrincipalNames": { - "items": { - "nativeType": "string", - "type": "string", + "telephoneNumber": { + "ldapAttribute": "telephoneNumber", + "type": "simple", }, - "nativeName": "servicePrincipalNames", - "nativeType": "string", - "type": "array", - }, - "servicePrincipalType": { - "nativeName": "servicePrincipalType", - "nativeType": "string", - "type": "string", - }, - "signInAudience": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "signInAudience", - "nativeType": "string", - "type": "string", - }, - "tags": { - "items": { - "nativeType": "string", - "type": "string", + "userName": { + "ldapAttribute": "uid", + "type": "simple", }, - "nativeName": "tags", - "nativeType": "string", - "type": "array", }, - "tokenEncryptionKeyId": { - "nativeName": "tokenEncryptionKeyId", - "nativeType": "string", - "type": "string", + }, + "managed/bravo_usermeta": { + "dnTemplate": "ou=usermeta,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/bravo_user", + "type": "reverseReference", + }, }, - "verifiedPublisher": { - "nativeName": "verifiedPublisher", - "nativeType": "object", - "type": "object", + }, + "managed/teammembermeta": { + "dnTemplate": "ou=teammembermeta,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/teammember", + "type": "reverseReference", + }, }, }, - "type": "object", + "reconprogressstate": { + "dnTemplate": "ou=reconprogressstate,dc=openidm,dc=example,dc=com", + }, + "relationships": { + "dnTemplate": "ou=relationships,dc=openidm,dc=example,dc=com", + "jsonAttribute": "fr-idm-relationship-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchRelationship", + "objectClasses": [ + "uidObject", + "fr-idm-relationship", + ], + }, + "scheduler": { + "dnTemplate": "ou=scheduler,dc=openidm,dc=example,dc=com", + }, + "scheduler/*": { + "dnTemplate": "ou=scheduler,dc=openidm,dc=example,dc=com", + }, + "ui/*": { + "dnTemplate": "ou=ui,dc=openidm,dc=example,dc=com", + }, + "updates": { + "dnTemplate": "ou=updates,dc=openidm,dc=example,dc=com", + }, }, }, - "operationTimeout": { - "AUTHENTICATE": -1, - "CREATE": -1, - "DELETE": -1, - "GET": -1, - "RESOLVEUSERNAME": -1, - "SCHEMA": -1, - "SCRIPT_ON_CONNECTOR": -1, - "SCRIPT_ON_RESOURCE": -1, - "SEARCH": -1, - "SYNC": -1, - "TEST": -1, - "UPDATE": -1, - "VALIDATE": -1, - }, - "poolConfigOption": { - "maxIdle": 10, - "maxObjects": 10, - "maxWait": 150000, - "minEvictableIdleTimeMillis": 120000, - "minIdle": 1, + "rest2LdapOptions": { + "mvccAttribute": "etag", + "readOnUpdatePolicy": "controls", + "returnNullForMissingProperties": true, + "useMvcc": true, + "usePermissiveModify": true, + "useSubtreeDelete": true, }, - "resultsHandlerConfig": { - "enableAttributesToGetSearchResultsHandler": true, - "enableCaseInsensitiveFilter": false, - "enableFilteredResultsHandler": false, - "enableNormalizingResultsHandler": false, + "security": { + "keyManager": "jvm", + "trustManager": "jvm", }, }, - "provisioner.openicf/GoogleApps": { - "_id": "provisioner.openicf/GoogleApps", - "configurationProperties": { - "availableLicenses": [ - "101005/1010050001", - "101001/1010010001", - "101031/1010310010", - "101034/1010340002", - "101038/1010380002", - "101034/1010340001", - "101038/1010380003", - "101034/1010340004", - "101034/1010340003", - "101034/1010340006", - "Google-Apps/Google-Apps-For-Business", - "101034/1010340005", - "Google-Vault/Google-Vault", - "Google-Apps/1010020031", - "Google-Apps/1010020030", - "Google-Apps/1010060003", - "Google-Apps/1010060005", - "Google-Apps/Google-Apps-Unlimited", - "Google-Apps/1010020029", - "Google-Apps/Google-Apps-Lite", - "101031/1010310003", - "101033/1010330002", - "101033/1010330004", - "Google-Apps/Google-Apps-For-Education", - "101031/1010310002", - "101033/1010330003", - "Google-Apps/1010020026", - "101031/1010310007", - "Google-Apps/1010020025", - "101031/1010310008", - "Google-Apps/1010020028", - "Google-Apps/Google-Apps-For-Postini", - "101031/1010310005", - "Google-Apps/1010020027", - "101031/1010310006", - "101031/1010310009", - "Google-Vault/Google-Vault-Former-Employee", - "101038/1010370001", - "Google-Apps/1010020020", - "Google-Apps/1010060001", - ], - "clientId": "&{esv.gac.client.id}", - "clientSecret": "&{esv.gac.secret}", - "domain": "&{esv.gac.domain}", - "groupsMaxResults": "200", - "listProductAndSkuMaxResults": "100", - "listProductMaxResults": "100", - "membersMaxResults": "200", - "proxyHost": null, - "proxyPort": 8080, - "refreshToken": "&{esv.gac.refresh}", - "roleAssignmentMaxResults": 100, - "roleMaxResults": 100, - "usersMaxResults": "100", - "validateCertificate": true, + "router": { + "_id": "router", + "filters": [], + }, + "script": { + "ECMAScript": { + "#javascript.debug": "&{openidm.script.javascript.debug}", + "javascript.recompile.minimumInterval": 60000, }, - "connectorRef": { - "bundleName": "org.forgerock.openicf.connectors.googleapps-connector", - "bundleVersion": "[1.5.0.0,1.6.0.0)", - "connectorHostRef": "", - "connectorName": "org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector", - "displayName": "GoogleApps Connector", - "systemType": "provisioner.openicf", + "Groovy": { + "#groovy.disabled.global.ast.transformations": "", + "#groovy.errors.tolerance": 10, + "#groovy.output.debug": false, + "#groovy.output.verbose": false, + "#groovy.script.base": "#any class extends groovy.lang.Script", + "#groovy.script.extension": ".groovy", + "#groovy.source.encoding": "utf-8 #default US-ASCII", + "#groovy.target.bytecode": "1.5", + "#groovy.target.indy": true, + "#groovy.warnings": "likely errors #othere values [none,likely,possible,paranoia]", + "groovy.classpath": "&{idm.install.dir}/lib", + "groovy.recompile": true, + "groovy.recompile.minimumInterval": 60000, + "groovy.source.encoding": "UTF-8", + "groovy.target.directory": "&{idm.install.dir}/classes", }, - "enabled": { - "$bool": "&{esv.gac.enable.connector}", + "_id": "script", + "properties": {}, + "sources": { + "default": { + "directory": "&{idm.install.dir}/bin/defaults/script", + }, + "install": { + "directory": "&{idm.install.dir}", + }, + "project": { + "directory": "&{idm.instance.dir}", + }, + "project-script": { + "directory": "&{idm.instance.dir}/script", + }, }, - "objectTypes": { - "__ACCOUNT__": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "__ACCOUNT__", - "nativeType": "__ACCOUNT__", - "properties": { - "__GROUPS__": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", + }, + "secrets": { + "_id": "secrets", + "populateDefaults": true, + "stores": [ + { + "class": "org.forgerock.openidm.secrets.config.FileBasedStore", + "config": { + "file": "&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}", + "mappings": [ + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + "openidm-localhost", + ], + "secretId": "idm.default", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "nativeName": "__GROUPS__", - "nativeType": "string", - "type": "array", + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.config.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.password.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.https.keystore.cert.alias|openidm-localhost}", + ], + "secretId": "idm.jwt.session.module.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}", + ], + "secretId": "idm.jwt.session.module.signing", + "types": [ + "SIGN", + "VERIFY", + ], + }, + { + "aliases": [ + "selfservice", + ], + "secretId": "idm.selfservice.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}", + ], + "secretId": "idm.selfservice.signing", + "types": [ + "SIGN", + "VERIFY", + ], + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.assignment.attribute.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + ], + "providerName": "&{openidm.keystore.provider|SunJCE}", + "storePassword": "&{openidm.keystore.password|changeit}", + "storetype": "&{openidm.keystore.type|JCEKS}", + }, + "name": "mainKeyStore", + }, + { + "class": "org.forgerock.openidm.secrets.config.FileBasedStore", + "config": { + "file": "&{openidm.truststore.location|&{idm.install.dir}/security/truststore}", + "mappings": [], + "providerName": "&{openidm.truststore.provider|SUN}", + "storePassword": "&{openidm.truststore.password|changeit}", + "storetype": "&{openidm.truststore.type|JKS}", + }, + "name": "mainTrustStore", + }, + ], + }, + "selfservice.kba": { + "_id": "selfservice.kba", + "kbaPropertyName": "kbaInfo", + "minimumAnswersToDefine": 1, + "minimumAnswersToVerify": 1, + "questions": { + "1": { + "en": "What's your favorite color?", + }, + }, + }, + "selfservice.terms": { + "_id": "selfservice.terms", + "active": "0.0", + "uiConfig": { + "buttonText": "Accept", + "displayName": "We've updated our terms", + "purpose": "You must accept the updated terms in order to proceed.", + }, + "versions": [ + { + "createDate": "2019-10-28T04:20:11.320Z", + "termsTranslations": { + "en": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + }, + "version": "0.0", + }, + ], + }, + "servletfilter/cors": { + "_id": "servletfilter/cors", + "initParams": { + "allowCredentials": false, + "allowedHeaders": "authorization,accept,content-type,origin,x-requested-with,cache-control,accept-api-version,if-match,if-none-match", + "allowedMethods": "GET,POST,PUT,DELETE,PATCH", + "allowedOrigins": "*", + "chainPreflight": false, + "exposedHeaders": "WWW-Authenticate", + }, + "urlPatterns": [ + "/*", + ], + }, + "servletfilter/payload": { + "_id": "servletfilter/payload", + "initParams": { + "maxRequestSizeInMegabytes": 5, + }, + "urlPatterns": [ + "&{openidm.servlet.alias}/*", + ], + }, + "servletfilter/upload": { + "_id": "servletfilter/upload", + "initParams": { + "maxRequestSizeInMegabytes": 50, + }, + "urlPatterns": [ + "&{openidm.servlet.upload.alias}/*", + ], + }, + "sync": { + "_id": "sync", + "mappings": [ + { + "_id": "sync/managedBravo_user_managedBravo_user", + "consentRequired": false, + "displayName": "managedBravo_user_managedBravo_user", + "icon": null, + "name": "managedBravo_user_managedBravo_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", }, - "__NAME__": { - "nativeName": "__NAME__", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "ALL_GONE", }, - "__PASSWORD__": { - "flags": [ - "NOT_READABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "nativeName": "__PASSWORD__", - "nativeType": "JAVA_TYPE_GUARDEDSTRING", - "required": true, - "type": "string", + { + "action": "ASYNC", + "situation": "AMBIGUOUS", }, - "__PHOTO__": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "nativeName": "__PHOTO__", - "nativeType": "JAVA_TYPE_BYTE_ARRAY", - "type": "string", + { + "action": "ASYNC", + "situation": "CONFIRMED", }, - "__SECONDARY_EMAILS__": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "__SECONDARY_EMAILS__", - "nativeType": "object", - "type": "array", + { + "action": "ASYNC", + "situation": "FOUND", }, - "__UID__": { - "nativeName": "__UID__", - "nativeType": "string", - "required": false, - "type": "string", + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", }, - "addresses": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "addresses", - "nativeType": "object", - "type": "array", + { + "action": "ASYNC", + "situation": "LINK_ONLY", }, - "agreedToTerms": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "agreedToTerms", - "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", - "type": "boolean", + { + "action": "ASYNC", + "situation": "MISSING", }, - "aliases": { - "flags": [ - "NOT_CREATABLE", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "aliases", - "nativeType": "string", - "type": "array", + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", }, - "archived": { - "nativeName": "archived", - "nativeType": "boolean", - "type": "boolean", + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", }, - "changePasswordAtNextLogin": { - "nativeName": "changePasswordAtNextLogin", - "nativeType": "boolean", - "type": "boolean", + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", }, - "creationTime": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "creationTime", - "nativeType": "string", - "type": "array", + { + "action": "ASYNC", + "situation": "UNASSIGNED", }, - "customSchemas": { - "nativeName": "customSchemas", - "nativeType": "object", - "type": "object", + { + "action": "ASYNC", + "situation": "UNQUALIFIED", }, - "customerId": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "customerId", - "nativeType": "string", - "type": "string", + ], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [], + "target": "managed/bravo_user", + }, + { + "_id": "sync/managedAlpha_application_managedBravo_application", + "consentRequired": true, + "displayName": "Test Application Mapping", + "icon": null, + "name": "managedAlpha_application_managedBravo_application", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", }, - "deletionTime": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "deletionTime", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "ALL_GONE", }, - "externalIds": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "externalIds", - "nativeType": "object", - "type": "array", + { + "action": "ASYNC", + "situation": "AMBIGUOUS", }, - "familyName": { - "nativeName": "familyName", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "CONFIRMED", }, - "fullName": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "fullName", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "FOUND", }, - "givenName": { - "nativeName": "givenName", - "nativeType": "string", - "required": true, - "type": "string", + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", }, - "hashFunction": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "nativeName": "hashFunction", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "LINK_ONLY", }, - "ims": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "ims", - "nativeType": "object", - "type": "array", + { + "action": "ASYNC", + "situation": "MISSING", }, - "includeInGlobalAddressList": { - "nativeName": "includeInGlobalAddressList", - "nativeType": "boolean", - "type": "boolean", + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", }, - "ipWhitelisted": { - "nativeName": "ipWhitelisted", - "nativeType": "boolean", - "type": "boolean", + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", }, - "isAdmin": { - "nativeName": "isAdmin", - "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", - "type": "boolean", + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", }, - "isDelegatedAdmin": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isDelegatedAdmin", - "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", - "type": "boolean", + { + "action": "ASYNC", + "situation": "UNASSIGNED", }, - "isEnforcedIn2Sv": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isEnforcedIn2Sv", - "nativeType": "boolean", - "type": "boolean", + { + "action": "ASYNC", + "situation": "UNQUALIFIED", }, - "isEnrolledIn2Sv": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isEnrolledIn2Sv", - "nativeType": "boolean", - "type": "boolean", + ], + "properties": [ + { + "source": "authoritative", + "target": "_id", }, - "isMailboxSetup": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isMailboxSetup", - "nativeType": "boolean", - "type": "boolean", + ], + "source": "managed/alpha_application", + "sourceQuery": { + "_queryFilter": "(eq "" or eq "")", + }, + "syncAfter": [ + "managedBravo_user_managedBravo_user", + ], + "target": "managed/bravo_application", + "targetQuery": { + "_queryFilter": "!(eq "")", + }, + }, + { + "_id": "sync/managedAlpha_user_managedBravo_user", + "consentRequired": true, + "displayName": "Test Mapping for Frodo", + "icon": null, + "name": "managedAlpha_user_managedBravo_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", }, - "languages": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "languages", - "nativeType": "object", - "type": "array", + { + "action": "ASYNC", + "situation": "ALL_GONE", }, - "lastLoginTime": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "lastLoginTime", - "nativeType": "string", - "type": "array", + { + "action": "ASYNC", + "situation": "AMBIGUOUS", }, - "nonEditableAliases": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "condition": { + "globals": {}, + "source": "console.log("Hello World!");", + "type": "text/javascript", + }, + "default": [ + "Default value string", ], - "items": { - "nativeType": "string", - "type": "string", + "source": "accountStatus", + "target": "applications", + "transform": { + "globals": {}, + "source": "console.log("hello");", + "type": "text/javascript", }, - "nativeName": "nonEditableAliases", - "nativeType": "string", - "type": "array", }, - "orgUnitPath": { - "nativeName": "orgUnitPath", - "nativeType": "string", - "type": "string", + ], + "source": "managed/alpha_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + ], + "target": "managed/bravo_user", + }, + { + "_id": "sync/managedBravo_user_managedAlpha_user", + "consentRequired": false, + "displayName": "Frodo test mapping", + "icon": null, + "name": "managedBravo_user_managedAlpha_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", }, - "organizations": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "organizations", - "nativeType": "object", - "type": "array", + { + "action": "ASYNC", + "situation": "ALL_GONE", }, - "phones": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "phones", - "nativeType": "object", - "type": "array", + { + "action": "ASYNC", + "situation": "AMBIGUOUS", }, - "primaryEmail": { - "nativeName": "primaryEmail", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "CONFIRMED", }, - "recoveryEmail": { - "nativeName": "recoveryEmail", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "FOUND", }, - "recoveryPhone": { - "nativeName": "recoveryPhone", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", }, - "relations": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "relations", - "nativeType": "object", - "type": "array", + { + "action": "ASYNC", + "situation": "LINK_ONLY", }, - "suspended": { - "nativeName": "suspended", - "nativeType": "boolean", - "type": "boolean", + { + "action": "ASYNC", + "situation": "MISSING", }, - "suspensionReason": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "suspensionReason", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", }, - "thumbnailPhotoUrl": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "thumbnailPhotoUrl", - "nativeType": "string", - "type": "string", + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", }, - }, - "type": "object", - }, - }, - "operationTimeout": { - "AUTHENTICATE": -1, - "CREATE": -1, - "DELETE": -1, - "GET": -1, - "RESOLVEUSERNAME": -1, - "SCHEMA": -1, - "SCRIPT_ON_CONNECTOR": -1, - "SCRIPT_ON_RESOURCE": -1, - "SEARCH": -1, - "SYNC": -1, - "TEST": -1, - "UPDATE": -1, - "VALIDATE": -1, - }, - "poolConfigOption": { - "maxIdle": 10, - "maxObjects": 10, - "maxWait": 150000, - "minEvictableIdleTimeMillis": 120000, - "minIdle": 1, - }, - "resultsHandlerConfig": { - "enableAttributesToGetSearchResultsHandler": true, - "enableCaseInsensitiveFilter": false, - "enableFilteredResultsHandler": false, - "enableNormalizingResultsHandler": false, - }, - }, - "repo.ds": { - "_id": "repo.ds", - "commands": { - "delete-mapping-links": { - "_queryFilter": "/linkType eq "\${mapping}"", - "operation": "DELETE", - }, - "delete-target-ids-for-recon": { - "_queryFilter": "/reconId eq "\${reconId}"", - "operation": "DELETE", - }, - }, - "embedded": false, - "ldapConnectionFactories": { - "bind": { - "availabilityCheckIntervalSeconds": 30, - "availabilityCheckTimeoutMilliSeconds": 10000, - "connectionPoolSize": 50, - "connectionSecurity": "none", - "heartBeatIntervalSeconds": 60, - "heartBeatTimeoutMilliSeconds": 10000, - "primaryLdapServers": [ { - "hostname": "userstore-0.userstore", - "port": 1389, + "action": "ASYNC", + "situation": "UNASSIGNED", }, - ], - "secondaryLdapServers": [ { - "hostname": "userstore-2.userstore", - "port": 1389, + "action": "ASYNC", + "situation": "UNQUALIFIED", }, ], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + "managedAlpha_user_managedBravo_user", + ], + "target": "managed/alpha_user", }, - "root": { - "authentication": { - "simple": { - "bindDn": "uid=admin", - "bindPassword": "&{userstore.password}", + { + "_id": "sync/AlphaUser2GoogleApps", + "consentRequired": false, + "correlationQuery": [ + { + "expressionTree": { + "all": [ + "__NAME__", + ], + }, + "file": "ui/correlateTreeToQueryFilter.js", + "linkQualifier": "default", + "mapping": "AlphaUser2GoogleApps", + "type": "text/javascript", }, + ], + "displayName": "AlphaUser2GoogleApps", + "enableSync": { + "$bool": "&{esv.gac.enable.mapping}", }, - "inheritFrom": "bind", - }, - }, - "maxConnectionAttempts": 5, - "queries": { - "explicit": { - "credential-internaluser-query": { - "_queryFilter": "/_id eq "\${username}"", - }, - "credential-query": { - "_queryFilter": "/userName eq "\${username}"", - }, - "for-userName": { - "_queryFilter": "/userName eq "\${uid}"", - }, - "links-for-firstId": { - "_queryFilter": "/linkType eq "\${linkType}" AND /firstId = "\${firstId}"", - }, - "links-for-linkType": { - "_queryFilter": "/linkType eq "\${linkType}"", - }, - "query-all": { - "_queryFilter": "true", - }, - "query-all-ids": { - "_fields": "_id,_rev", - "_queryFilter": "true", - }, - }, - "generic": { - "credential-internaluser-query": { - "_queryFilter": "/_id eq "\${username}"", - }, - "credential-query": { - "_queryFilter": "/userName eq "\${username}"", - }, - "find-relationship-edges": { - "_queryFilter": "((/firstResourceCollection eq "\${firstResourceCollection}" and /firstResourceId eq "\${firstResourceId}" and /firstPropertyName eq "\${firstPropertyName}") and (/secondResourceCollection eq "\${secondResourceCollection}" and /secondResourceId eq "\${secondResourceId}" and /secondPropertyName eq "\${secondPropertyName}")) or ((/firstResourceCollection eq "\${secondResourceCollection}" and /firstResourceId eq "\${secondResourceId}" and /firstPropertyName eq "\${secondPropertyName}") and (/secondResourceCollection eq "\${firstResourceCollection}" and /secondResourceId eq "\${firstResourceId}" and /secondPropertyName eq "\${firstPropertyName}"))", - }, - "find-relationships-for-resource": { - "_queryFilter": "(/firstResourceCollection eq "\${resourceCollection}" and /firstResourceId eq "\${resourceId}" and /firstPropertyName eq "\${propertyName}") or (/secondResourceCollection eq "\${resourceCollection}" and /secondResourceId eq "\${resourceId}" and /secondPropertyName eq "\${propertyName}")", - }, - "for-userName": { - "_queryFilter": "/userName eq "\${uid}"", - }, - "get-by-field-value": { - "_queryFilter": "/\${field} eq "\${value}"", - }, - "get-notifications-for-user": { - "_queryFilter": "/receiverId eq "\${userId}"", - "_sortKeys": "-createDate", - }, - "get-recons": { - "_fields": "reconId,mapping,activitydate", - "_queryFilter": "/entryType eq "summary"", - "_sortKeys": "-activitydate", - }, - "links-for-firstId": { - "_queryFilter": "/linkType eq "\${linkType}" AND /firstId = "\${firstId}"", - }, - "links-for-linkType": { - "_queryFilter": "/linkType eq "\${linkType}"", - }, - "query-all": { - "_queryFilter": "true", - }, - "query-all-ids": { - "_fields": "_id,_rev", - "_queryFilter": "true", - }, - "query-cluster-events": { - "_queryFilter": "/instanceId eq "\${instanceId}"", - }, - "query-cluster-failed-instances": { - "_queryFilter": "/timestamp le \${timestamp} and (/state eq "1" or /state eq "2")", - }, - "query-cluster-instances": { - "_queryFilter": "true", + "icon": null, + "name": "AlphaUser2GoogleApps", + "onCreate": { + "globals": {}, + "source": "target.orgUnitPath = "/NewAccounts";", + "type": "text/javascript", }, - "query-cluster-running-instances": { - "_queryFilter": "/state eq 1", + "onUpdate": { + "globals": {}, + "source": "//testing1234 +target.givenName = oldTarget.givenName; +target.familyName = oldTarget.familyName; +target.__NAME__ = oldTarget.__NAME__;", + "type": "text/javascript", }, - }, - }, - "resourceMapping": { - "defaultMapping": { - "dnTemplate": "ou=generic,dc=openidm,dc=example,dc=com", - }, - "explicitMapping": { - "clusteredrecontargetids": { - "dnTemplate": "ou=clusteredrecontargetids,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-recon-clusteredTargetIds", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - "writability": "createOnly", - }, - "reconId": { - "ldapAttribute": "fr-idm-recon-id", - "type": "simple", - }, - "targetIds": { - "ldapAttribute": "fr-idm-recon-targetIds", - "type": "json", - }, + "policies": [ + { + "action": "EXCEPTION", + "situation": "AMBIGUOUS", }, - }, - "dsconfig/attributeValue": { - "dnTemplate": "cn=Password Validators,cn=config", - "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-attribute-value-password-validator", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "checkSubstrings": { - "ldapAttribute": "ds-cfg-check-substrings", - "type": "simple", - }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", - }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", - }, - "matchAttribute": { - "isMultiValued": true, - "ldapAttribute": "ds-cfg-match-attribute", - "type": "simple", - }, - "minSubstringLength": { - "ldapAttribute": "ds-cfg-min-substring-length", - "type": "simple", - }, - "testReversedPassword": { - "isRequired": true, - "ldapAttribute": "ds-cfg-test-reversed-password", - "type": "simple", - }, + { + "action": "UNLINK", + "situation": "SOURCE_MISSING", }, - }, - "dsconfig/characterSet": { - "dnTemplate": "cn=Password Validators,cn=config", - "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-character-set-password-validator", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "allowUnclassifiedCharacters": { - "isRequired": true, - "ldapAttribute": "ds-cfg-allow-unclassified-characters", - "type": "simple", - }, - "characterSet": { - "isMultiValued": true, - "ldapAttribute": "ds-cfg-character-set", - "type": "simple", - }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", - }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", - }, - "minCharacterSets": { - "ldapAttribute": "ds-cfg-min-character-sets", - "type": "simple", + { + "action": { + "globals": {}, + "source": "// Timing Constants +var ATTEMPT = 6; // Number of attempts to find the Google user. +var SLEEP_TIME = 500; // Milliseconds between retries. +var SYSTEM_ENDPOINT = "system/GoogleApps/__ACCOUNT__"; +var MAPPING_NAME = "AlphaUser2GoogleApps"; +var GOOGLE_DOMAIN = identityServer.getProperty("esv.gac.domain"); +var googleEmail = source.userName + "@" + GOOGLE_DOMAIN; +var frUserGUID = source._id; +var resultingAction = "ASYNC"; + +// Get the Google GUID +var linkQueryParams = {'_queryFilter': 'firstId eq "' + frUserGUID + '" and linkType eq "' + MAPPING_NAME + '"'}; +var linkResults = openidm.query("repo/link/", linkQueryParams, null); +var googleGUID; + +if (linkResults.resultCount === 1) { + googleGUID = linkResults.result[0].secondId; +} + +var queryResults; // Resulting query from looking for the Google user. +var params = {'_queryFilter': '__UID__ eq "' + googleGUID + '"'}; + +for (var i = 1; i <= ATTEMPT; i++) { + queryResults = openidm.query(SYSTEM_ENDPOINT, params); + if (queryResults.result && queryResults.result.length > 0) { + logger.info("idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in " + i + " attempts. Query result: " + JSON.stringify(queryResults)); + resultingAction = "UPDATE"; + break; + } + java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again. +} + +if (!queryResults.result || queryResults.resultCount === 0) { + logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); + resultingAction = "UNLINK"; +} +resultingAction; +", + "type": "text/javascript", }, + "situation": "MISSING", }, - }, - "dsconfig/dictionary": { - "dnTemplate": "cn=Password Validators,cn=config", - "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-dictionary-password-validator", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "caseSensitiveValidation": { - "isRequired": true, - "ldapAttribute": "ds-cfg-case-sensitive-validation", - "type": "simple", - }, - "checkSubstrings": { - "ldapAttribute": "ds-cfg-check-substrings", - "type": "simple", - }, - "dictionaryFile": { - "isRequired": true, - "ldapAttribute": "ds-cfg-dictionary-file", - "type": "simple", - }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", - }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", - }, - "minSubstringLength": { - "ldapAttribute": "ds-cfg-min-substring-length", - "type": "simple", - }, - "testReversedPassword": { - "isRequired": true, - "ldapAttribute": "ds-cfg-test-reversed-password", - "type": "simple", - }, + { + "action": "EXCEPTION", + "situation": "FOUND_ALREADY_LINKED", }, - }, - "dsconfig/lengthBased": { - "dnTemplate": "cn=Password Validators,cn=config", - "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-length-based-password-validator", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", - }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", - }, - "maxPasswordLength": { - "ldapAttribute": "ds-cfg-max-password-length", - "type": "simple", - }, - "minPasswordLength": { - "ldapAttribute": "ds-cfg-min-password-length", - "type": "simple", - }, + { + "action": "IGNORE", + "situation": "UNQUALIFIED", }, - }, - "dsconfig/passwordPolicies": { - "dnTemplate": "cn=Password Policies,cn=config", - "objectClasses": [ - "ds-cfg-password-policy", - "ds-cfg-authentication-policy", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "allowPreEncodedPasswords": { - "ldapAttribute": "ds-cfg-allow-pre-encoded-passwords", - "type": "simple", - }, - "defaultPasswordStorageScheme": { - "isMultiValued": true, - "isRequired": true, - "ldapAttribute": "ds-cfg-default-password-storage-scheme", - "type": "simple", - }, - "deprecatedPasswordStorageScheme": { - "isMultiValued": true, - "ldapAttribute": "ds-cfg-deprecated-password-storage-scheme", - "type": "simple", - }, - "maxPasswordAge": { - "ldapAttribute": "ds-cfg-max-password-age", - "type": "simple", - }, - "passwordAttribute": { - "isRequired": true, - "ldapAttribute": "ds-cfg-password-attribute", - "type": "simple", - }, - "passwordHistoryCount": { - "ldapAttribute": "ds-cfg-password-history-count", - "type": "simple", - }, - "validator": { - "isMultiValued": true, - "ldapAttribute": "ds-cfg-password-validator", - "type": "simple", - }, + { + "action": "IGNORE", + "situation": "UNASSIGNED", + }, + { + "action": "UNLINK", + "situation": "LINK_ONLY", + }, + { + "action": "IGNORE", + "situation": "TARGET_IGNORED", + }, + { + "action": "IGNORE", + "situation": "SOURCE_IGNORED", + }, + { + "action": "IGNORE", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "LINK", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", }, - }, - "dsconfig/repeatedCharacters": { - "dnTemplate": "cn=Password Validators,cn=config", - "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-repeated-characters-password-validator", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "caseSensitiveValidation": { - "isRequired": true, - "ldapAttribute": "ds-cfg-case-sensitive-validation", - "type": "simple", - }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", - }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", + ], + "properties": [ + { + "condition": { + "globals": {}, + "source": "object.custom_password_encrypted != null", + "type": "text/javascript", }, - "maxConsecutiveLength": { - "isRequired": true, - "ldapAttribute": "ds-cfg-max-consecutive-length", - "type": "simple", + "source": "custom_password_encrypted", + "target": "__PASSWORD__", + "transform": { + "globals": {}, + "source": "openidm.decrypt(source);", + "type": "text/javascript", }, }, - }, - "dsconfig/similarityBased": { - "dnTemplate": "cn=Password Validators,cn=config", - "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-similarity-based-password-validator", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", - }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", - }, - "minPasswordDifference": { - "isRequired": true, - "ldapAttribute": "ds-cfg-min-password-difference", - "type": "simple", + { + "source": "cn", + "target": "__NAME__", + "transform": { + "globals": {}, + "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", + "type": "text/javascript", }, }, - }, - "dsconfig/uniqueCharacters": { - "dnTemplate": "cn=Password Validators,cn=config", - "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-unique-characters-password-validator", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "caseSensitiveValidation": { - "isRequired": true, - "ldapAttribute": "ds-cfg-case-sensitive-validation", - "type": "simple", - }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", - }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", - }, - "minUniqueCharacters": { - "isRequired": true, - "ldapAttribute": "ds-cfg-min-unique-characters", - "type": "simple", - }, + { + "source": "givenName", + "target": "givenName", }, - }, - "dsconfig/userDefinedVirtualAttribute": { - "dnTemplate": "cn=Virtual Attributes,cn=config", - "objectClasses": [ - "ds-cfg-user-defined-virtual-attribute", - "ds-cfg-virtual-attribute", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "attributeType": { - "isRequired": true, - "ldapAttribute": "ds-cfg-attribute-type", - "type": "simple", - }, - "baseDn": { - "isMultiValued": true, - "ldapAttribute": "ds-cfg-base-dn", - "type": "simple", - }, - "conflictBehavior": { - "ldapAttribute": "ds-cfg-conflict-behavior", - "type": "simple", - }, - "enabled": { - "isRequired": true, - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", - }, - "filter": { - "isMultiValued": true, - "ldapAttribute": "ds-cfg-filter", - "type": "simple", - }, - "groupDn": { - "ldapAttribute": "ds-cfg-group-dn", - "type": "simple", - }, - "javaClass": { - "isRequired": true, - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", - }, - "scope": { - "ldapAttribute": "ds-cfg-scope", - "type": "simple", - }, - "value": { - "isMultiValued": true, - "isRequired": true, - "ldapAttribute": "ds-cfg-value", - "type": "simple", + { + "source": "", + "target": "familyName", + "transform": { + "globals": {}, + "source": "if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) { + source.sn + " (Student)" +} else { + source.sn +}", + "type": "text/javascript", }, }, + ], + "queuedSync": { + "enabled": true, + "maxQueueSize": 20000, + "maxRetries": 5, + "pageSize": 100, + "pollingInterval": 1000, + "postRetryAction": "logged-ignore", + "retryDelay": 1000, }, - "identities/admin": { - "dnTemplate": "o=root,ou=identities", - "isReadOnly": true, - "namingStrategy": { - "dnAttribute": "ou", - "type": "clientDnNaming", + "source": "managed/alpha_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + "managedAlpha_user_managedBravo_user", + "managedBravo_user_managedAlpha_user", + ], + "target": "system/GoogleApps/__ACCOUNT__", + "validSource": { + "globals": {}, + "source": "var isGoogleEligible = true; +//var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + " cn: " + source.cn + ") -"; +var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + ") -"; + +//Get Applicable userTypes (no Parent accounts) +if (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) { + isGoogleEligible = false; + logMsg = logMsg + " Account type not eligible."; +} + +//Make sure the account has a valid encrypted password. +if (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) { + isGoogleEligible = false; + logMsg = logMsg + " No encrypted password yet."; +} + +//Check that CN exists and has no space. +if (source.cn && source.cn.includes(' ')) { + isGoogleEligible = false; + logMsg = logMsg + " CN with a space is not allowed."; +} + +if (!isGoogleEligible) { + logMsg = logMsg + " Not sent to Google." + logger.info(logMsg); +} + +if (isGoogleEligible) { + logMsg = logMsg + " Sent to Google." + logger.info(logMsg); +} + +isGoogleEligible; +", + "type": "text/javascript", + }, + }, + ], + }, + "ui.context/admin": { + "_id": "ui.context/admin", + "defaultDir": "&{idm.install.dir}/ui/admin/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/admin/extension", + "responseHeaders": { + "X-Frame-Options": "SAMEORIGIN", + }, + "urlContextRoot": "/admin", + }, + "ui.context/api": { + "_id": "ui.context/api", + "authEnabled": true, + "cacheEnabled": false, + "defaultDir": "&{idm.install.dir}/ui/api/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/api/extension", + "urlContextRoot": "/api", + }, + "ui.context/enduser": { + "_id": "ui.context/enduser", + "defaultDir": "&{idm.install.dir}/ui/enduser", + "enabled": true, + "responseHeaders": { + "X-Frame-Options": "DENY", + }, + "urlContextRoot": "/", + }, + "ui.context/oauth": { + "_id": "ui.context/oauth", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/oauth/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/oauth/extension", + "urlContextRoot": "/oauthReturn", + }, + "ui/configuration": { + "_id": "ui/configuration", + "configuration": { + "defaultNotificationType": "info", + "forgotUsername": false, + "lang": "en", + "notificationTypes": { + "error": { + "iconPath": "images/notifications/error.png", + "name": "common.notification.types.error", + }, + "info": { + "iconPath": "images/notifications/info.png", + "name": "common.notification.types.info", + }, + "warning": { + "iconPath": "images/notifications/warning.png", + "name": "common.notification.types.warning", + }, + }, + "passwordReset": true, + "passwordResetLink": "", + "platformSettings": { + "adminOauthClient": "idmAdminClient", + "adminOauthClientScopes": "fr:idm:*", + "amUrl": "/am", + "loginUrl": "", + }, + "roles": { + "internal/role/openidm-admin": "ui-admin", + "internal/role/openidm-authorized": "ui-user", + }, + "selfRegistration": true, + }, + }, + "ui/dashboard": { + "_id": "ui/dashboard", + "adminDashboards": [ + { + "isDefault": true, + "name": "Quick Start", + "widgets": [ + { + "cards": [ + { + "href": "#resource/managed/alpha_user/list/", + "icon": "fa-user", + "name": "Manage Users", + }, + { + "href": "#resource/managed/alpha_role/list/", + "icon": "fa-check-square-o", + "name": "Manage Roles", + }, + { + "href": "#connectors/add/", + "icon": "fa-database", + "name": "Add Connector", + }, + { + "href": "#mapping/add/", + "icon": "fa-map-marker", + "name": "Create Mapping", + }, + { + "href": "#managed/add/", + "icon": "fa-tablet", + "name": "Add Device", + }, + { + "href": "#settings/", + "icon": "fa-user", + "name": "Configure System Preferences", + }, + ], + "size": "large", + "type": "quickStart", }, - "objectClasses": [ - "organizationalunit", - ], - "properties": { - "_id": { - "ldapAttribute": "ou", - "primaryKey": true, - "type": "simple", - }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", - "type": "simple", - "writability": "readOnly", + ], + }, + { + "isDefault": false, + "name": "System Monitoring", + "widgets": [ + { + "legendRange": { + "month": [ + 500, + 2500, + 5000, + ], + "week": [ + 10, + 30, + 90, + 270, + 810, + ], + "year": [ + 10000, + 40000, + 100000, + 250000, + ], }, + "maxRange": "#24423c", + "minRange": "#b0d4cd", + "size": "large", + "type": "audit", }, - }, - "identities/alpha": { - "dnTemplate": "o=alpha,o=root,ou=identities", - "isReadOnly": true, - "namingStrategy": { - "dnAttribute": "ou", - "type": "clientDnNaming", + { + "size": "large", + "type": "clusterStatus", }, - "objectClasses": [ - "organizationalunit", - ], - "properties": { - "_id": { - "ldapAttribute": "ou", - "primaryKey": true, - "type": "simple", - }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", - "type": "simple", - "writability": "readOnly", - }, + { + "size": "large", + "type": "systemHealthFull", }, - }, - "identities/bravo": { - "dnTemplate": "o=bravo,o=root,ou=identities", - "isReadOnly": true, - "namingStrategy": { - "dnAttribute": "ou", - "type": "clientDnNaming", + { + "barchart": "false", + "size": "large", + "type": "lastRecon", }, - "objectClasses": [ - "organizationalunit", - ], - "properties": { - "_id": { - "ldapAttribute": "ou", - "primaryKey": true, - "type": "simple", - }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", - "type": "simple", - "writability": "readOnly", - }, + ], + }, + { + "isDefault": false, + "name": "Resource Report", + "widgets": [ + { + "selected": "activeUsers", + "size": "x-small", + "type": "counter", }, - }, - "internal/role": { - "dnTemplate": "ou=roles,ou=internal,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "fr-idm-internal-role", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", - "type": "simple", - "writability": "createOnly", - }, - "authzMembers": { - "isMultiValued": true, - "propertyName": "authzRoles", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", - }, - "condition": { - "ldapAttribute": "fr-idm-condition", - "type": "simple", - }, - "description": { - "ldapAttribute": "description", - "type": "simple", - }, - "name": { - "ldapAttribute": "fr-idm-name", - "type": "simple", - }, - "privileges": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-privilege", - "type": "json", - }, - "temporalConstraints": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-temporal-constraints", - "type": "json", - }, + { + "selected": "rolesEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "activeConnectors", + "size": "x-small", + "type": "counter", }, - }, - "internal/user": { - "dnTemplate": "ou=users,ou=internal,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-internal-user", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - "writability": "createOnly", - }, - "password": { - "ldapAttribute": "fr-idm-password", - "type": "json", - }, + { + "size": "large", + "type": "resourceList", }, - }, - "link": { - "dnTemplate": "ou=links,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-link", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - "writability": "createOnly", - }, - "firstId": { - "ldapAttribute": "fr-idm-link-firstId", - "type": "simple", - }, - "linkQualifier": { - "ldapAttribute": "fr-idm-link-qualifier", - "type": "simple", - }, - "linkType": { - "ldapAttribute": "fr-idm-link-type", - "type": "simple", - }, - "secondId": { - "ldapAttribute": "fr-idm-link-secondId", - "type": "simple", - }, + ], + }, + { + "isDefault": false, + "name": "Business Report", + "widgets": [ + { + "graphType": "fa-pie-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "signIns", + "widgetTitle": "Sign-Ins", }, - }, - "locks": { - "dnTemplate": "ou=locks,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-lock", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - "writability": "createOnly", - }, - "nodeId": { - "ldapAttribute": "fr-idm-lock-nodeid", - "type": "simple", - }, + { + "graphType": "fa-bar-chart", + "size": "x-small", + "type": "passwordResets", + "widgetTitle": "Password Resets", }, - }, - "managed/teammember": { - "dnTemplate": "ou=people,o=root,ou=identities", - "namingStrategy": { - "dnAttribute": "fr-idm-uuid", - "type": "clientDnNaming", + { + "graphType": "fa-line-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "newRegistrations", + "widgetTitle": "New Registrations", }, - "nativeId": false, - "objectClasses": [ - "person", - "organizationalPerson", - "inetOrgPerson", - "fraas-admin", - "iplanet-am-user-service", - "deviceProfilesContainer", - "devicePrintProfilesContainer", - "kbaInfoContainer", - "fr-idm-managed-user-explicit", - "forgerock-am-dashboard-service", - "inetuser", - "iplanet-am-auth-configuration-service", - "iplanet-am-managed-person", - "iPlanetPreferences", - "oathDeviceProfilesContainer", - "pushDeviceProfilesContainer", - "sunAMAuthAccountLockout", - "sunFMSAML2NameIdentifier", - "webauthnDeviceProfilesContainer", - "fr-idm-hybrid-obj", - ], - "properties": { - "_id": { - "ldapAttribute": "fr-idm-uuid", - "primaryKey": true, - "type": "simple", - }, - "_meta": { - "isMultiValued": false, - "ldapAttribute": "fr-idm-managed-user-meta", - "primaryKey": "uid", - "resourcePath": "managed/teammembermeta", - "type": "reference", - }, - "accountStatus": { - "ldapAttribute": "inetUserStatus", - "type": "simple", - }, - "cn": { - "ldapAttribute": "cn", - "type": "simple", - }, - "givenName": { - "ldapAttribute": "givenName", - "type": "simple", - }, - "inviteDate": { - "ldapAttribute": "fr-idm-inviteDate", - "type": "simple", - }, - "jurisdiction": { - "ldapAttribute": "fr-idm-jurisdiction", - "type": "simple", - }, - "mail": { - "ldapAttribute": "mail", - "type": "simple", - }, - "onboardDate": { - "ldapAttribute": "fr-idm-onboardDate", - "type": "simple", - }, - "password": { - "ldapAttribute": "userPassword", - "type": "simple", - }, - "sn": { - "ldapAttribute": "sn", - "type": "simple", - }, - "userName": { - "ldapAttribute": "uid", - "type": "simple", + { + "size": "x-small", + "timezone": { + "hours": "07", + "minutes": "00", + "negative": true, }, + "type": "socialLogin", }, - }, - "managed/teammembergroup": { - "dnTemplate": "ou=groups,o=root,ou=identities", - "objectClasses": [ - "groupofuniquenames", - ], - "properties": { - "_id": { - "ldapAttribute": "cn", - "primaryKey": true, - "type": "simple", - }, - "members": { - "isMultiValued": true, - "ldapAttribute": "uniqueMember", - "type": "simple", - }, + { + "selected": "socialEnabled", + "size": "x-small", + "type": "counter", }, - }, - "recon/assoc": { - "dnTemplate": "ou=assoc,ou=recon,dc=openidm,dc=example,dc=com", - "namingStrategy": { - "dnAttribute": "fr-idm-reconassoc-reconid", - "type": "clientDnNaming", + { + "selected": "manualRegistrations", + "size": "x-small", + "type": "counter", }, - "objectClasses": [ - "fr-idm-reconassoc", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "fr-idm-reconassoc-reconid", - "type": "simple", + ], + }, + ], + "dashboard": { + "widgets": [ + { + "size": "large", + "type": "Welcome", + }, + ], + }, + }, + "ui/profile": { + "_id": "ui/profile", + "tabs": [ + { + "name": "personalInfoTab", + "view": "org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab", + }, + { + "name": "signInAndSecurity", + "view": "org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab", + }, + { + "name": "preference", + "view": "org/forgerock/openidm/ui/user/profile/PreferencesTab", + }, + { + "name": "trustedDevice", + "view": "org/forgerock/openidm/ui/user/profile/TrustedDevicesTab", + }, + { + "name": "oauthApplication", + "view": "org/forgerock/openidm/ui/user/profile/OauthApplicationsTab", + }, + { + "name": "privacyAndConsent", + "view": "org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab", + }, + { + "name": "sharing", + "view": "org/forgerock/openidm/ui/user/profile/uma/SharingTab", + }, + { + "name": "auditHistory", + "view": "org/forgerock/openidm/ui/user/profile/uma/ActivityTab", + }, + { + "name": "accountControls", + "view": "org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab", + }, + ], + }, + "ui/themeconfig": { + "_id": "ui/themeconfig", + "icon": "favicon.ico", + "path": "", + "settings": { + "footer": { + "mailto": "info@forgerock.com", + }, + "loginLogo": { + "alt": "ForgeRock", + "height": "104px", + "src": "images/login-logo-dark.png", + "title": "ForgeRock", + "width": "210px", + }, + "logo": { + "alt": "ForgeRock", + "src": "images/logo-horizontal-white.png", + "title": "ForgeRock", + }, + }, + "stylesheets": [ + "css/bootstrap-3.4.1-custom.css", + "css/structure.css", + "css/theme.css", + ], + }, + "ui/themerealm": { + "_id": "ui/themerealm", + "realm": { + "/alpha": [ + { + "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "finishTime": { - "ldapAttribute": "fr-idm-reconassoc-finishtime", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "isAnalysis": { - "ldapAttribute": "fr-idm-reconassoc-isanalysis", - "type": "simple", + "consent": { + "enabled": false, }, - "mapping": { - "ldapAttribute": "fr-idm-reconassoc-mapping", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "sourceResourceCollection": { - "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "targetResourceCollection": { - "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", - "type": "simple", + "preferences": { + "enabled": false, }, - }, - "subResources": { - "entry": { - "namingStrategy": { - "dnAttribute": "uid", - "type": "clientDnNaming", - }, - "resource": "recon-assoc-entry", - "type": "collection", + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, }, }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "
+

Uptime & Performance Benchmarking Made Easy

+
+ +", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": true, + "linkActiveColor": "#007661", + "linkColor": "#009C80", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoAltText": "Zardoz Logo", + "logoEnabled": true, + "logoHeight": "47", + "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileAltText": "Zardaz Logo", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileCollapsedAltText": "Zardaz Logo", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "40", + "name": "Zardoz", + "pageTitle": "#23282e", + "primaryColor": "#009C80", + "primaryOffColor": "#007661", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#009C80", + "secondaryColor": "#69788b", + "textColor": "#ffffff", }, - "recon/assoc/entry": { - "objectClasses": [ - "uidObject", - "fr-idm-reconassocentry", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - }, - "action": { - "ldapAttribute": "fr-idm-reconassocentry-action", - "type": "simple", - }, - "ambiguousTargetObjectIds": { - "ldapAttribute": "fr-idm-reconassocentry-ambiguoustargetobjectids", - "type": "simple", + ], + "alpha": [ + { + "_id": "cd6c93e2-52e2-4340-9770-66a588343841", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "exception": { - "ldapAttribute": "fr-idm-reconassocentry-exception", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "isAnalysis": { - "ldapAttribute": "fr-idm-reconassoc-isanalysis", - "type": "simple", + "consent": { + "enabled": false, }, - "linkQualifier": { - "ldapAttribute": "fr-idm-reconassocentry-linkqualifier", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "mapping": { - "ldapAttribute": "fr-idm-reconassoc-mapping", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "message": { - "ldapAttribute": "fr-idm-reconassocentry-message", - "type": "simple", + "preferences": { + "enabled": false, }, - "messageDetail": { - "ldapAttribute": "fr-idm-reconassocentry-messagedetail", - "type": "simple", + "social": { + "enabled": false, }, - "phase": { - "ldapAttribute": "fr-idm-reconassocentry-phase", - "type": "simple", + "trustedDevices": { + "enabled": true, }, - "reconId": { - "ldapAttribute": "fr-idm-reconassocentry-reconid", - "type": "simple", + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#000000", + "buttonRounded": "0", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#000000", + "linkColor": "#000000", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", + "logoAltText": "Contrast", + "logoEnabled": true, + "logoHeight": "72", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileAltText": "Contrast", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "22", + "logoProfileHeight": "22", + "name": "Contrast", + "pageTitle": "#23282e", + "primaryColor": "#000000", + "primaryOffColor": "#000000", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#000000", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "e47838b5-48c9-4dea-8a84-43f4b4ea8e04", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#e4f4fd", + "accountCardInputSelectHoverColor": "#f6f8fa", + "accountCardInputTextColor": "#23282e", + "accountCardOuterBorderColor": "#e7eef4", + "accountCardShadow": 3, + "accountCardTabActiveBorderColor": "#109cf1", + "accountCardTabActiveColor": "#e4f4fd", + "accountCardTextColor": "#5e6d82", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountFooterScriptTag": "", + "accountFooterScriptTagEnabled": false, + "accountNavigationBackgroundColor": "#ffffff", + "accountNavigationTextColor": "#455469", + "accountNavigationToggleBorderColor": "#e7eef4", + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "situation": { - "ldapAttribute": "fr-idm-reconassocentry-situation", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "sourceObjectId": { - "ldapAttribute": "fr-idm-reconassocentry-sourceObjectId", - "type": "simple", + "consent": { + "enabled": false, }, - "sourceResourceCollection": { - "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "status": { - "ldapAttribute": "fr-idm-reconassocentry-status", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "targetObjectId": { - "ldapAttribute": "fr-idm-reconassocentry-targetObjectId", - "type": "simple", + "preferences": { + "enabled": false, }, - "targetResourceCollection": { - "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", - "type": "simple", + "social": { + "enabled": false, }, - }, - "resourceName": "recon-assoc-entry", - "subResourceRouting": [ - { - "prefix": "entry", - "template": "recon/assoc/{reconId}/entry", + "trustedDevices": { + "enabled": true, }, - ], + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "boldLinks": false, + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "fontFamily": "Open Sans", + "isDefault": false, + "journeyA11yAddFallbackErrorHeading": true, + "journeyCardBackgroundColor": "#ffffff", + "journeyCardBorderRadius": 4, + "journeyCardHeaderBackgroundColor": "#ffffff", + "journeyCardShadow": 3, + "journeyCardTextColor": "#5e6d82", + "journeyCardTitleColor": "#23282e", + "journeyFloatingLabels": true, + "journeyFocusElement": "header", + "journeyFocusFirstFocusableItemEnabled": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyFooterScriptTag": "", + "journeyFooterScriptTagEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "
+

Uptime & Performance Benchmarking Made Easy

+
+ +", + "journeyJustifiedContentEnabled": true, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "justified-right", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": true, + "linkActiveColor": "#007661", + "linkColor": "#009C80", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoAltText": "Zardoz Logo", + "logoEnabled": true, + "logoHeight": "47", + "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileAltText": "Zardaz Logo", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileCollapsedAltText": "Zardaz Logo", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "40", + "name": "Copy of Zardoz", + "pageTitle": "#23282e", + "primaryColor": "#009C80", + "primaryOffColor": "#007661", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#009C80", + "secondaryColor": "#69788b", + "successColor": "#2ed47a", + "switchBackgroundColor": "#c0c9d5", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", }, - "sync/queue": { - "dnTemplate": "ou=queue,ou=sync,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-syncqueue", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - "writability": "createOnly", + { + "_id": "00203891-dde0-4114-b27a-219ae0b43a61", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "context": { - "ldapAttribute": "fr-idm-syncqueue-context", - "type": "json", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "createDate": { - "ldapAttribute": "fr-idm-syncqueue-createdate", - "type": "simple", + "consent": { + "enabled": false, }, - "mapping": { - "ldapAttribute": "fr-idm-syncqueue-mapping", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "newObject": { - "ldapAttribute": "fr-idm-syncqueue-newobject", - "type": "json", + "personalInformation": { + "enabled": true, }, - "nodeId": { - "ldapAttribute": "fr-idm-syncqueue-nodeid", - "type": "simple", + "preferences": { + "enabled": false, }, - "objectRev": { - "ldapAttribute": "fr-idm-syncqueue-objectRev", - "type": "simple", + "social": { + "enabled": false, }, - "oldObject": { - "ldapAttribute": "fr-idm-syncqueue-oldobject", - "type": "json", + "trustedDevices": { + "enabled": true, + }, + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " + +", + "journeyFooterEnabled": true, + "journeyHeader": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#C60819", + "linkColor": "#EB0A1E", + "linkedTrees": [], + "logo": "", + "logoAltText": "", + "logoEnabled": true, + "logoHeight": "40", + "logoProfile": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg", + "logoProfileAltText": "Highlander", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg", + "logoProfileCollapsedAltText": "Highlander", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "28", + "name": "Highlander", + "pageTitle": "#23282e", + "primaryColor": "#EB0A1E", + "primaryOffColor": "#C60819", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#EB0A1E", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "63e19668-909f-479e-83d7-be7a01cd8187", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#e4f4fd", + "accountCardInputTextColor": "#23282e", + "accountCardOuterBorderColor": "#e7eef4", + "accountCardShadow": 3, + "accountCardTabActiveBorderColor": "#109cf1", + "accountCardTabActiveColor": "#e4f4fd", + "accountCardTextColor": "#5e6d82", + "accountFooter": "", + "accountFooterEnabled": false, + "accountNavigationBackgroundColor": "#ffffff", + "accountNavigationTextColor": "#455469", + "accountNavigationToggleBorderColor": "#e7eef4", + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "remainingRetries": { - "ldapAttribute": "fr-idm-syncqueue-remainingretries", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "resourceCollection": { - "ldapAttribute": "fr-idm-syncqueue-resourcecollection", - "type": "simple", + "consent": { + "enabled": false, }, - "resourceId": { - "ldapAttribute": "fr-idm-syncqueue-resourceid", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "state": { - "ldapAttribute": "fr-idm-syncqueue-state", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "syncAction": { - "ldapAttribute": "fr-idm-syncqueue-syncaction", - "type": "simple", + "preferences": { + "enabled": true, }, - }, - }, - }, - "genericMapping": { - "cluster/*": { - "dnTemplate": "ou=cluster,dc=openidm,dc=example,dc=com", - "jsonAttribute": "fr-idm-cluster-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchClusterObject", - "objectClasses": [ - "uidObject", - "fr-idm-cluster-obj", - ], - }, - "config": { - "dnTemplate": "ou=config,dc=openidm,dc=example,dc=com", - }, - "file": { - "dnTemplate": "ou=file,dc=openidm,dc=example,dc=com", - }, - "internal/notification": { - "dnTemplate": "ou=notification,ou=internal,dc=openidm,dc=example,dc=com", - "jsonAttribute": "fr-idm-notification-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "objectClasses": [ - "uidObject", - "fr-idm-notification", - ], - "properties": { - "target": { - "propertyName": "_notifications", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", + "social": { + "enabled": false, }, - }, - }, - "internal/usermeta": { - "dnTemplate": "ou=usermeta,ou=internal,dc=openidm,dc=example,dc=com", - "jsonAttribute": "fr-idm-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "objectClasses": [ - "uidObject", - "fr-idm-generic-obj", - ], - "properties": { - "target": { - "propertyName": "_meta", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", + "trustedDevices": { + "enabled": true, }, }, - }, - "jsonstorage": { - "dnTemplate": "ou=jsonstorage,dc=openidm,dc=example,dc=com", - }, - "managed/*": { - "dnTemplate": "ou=managed,dc=openidm,dc=example,dc=com", - }, - "managed/alpha_group": { - "dnTemplate": "ou=groups,o=alpha,o=root,ou=identities", - "idGenerator": { - "propertyName": "name", - "type": "property", - }, - "jsonAttribute": "fr-idm-managed-group-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "namingStrategy": { - "dnAttribute": "cn", - "type": "clientDnNaming", - }, - "nativeId": false, - "objectClasses": [ - "top", - "groupOfURLs", - "fr-idm-managed-group", + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#000000", + "boldLinks": false, + "buttonRounded": "0", + "dangerColor": "#f7685b", + "favicon": "", + "fontFamily": "Open Sans", + "isDefault": false, + "journeyCardBackgroundColor": "#ffffff", + "journeyCardShadow": 3, + "journeyCardTextColor": "#5e6d82", + "journeyCardTitleColor": "#23282e", + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#000000", + "linkColor": "#000000", + "linkedTrees": [ + "FrodoTest", + "AA-FrodoTest", ], - "properties": { - "_id": { - "ldapAttribute": "cn", - "primaryKey": true, - "type": "simple", - "writability": "createOnly", - }, - "condition": { - "ldapAttribute": "fr-idm-managed-group-condition", - "type": "simple", - }, - "description": { - "ldapAttribute": "description", - "type": "simple", - }, - "members": { - "isMultiValued": true, - "propertyName": "groups", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", - }, - }, + "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", + "logoAltText": "Contrast", + "logoEnabled": false, + "logoHeight": "72", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileAltText": "Contrast", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "22", + "logoProfileHeight": "22", + "name": "NoAccess", + "pageTitle": "#23282e", + "primaryColor": "#000000", + "primaryOffColor": "#000000", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#000000", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "switchBackgroundColor": "#c0c9d5", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", }, - "managed/alpha_organization": { - "dnTemplate": "ou=organization,o=alpha,o=root,ou=identities", - "jsonAttribute": "fr-idm-managed-organization-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "objectClasses": [ - "uidObject", - "fr-idm-managed-organization", - "fr-ext-attrs", - ], - "properties": { - "_id": { - "ldapAttribute": "uid", - "type": "simple", + { + "_id": "b82755e8-fe9a-4d27-b66b-45e37ae12345", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "admins": { - "isMultiValued": true, - "propertyName": "adminOfOrg", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "children": { - "isMultiValued": true, - "propertyName": "parent", - "resourcePath": "managed/alpha_organization", - "type": "reverseReference", + "consent": { + "enabled": false, }, - "members": { - "isMultiValued": true, - "propertyName": "memberOfOrg", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", + "oauthApplications": { + "enabled": false, }, - "name": { - "ldapAttribute": "fr-idm-managed-organization-name", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "owners": { - "isMultiValued": true, - "propertyName": "ownerOfOrg", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", + "preferences": { + "enabled": false, }, - "parent": { - "ldapAttribute": "fr-idm-managed-organization-parent", - "primaryKey": "uid", - "resourcePath": "managed/alpha_organization", - "type": "reference", + "social": { + "enabled": false, }, - }, - }, - "managed/alpha_role": { - "dnTemplate": "ou=role,o=alpha,o=root,ou=identities", - "jsonAttribute": "fr-idm-managed-role-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", - "objectClasses": [ - "uidObject", - "fr-idm-managed-role", - ], - "properties": { - "members": { - "isMultiValued": true, - "propertyName": "roles", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", + "trustedDevices": { + "enabled": true, }, }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": false, + "linkActiveColor": "#49871E", + "linkColor": "#5AA625", + "linkedTrees": [], + "logo": "", + "logoAltText": "", + "logoEnabled": true, + "logoHeight": "40", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", + "logoProfileAltText": "RobRoy", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "RobRoy", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "28", + "name": "Robroy", + "pageTitle": "#23282e", + "primaryColor": "#5AA625", + "primaryOffColor": "#49871E", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#5AA625", + "secondaryColor": "#69788b", + "textColor": "#ffffff", }, - "managed/alpha_user": { - "dnTemplate": "ou=user,o=alpha,o=root,ou=identities", - "jsonAttribute": "fr-idm-custom-attrs", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "namingStrategy": { - "dnAttribute": "fr-idm-uuid", - "type": "clientDnNaming", - }, - "nativeId": false, - "objectClasses": [ - "person", - "organizationalPerson", - "inetOrgPerson", - "iplanet-am-user-service", - "devicePrintProfilesContainer", - "deviceProfilesContainer", - "kbaInfoContainer", - "fr-idm-managed-user-explicit", - "forgerock-am-dashboard-service", - "inetuser", - "iplanet-am-auth-configuration-service", - "iplanet-am-managed-person", - "iPlanetPreferences", - "oathDeviceProfilesContainer", - "pushDeviceProfilesContainer", - "sunAMAuthAccountLockout", - "sunFMSAML2NameIdentifier", - "webauthnDeviceProfilesContainer", - "fr-idm-hybrid-obj", - "fr-ext-attrs", - ], - "properties": { - "_id": { - "ldapAttribute": "fr-idm-uuid", - "primaryKey": true, - "type": "simple", - }, - "_meta": { - "isMultiValued": false, - "ldapAttribute": "fr-idm-managed-user-meta", - "primaryKey": "uid", - "resourcePath": "managed/alpha_usermeta", - "type": "reference", - }, - "_notifications": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-notifications", - "primaryKey": "uid", - "resourcePath": "internal/notification", - "type": "reference", - }, - "accountStatus": { - "ldapAttribute": "inetUserStatus", - "type": "simple", - }, - "adminOfOrg": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-organization-admin", - "primaryKey": "uid", - "resourcePath": "managed/alpha_organization", - "type": "reference", - }, - "aliasList": { - "isMultiValued": true, - "ldapAttribute": "iplanet-am-user-alias-list", - "type": "simple", - }, - "assignedDashboard": { - "isMultiValued": true, - "ldapAttribute": "assignedDashboard", - "type": "simple", - }, - "authzRoles": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", - "primaryKey": "cn", - "resourcePath": "internal/role", - "type": "reference", - }, - "city": { - "ldapAttribute": "l", - "type": "simple", - }, - "cn": { - "ldapAttribute": "cn", - "type": "simple", - }, - "consentedMappings": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-consentedMapping", - "type": "json", - }, - "country": { - "ldapAttribute": "co", - "type": "simple", - }, - "description": { - "ldapAttribute": "description", - "type": "simple", - }, - "displayName": { - "ldapAttribute": "displayName", - "type": "simple", - }, - "effectiveAssignments": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-effectiveAssignment", - "type": "json", - }, - "effectiveGroups": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-effectiveGroup", - "type": "json", - }, - "effectiveRoles": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-effectiveRole", - "type": "json", + { + "_id": "86ce2f64-586d-44fe-8593-b12a85aac68d", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "frIndexedDate1": { - "ldapAttribute": "fr-attr-idate1", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "frIndexedDate2": { - "ldapAttribute": "fr-attr-idate2", - "type": "simple", + "consent": { + "enabled": false, }, - "frIndexedDate3": { - "ldapAttribute": "fr-attr-idate3", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "frIndexedDate4": { - "ldapAttribute": "fr-attr-idate4", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "frIndexedDate5": { - "ldapAttribute": "fr-attr-idate5", - "type": "simple", + "preferences": { + "enabled": false, }, - "frIndexedInteger1": { - "ldapAttribute": "fr-attr-iint1", - "type": "simple", + "social": { + "enabled": false, }, - "frIndexedInteger2": { - "ldapAttribute": "fr-attr-iint2", - "type": "simple", + "trustedDevices": { + "enabled": true, }, - "frIndexedInteger3": { - "ldapAttribute": "fr-attr-iint3", - "type": "simple", + }, + "backgroundColor": "#324054", + "backgroundImage": "", + "bodyText": "#23282e", + "buttonRounded": 5, + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": true, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#0c85cf", + "linkColor": "#109cf1", + "linkedTrees": [], + "logo": "", + "logoAltText": "", + "logoHeight": "40", + "logoProfile": "", + "logoProfileAltText": "", + "logoProfileCollapsed": "", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "40", + "logoProfileHeight": "40", + "name": "Starter Theme", + "pageTitle": "#23282e", + "primaryColor": "#324054", + "primaryOffColor": "#242E3C", + "profileBackgroundColor": "#f6f8fa", + "profileMenuHighlightColor": "#f3f5f8", + "profileMenuHoverColor": "#324054", + "profileMenuHoverTextColor": "#ffffff", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "frIndexedInteger4": { - "ldapAttribute": "fr-attr-iint4", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "frIndexedInteger5": { - "ldapAttribute": "fr-attr-iint5", - "type": "simple", + "consent": { + "enabled": false, }, - "frIndexedMultivalued1": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti1", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "frIndexedMultivalued2": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti2", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "frIndexedMultivalued3": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti3", - "type": "simple", + "preferences": { + "enabled": false, }, - "frIndexedMultivalued4": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti4", - "type": "simple", + "social": { + "enabled": false, }, - "frIndexedMultivalued5": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti5", - "type": "simple", + "trustedDevices": { + "enabled": true, }, - "frIndexedString1": { - "ldapAttribute": "fr-attr-istr1", - "type": "simple", + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "
+

Uptime & Performance Benchmarking Made Easy

+
+ +", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": true, + "linkActiveColor": "#007661", + "linkColor": "#009C80", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoAltText": "Zardoz Logo", + "logoEnabled": true, + "logoHeight": "47", + "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileAltText": "Zardaz Logo", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileCollapsedAltText": "Zardaz Logo", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "40", + "name": "Zardoz", + "pageTitle": "#23282e", + "primaryColor": "#009C80", + "primaryOffColor": "#007661", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#009C80", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + ], + "bravo": [ + { + "_id": "00203891-dde0-4114-b27a-219ae0b43a61", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "frIndexedString2": { - "ldapAttribute": "fr-attr-istr2", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "frIndexedString3": { - "ldapAttribute": "fr-attr-istr3", - "type": "simple", + "consent": { + "enabled": false, }, - "frIndexedString4": { - "ldapAttribute": "fr-attr-istr4", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "frIndexedString5": { - "ldapAttribute": "fr-attr-istr5", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "frUnindexedDate1": { - "ldapAttribute": "fr-attr-date1", - "type": "simple", + "preferences": { + "enabled": false, }, - "frUnindexedDate2": { - "ldapAttribute": "fr-attr-date2", - "type": "simple", + "social": { + "enabled": false, }, - "frUnindexedDate3": { - "ldapAttribute": "fr-attr-date3", - "type": "simple", + "trustedDevices": { + "enabled": true, }, - "frUnindexedDate4": { - "ldapAttribute": "fr-attr-date4", - "type": "simple", + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " + +", + "journeyFooterEnabled": true, + "journeyHeader": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#C60819", + "linkColor": "#EB0A1E", + "linkedTrees": [], + "logo": "", + "logoAltText": "", + "logoEnabled": true, + "logoHeight": "40", + "logoProfile": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg", + "logoProfileAltText": "Highlander", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg", + "logoProfileCollapsedAltText": "Highlander", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "28", + "name": "Highlander", + "pageTitle": "#23282e", + "primaryColor": "#EB0A1E", + "primaryOffColor": "#C60819", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#EB0A1E", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "frUnindexedDate5": { - "ldapAttribute": "fr-attr-date5", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "frUnindexedInteger1": { - "ldapAttribute": "fr-attr-int1", - "type": "simple", + "consent": { + "enabled": false, }, - "frUnindexedInteger2": { - "ldapAttribute": "fr-attr-int2", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "frUnindexedInteger3": { - "ldapAttribute": "fr-attr-int3", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "frUnindexedInteger4": { - "ldapAttribute": "fr-attr-int4", - "type": "simple", + "preferences": { + "enabled": false, }, - "frUnindexedInteger5": { - "ldapAttribute": "fr-attr-int5", - "type": "simple", + "social": { + "enabled": false, }, - "frUnindexedMultivalued1": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi1", - "type": "simple", + "trustedDevices": { + "enabled": true, }, - "frUnindexedMultivalued2": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi2", - "type": "simple", + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "
+

Uptime & Performance Benchmarking Made Easy

+
+ +", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": true, + "linkActiveColor": "#007661", + "linkColor": "#009C80", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoAltText": "Zardoz Logo", + "logoEnabled": true, + "logoHeight": "47", + "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileAltText": "Zardaz Logo", + "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", + "logoProfileCollapsedAltText": "Zardaz Logo", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "40", + "name": "Zardoz", + "pageTitle": "#23282e", + "primaryColor": "#009C80", + "primaryOffColor": "#007661", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#009C80", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "86ce2f64-586d-44fe-8593-b12a85aac68d", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "frUnindexedMultivalued3": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi3", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "frUnindexedMultivalued4": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi4", - "type": "simple", + "consent": { + "enabled": false, }, - "frUnindexedMultivalued5": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi5", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "frUnindexedString1": { - "ldapAttribute": "fr-attr-str1", - "type": "simple", + "personalInformation": { + "enabled": true, }, - "frUnindexedString2": { - "ldapAttribute": "fr-attr-str2", - "type": "simple", + "preferences": { + "enabled": false, }, - "frUnindexedString3": { - "ldapAttribute": "fr-attr-str3", - "type": "simple", + "social": { + "enabled": false, }, - "frUnindexedString4": { - "ldapAttribute": "fr-attr-str4", - "type": "simple", + "trustedDevices": { + "enabled": true, }, - "frUnindexedString5": { - "ldapAttribute": "fr-attr-str5", - "type": "simple", + }, + "backgroundColor": "#324054", + "backgroundImage": "", + "bodyText": "#23282e", + "buttonRounded": 5, + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": true, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#0c85cf", + "linkColor": "#109cf1", + "linkedTrees": [], + "logo": "", + "logoAltText": "", + "logoHeight": "40", + "logoProfile": "", + "logoProfileAltText": "", + "logoProfileCollapsed": "", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "40", + "logoProfileHeight": "40", + "name": "Starter Theme", + "pageTitle": "#23282e", + "primaryColor": "#324054", + "primaryOffColor": "#242E3C", + "profileBackgroundColor": "#f6f8fa", + "profileMenuHighlightColor": "#f3f5f8", + "profileMenuHoverColor": "#324054", + "profileMenuHoverTextColor": "#ffffff", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "b82755e8-fe9a-4d27-b66b-45e37ae12345", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "givenName": { - "ldapAttribute": "givenName", - "type": "simple", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "groups": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-groups", - "primaryKey": "cn", - "resourcePath": "managed/alpha_group", - "type": "reference", + "consent": { + "enabled": false, }, - "kbaInfo": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-kbaInfo", - "type": "json", + "oauthApplications": { + "enabled": false, }, - "lastSync": { - "ldapAttribute": "fr-idm-lastSync", - "type": "json", + "personalInformation": { + "enabled": true, }, - "mail": { - "ldapAttribute": "mail", - "type": "simple", + "preferences": { + "enabled": false, }, - "manager": { - "isMultiValued": false, - "ldapAttribute": "fr-idm-managed-user-manager", - "primaryKey": "uid", - "resourcePath": "managed/alpha_user", - "type": "reference", + "social": { + "enabled": false, }, - "memberOfOrg": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-organization-member", - "primaryKey": "uid", - "resourcePath": "managed/alpha_organization", - "type": "reference", + "trustedDevices": { + "enabled": true, }, - "memberOfOrgIDs": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-memberoforgid", - "type": "simple", + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": " +", + "journeyFooterEnabled": true, + "journeyHeader": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": true, + "journeyLayout": "justified-right", + "journeyTheaterMode": false, + "linkActiveColor": "#49871E", + "linkColor": "#5AA625", + "linkedTrees": [], + "logo": "", + "logoAltText": "", + "logoEnabled": true, + "logoHeight": "40", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", + "logoProfileAltText": "RobRoy", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "RobRoy", + "logoProfileCollapsedHeight": "28", + "logoProfileHeight": "28", + "name": "Robroy", + "pageTitle": "#23282e", + "primaryColor": "#5AA625", + "primaryOffColor": "#49871E", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#455469", + "profileMenuTextHighlightColor": "#5AA625", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + { + "_id": "cd6c93e2-52e2-4340-9770-66a588343841", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "ownerOfOrg": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-organization-owner", - "primaryKey": "uid", - "resourcePath": "managed/alpha_organization", - "type": "reference", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "password": { - "ldapAttribute": "userPassword", - "type": "simple", + "consent": { + "enabled": false, }, - "postalAddress": { - "ldapAttribute": "street", - "type": "simple", + "oauthApplications": { + "enabled": false, }, - "postalCode": { - "ldapAttribute": "postalCode", - "type": "simple", + "personalInformation": { + "enabled": true, }, "preferences": { - "ldapAttribute": "fr-idm-preferences", - "type": "json", - }, - "profileImage": { - "ldapAttribute": "labeledURI", - "type": "simple", - }, - "reports": { - "isMultiValued": true, - "propertyName": "manager", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", - }, - "roles": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-roles", - "primaryKey": "uid", - "resourcePath": "managed/alpha_role", - "type": "reference", - }, - "sn": { - "ldapAttribute": "sn", - "type": "simple", + "enabled": false, }, - "stateProvince": { - "ldapAttribute": "st", - "type": "simple", + "social": { + "enabled": false, }, - "telephoneNumber": { - "ldapAttribute": "telephoneNumber", - "type": "simple", + "trustedDevices": { + "enabled": true, }, - "userName": { - "ldapAttribute": "uid", - "type": "simple", + }, + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#000000", + "buttonRounded": "0", + "dangerColor": "#f7685b", + "favicon": "", + "isDefault": false, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyLayout": "card", + "journeyTheaterMode": false, + "linkActiveColor": "#000000", + "linkColor": "#000000", + "linkedTrees": [], + "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", + "logoAltText": "Contrast", + "logoEnabled": true, + "logoHeight": "72", + "logoProfile": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileAltText": "Contrast", + "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", + "logoProfileCollapsedAltText": "", + "logoProfileCollapsedHeight": "22", + "logoProfileHeight": "22", + "name": "Contrast", + "pageTitle": "#23282e", + "primaryColor": "#000000", + "primaryOffColor": "#000000", + "profileBackgroundColor": "#FFFFFF", + "profileMenuHighlightColor": "#FFFFFF", + "profileMenuHoverColor": "#FFFFFF", + "profileMenuHoverTextColor": "#000000", + "profileMenuTextHighlightColor": "#455469", + "secondaryColor": "#69788b", + "textColor": "#ffffff", + }, + ], + }, + }, + "uilocale/fr": { + "_id": "uilocale/fr", + "admin": { + "overrides": { + "AppLogoURI": "URI du logo de l’application", + "EmailAddress": "Adresse e-mail", + "Name": "Nom", + "Owners": "Les propriétaires", + }, + "sideMenu": { + "securityQuestions": "Questions de sécurité", + }, + }, + "enduser": { + "overrides": { + "FirstName": "Prénom", + "LastName": "Nom de famille", + }, + "pages": { + "dashboard": { + "widgets": { + "welcome": { + "greeting": "Bonjour", }, }, }, - "managed/alpha_usermeta": { - "dnTemplate": "ou=usermeta,o=alpha,o=root,ou=identities", - "jsonAttribute": "fr-idm-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "objectClasses": [ - "uidObject", - "fr-idm-generic-obj", + }, + }, + "login": { + "login": { + "next": "Suivant", + }, + "overrides": { + "Password": "Mot de passe", + "UserName": "Nom d'utilisateur", + }, + }, + "shared": { + "sideMenu": { + "dashboard": "Tableau de bord", + }, + }, + }, + "undefined": { + "_id": "undefined", + "mapping": { + "mapping/managedBravo_user_managedBravo_user0": { + "_id": "mapping/managedBravo_user_managedBravo_user0", + "consentRequired": false, + "displayName": "managedBravo_user_managedBravo_user0", + "icon": null, + "name": "managedBravo_user_managedBravo_user0", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "target": "managed/bravo_user", + }, + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -aD idmTestDir7 -m idm": should export all idm config entities for on prem idm 1`] = `0`; + +exports[`frodo idm export "frodo idm export -aD idmTestDir7 -m idm": should export all idm config entities for on prem idm 2`] = `""`; + +exports[`frodo idm export "frodo idm export -aD idmTestDir7 -m idm": should export all idm config entities for on prem idm: idmTestDir7/all.idm.json 1`] = ` +{ + "idm": { + "access": { + "_id": "access", + "configs": [ + { + "actions": "", + "methods": "read", + "pattern": "health", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "info/*", + "roles": "*", + }, + { + "actions": "login,logout", + "methods": "read,action", + "pattern": "authentication", + "roles": "*", + }, + { + "actions": "validate", + "methods": "action", + "pattern": "util/validateQueryFilter", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themeconfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/theme-*", + "roles": "*", + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled(['registration', 'passwordReset'])", + "methods": "read", + "pattern": "config/selfservice/kbaConfig", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/dashboard", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "query", + "pattern": "info/features", + "roles": "*", + }, + { + "actions": "listPrivileges", + "methods": "action", + "pattern": "privilege", + "roles": "*", + }, + { + "actions": "*", + "methods": "read", + "pattern": "privilege/*", + "roles": "*", + }, + { + "actions": "submitRequirements", + "methods": "read,action", + "pattern": "selfservice/termsAndConditions", + "roles": "*", + }, + { + "actions": "submitRequirements", + "methods": "read,action", + "pattern": "selfservice/kbaUpdate", + "roles": "*", + }, + { + "actions": "", + "customAuthz": "isMyProfile()", + "methods": "read,query", + "pattern": "profile/*", + "roles": "*", + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled('kba')", + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/openidm-authorized", + }, + { + "customAuthz": "checkIfApiRequest()", + "methods": "read", + "pattern": "*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "excludePatterns": "repo,repo/*", + "methods": "*", + "pattern": "*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "", + "methods": "create,read,update,delete,patch,query", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "methods": "script", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "test,testConfig,createconfiguration,liveSync,authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo/*", + "roles": "internal/role/openidm-admin", + }, + { + "actions": "command", + "customAuthz": "request.additionalParameters.commandId === 'delete-mapping-links'", + "methods": "action", + "pattern": "repo/link", + "roles": "internal/role/openidm-admin", + }, + { + "methods": "create,read,query,patch", + "pattern": "managed/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read,query", + "pattern": "internal/role/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "create,read,action,update", + "pattern": "profile/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/platform-provisioning", + }, + { + "methods": "read", + "pattern": "selfservice/terms", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "sendTemplate", + "methods": "action", + "pattern": "external/email", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/platform-provisioning", + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "reauthenticate", + "methods": "action", + "pattern": "authentication", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "bind,unbind", + "customAuthz": "ownDataOnly()", + "methods": "read,action,delete", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('user', []) && reauthIfProtectedAttributeChange()", + "methods": "update,patch,action", + "pattern": "*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "read", + "pattern": "endpoint/getprocessesforuser", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "methods": "query", + "pattern": "endpoint/gettasksview", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "complete", + "customAuthz": "isMyTask()", + "methods": "action", + "pattern": "workflow/taskinstance/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "canUpdateTask()", + "methods": "read,update", + "pattern": "workflow/taskinstance/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "isAllowedToStartProcess()", + "methods": "create", + "pattern": "workflow/processinstance", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "read", + "methods": "*", + "pattern": "workflow/processdefinition/*", + "roles": "internal/role/openidm-authorized", + }, + { + "customAuthz": "restrictPatchToFields(['password'])", + "methods": "patch", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-cert", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_meta', false)", + "methods": "read", + "pattern": "internal/usermeta/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_notifications', true)", + "methods": "read,delete", + "pattern": "internal/notification/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['idps','_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-authorized", + }, + { + "actions": "deleteNotificationsForTarget", + "customAuthz": "request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)", + "methods": "action", + "pattern": "notification", + "roles": "internal/role/openidm-authorized", + }, + ], + }, + "apiVersion": { + "_id": "apiVersion", + "warning": { + "enabled": { + "$bool": "&{openidm.apiVersion.warning.enabled|false}", + }, + "includeScripts": { + "$bool": "&{openidm.apiVersion.warning.includeScripts|false}", + }, + "logFilterResourcePaths": [ + "audit", + "authentication", + "cluster", + "config", + "consent", + "csv", + "external/rest", + "identityProviders", + "info", + "internal", + "internal/role", + "internal/user", + "internal/usermeta", + "managed", + "managed/assignment", + "managed/organization", + "managed/role", + "managed/user", + "notification", + "policy", + "privilege", + "profile", + "recon", + "recon/assoc", + "repo", + "selfservice/kba", + "selfservice/terms", + "scheduler/job", + "scheduler/trigger", + "schema", + "sync", + "sync/mappings", + "system", + "taskscanner", + ], + }, + }, + "audit": { + "_id": "audit", + "auditServiceConfig": { + "availableAuditEventHandlers": [ + "org.forgerock.audit.handlers.csv.CsvAuditEventHandler", + "org.forgerock.audit.handlers.jms.JmsAuditEventHandler", + "org.forgerock.audit.handlers.json.JsonAuditEventHandler", + "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", + "org.forgerock.openidm.audit.impl.RouterAuditEventHandler", + "org.forgerock.audit.handlers.syslog.SyslogAuditEventHandler", + ], + "caseInsensitiveFields": [ + "/access/http/request/headers", + "/access/http/response/headers", + ], + "filterPolicies": { + "field": { + "excludeIf": [], + "includeIf": [], + }, + }, + "handlerForQueries": "json", + }, + "eventHandlers": [ + { + "class": "org.forgerock.audit.handlers.json.JsonAuditEventHandler", + "config": { + "buffering": { + "maxSize": 100000, + "writeInterval": "100 millis", + }, + "enabled": { + "$bool": "&{openidm.audit.handler.json.enabled|true}", + }, + "logDirectory": "&{idm.data.dir}/audit", + "name": "json", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], + }, + }, + { + "class": "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "config": { + "enabled": { + "$bool": "&{openidm.audit.handler.stdout.enabled|false}", + }, + "name": "stdout", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", ], - "properties": { - "target": { - "propertyName": "_meta", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", - }, + }, + }, + { + "class": "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", + "config": { + "enabled": { + "$bool": "&{openidm.audit.handler.repo.enabled|false}", }, + "name": "repo", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", + ], }, - "managed/bravo_group": { - "dnTemplate": "ou=groups,o=bravo,o=root,ou=identities", - "idGenerator": { - "propertyName": "name", - "type": "property", + }, + ], + "eventTopics": { + "access": { + "defaultEvents": true, + "filter": { + "script": { + "globals": {}, + "source": "//seantest +", + "type": "groovy", }, - "jsonAttribute": "fr-idm-managed-group-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "namingStrategy": { - "dnAttribute": "cn", - "type": "clientDnNaming", + }, + "name": "access", + }, + "activity": { + "defaultEvents": true, + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", + ], + }, + "name": "activity", + "passwordFields": [ + "password", + ], + "watchedFields": [], + }, + "authentication": { + "defaultEvents": true, + "filter": { + "script": { + "globals": {}, + "source": "//seantest +", + "type": "text/javascript", }, - "nativeId": false, - "objectClasses": [ - "top", - "groupOfURLs", - "fr-idm-managed-group", + }, + "name": "authentication", + }, + "config": { + "defaultEvents": true, + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", ], + }, + "name": "config", + }, + "recon": { + "defaultEvents": true, + "name": "recon", + }, + "sync": { + "defaultEvents": true, + "name": "sync", + }, + }, + "exceptionFormatter": { + "globals": {}, + "source": "//seantest + +console.log("hello world");console.log("hello world");console.log("hello world"); +", + "type": "text/javascript", + }, + }, + "authentication": { + "_id": "authentication", + "serverAuthContext": { + "authModules": [ + { + "enabled": true, + "name": "STATIC_USER", "properties": { - "_id": { - "ldapAttribute": "cn", - "primaryKey": true, - "type": "simple", - "writability": "createOnly", - }, - "condition": { - "ldapAttribute": "fr-idm-managed-group-condition", - "type": "simple", - }, - "description": { - "ldapAttribute": "description", - "type": "simple", + "augmentSecurityContext": { + "globals": {}, + "source": "//seantest +", + "type": "text/javascript", }, - "members": { - "isMultiValued": true, - "propertyName": "groups", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", + "defaultUserRoles": [ + "internal/role/openidm-reg", + ], + "password": { + "$crypto": { + "type": "x-simple-encryption", + "value": { + "cipher": "AES/CBC/PKCS5Padding", + "data": "fzE1J3P9LZOmuCuecCDnaQ==", + "iv": "nhI8UHymNRChGIyOC+5Sag==", + "keySize": 32, + "mac": "XfF7VE/o5Shv6AqW1Xe3TQ==", + "purpose": "idm.config.encryption", + "salt": "v0NHakffrjBJNL3zjhEOtg==", + "stableId": "openidm-sym-default", + }, + }, }, + "queryOnResource": "internal/user", + "username": "anonymous", }, }, - "managed/bravo_organization": { - "dnTemplate": "ou=organization,o=bravo,o=root,ou=identities", - "jsonAttribute": "fr-idm-managed-organization-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "objectClasses": [ - "uidObject", - "fr-idm-managed-organization", - "fr-ext-attrs", - ], + { + "enabled": true, + "name": "STATIC_USER", "properties": { - "_id": { - "ldapAttribute": "uid", - "type": "simple", - }, - "admins": { - "isMultiValued": true, - "propertyName": "adminOfOrg", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", - }, - "children": { - "isMultiValued": true, - "propertyName": "parent", - "resourcePath": "managed/bravo_organization", - "type": "reverseReference", - }, - "members": { - "isMultiValued": true, - "propertyName": "memberOfOrg", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", - }, - "name": { - "ldapAttribute": "fr-idm-managed-organization-name", - "type": "simple", - }, - "owners": { - "isMultiValued": true, - "propertyName": "ownerOfOrg", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", - }, - "parent": { - "ldapAttribute": "fr-idm-managed-organization-parent", - "primaryKey": "uid", - "resourcePath": "managed/bravo_organization", - "type": "reference", - }, + "defaultUserRoles": [ + "internal/role/openidm-authorized", + "internal/role/openidm-admin", + ], + "password": "&{openidm.admin.password}", + "queryOnResource": "internal/user", + "username": "openidm-admin", }, }, - "managed/bravo_role": { - "dnTemplate": "ou=role,o=bravo,o=root,ou=identities", - "jsonAttribute": "fr-idm-managed-role-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", - "objectClasses": [ - "uidObject", - "fr-idm-managed-role", - ], + { + "enabled": true, + "name": "MANAGED_USER", "properties": { - "members": { - "isMultiValued": true, - "propertyName": "roles", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", + "augmentSecurityContext": { + "source": "var augmentYield = require('auth/customAuthz').setProtectedAttributes(security);require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments', augmentYield); +", + "type": "text/javascript", + }, + "defaultUserRoles": [ + "internal/role/openidm-authorized", + ], + "propertyMapping": { + "additionalUserFields": [ + "adminOfOrg", + "ownerOfOrg", + ], + "authenticationId": "username", + "userCredential": "password", + "userRoles": "authzRoles", }, + "queryId": "credential-query", + "queryOnResource": "managed/user", }, }, - "managed/bravo_user": { - "dnTemplate": "ou=user,o=bravo,o=root,ou=identities", - "jsonAttribute": "fr-idm-custom-attrs", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "namingStrategy": { - "dnAttribute": "fr-idm-uuid", - "type": "clientDnNaming", + ], + "sessionModule": { + "name": "JWT_SESSION", + "properties": { + "enableDynamicRoles": false, + "isHttpOnly": true, + "maxTokenLifeMinutes": 120, + "sessionOnly": true, + "tokenIdleTimeMinutes": 30, + }, + }, + }, + }, + "cluster": { + "_id": "cluster", + "enabled": true, + "instanceCheckInInterval": 5000, + "instanceCheckInOffset": 0, + "instanceId": "&{openidm.node.id}", + "instanceRecoveryTimeout": 30000, + "instanceTimeout": 30000, + }, + "emailTemplate/forgottenUsername": { + "_id": "emailTemplate/forgottenUsername", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

", + }, + "mimeType": "text/html", + "subject": { + "en": "Account Information - username", + "fr": "Informations sur le compte - nom d'utilisateur", + }, + }, + "emailTemplate/registration": { + "_id": "emailTemplate/registration", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", + }, + "mimeType": "text/html", + "subject": { + "en": "Register new account", + "fr": "Créer un nouveau compte", + }, + }, + "emailTemplate/resetPassword": { + "_id": "emailTemplate/resetPassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Click to reset your password

Password reset link

", + "fr": "

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

", + }, + "mimeType": "text/html", + "subject": { + "en": "Reset your password", + "fr": "Réinitialisez votre mot de passe", + }, + }, + "emailTemplate/updatePassword": { + "_id": "emailTemplate/updatePassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Verify email to update password

Update password link

", + }, + "mimeType": "text/html", + "subject": { + "en": "Update your password", + }, + }, + "emailTemplate/welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Welcome to OpenIDM. Your username is '{{object.userName}}'.

", + "fr": "

Bienvenue sur OpenIDM. Votre nom d'utilisateur est '{{object.userName}}'.

", + }, + "mimeType": "text/html", + "subject": { + "en": "Your account has been created", + "fr": "Votre compte vient d’être créé !", + }, + }, + "endpoint/getavailableuserstoassign": { + "_id": "endpoint/getavailableuserstoassign", + "file": "workflow/getavailableuserstoassign.js", + "type": "text/javascript", + }, + "endpoint/getprocessesforuser": { + "_id": "endpoint/getprocessesforuser", + "file": "workflow/getprocessesforuser.js", + "type": "text/javascript", + }, + "endpoint/gettasksview": { + "_id": "endpoint/gettasksview", + "file": "workflow/gettasksview.js", + "type": "text/javascript", + }, + "endpoint/mappingDetails": { + "_id": "endpoint/mappingDetails", + "context": "endpoint/mappingDetails", + "file": "mappingDetails.js", + "type": "text/javascript", + }, + "endpoint/oauthproxy": { + "_id": "endpoint/oauthproxy", + "context": "endpoint/oauthproxy", + "file": "oauthProxy.js", + "type": "text/javascript", + }, + "endpoint/removeRepoPathFromRelationships": { + "_id": "endpoint/removeRepoPathFromRelationships", + "file": "update/removeRepoPathFromRelationships.js", + "type": "text/javascript", + }, + "endpoint/repairMetadata": { + "_id": "endpoint/repairMetadata", + "file": "meta/metadataScanner.js", + "type": "text/javascript", + }, + "endpoint/updateInternalUserAndInternalRoleEntries": { + "_id": "endpoint/updateInternalUserAndInternalRoleEntries", + "file": "update/updateInternalUserAndInternalRoleEntries.js", + "type": "text/javascript", + }, + "endpoint/validateQueryFilter": { + "_id": "endpoint/validateQueryFilter", + "context": "util/validateQueryFilter", + "source": "try { org.forgerock.openidm.query.StringQueryFilters.parse(request.content._queryFilter).accept(new org.forgerock.util.query.MapFilterVisitor(), null); } catch (e) { throw { 'code' : 400, 'message' : e.message } }; +", + "type": "text/javascript", + }, + "external.rest": { + "_id": "external.rest", + "hostnameVerifier": "&{openidm.external.rest.hostnameVerifier}", + }, + "internal": { + "_id": "internal", + "objects": [ + { + "name": "role", + "properties": { + "authzMembers": { + "items": { + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + }, }, - "nativeId": false, - "objectClasses": [ - "person", - "organizationalPerson", - "inetOrgPerson", - "iplanet-am-user-service", - "devicePrintProfilesContainer", - "deviceProfilesContainer", - "kbaInfoContainer", - "fr-idm-managed-user-explicit", - "forgerock-am-dashboard-service", - "inetuser", - "iplanet-am-auth-configuration-service", - "iplanet-am-managed-person", - "iPlanetPreferences", - "oathDeviceProfilesContainer", - "pushDeviceProfilesContainer", - "sunAMAuthAccountLockout", - "sunFMSAML2NameIdentifier", - "webauthnDeviceProfilesContainer", - "fr-idm-hybrid-obj", - "fr-ext-attrs", + }, + }, + { + "name": "notification", + "properties": { + "target": { + "reversePropertyName": "_notifications", + }, + }, + }, + ], + }, + "managed": { + "_id": "managed", + "objects": [ + { + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "user", + "notifications": { + "property": "_notifications", + }, + "postDelete": { + "source": "//seantest exract mapping UPDATED + +//seantest test test adsfasdf updated +", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "sn", + "mail", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "activeDate", + "inactiveDate", ], "properties": { "_id": { - "ldapAttribute": "fr-idm-uuid", - "primaryKey": true, - "type": "simple", - }, - "_meta": { - "isMultiValued": false, - "ldapAttribute": "fr-idm-managed-user-meta", - "primaryKey": "uid", - "resourcePath": "managed/bravo_usermeta", - "type": "reference", - }, - "_notifications": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-notifications", - "primaryKey": "uid", - "resourcePath": "internal/notification", - "type": "reference", + "description": "User ID", + "isPersonal": false, + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, }, "accountStatus": { - "ldapAttribute": "inetUserStatus", - "type": "simple", + "default": "active", + "description": "Status", + "isPersonal": false, + "policies": [ + { + "params": { + "regexp": "^(active|inactive)$", + }, + "policyId": "regexpMatches", + }, + ], + "searchable": true, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, - "adminOfOrg": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-organization-admin", - "primaryKey": "uid", - "resourcePath": "managed/bravo_organization", - "type": "reference", + "activeDate": { + "description": "Active Date", + "format": "datetime", + "isPersonal": false, + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": false, + "title": "Active Date", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, - "aliasList": { - "isMultiValued": true, - "ldapAttribute": "iplanet-am-user-alias-list", - "type": "simple", + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true, }, - "assignedDashboard": { - "isMultiValued": true, - "ldapAttribute": "assignedDashboard", - "type": "simple", + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, "authzRoles": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", - "primaryKey": "cn", - "resourcePath": "internal/role", - "type": "reference", + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Authorization Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, "city": { - "ldapAttribute": "l", - "type": "simple", - }, - "cn": { - "ldapAttribute": "cn", - "type": "simple", + "description": "City", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, "consentedMappings": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-consentedMapping", - "type": "json", + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "order": [ + "mapping", + "consentDate", + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "format": "datetime", + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": true, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true, + }, + "mapping": { + "description": "Mapping", + "searchable": true, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true, + }, + }, + "required": [ + "mapping", + "consentDate", + ], + "title": "Consented Mapping", + "type": "object", + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, }, "country": { - "ldapAttribute": "co", - "type": "simple", + "description": "Country", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, "description": { - "ldapAttribute": "description", - "type": "simple", - }, - "displayName": { - "ldapAttribute": "displayName", - "type": "simple", + "description": "Description", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, "effectiveAssignments": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-effectiveAssignment", - "type": "json", - }, - "effectiveGroups": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-effectiveGroup", - "type": "json", + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false, }, "effectiveRoles": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-effectiveRole", - "type": "json", - }, - "frIndexedDate1": { - "ldapAttribute": "fr-attr-idate1", - "type": "simple", - }, - "frIndexedDate2": { - "ldapAttribute": "fr-attr-idate2", - "type": "simple", - }, - "frIndexedDate3": { - "ldapAttribute": "fr-attr-idate3", - "type": "simple", - }, - "frIndexedDate4": { - "ldapAttribute": "fr-attr-idate4", - "type": "simple", - }, - "frIndexedDate5": { - "ldapAttribute": "fr-attr-idate5", - "type": "simple", - }, - "frIndexedInteger1": { - "ldapAttribute": "fr-attr-iint1", - "type": "simple", - }, - "frIndexedInteger2": { - "ldapAttribute": "fr-attr-iint2", - "type": "simple", - }, - "frIndexedInteger3": { - "ldapAttribute": "fr-attr-iint3", - "type": "simple", - }, - "frIndexedInteger4": { - "ldapAttribute": "fr-attr-iint4", - "type": "simple", - }, - "frIndexedInteger5": { - "ldapAttribute": "fr-attr-iint5", - "type": "simple", - }, - "frIndexedMultivalued1": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti1", - "type": "simple", - }, - "frIndexedMultivalued2": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti2", - "type": "simple", - }, - "frIndexedMultivalued3": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti3", - "type": "simple", - }, - "frIndexedMultivalued4": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti4", - "type": "simple", - }, - "frIndexedMultivalued5": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-imulti5", - "type": "simple", + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object", + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles", + ], + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false, }, - "frIndexedString1": { - "ldapAttribute": "fr-attr-istr1", - "type": "simple", + "givenName": { + "description": "First Name", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frIndexedString2": { - "ldapAttribute": "fr-attr-istr2", - "type": "simple", + "inactiveDate": { + "description": "Inactive Date", + "format": "datetime", + "isPersonal": false, + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "searchable": false, + "title": "Inactive Date", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, - "frIndexedString3": { - "ldapAttribute": "fr-attr-istr3", - "type": "simple", + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId", + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string", + }, + "customQuestion": { + "description": "Custom question", + "type": "string", + }, + "questionId": { + "description": "Question ID", + "type": "string", + }, + }, + "required": [], + "title": "KBA Info Items", + "type": "object", + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false, }, - "frIndexedString4": { - "ldapAttribute": "fr-attr-istr4", - "type": "simple", + "lastSync": { + "description": "Last Sync timestamp", + "isPersonal": false, + "order": [ + "effectiveAssignments", + "timestamp", + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object", + }, + "title": "Effective Assignments", + "type": "array", + }, + "timestamp": { + "description": "Timestamp", + "policies": [ + { + "policyId": "valid-datetime", + }, + ], + "type": "string", + }, + }, + "required": [], + "scope": "private", + "searchable": false, + "title": "Last Sync timestamp", + "type": "object", + "usageDescription": "", + "viewable": false, }, - "frIndexedString5": { - "ldapAttribute": "fr-attr-istr5", - "type": "simple", + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Email Address", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frUnindexedDate1": { - "ldapAttribute": "fr-attr-date1", - "type": "simple", + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Manager _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", + "userEditable": false, + "validate": true, + "viewable": true, }, - "frUnindexedDate2": { - "ldapAttribute": "fr-attr-date2", - "type": "simple", + "memberOfOrg": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations to which I Belong", + "type": "array", + "userEditable": false, + "viewable": true, }, - "frUnindexedDate3": { - "ldapAttribute": "fr-attr-date3", - "type": "simple", + "memberOfOrgIDs": { + "isVirtual": true, + "items": { + "title": "org identifiers", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "memberOfOrg", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false, }, - "frUnindexedDate4": { - "ldapAttribute": "fr-attr-date4", - "type": "simple", + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", + "type": "array", + "userEditable": false, + "viewable": true, }, - "frUnindexedDate5": { - "ldapAttribute": "fr-attr-date5", - "type": "simple", + "password": { + "description": "Password", + "encryption": { + "purpose": "idm.password.encryption", + }, + "isPersonal": false, + "isProtected": true, + "policies": [ + { + "params": { + "minLength": 8, + }, + "policyId": "minimum-length", + }, + { + "params": { + "numCaps": 1, + }, + "policyId": "at-least-X-capitals", + }, + { + "params": { + "numNums": 1, + }, + "policyId": "at-least-X-numbers", + }, + { + "params": { + "disallowedFields": [ + "userName", + "givenName", + "sn", + ], + }, + "policyId": "cannot-contain-others", + }, + ], + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, }, - "frUnindexedInteger1": { - "ldapAttribute": "fr-attr-int1", - "type": "simple", + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frUnindexedInteger2": { - "ldapAttribute": "fr-attr-int2", - "type": "simple", + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frUnindexedInteger3": { - "ldapAttribute": "fr-attr-int3", - "type": "simple", + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing", + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean", + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean", + }, + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frUnindexedInteger4": { - "ldapAttribute": "fr-attr-int4", - "type": "simple", + "reports": { + "description": "Direct Reports", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Direct Reports Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, - "frUnindexedInteger5": { - "ldapAttribute": "fr-attr-int5", - "type": "simple", + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Provisioning Roles Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Provisioning Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, - "frUnindexedMultivalued1": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi1", - "type": "simple", + "sn": { + "description": "Last Name", + "isPersonal": true, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frUnindexedMultivalued2": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi2", - "type": "simple", + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frUnindexedMultivalued3": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi3", - "type": "simple", + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "policies": [ + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frUnindexedMultivalued4": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi4", - "type": "simple", + "userName": { + "description": "Username", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-username", + }, + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "params": { + "minLength": 1, + }, + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, + }, + "policyId": "maximum-length", + }, + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "frUnindexedMultivalued5": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi5", - "type": "simple", + }, + "required": [ + "userName", + "givenName", + "sn", + "mail", + ], + "title": "User", + "type": "object", + "viewable": true, + }, + }, + { + "name": "role", + "onCreate": { + "globals": {}, + "source": "//asdfasdfadsfasdf + + +//tests +//test +", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-check-square", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "condition", + "temporalConstraints", + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, }, - "frUnindexedString1": { - "ldapAttribute": "fr-attr-str1", - "type": "simple", + "assignments": { + "description": "Managed Assignments", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Assignments Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Managed Assignments Items", + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": false, + "title": "Managed Assignments", + "type": "array", + "viewable": true, }, - "frUnindexedString2": { - "ldapAttribute": "fr-attr-str2", - "type": "simple", + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, }, - "frUnindexedString3": { - "ldapAttribute": "fr-attr-str3", - "type": "simple", + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, }, - "frUnindexedString4": { - "ldapAttribute": "fr-attr-str4", - "type": "simple", + "members": { + "description": "Role Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Role Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Members Items", + "type": "relationship", + "validate": true, + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Role Members", + "type": "array", + "viewable": true, }, - "frUnindexedString5": { - "ldapAttribute": "fr-attr-str5", - "type": "simple", + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique", + }, + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, }, - "givenName": { - "ldapAttribute": "givenName", - "type": "simple", + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, + "items": { + "order": [ + "duration", + ], + "properties": { + "duration": { + "description": "Duration", + "type": "string", + }, + }, + "required": [ + "duration", + ], + "title": "Temporal Constraints Items", + "type": "object", + }, + "notifyRelationships": [ + "members", + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false, }, - "groups": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-groups", - "primaryKey": "cn", - "resourcePath": "managed/bravo_group", - "type": "reference", + }, + "required": [ + "name", + ], + "title": "Role", + "type": "object", + }, + }, + { + "attributeEncryption": {}, + "name": "assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight", + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false, }, - "kbaInfo": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-kbaInfo", - "type": "json", + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value", + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string", + }, + "name": { + "description": "Name", + "type": "string", + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string", + }, + "value": { + "description": "Value", + "type": "string", + }, + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object", + }, + "notifyRelationships": [ + "roles", + "members", + ], + "title": "Assignment Attributes", + "type": "array", + "viewable": true, }, - "lastSync": { - "ldapAttribute": "fr-idm-lastSync", - "type": "json", + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false, }, - "mail": { - "ldapAttribute": "mail", - "type": "simple", + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true, }, - "manager": { - "isMultiValued": false, - "ldapAttribute": "fr-idm-managed-user-manager", - "primaryKey": "uid", - "resourcePath": "managed/bravo_user", - "type": "reference", + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", + "items": { + "title": "Link Qualifiers Items", + "type": "string", + }, + "title": "Link Qualifiers", + "type": "array", + "viewable": true, }, - "memberOfOrg": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-organization-member", - "primaryKey": "uid", - "resourcePath": "managed/bravo_organization", - "type": "reference", + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists", + }, + ], + "searchable": true, + "title": "Mapping", + "type": "string", + "viewable": true, }, - "memberOfOrgIDs": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-memberoforgid", - "type": "simple", + "members": { + "description": "Assignment Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Assignment Members Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Assignment Members Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Assignment Members", + "type": "array", + "viewable": true, }, - "ownerOfOrg": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-organization-owner", - "primaryKey": "uid", - "resourcePath": "managed/bravo_organization", - "type": "reference", + "name": { + "description": "The assignment name, used for display purposes.", + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true, }, - "password": { - "ldapAttribute": "userPassword", - "type": "simple", + "roles": { + "description": "Managed Roles", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string", + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Managed Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, + }, + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Managed Roles Items", + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "title": "Managed Roles", + "type": "array", + "userEditable": false, + "viewable": true, }, - "postalAddress": { - "ldapAttribute": "street", - "type": "simple", + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members", + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null", + ], + "viewable": true, }, - "postalCode": { - "ldapAttribute": "postalCode", - "type": "simple", + }, + "required": [ + "name", + "description", + "mapping", + ], + "title": "Assignment", + "type": "object", + }, + }, + { + "name": "organization", + "onCreate": { + "globals": {}, + "source": "//seantest +", + "type": "text/javascript", + }, + "onRead": { + "globals": {}, + "source": "//seantest +", + "type": "groovy", + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs", + ], + "properties": { + "adminIDs": { + "isVirtual": true, + "items": { + "title": "admin ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "admins", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Admin user ids", + "type": "array", + "userEditable": false, + "viewable": false, }, - "preferences": { - "ldapAttribute": "fr-idm-preferences", - "type": "json", + "admins": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "adminOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Administrators", + "type": "array", + "userEditable": false, + "viewable": true, }, - "profileImage": { - "ldapAttribute": "labeledURI", - "type": "simple", + "children": { + "description": "Child Organizations", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "parent", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Child Organizations", + "type": "array", + "userEditable": false, + "viewable": false, }, - "reports": { - "isMultiValued": true, - "propertyName": "manager", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", + "description": { + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": true, + "viewable": true, }, - "roles": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-roles", - "primaryKey": "uid", - "resourcePath": "managed/bravo_role", - "type": "reference", + "members": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "memberOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true, }, - "sn": { - "ldapAttribute": "sn", - "type": "simple", + "name": { + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true, }, - "stateProvince": { - "ldapAttribute": "st", - "type": "simple", + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "owners", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "Owner user ids", + "type": "array", + "userEditable": false, + "viewable": false, }, - "telephoneNumber": { - "ldapAttribute": "telephoneNumber", - "type": "simple", + "owners": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, + }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, + "viewable": true, }, - "userName": { - "ldapAttribute": "uid", - "type": "simple", + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members", + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, + "viewable": true, }, - }, - }, - "managed/bravo_usermeta": { - "dnTemplate": "ou=usermeta,o=bravo,o=root,ou=identities", - "jsonAttribute": "fr-idm-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "objectClasses": [ - "uidObject", - "fr-idm-generic-obj", - ], - "properties": { - "target": { - "propertyName": "_meta", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", + "parentAdminIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent admins", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent admins", + "type": "array", + "userEditable": false, + "viewable": false, }, - }, - }, - "managed/teammembermeta": { - "dnTemplate": "ou=teammembermeta,o=root,ou=identities", - "jsonAttribute": "fr-idm-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", - "objectClasses": [ - "uidObject", - "fr-idm-generic-obj", - ], - "properties": { - "target": { - "propertyName": "_meta", - "resourcePath": "managed/teammember", - "type": "reverseReference", + "parentIDs": { + "isVirtual": true, + "items": { + "title": "parent org ids", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", + "type": "array", + "userEditable": false, + "viewable": false, + }, + "parentOwnerIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent owners", + "type": "string", + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", + "type": "array", + "userEditable": false, + "viewable": false, }, }, - }, - "reconprogressstate": { - "dnTemplate": "ou=reconprogressstate,dc=openidm,dc=example,dc=com", - }, - "relationships": { - "dnTemplate": "ou=relationships,dc=openidm,dc=example,dc=com", - "jsonAttribute": "fr-idm-relationship-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchRelationship", - "objectClasses": [ - "uidObject", - "fr-idm-relationship", + "required": [ + "name", ], + "title": "Organization", + "type": "object", }, - "scheduler": { - "dnTemplate": "ou=scheduler,dc=openidm,dc=example,dc=com", - }, - "scheduler/*": { - "dnTemplate": "ou=scheduler,dc=openidm,dc=example,dc=com", + }, + { + "name": "seantestmanagedobject", + "schema": { + "description": null, + "icon": "fa-database", + "mat-icon": null, + "title": null, }, - "ui/*": { - "dnTemplate": "ou=ui,dc=openidm,dc=example,dc=com", + }, + ], + }, + "mapping/mappingtest": { + "_id": "mapping/mappingtest", + "consentRequired": false, + "displayName": "mappingtest", + "icon": null, + "name": "mappingtest", + "policies": [ + { + "action": { + "globals": {}, + "source": "//asdfasdf +", + "type": "text/javascript", }, - "updates": { - "dnTemplate": "ou=updates,dc=openidm,dc=example,dc=com", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf +", + "type": "groovy", }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "target": "managed/organization", + }, + "mapping/seantestmapping": { + "_id": "mapping/seantestmapping", + "consentRequired": false, + "displayName": "seantestmapping", + "icon": null, + "name": "seantestmapping", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/assignment", + "target": "managed/organization", + }, + "metrics": { + "_id": "metrics", + "enabled": false, + }, + "notification/passwordUpdate": { + "_id": "notification/passwordUpdate", + "condition": { + "file": "propertiesModifiedFilter.groovy", + "globals": { + "propertiesToCheck": [ + "password", + ], }, + "type": "groovy", }, - "rest2LdapOptions": { - "mvccAttribute": "etag", - "readOnUpdatePolicy": "controls", - "returnNullForMissingProperties": true, - "useMvcc": true, - "usePermissiveModify": true, - "useSubtreeDelete": true, + "enabled": { + "$bool": "&{openidm.notifications.passwordUpdate|false}", }, - "security": { - "keyManager": "jvm", - "trustManager": "jvm", + "methods": [ + "update", + "patch", + ], + "notification": { + "message": "Your password has been updated.", + "notificationType": "info", + }, + "path": "managed/user/*", + "target": { + "resource": "managed/user/{{response/_id}}", }, }, - "router": { - "_id": "router", - "filters": [], + "notification/profileUpdate": { + "_id": "notification/profileUpdate", + "condition": { + "file": "propertiesModifiedFilter.groovy", + "globals": { + "propertiesToCheck": [ + "userName", + "givenName", + "sn", + "mail", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "preferences", + ], + }, + "type": "groovy", + }, + "enabled": { + "$bool": "&{openidm.notifications.profileUpdate|false}", + }, + "methods": [ + "update", + "patch", + ], + "notification": { + "message": "Your profile has been updated.", + "notificationType": "info", + }, + "path": "managed/user/*", + "target": { + "resource": "managed/user/{{response/_id}}", + }, }, - "script": { - "ECMAScript": { - "#javascript.debug": "&{openidm.script.javascript.debug}", - "javascript.recompile.minimumInterval": 60000, + "notificationFactory": { + "_id": "notificationFactory", + "enabled": { + "$bool": "&{openidm.notifications|false}", }, - "Groovy": { - "#groovy.disabled.global.ast.transformations": "", - "#groovy.errors.tolerance": 10, - "#groovy.output.debug": false, - "#groovy.output.verbose": false, - "#groovy.script.base": "#any class extends groovy.lang.Script", - "#groovy.script.extension": ".groovy", - "#groovy.source.encoding": "utf-8 #default US-ASCII", - "#groovy.target.bytecode": "1.5", - "#groovy.target.indy": true, - "#groovy.warnings": "likely errors #othere values [none,likely,possible,paranoia]", - "groovy.classpath": "&{idm.install.dir}/lib", - "groovy.recompile": true, - "groovy.recompile.minimumInterval": 60000, - "groovy.source.encoding": "UTF-8", - "groovy.target.directory": "&{idm.install.dir}/classes", + "threadPool": { + "maxPoolThreads": 2, + "maxQueueSize": 20000, + "steadyPoolThreads": 1, + "threadKeepAlive": 60, }, - "_id": "script", - "properties": {}, - "sources": { - "default": { - "directory": "&{idm.install.dir}/bin/defaults/script", + }, + "policy": { + "_id": "policy", + "additionalFiles": [], + "file": "policy.js", + "resources": [ + { + "calculatedProperties": { + "source": "require('selfServicePolicies').getRegistrationProperties() +", + "type": "text/javascript", + }, + "resource": "selfservice/registration", }, - "install": { - "directory": "&{idm.install.dir}", + { + "calculatedProperties": { + "source": "require('selfServicePolicies').getResetProperties() +", + "type": "text/javascript", + }, + "resource": "selfservice/reset", }, - "project": { - "directory": "&{idm.instance.dir}", + { + "properties": [ + { + "name": "_id", + "policies": [ + { + "params": { + "forbiddenChars": [ + "/", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + }, + { + "name": "password", + "policies": [ + { + "params": { + "minLength": 8, + }, + "policyId": "minimum-length", + }, + ], + }, + ], + "resource": "internal/user/*", }, - "project-script": { - "directory": "&{idm.instance.dir}/script", + { + "properties": [ + { + "name": "name", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + ], + }, + { + "name": "temporalConstraints", + "policies": [ + { + "policyId": "valid-temporal-constraints", + }, + ], + }, + { + "name": "condition", + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + }, + { + "name": "privileges", + "policies": [ + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "params": { + "properties": [ + { + "name": "name", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "string", + ], + }, + "policyId": "valid-type", + }, + ], + }, + { + "name": "path", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "forbiddenChars": [ + "/*", + ], + }, + "policyId": "cannot-contain-characters", + }, + { + "policyId": "valid-privilege-path", + }, + ], + }, + { + "name": "accessFlags", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-accessFlags-object", + }, + ], + }, + { + "name": "actions", + "policies": [ + { + "policyId": "required", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + ], + }, + { + "name": "permissions", + "policies": [ + { + "policyId": "required", + }, + { + "policyId": "not-empty", + }, + { + "params": { + "types": [ + "array", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-permissions", + }, + ], + }, + { + "name": "filter", + "policies": [ + { + "params": { + "types": [ + "string", + "null", + ], + }, + "policyId": "valid-type", + }, + { + "policyId": "valid-query-filter", + }, + ], + }, + ], + }, + "policyId": "valid-array-items", + }, + ], + }, + ], + "resource": "internal/role/*", }, - }, + { + "properties": [ + { + "name": "temporalConstraints", + "policies": [ + { + "policyId": "valid-temporal-constraints", + }, + ], + }, + { + "name": "condition", + "policies": [ + { + "policyId": "valid-query-filter", + }, + ], + }, + ], + "resource": "managed/role/*", + }, + { + "properties": [ + { + "name": "objects", + "policies": [ + { + "policyId": "valid-event-scripts", + }, + ], + }, + ], + "resource": "config/managed", + }, + ], + "type": "text/javascript", }, - "secrets": { - "_id": "secrets", - "populateDefaults": true, - "stores": [ + "privilegeAssignments": { + "_id": "privilegeAssignments", + "privilegeAssignments": [ { - "class": "org.forgerock.openidm.secrets.config.FileBasedStore", - "config": { - "file": "&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}", - "mappings": [ - { - "aliases": [ - "&{openidm.config.crypto.alias|openidm-sym-default}", - "openidm-localhost", - ], - "secretId": "idm.default", - "types": [ - "ENCRYPT", - "DECRYPT", - ], - }, - { - "aliases": [ - "&{openidm.config.crypto.alias|openidm-sym-default}", - ], - "secretId": "idm.config.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], - }, - { - "aliases": [ - "&{openidm.config.crypto.alias|openidm-sym-default}", - ], - "secretId": "idm.password.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], - }, - { - "aliases": [ - "&{openidm.https.keystore.cert.alias|openidm-localhost}", - ], - "secretId": "idm.jwt.session.module.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], - }, - { - "aliases": [ - "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}", - ], - "secretId": "idm.jwt.session.module.signing", - "types": [ - "SIGN", - "VERIFY", - ], - }, - { - "aliases": [ - "selfservice", - ], - "secretId": "idm.selfservice.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], - }, - { - "aliases": [ - "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}", - ], - "secretId": "idm.selfservice.signing", - "types": [ - "SIGN", - "VERIFY", - ], - }, - { - "aliases": [ - "&{openidm.config.crypto.alias|openidm-sym-default}", - ], - "secretId": "idm.assignment.attribute.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], - }, - ], - "providerName": "&{openidm.keystore.provider|SunJCE}", - "storePassword": "&{openidm.keystore.password|changeit}", - "storetype": "&{openidm.keystore.type|JCEKS}", - }, - "name": "mainKeyStore", + "name": "ownerPrivileges", + "privileges": [ + "owner-view-update-delete-orgs", + "owner-create-orgs", + "owner-view-update-delete-admins-and-members", + "owner-create-admins", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "ownerOfOrg", }, { - "class": "org.forgerock.openidm.secrets.config.FileBasedStore", - "config": { - "file": "&{openidm.truststore.location|&{idm.install.dir}/security/truststore}", - "mappings": [], - "providerName": "&{openidm.truststore.provider|SUN}", - "storePassword": "&{openidm.truststore.password|changeit}", - "storetype": "&{openidm.truststore.type|JKS}", - }, - "name": "mainTrustStore", + "name": "adminPrivileges", + "privileges": [ + "admin-view-update-delete-orgs", + "admin-create-orgs", + "admin-view-update-delete-members", + "admin-create-members", + ], + "relationshipField": "adminOfOrg", }, ], }, - "selfservice.kba": { - "_id": "selfservice.kba", - "kbaPropertyName": "kbaInfo", - "minimumAnswersToDefine": 1, - "minimumAnswersToVerify": 1, - "questions": { - "1": { - "en": "What's your favorite color?", + "privileges": { + "_id": "privileges", + "privileges": [ + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/ownerIDs eq "{{_id}}" or /parentOwnerIDs eq "{{_id}}"", + "name": "owner-view-update-delete-orgs", + "path": "managed/organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], }, - }, - }, - "selfservice.terms": { - "_id": "selfservice.terms", - "active": "0.0", - "uiConfig": { - "buttonText": "Accept", - "displayName": "We've updated our terms", - "purpose": "You must accept the updated terms in order to proceed.", - }, - "versions": [ { - "createDate": "2019-10-28T04:20:11.320Z", - "termsTranslations": { - "en": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", - }, - "version": "0.0", + "accessFlags": [ + { + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": false, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, + }, + ], + "actions": [], + "filter": "/parent pr", + "name": "owner-create-orgs", + "path": "managed/organization", + "permissions": [ + "CREATE", + ], }, - ], - }, - "servletfilter/cors": { - "_id": "servletfilter/cors", - "initParams": { - "allowCredentials": false, - "allowedHeaders": "authorization,accept,content-type,origin,x-requested-with,cache-control,accept-api-version,if-match,if-none-match", - "allowedMethods": "GET,POST,PUT,DELETE,PATCH", - "allowedOrigins": "*", - "chainPreflight": false, - "exposedHeaders": "WWW-Authenticate", - }, - "urlPatterns": [ - "/*", - ], - }, - "servletfilter/payload": { - "_id": "servletfilter/payload", - "initParams": { - "maxRequestSizeInMegabytes": 5, - }, - "urlPatterns": [ - "&{openidm.servlet.alias}/*", - ], - }, - "servletfilter/upload": { - "_id": "servletfilter/upload", - "initParams": { - "maxRequestSizeInMegabytes": 50, - }, - "urlPatterns": [ - "&{openidm.servlet.upload.alias}/*", - ], - }, - "sync": { - "_id": "sync", - "mappings": [ { - "_id": "sync/managedBravo_user_managedBravo_user", - "consentRequired": false, - "displayName": "managedBravo_user_managedBravo_user", - "icon": null, - "name": "managedBravo_user_managedBravo_user", - "policies": [ + "accessFlags": [ { - "action": "ASYNC", - "situation": "ABSENT", + "attribute": "userName", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "ALL_GONE", + "attribute": "password", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "AMBIGUOUS", + "attribute": "givenName", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "CONFIRMED", + "attribute": "sn", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "FOUND", + "attribute": "mail", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + "attribute": "description", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "LINK_ONLY", + "attribute": "accountStatus", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "MISSING", + "attribute": "telephoneNumber", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "attribute": "postalAddress", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "SOURCE_MISSING", + "attribute": "city", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + "attribute": "postalCode", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "UNASSIGNED", + "attribute": "country", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "UNQUALIFIED", + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, }, ], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [], - "target": "managed/bravo_user", + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "owner-view-update-delete-admins-and-members", + "path": "managed/user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], }, { - "_id": "sync/managedAlpha_application_managedBravo_application", - "consentRequired": true, - "displayName": "Test Application Mapping", - "icon": null, - "name": "managedAlpha_application_managedBravo_application", - "policies": [ + "accessFlags": [ { - "action": "ASYNC", - "situation": "ABSENT", + "attribute": "userName", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "ALL_GONE", + "attribute": "password", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "AMBIGUOUS", + "attribute": "givenName", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "CONFIRMED", + "attribute": "sn", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "FOUND", + "attribute": "mail", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + "attribute": "description", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "LINK_ONLY", + "attribute": "accountStatus", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "MISSING", + "attribute": "telephoneNumber", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "attribute": "postalAddress", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "SOURCE_MISSING", + "attribute": "city", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + "attribute": "postalCode", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "UNASSIGNED", + "attribute": "country", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "UNQUALIFIED", + "attribute": "stateProvince", + "readOnly": false, + }, + { + "attribute": "roles", + "readOnly": false, + }, + { + "attribute": "manager", + "readOnly": false, + }, + { + "attribute": "authzRoles", + "readOnly": false, + }, + { + "attribute": "reports", + "readOnly": false, + }, + { + "attribute": "effectiveRoles", + "readOnly": false, + }, + { + "attribute": "effectiveAssignments", + "readOnly": false, + }, + { + "attribute": "lastSync", + "readOnly": false, + }, + { + "attribute": "kbaInfo", + "readOnly": false, + }, + { + "attribute": "preferences", + "readOnly": false, + }, + { + "attribute": "consentedMappings", + "readOnly": false, + }, + { + "attribute": "memberOfOrg", + "readOnly": false, + }, + { + "attribute": "adminOfOrg", + "readOnly": false, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, }, ], - "properties": [ + "actions": [], + "filter": "/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)", + "name": "owner-create-admins", + "path": "managed/user", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ { - "source": "authoritative", - "target": "_id", + "attribute": "name", + "readOnly": false, + }, + { + "attribute": "description", + "readOnly": false, + }, + { + "attribute": "owners", + "readOnly": true, + }, + { + "attribute": "admins", + "readOnly": true, + }, + { + "attribute": "members", + "readOnly": false, + }, + { + "attribute": "parent", + "readOnly": false, + }, + { + "attribute": "children", + "readOnly": false, + }, + { + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, }, ], - "source": "managed/alpha_application", - "sourceQuery": { - "_queryFilter": "(eq "" or eq "")", - }, - "syncAfter": [ - "managedBravo_user_managedBravo_user", + "actions": [], + "filter": "/adminIDs eq "{{_id}}" or /parentAdminIDs eq "{{_id}}"", + "name": "admin-view-update-delete-orgs", + "path": "managed/organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", ], - "target": "managed/bravo_application", - "targetQuery": { - "_queryFilter": "!(eq "")", - }, }, { - "_id": "sync/managedAlpha_user_managedBravo_user", - "consentRequired": true, - "displayName": "Test Mapping for Frodo", - "icon": null, - "name": "managedAlpha_user_managedBravo_user", - "policies": [ + "accessFlags": [ { - "action": "ASYNC", - "situation": "ABSENT", + "attribute": "name", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "ALL_GONE", + "attribute": "description", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "AMBIGUOUS", + "attribute": "owners", + "readOnly": true, }, { - "action": "ASYNC", - "situation": "CONFIRMED", + "attribute": "admins", + "readOnly": true, }, { - "action": "ASYNC", - "situation": "FOUND", + "attribute": "members", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + "attribute": "parent", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "LINK_ONLY", + "attribute": "children", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "MISSING", + "attribute": "parentIDs", + "readOnly": true, + }, + { + "attribute": "adminIDs", + "readOnly": true, + }, + { + "attribute": "parentAdminIDs", + "readOnly": true, + }, + { + "attribute": "ownerIDs", + "readOnly": true, + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, }, + ], + "actions": [], + "filter": "/parent pr", + "name": "admin-create-orgs", + "path": "managed/organization", + "permissions": [ + "CREATE", + ], + }, + { + "accessFlags": [ { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "attribute": "userName", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "SOURCE_MISSING", + "attribute": "password", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + "attribute": "givenName", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "UNASSIGNED", + "attribute": "sn", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "UNQUALIFIED", + "attribute": "mail", + "readOnly": false, }, - ], - "properties": [ { - "condition": { - "globals": {}, - "source": "console.log("Hello World!");", - "type": "text/javascript", - }, - "default": [ - "Default value string", - ], - "source": "accountStatus", - "target": "applications", - "transform": { - "globals": {}, - "source": "console.log("hello");", - "type": "text/javascript", - }, + "attribute": "description", + "readOnly": false, }, - ], - "source": "managed/alpha_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - ], - "target": "managed/bravo_user", - }, - { - "_id": "sync/managedBravo_user_managedAlpha_user", - "consentRequired": false, - "displayName": "Frodo test mapping", - "icon": null, - "name": "managedBravo_user_managedAlpha_user", - "policies": [ { - "action": "ASYNC", - "situation": "ABSENT", + "attribute": "accountStatus", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "ALL_GONE", + "attribute": "telephoneNumber", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "AMBIGUOUS", + "attribute": "postalAddress", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "CONFIRMED", + "attribute": "city", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "FOUND", + "attribute": "postalCode", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + "attribute": "country", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "LINK_ONLY", + "attribute": "stateProvince", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "MISSING", + "attribute": "roles", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "attribute": "manager", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "SOURCE_MISSING", + "attribute": "authzRoles", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + "attribute": "reports", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "UNASSIGNED", + "attribute": "effectiveRoles", + "readOnly": false, }, { - "action": "ASYNC", - "situation": "UNQUALIFIED", + "attribute": "effectiveAssignments", + "readOnly": false, }, - ], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - "managedAlpha_user_managedBravo_user", - ], - "target": "managed/alpha_user", - }, - { - "_id": "sync/AlphaUser2GoogleApps", - "consentRequired": false, - "correlationQuery": [ { - "expressionTree": { - "all": [ - "__NAME__", - ], - }, - "file": "ui/correlateTreeToQueryFilter.js", - "linkQualifier": "default", - "mapping": "AlphaUser2GoogleApps", - "type": "text/javascript", + "attribute": "lastSync", + "readOnly": false, }, - ], - "displayName": "AlphaUser2GoogleApps", - "enableSync": { - "$bool": "&{esv.gac.enable.mapping}", - }, - "icon": null, - "name": "AlphaUser2GoogleApps", - "onCreate": { - "globals": {}, - "source": "target.orgUnitPath = "/NewAccounts";", - "type": "text/javascript", - }, - "onUpdate": { - "globals": {}, - "source": "//testing1234 -target.givenName = oldTarget.givenName; -target.familyName = oldTarget.familyName; -target.__NAME__ = oldTarget.__NAME__;", - "type": "text/javascript", - }, - "policies": [ { - "action": "EXCEPTION", - "situation": "AMBIGUOUS", + "attribute": "kbaInfo", + "readOnly": false, }, { - "action": "UNLINK", - "situation": "SOURCE_MISSING", + "attribute": "preferences", + "readOnly": false, }, { - "action": { - "globals": {}, - "source": "// Timing Constants -var ATTEMPT = 6; // Number of attempts to find the Google user. -var SLEEP_TIME = 500; // Milliseconds between retries. -var SYSTEM_ENDPOINT = "system/GoogleApps/__ACCOUNT__"; -var MAPPING_NAME = "AlphaUser2GoogleApps"; -var GOOGLE_DOMAIN = identityServer.getProperty("esv.gac.domain"); -var googleEmail = source.userName + "@" + GOOGLE_DOMAIN; -var frUserGUID = source._id; -var resultingAction = "ASYNC"; - -// Get the Google GUID -var linkQueryParams = {'_queryFilter': 'firstId eq "' + frUserGUID + '" and linkType eq "' + MAPPING_NAME + '"'}; -var linkResults = openidm.query("repo/link/", linkQueryParams, null); -var googleGUID; - -if (linkResults.resultCount === 1) { - googleGUID = linkResults.result[0].secondId; -} - -var queryResults; // Resulting query from looking for the Google user. -var params = {'_queryFilter': '__UID__ eq "' + googleGUID + '"'}; - -for (var i = 1; i <= ATTEMPT; i++) { - queryResults = openidm.query(SYSTEM_ENDPOINT, params); - if (queryResults.result && queryResults.result.length > 0) { - logger.info("idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in " + i + " attempts. Query result: " + JSON.stringify(queryResults)); - resultingAction = "UPDATE"; - break; - } - java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again. -} - -if (!queryResults.result || queryResults.resultCount === 0) { - logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); - resultingAction = "UNLINK"; -} -resultingAction; -", - "type": "text/javascript", - }, - "situation": "MISSING", + "attribute": "consentedMappings", + "readOnly": false, }, { - "action": "EXCEPTION", - "situation": "FOUND_ALREADY_LINKED", + "attribute": "memberOfOrg", + "readOnly": false, }, { - "action": "IGNORE", - "situation": "UNQUALIFIED", + "attribute": "adminOfOrg", + "readOnly": true, }, { - "action": "IGNORE", - "situation": "UNASSIGNED", + "attribute": "ownerOfOrg", + "readOnly": true, }, { - "action": "UNLINK", - "situation": "LINK_ONLY", + "attribute": "memberOfOrgIDs", + "readOnly": true, }, + ], + "actions": [], + "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", + "name": "admin-view-update-delete-members", + "path": "managed/user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE", + ], + }, + { + "accessFlags": [ { - "action": "IGNORE", - "situation": "TARGET_IGNORED", + "attribute": "userName", + "readOnly": false, }, { - "action": "IGNORE", - "situation": "SOURCE_IGNORED", + "attribute": "password", + "readOnly": false, }, { - "action": "IGNORE", - "situation": "ALL_GONE", + "attribute": "givenName", + "readOnly": false, }, { - "action": "UPDATE", - "situation": "CONFIRMED", + "attribute": "sn", + "readOnly": false, }, { - "action": "LINK", - "situation": "FOUND", + "attribute": "mail", + "readOnly": false, }, { - "action": "CREATE", - "situation": "ABSENT", + "attribute": "description", + "readOnly": false, }, - ], - "properties": [ { - "condition": { - "globals": {}, - "source": "object.custom_password_encrypted != null", - "type": "text/javascript", - }, - "source": "custom_password_encrypted", - "target": "__PASSWORD__", - "transform": { - "globals": {}, - "source": "openidm.decrypt(source);", - "type": "text/javascript", - }, + "attribute": "accountStatus", + "readOnly": false, }, { - "source": "cn", - "target": "__NAME__", - "transform": { - "globals": {}, - "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", - "type": "text/javascript", - }, + "attribute": "telephoneNumber", + "readOnly": false, }, { - "source": "givenName", - "target": "givenName", + "attribute": "postalAddress", + "readOnly": false, }, { - "source": "", - "target": "familyName", - "transform": { - "globals": {}, - "source": "if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) { - source.sn + " (Student)" -} else { - source.sn -}", - "type": "text/javascript", - }, + "attribute": "city", + "readOnly": false, }, - ], - "queuedSync": { - "enabled": true, - "maxQueueSize": 20000, - "maxRetries": 5, - "pageSize": 100, - "pollingInterval": 1000, - "postRetryAction": "logged-ignore", - "retryDelay": 1000, - }, - "source": "managed/alpha_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - "managedAlpha_user_managedBravo_user", - "managedBravo_user_managedAlpha_user", - ], - "target": "system/GoogleApps/__ACCOUNT__", - "validSource": { - "globals": {}, - "source": "var isGoogleEligible = true; -//var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + " cn: " + source.cn + ") -"; -var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + ") -"; - -//Get Applicable userTypes (no Parent accounts) -if (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) { - isGoogleEligible = false; - logMsg = logMsg + " Account type not eligible."; -} - -//Make sure the account has a valid encrypted password. -if (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) { - isGoogleEligible = false; - logMsg = logMsg + " No encrypted password yet."; -} - -//Check that CN exists and has no space. -if (source.cn && source.cn.includes(' ')) { - isGoogleEligible = false; - logMsg = logMsg + " CN with a space is not allowed."; -} - -if (!isGoogleEligible) { - logMsg = logMsg + " Not sent to Google." - logger.info(logMsg); -} - -if (isGoogleEligible) { - logMsg = logMsg + " Sent to Google." - logger.info(logMsg); -} - -isGoogleEligible; -", - "type": "text/javascript", - }, - }, - ], - }, - "ui.context/admin": { - "_id": "ui.context/admin", - "defaultDir": "&{idm.install.dir}/ui/admin/default", - "enabled": true, - "extensionDir": "&{idm.install.dir}/ui/admin/extension", - "responseHeaders": { - "X-Frame-Options": "SAMEORIGIN", - }, - "urlContextRoot": "/admin", - }, - "ui.context/api": { - "_id": "ui.context/api", - "authEnabled": true, - "cacheEnabled": false, - "defaultDir": "&{idm.install.dir}/ui/api/default", - "enabled": true, - "extensionDir": "&{idm.install.dir}/ui/api/extension", - "urlContextRoot": "/api", - }, - "ui.context/enduser": { - "_id": "ui.context/enduser", - "defaultDir": "&{idm.install.dir}/ui/enduser", - "enabled": true, - "responseHeaders": { - "X-Frame-Options": "DENY", - }, - "urlContextRoot": "/", - }, - "ui.context/oauth": { - "_id": "ui.context/oauth", - "cacheEnabled": true, - "defaultDir": "&{idm.install.dir}/ui/oauth/default", - "enabled": true, - "extensionDir": "&{idm.install.dir}/ui/oauth/extension", - "urlContextRoot": "/oauthReturn", - }, - "ui/configuration": { - "_id": "ui/configuration", - "configuration": { - "defaultNotificationType": "info", - "forgotUsername": false, - "lang": "en", - "notificationTypes": { - "error": { - "iconPath": "images/notifications/error.png", - "name": "common.notification.types.error", - }, - "info": { - "iconPath": "images/notifications/info.png", - "name": "common.notification.types.info", - }, - "warning": { - "iconPath": "images/notifications/warning.png", - "name": "common.notification.types.warning", - }, - }, - "passwordReset": true, - "passwordResetLink": "", - "platformSettings": { - "adminOauthClient": "idmAdminClient", - "adminOauthClientScopes": "fr:idm:*", - "amUrl": "/am", - "loginUrl": "", - }, - "roles": { - "internal/role/openidm-admin": "ui-admin", - "internal/role/openidm-authorized": "ui-user", - }, - "selfRegistration": true, - }, - }, - "ui/dashboard": { - "_id": "ui/dashboard", - "adminDashboards": [ - { - "isDefault": true, - "name": "Quick Start", - "widgets": [ { - "cards": [ - { - "href": "#resource/managed/alpha_user/list/", - "icon": "fa-user", - "name": "Manage Users", - }, - { - "href": "#resource/managed/alpha_role/list/", - "icon": "fa-check-square-o", - "name": "Manage Roles", - }, - { - "href": "#connectors/add/", - "icon": "fa-database", - "name": "Add Connector", - }, - { - "href": "#mapping/add/", - "icon": "fa-map-marker", - "name": "Create Mapping", - }, - { - "href": "#managed/add/", - "icon": "fa-tablet", - "name": "Add Device", - }, - { - "href": "#settings/", - "icon": "fa-user", - "name": "Configure System Preferences", - }, - ], - "size": "large", - "type": "quickStart", + "attribute": "postalCode", + "readOnly": false, }, - ], - }, - { - "isDefault": false, - "name": "System Monitoring", - "widgets": [ { - "legendRange": { - "month": [ - 500, - 2500, - 5000, - ], - "week": [ - 10, - 30, - 90, - 270, - 810, - ], - "year": [ - 10000, - 40000, - 100000, - 250000, - ], - }, - "maxRange": "#24423c", - "minRange": "#b0d4cd", - "size": "large", - "type": "audit", + "attribute": "country", + "readOnly": false, }, { - "size": "large", - "type": "clusterStatus", + "attribute": "stateProvince", + "readOnly": false, }, { - "size": "large", - "type": "systemHealthFull", + "attribute": "roles", + "readOnly": false, }, { - "barchart": "false", - "size": "large", - "type": "lastRecon", + "attribute": "manager", + "readOnly": false, }, - ], - }, - { - "isDefault": false, - "name": "Resource Report", - "widgets": [ { - "selected": "activeUsers", - "size": "x-small", - "type": "counter", + "attribute": "authzRoles", + "readOnly": false, }, { - "selected": "rolesEnabled", - "size": "x-small", - "type": "counter", + "attribute": "reports", + "readOnly": false, }, { - "selected": "activeConnectors", - "size": "x-small", - "type": "counter", + "attribute": "effectiveRoles", + "readOnly": false, }, { - "size": "large", - "type": "resourceList", + "attribute": "effectiveAssignments", + "readOnly": false, }, - ], - }, - { - "isDefault": false, - "name": "Business Report", - "widgets": [ { - "graphType": "fa-pie-chart", - "providers": [ - "Username/Password", - ], - "size": "x-small", - "type": "signIns", - "widgetTitle": "Sign-Ins", + "attribute": "lastSync", + "readOnly": false, }, { - "graphType": "fa-bar-chart", - "size": "x-small", - "type": "passwordResets", - "widgetTitle": "Password Resets", + "attribute": "kbaInfo", + "readOnly": false, }, { - "graphType": "fa-line-chart", - "providers": [ - "Username/Password", - ], - "size": "x-small", - "type": "newRegistrations", - "widgetTitle": "New Registrations", + "attribute": "preferences", + "readOnly": false, }, { - "size": "x-small", - "timezone": { - "hours": "07", - "minutes": "00", - "negative": true, - }, - "type": "socialLogin", + "attribute": "consentedMappings", + "readOnly": false, }, { - "selected": "socialEnabled", - "size": "x-small", - "type": "counter", + "attribute": "memberOfOrg", + "readOnly": false, }, { - "selected": "manualRegistrations", - "size": "x-small", - "type": "counter", + "attribute": "adminOfOrg", + "readOnly": true, + }, + { + "attribute": "ownerOfOrg", + "readOnly": true, + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true, }, ], + "actions": [], + "filter": "/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)", + "name": "admin-create-members", + "path": "managed/user", + "permissions": [ + "CREATE", + ], }, ], - "dashboard": { - "widgets": [ - { - "size": "large", - "type": "Welcome", - }, - ], - }, }, - "ui/profile": { - "_id": "ui/profile", - "tabs": [ - { - "name": "personalInfoTab", - "view": "org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab", - }, - { - "name": "signInAndSecurity", - "view": "org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab", - }, - { - "name": "preference", - "view": "org/forgerock/openidm/ui/user/profile/PreferencesTab", - }, - { - "name": "trustedDevice", - "view": "org/forgerock/openidm/ui/user/profile/TrustedDevicesTab", - }, - { - "name": "oauthApplication", - "view": "org/forgerock/openidm/ui/user/profile/OauthApplicationsTab", - }, - { - "name": "privacyAndConsent", - "view": "org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab", - }, - { - "name": "sharing", - "view": "org/forgerock/openidm/ui/user/profile/uma/SharingTab", - }, + "process/access": { + "_id": "process/access", + "workflowAccess": [ { - "name": "auditHistory", - "view": "org/forgerock/openidm/ui/user/profile/uma/ActivityTab", + "propertiesCheck": { + "matches": ".*", + "property": "_id", + "requiresRole": "internal/role/openidm-authorized", + }, }, { - "name": "accountControls", - "view": "org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab", - }, - ], - }, - "ui/themeconfig": { - "_id": "ui/themeconfig", - "icon": "favicon.ico", - "path": "", - "settings": { - "footer": { - "mailto": "info@forgerock.com", - }, - "loginLogo": { - "alt": "ForgeRock", - "height": "104px", - "src": "images/login-logo-dark.png", - "title": "ForgeRock", - "width": "210px", - }, - "logo": { - "alt": "ForgeRock", - "src": "images/logo-horizontal-white.png", - "title": "ForgeRock", + "propertiesCheck": { + "matches": ".*", + "property": "_id", + "requiresRole": "internal/role/openidm-admin", + }, }, - }, - "stylesheets": [ - "css/bootstrap-3.4.1-custom.css", - "css/structure.css", - "css/theme.css", ], }, - "ui/themerealm": { - "_id": "ui/themerealm", - "realm": { - "/alpha": [ - { - "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", - "accountFooter": " + "provisioner.openicf/csvFileConnector": { + "_id": "provisioner.openicf/csvFileConnector", + "configurationProperties": { + "csvFile": "/home/trivir/Work/csv-file-connector/csvtest.csv", + "escapeCharacter": "\\", + "fieldDelimiter": ",", + "headerPassword": "password", + "headerUid": "uid", + "newlineString": " ", - "accountFooterEnabled": true, - "accountPageSections": { - "accountControls": { - "enabled": false, - }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, - }, - "consent": { - "enabled": false, - }, - "oauthApplications": { - "enabled": false, - }, - "personalInformation": { - "enabled": true, - }, - "preferences": { - "enabled": false, - }, - "social": { - "enabled": false, - }, - "trustedDevices": { - "enabled": true, - }, + "quoteCharacter": """, + "spaceReplacementString": "_", + "syncFileRetentionCount": "3", + }, + "connectorRef": { + "bundleName": "org.forgerock.openicf.connectors.csvfile-connector", + "bundleVersion": "1.5.20.28", + "connectorHostRef": "", + "connectorName": "org.forgerock.openicf.csvfile.CSVFileConnector", + "displayName": "CSV File Connector", + "systemType": "provisioner.openicf", + }, + "enabled": true, + "objectTypes": { + "__ACCOUNT__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ACCOUNT__", + "nativeType": "__ACCOUNT__", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#5E6D82", - "buttonRounded": "50", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": " -", - "journeyFooterEnabled": true, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyJustifiedContent": "
-

Uptime & Performance Benchmarking Made Easy

-
- -", - "journeyJustifiedContentEnabled": true, - "journeyLayout": "justified-right", - "journeyTheaterMode": true, - "linkActiveColor": "#007661", - "linkColor": "#009C80", - "linkedTrees": [], - "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoAltText": "Zardoz Logo", - "logoEnabled": true, - "logoHeight": "47", - "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoProfileAltText": "Zardaz Logo", - "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoProfileCollapsedAltText": "Zardaz Logo", - "logoProfileCollapsedHeight": "28", - "logoProfileHeight": "40", - "name": "Zardoz", - "pageTitle": "#23282e", - "primaryColor": "#009C80", - "primaryOffColor": "#007661", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#009C80", - "secondaryColor": "#69788b", - "textColor": "#ffffff", - }, - ], - "alpha": [ - { - "_id": "cd6c93e2-52e2-4340-9770-66a588343841", - "accountFooter": "", - "accountFooterEnabled": false, - "accountPageSections": { - "accountControls": { - "enabled": false, - }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, - }, - "consent": { - "enabled": false, - }, - "oauthApplications": { - "enabled": false, - }, - "personalInformation": { - "enabled": true, - }, - "preferences": { - "enabled": false, - }, - "social": { - "enabled": false, - }, - "trustedDevices": { - "enabled": true, - }, + "email": { + "nativeName": "email", + "nativeType": "string", + "type": "string", + }, + "firstName": { + "nativeName": "firstName", + "nativeType": "string", + "type": "string", + }, + "lastName": { + "nativeName": "lastName", + "nativeType": "string", + "type": "string", + }, + "name": { + "nativeName": "name", + "nativeType": "string", + "type": "string", }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#000000", - "buttonRounded": "0", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": "", - "journeyFooterEnabled": false, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": false, - "journeyLayout": "card", - "journeyTheaterMode": false, - "linkActiveColor": "#000000", - "linkColor": "#000000", - "linkedTrees": [], - "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", - "logoAltText": "Contrast", - "logoEnabled": true, - "logoHeight": "72", - "logoProfile": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", - "logoProfileAltText": "Contrast", - "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", - "logoProfileCollapsedAltText": "", - "logoProfileCollapsedHeight": "22", - "logoProfileHeight": "22", - "name": "Contrast", - "pageTitle": "#23282e", - "primaryColor": "#000000", - "primaryOffColor": "#000000", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#000000", - "profileMenuTextHighlightColor": "#455469", - "secondaryColor": "#69788b", - "textColor": "#ffffff", }, - { - "_id": "e47838b5-48c9-4dea-8a84-43f4b4ea8e04", - "accountCardBackgroundColor": "#ffffff", - "accountCardHeaderColor": "#23282e", - "accountCardInnerBorderColor": "#e7eef4", - "accountCardInputBackgroundColor": "#ffffff", - "accountCardInputBorderColor": "#c0c9d5", - "accountCardInputLabelColor": "#5e6d82", - "accountCardInputSelectColor": "#e4f4fd", - "accountCardInputSelectHoverColor": "#f6f8fa", - "accountCardInputTextColor": "#23282e", - "accountCardOuterBorderColor": "#e7eef4", - "accountCardShadow": 3, - "accountCardTabActiveBorderColor": "#109cf1", - "accountCardTabActiveColor": "#e4f4fd", - "accountCardTextColor": "#5e6d82", - "accountFooter": " + "type": "object", + }, + }, + "operationTimeout": { + "AUTHENTICATE": -1, + "CREATE": -1, + "DELETE": -1, + "GET": -1, + "RESOLVEUSERNAME": -1, + "SCHEMA": -1, + "SCRIPT_ON_CONNECTOR": -1, + "SCRIPT_ON_RESOURCE": -1, + "SEARCH": -1, + "SYNC": -1, + "TEST": -1, + "UPDATE": -1, + "VALIDATE": -1, + }, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, + }, + "syncFailureHandler": { + "maxRetries": 5, + "postRetryAction": "logged-ignore", + }, + }, + "provisioner.openicf/csvSampleConnector": { + "_id": "provisioner.openicf/csvSampleConnector", + "configurationProperties": { + "csvFile": "/home/trivir/Work/csv-file-connector/csvConnectorData.csv", + "escapeCharacter": "\\", + "fieldDelimiter": ",", + "headerPassword": "password", + "headerUid": "uid", + "newlineString": " ", - "accountFooterEnabled": true, - "accountFooterScriptTag": "", - "accountFooterScriptTagEnabled": false, - "accountNavigationBackgroundColor": "#ffffff", - "accountNavigationTextColor": "#455469", - "accountNavigationToggleBorderColor": "#e7eef4", - "accountPageSections": { - "accountControls": { - "enabled": false, - }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, + "quoteCharacter": """, + "spaceReplacementString": "_", + "syncFileRetentionCount": "3", + }, + "connectorRef": { + "bundleName": "org.forgerock.openicf.connectors.csvfile-connector", + "bundleVersion": "1.5.20.28", + "connectorHostRef": "", + "connectorName": "org.forgerock.openicf.csvfile.CSVFileConnector", + "displayName": "CSV File Connector", + "systemType": "provisioner.openicf", + }, + "enabled": true, + "objectTypes": { + "__ACCOUNT__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ACCOUNT__", + "nativeType": "__ACCOUNT__", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "description": { + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "email": { + "nativeName": "email", + "nativeType": "string", + "type": "string", + }, + "firstname": { + "nativeName": "firstname", + "nativeType": "string", + "type": "string", + }, + "lastname": { + "nativeName": "lastname", + "nativeType": "string", + "type": "string", + }, + "mobileTelephoneNumber": { + "nativeName": "mobileTelephoneNumber", + "nativeType": "string", + "type": "string", + }, + "roles": { + "nativeName": "roles", + "nativeType": "string", + "type": "string", + }, + "username": { + "nativeName": "username", + "nativeType": "string", + "type": "string", + }, + }, + "type": "object", + }, + }, + "operationTimeout": { + "AUTHENTICATE": -1, + "CREATE": -1, + "DELETE": -1, + "GET": -1, + "RESOLVEUSERNAME": -1, + "SCHEMA": -1, + "SCRIPT_ON_CONNECTOR": -1, + "SCRIPT_ON_RESOURCE": -1, + "SEARCH": -1, + "SYNC": -1, + "TEST": -1, + "UPDATE": -1, + "VALIDATE": -1, + }, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, + }, + }, + "repo.ds": { + "_id": "repo.ds", + "commands": { + "delete-mapping-links": { + "_queryFilter": "/linkType eq "\${mapping}"", + "operation": "DELETE", + }, + "delete-target-ids-for-recon": { + "_queryFilter": "/reconId eq "\${reconId}"", + "operation": "DELETE", + }, + }, + "embedded": false, + "ldapConnectionFactories": { + "bind": { + "connectionPoolSize": 50, + "connectionSecurity": "startTLS", + "heartBeatIntervalSeconds": 60, + "heartBeatTimeoutMilliSeconds": 10000, + "primaryLdapServers": [ + { + "hostname": "opendj-frodo-dev.classic.com", + "port": 2389, + }, + ], + "secondaryLdapServers": [], + }, + "root": { + "authentication": { + "simple": { + "bindDn": "uid=admin", + "bindPassword": { + "$crypto": { + "type": "x-simple-encryption", + "value": { + "cipher": "AES/CBC/PKCS5Padding", + "data": "lJ/B6T9e9CDKHCN8TxkD4g==", + "iv": "EdrerzwEUUkHG582cLDw5w==", + "keySize": 32, + "mac": "Aty9fXUtl4pexGlHOc+CBg==", + "purpose": "idm.config.encryption", + "salt": "BITSKlnPeT5klcuEZbngzw==", + "stableId": "openidm-sym-default", }, }, }, - "consent": { - "enabled": false, - }, - "oauthApplications": { - "enabled": false, - }, - "personalInformation": { - "enabled": true, - }, - "preferences": { - "enabled": false, + }, + }, + "inheritFrom": "bind", + }, + }, + "maxConnectionAttempts": 5, + "resourceMapping": { + "defaultMapping": { + "dnTemplate": "ou=generic,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "explicitMapping": { + "clusteredrecontargetids": { + "dnTemplate": "ou=clusteredrecontargetids,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-recon-clusteredTargetIds", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", }, - "social": { - "enabled": false, + "reconId": { + "ldapAttribute": "fr-idm-recon-id", + "type": "simple", }, - "trustedDevices": { - "enabled": true, + "targetIds": { + "ldapAttribute": "fr-idm-recon-targetIds", + "type": "json", }, }, - "accountTableRowHoverColor": "#f6f8fa", - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#5E6D82", - "boldLinks": false, - "buttonRounded": "50", - "dangerColor": "#f7685b", - "favicon": "", - "fontFamily": "Open Sans", - "isDefault": false, - "journeyA11yAddFallbackErrorHeading": true, - "journeyCardBackgroundColor": "#ffffff", - "journeyCardBorderRadius": 4, - "journeyCardHeaderBackgroundColor": "#ffffff", - "journeyCardShadow": 3, - "journeyCardTextColor": "#5e6d82", - "journeyCardTitleColor": "#23282e", - "journeyFloatingLabels": true, - "journeyFocusElement": "header", - "journeyFocusFirstFocusableItemEnabled": false, - "journeyFooter": " -", - "journeyFooterEnabled": true, - "journeyFooterScriptTag": "", - "journeyFooterScriptTagEnabled": false, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyHeaderSkipLinkEnabled": false, - "journeyInputBackgroundColor": "#ffffff", - "journeyInputBorderColor": "#c0c9d5", - "journeyInputLabelColor": "#5e6d82", - "journeyInputSelectColor": "#e4f4fd", - "journeyInputSelectHoverColor": "#f6f8fa", - "journeyInputTextColor": "#23282e", - "journeyJustifiedContent": "
-

Uptime & Performance Benchmarking Made Easy

-
- -", - "journeyJustifiedContentEnabled": true, - "journeyJustifiedContentMobileViewEnabled": false, - "journeyLayout": "justified-right", - "journeyRememberMeEnabled": false, - "journeyRememberMeLabel": "", - "journeySignInButtonPosition": "flex-column", - "journeyTheaterMode": true, - "linkActiveColor": "#007661", - "linkColor": "#009C80", - "linkedTrees": [], - "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoAltText": "Zardoz Logo", - "logoEnabled": true, - "logoHeight": "47", - "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoProfileAltText": "Zardaz Logo", - "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoProfileCollapsedAltText": "Zardaz Logo", - "logoProfileCollapsedHeight": "28", - "logoProfileHeight": "40", - "name": "Copy of Zardoz", - "pageTitle": "#23282e", - "primaryColor": "#009C80", - "primaryOffColor": "#007661", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#009C80", - "secondaryColor": "#69788b", - "successColor": "#2ed47a", - "switchBackgroundColor": "#c0c9d5", - "textColor": "#ffffff", - "topBarBackgroundColor": "#ffffff", - "topBarBorderColor": "#e7eef4", - "topBarHeaderColor": "#23282e", - "topBarTextColor": "#69788b", }, - { - "_id": "00203891-dde0-4114-b27a-219ae0b43a61", - "accountFooter": " -", - "accountFooterEnabled": true, - "accountPageSections": { - "accountControls": { - "enabled": false, - }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + "dsconfig/attributeValue": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-attribute-value-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "consent": { - "enabled": false, + "checkSubstrings": { + "ldapAttribute": "ds-cfg-check-substrings", + "type": "simple", }, - "oauthApplications": { - "enabled": false, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", }, - "personalInformation": { - "enabled": true, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", }, - "preferences": { - "enabled": false, + "matchAttribute": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-match-attribute", + "type": "simple", }, - "social": { - "enabled": false, + "minSubstringLength": { + "ldapAttribute": "ds-cfg-min-substring-length", + "type": "simple", }, - "trustedDevices": { - "enabled": true, + "testReversedPassword": { + "isRequired": true, + "ldapAttribute": "ds-cfg-test-reversed-password", + "type": "simple", }, }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#5E6D82", - "buttonRounded": "50", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": " - -", - "journeyFooterEnabled": true, - "journeyHeader": "
- -
-", - "journeyHeaderEnabled": true, - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": false, - "journeyLayout": "card", - "journeyTheaterMode": false, - "linkActiveColor": "#C60819", - "linkColor": "#EB0A1E", - "linkedTrees": [], - "logo": "", - "logoAltText": "", - "logoEnabled": true, - "logoHeight": "40", - "logoProfile": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg", - "logoProfileAltText": "Highlander", - "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg", - "logoProfileCollapsedAltText": "Highlander", - "logoProfileCollapsedHeight": "28", - "logoProfileHeight": "28", - "name": "Highlander", - "pageTitle": "#23282e", - "primaryColor": "#EB0A1E", - "primaryOffColor": "#C60819", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#EB0A1E", - "secondaryColor": "#69788b", - "textColor": "#ffffff", }, - { - "_id": "63e19668-909f-479e-83d7-be7a01cd8187", - "accountCardBackgroundColor": "#ffffff", - "accountCardHeaderColor": "#23282e", - "accountCardInnerBorderColor": "#e7eef4", - "accountCardInputBackgroundColor": "#ffffff", - "accountCardInputBorderColor": "#c0c9d5", - "accountCardInputLabelColor": "#5e6d82", - "accountCardInputSelectColor": "#e4f4fd", - "accountCardInputTextColor": "#23282e", - "accountCardOuterBorderColor": "#e7eef4", - "accountCardShadow": 3, - "accountCardTabActiveBorderColor": "#109cf1", - "accountCardTabActiveColor": "#e4f4fd", - "accountCardTextColor": "#5e6d82", - "accountFooter": "", - "accountFooterEnabled": false, - "accountNavigationBackgroundColor": "#ffffff", - "accountNavigationTextColor": "#455469", - "accountNavigationToggleBorderColor": "#e7eef4", - "accountPageSections": { - "accountControls": { - "enabled": false, + "dsconfig/characterSet": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-character-set-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "allowUnclassifiedCharacters": { + "isRequired": true, + "ldapAttribute": "ds-cfg-allow-unclassified-characters", + "type": "simple", + }, + "characterSet": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-character-set", + "type": "simple", }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", }, - "consent": { - "enabled": false, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", }, - "oauthApplications": { - "enabled": false, + "minCharacterSets": { + "ldapAttribute": "ds-cfg-min-character-sets", + "type": "simple", }, - "personalInformation": { - "enabled": true, + }, + }, + "dsconfig/dictionary": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-dictionary-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "preferences": { - "enabled": true, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", }, - "social": { - "enabled": false, + "checkSubstrings": { + "ldapAttribute": "ds-cfg-check-substrings", + "type": "simple", }, - "trustedDevices": { - "enabled": true, + "dictionaryFile": { + "isRequired": true, + "ldapAttribute": "ds-cfg-dictionary-file", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minSubstringLength": { + "ldapAttribute": "ds-cfg-min-substring-length", + "type": "simple", + }, + "testReversedPassword": { + "isRequired": true, + "ldapAttribute": "ds-cfg-test-reversed-password", + "type": "simple", }, }, - "accountTableRowHoverColor": "#f6f8fa", - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#000000", - "boldLinks": false, - "buttonRounded": "0", - "dangerColor": "#f7685b", - "favicon": "", - "fontFamily": "Open Sans", - "isDefault": false, - "journeyCardBackgroundColor": "#ffffff", - "journeyCardShadow": 3, - "journeyCardTextColor": "#5e6d82", - "journeyCardTitleColor": "#23282e", - "journeyFooter": "", - "journeyFooterEnabled": false, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyInputBackgroundColor": "#ffffff", - "journeyInputBorderColor": "#c0c9d5", - "journeyInputLabelColor": "#5e6d82", - "journeyInputSelectColor": "#e4f4fd", - "journeyInputTextColor": "#23282e", - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": false, - "journeyLayout": "card", - "journeyTheaterMode": false, - "linkActiveColor": "#000000", - "linkColor": "#000000", - "linkedTrees": [ - "FrodoTest", - "AA-FrodoTest", + }, + "dsconfig/lengthBased": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-length-based-password-validator", ], - "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", - "logoAltText": "Contrast", - "logoEnabled": false, - "logoHeight": "72", - "logoProfile": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", - "logoProfileAltText": "Contrast", - "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", - "logoProfileCollapsedAltText": "", - "logoProfileCollapsedHeight": "22", - "logoProfileHeight": "22", - "name": "NoAccess", - "pageTitle": "#23282e", - "primaryColor": "#000000", - "primaryOffColor": "#000000", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#000000", - "profileMenuTextHighlightColor": "#455469", - "secondaryColor": "#69788b", - "switchBackgroundColor": "#c0c9d5", - "textColor": "#ffffff", - "topBarBackgroundColor": "#ffffff", - "topBarBorderColor": "#e7eef4", - "topBarHeaderColor": "#23282e", - "topBarTextColor": "#69788b", + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "maxPasswordLength": { + "ldapAttribute": "ds-cfg-max-password-length", + "type": "simple", + }, + "minPasswordLength": { + "ldapAttribute": "ds-cfg-min-password-length", + "type": "simple", + }, + }, }, - { - "_id": "b82755e8-fe9a-4d27-b66b-45e37ae12345", - "accountFooter": " -", - "accountFooterEnabled": true, - "accountPageSections": { - "accountControls": { - "enabled": false, + "dsconfig/passwordPolicies": { + "dnTemplate": "cn=Password Policies,cn=config", + "objectClasses": [ + "ds-cfg-password-policy", + "ds-cfg-authentication-policy", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + "defaultPasswordStorageScheme": { + "isMultiValued": true, + "isRequired": true, + "ldapAttribute": "ds-cfg-default-password-storage-scheme", + "type": "simple", }, - "consent": { - "enabled": false, + "maxPasswordAge": { + "ldapAttribute": "ds-cfg-max-password-age", + "type": "simple", }, - "oauthApplications": { - "enabled": false, + "passwordAttribute": { + "isRequired": true, + "ldapAttribute": "ds-cfg-password-attribute", + "type": "simple", }, - "personalInformation": { - "enabled": true, + "passwordHistoryCount": { + "ldapAttribute": "ds-cfg-password-history-count", + "type": "simple", }, - "preferences": { - "enabled": false, + "validator": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-password-validator", + "type": "simple", }, - "social": { - "enabled": false, + }, + }, + "dsconfig/repeatedCharacters": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-repeated-characters-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "trustedDevices": { - "enabled": true, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "maxConsecutiveLength": { + "isRequired": true, + "ldapAttribute": "ds-cfg-max-consecutive-length", + "type": "simple", + }, + }, + }, + "dsconfig/similarityBased": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-similarity-based-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minPasswordDifference": { + "isRequired": true, + "ldapAttribute": "ds-cfg-min-password-difference", + "type": "simple", + }, + }, + }, + "dsconfig/uniqueCharacters": { + "dnTemplate": "cn=Password Validators,cn=config", + "objectClasses": [ + "ds-cfg-password-validator", + "ds-cfg-unique-characters-password-validator", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", + }, + "caseSensitiveValidation": { + "isRequired": true, + "ldapAttribute": "ds-cfg-case-sensitive-validation", + "type": "simple", + }, + "enabled": { + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", + }, + "javaClass": { + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "minUniqueCharacters": { + "isRequired": true, + "ldapAttribute": "ds-cfg-min-unique-characters", + "type": "simple", }, }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#5E6D82", - "buttonRounded": "50", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": " -", - "journeyFooterEnabled": true, - "journeyHeader": "
- -
-", - "journeyHeaderEnabled": true, - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": true, - "journeyLayout": "justified-right", - "journeyTheaterMode": false, - "linkActiveColor": "#49871E", - "linkColor": "#5AA625", - "linkedTrees": [], - "logo": "", - "logoAltText": "", - "logoEnabled": true, - "logoHeight": "40", - "logoProfile": "data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", - "logoProfileAltText": "RobRoy", - "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", - "logoProfileCollapsedAltText": "RobRoy", - "logoProfileCollapsedHeight": "28", - "logoProfileHeight": "28", - "name": "Robroy", - "pageTitle": "#23282e", - "primaryColor": "#5AA625", - "primaryOffColor": "#49871E", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#5AA625", - "secondaryColor": "#69788b", - "textColor": "#ffffff", }, - { - "_id": "86ce2f64-586d-44fe-8593-b12a85aac68d", - "accountFooter": "", - "accountFooterEnabled": false, - "accountPageSections": { - "accountControls": { - "enabled": false, + "dsconfig/userDefinedVirtualAttribute": { + "dnTemplate": "cn=Virtual Attributes,cn=config", + "objectClasses": [ + "ds-cfg-user-defined-virtual-attribute", + "ds-cfg-virtual-attribute", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + "attributeType": { + "isRequired": true, + "ldapAttribute": "ds-cfg-attribute-type", + "type": "simple", }, - "consent": { - "enabled": false, + "baseDn": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-base-dn", + "type": "simple", }, - "oauthApplications": { - "enabled": false, + "conflictBehavior": { + "ldapAttribute": "ds-cfg-conflict-behavior", + "type": "simple", }, - "personalInformation": { - "enabled": true, + "enabled": { + "isRequired": true, + "ldapAttribute": "ds-cfg-enabled", + "type": "simple", }, - "preferences": { - "enabled": false, + "filter": { + "isMultiValued": true, + "ldapAttribute": "ds-cfg-filter", + "type": "simple", }, - "social": { - "enabled": false, + "groupDn": { + "ldapAttribute": "ds-cfg-group-dn", + "type": "simple", }, - "trustedDevices": { - "enabled": true, + "javaClass": { + "isRequired": true, + "ldapAttribute": "ds-cfg-java-class", + "type": "simple", + }, + "scope": { + "ldapAttribute": "ds-cfg-scope", + "type": "simple", + }, + "value": { + "isMultiValued": true, + "isRequired": true, + "ldapAttribute": "ds-cfg-value", + "type": "simple", }, }, - "backgroundColor": "#324054", - "backgroundImage": "", - "bodyText": "#23282e", - "buttonRounded": 5, - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": true, - "journeyFooter": "", - "journeyFooterEnabled": false, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": false, - "journeyLayout": "card", - "journeyTheaterMode": false, - "linkActiveColor": "#0c85cf", - "linkColor": "#109cf1", - "linkedTrees": [], - "logo": "", - "logoAltText": "", - "logoHeight": "40", - "logoProfile": "", - "logoProfileAltText": "", - "logoProfileCollapsed": "", - "logoProfileCollapsedAltText": "", - "logoProfileCollapsedHeight": "40", - "logoProfileHeight": "40", - "name": "Starter Theme", - "pageTitle": "#23282e", - "primaryColor": "#324054", - "primaryOffColor": "#242E3C", - "profileBackgroundColor": "#f6f8fa", - "profileMenuHighlightColor": "#f3f5f8", - "profileMenuHoverColor": "#324054", - "profileMenuHoverTextColor": "#ffffff", - "profileMenuTextHighlightColor": "#455469", - "secondaryColor": "#69788b", - "textColor": "#ffffff", }, - { - "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", - "accountFooter": " -", - "accountFooterEnabled": true, - "accountPageSections": { - "accountControls": { - "enabled": false, + "internal/role": { + "dnTemplate": "ou=roles,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "fr-idm-internal-role", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "cn", + "type": "simple", + "writability": "createOnly", }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + "authzMembers": { + "isMultiValued": true, + "propertyName": "authzRoles", + "resourcePath": "managed/user", + "type": "reverseReference", }, - "consent": { - "enabled": false, + "condition": { + "ldapAttribute": "fr-idm-condition", + "type": "simple", }, - "oauthApplications": { - "enabled": false, + "description": { + "ldapAttribute": "description", + "type": "simple", }, - "personalInformation": { - "enabled": true, + "name": { + "ldapAttribute": "fr-idm-name", + "type": "simple", }, - "preferences": { - "enabled": false, + "privileges": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-privilege", + "type": "json", }, - "social": { - "enabled": false, + "temporalConstraints": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-temporal-constraints", + "type": "json", }, - "trustedDevices": { - "enabled": true, + }, + }, + "internal/user": { + "dnTemplate": "ou=users,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-internal-user", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "password": { + "ldapAttribute": "fr-idm-password", + "type": "json", }, }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#5E6D82", - "buttonRounded": "50", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": " -", - "journeyFooterEnabled": true, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyJustifiedContent": "
-

Uptime & Performance Benchmarking Made Easy

-
- -", - "journeyJustifiedContentEnabled": true, - "journeyLayout": "justified-right", - "journeyTheaterMode": true, - "linkActiveColor": "#007661", - "linkColor": "#009C80", - "linkedTrees": [], - "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoAltText": "Zardoz Logo", - "logoEnabled": true, - "logoHeight": "47", - "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoProfileAltText": "Zardaz Logo", - "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoProfileCollapsedAltText": "Zardaz Logo", - "logoProfileCollapsedHeight": "28", - "logoProfileHeight": "40", - "name": "Zardoz", - "pageTitle": "#23282e", - "primaryColor": "#009C80", - "primaryOffColor": "#007661", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#009C80", - "secondaryColor": "#69788b", - "textColor": "#ffffff", }, - ], - "bravo": [ - { - "_id": "00203891-dde0-4114-b27a-219ae0b43a61", - "accountFooter": " -", - "accountFooterEnabled": true, - "accountPageSections": { - "accountControls": { - "enabled": false, + "link": { + "dnTemplate": "ou=links,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-link", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, + "firstId": { + "ldapAttribute": "fr-idm-link-firstId", + "type": "simple", + }, + "linkQualifier": { + "ldapAttribute": "fr-idm-link-qualifier", + "type": "simple", + }, + "linkType": { + "ldapAttribute": "fr-idm-link-type", + "type": "simple", + }, + "secondId": { + "ldapAttribute": "fr-idm-link-secondId", + "type": "simple", + }, + }, + }, + "locks": { + "dnTemplate": "ou=locks,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-lock", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", + }, + "nodeId": { + "ldapAttribute": "fr-idm-lock-nodeid", + "type": "simple", + }, + }, + }, + "recon/assoc": { + "dnTemplate": "ou=assoc,ou=recon,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "namingStrategy": { + "dnAttribute": "fr-idm-reconassoc-reconid", + "type": "clientDnNaming", + }, + "objectClasses": [ + "fr-idm-reconassoc", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "fr-idm-reconassoc-reconid", + "type": "simple", + }, + "finishTime": { + "ldapAttribute": "fr-idm-reconassoc-finishtime", + "type": "simple", + }, + "isAnalysis": { + "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-reconassoc-mapping", + "type": "simple", + }, + "sourceResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "type": "simple", + }, + "targetResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "type": "simple", + }, + }, + "subResources": { + "entry": { + "namingStrategy": { + "dnAttribute": "uid", + "type": "clientDnNaming", }, + "resource": "recon-assoc-entry", + "type": "collection", + }, + }, + }, + "recon/assoc/entry": { + "objectClasses": [ + "uidObject", + "fr-idm-reconassocentry", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + }, + "action": { + "ldapAttribute": "fr-idm-reconassocentry-action", + "type": "simple", + }, + "ambiguousTargetObjectIds": { + "ldapAttribute": "fr-idm-reconassocentry-ambiguoustargetobjectids", + "type": "simple", + }, + "exception": { + "ldapAttribute": "fr-idm-reconassocentry-exception", + "type": "simple", + }, + "isAnalysis": { + "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "type": "simple", + }, + "linkQualifier": { + "ldapAttribute": "fr-idm-reconassocentry-linkqualifier", + "type": "simple", + }, + "mapping": { + "ldapAttribute": "fr-idm-reconassoc-mapping", + "type": "simple", + }, + "message": { + "ldapAttribute": "fr-idm-reconassocentry-message", + "type": "simple", + }, + "messageDetail": { + "ldapAttribute": "fr-idm-reconassocentry-messagedetail", + "type": "simple", }, - "consent": { - "enabled": false, + "phase": { + "ldapAttribute": "fr-idm-reconassocentry-phase", + "type": "simple", }, - "oauthApplications": { - "enabled": false, + "reconId": { + "ldapAttribute": "fr-idm-reconassocentry-reconid", + "type": "simple", }, - "personalInformation": { - "enabled": true, + "situation": { + "ldapAttribute": "fr-idm-reconassocentry-situation", + "type": "simple", }, - "preferences": { - "enabled": false, + "sourceObjectId": { + "ldapAttribute": "fr-idm-reconassocentry-sourceObjectId", + "type": "simple", }, - "social": { - "enabled": false, + "sourceResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "type": "simple", }, - "trustedDevices": { - "enabled": true, + "status": { + "ldapAttribute": "fr-idm-reconassocentry-status", + "type": "simple", + }, + "targetObjectId": { + "ldapAttribute": "fr-idm-reconassocentry-targetObjectId", + "type": "simple", + }, + "targetResourceCollection": { + "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "type": "simple", }, }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#5E6D82", - "buttonRounded": "50", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": " - -", - "journeyFooterEnabled": true, - "journeyHeader": "
- -
-", - "journeyHeaderEnabled": true, - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": false, - "journeyLayout": "card", - "journeyTheaterMode": false, - "linkActiveColor": "#C60819", - "linkColor": "#EB0A1E", - "linkedTrees": [], - "logo": "", - "logoAltText": "", - "logoEnabled": true, - "logoHeight": "40", - "logoProfile": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg", - "logoProfileAltText": "Highlander", - "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg", - "logoProfileCollapsedAltText": "Highlander", - "logoProfileCollapsedHeight": "28", - "logoProfileHeight": "28", - "name": "Highlander", - "pageTitle": "#23282e", - "primaryColor": "#EB0A1E", - "primaryOffColor": "#C60819", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#EB0A1E", - "secondaryColor": "#69788b", - "textColor": "#ffffff", + "resourceName": "recon-assoc-entry", + "subResourceRouting": [ + { + "prefix": "entry", + "template": "recon/assoc/{reconId}/entry", + }, + ], }, - { - "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", - "accountFooter": " -", - "accountFooterEnabled": true, - "accountPageSections": { - "accountControls": { - "enabled": false, + "sync/queue": { + "dnTemplate": "ou=queue,ou=sync,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "objectClasses": [ + "uidObject", + "fr-idm-syncqueue", + ], + "properties": { + "_id": { + "isRequired": true, + "ldapAttribute": "uid", + "type": "simple", + "writability": "createOnly", }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + "context": { + "ldapAttribute": "fr-idm-syncqueue-context", + "type": "json", }, - "consent": { - "enabled": false, + "createDate": { + "ldapAttribute": "fr-idm-syncqueue-createdate", + "type": "simple", }, - "oauthApplications": { - "enabled": false, + "mapping": { + "ldapAttribute": "fr-idm-syncqueue-mapping", + "type": "simple", }, - "personalInformation": { - "enabled": true, + "newObject": { + "ldapAttribute": "fr-idm-syncqueue-newobject", + "type": "json", }, - "preferences": { - "enabled": false, + "nodeId": { + "ldapAttribute": "fr-idm-syncqueue-nodeid", + "type": "simple", }, - "social": { - "enabled": false, + "objectRev": { + "ldapAttribute": "fr-idm-syncqueue-objectRev", + "type": "simple", }, - "trustedDevices": { - "enabled": true, + "oldObject": { + "ldapAttribute": "fr-idm-syncqueue-oldobject", + "type": "json", + }, + "resourceCollection": { + "ldapAttribute": "fr-idm-syncqueue-resourcecollection", + "type": "simple", + }, + "resourceId": { + "ldapAttribute": "fr-idm-syncqueue-resourceid", + "type": "simple", + }, + "state": { + "ldapAttribute": "fr-idm-syncqueue-state", + "type": "simple", + }, + "syncAction": { + "ldapAttribute": "fr-idm-syncqueue-syncaction", + "type": "simple", }, }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#5E6D82", - "buttonRounded": "50", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": " -", - "journeyFooterEnabled": true, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyJustifiedContent": "
-

Uptime & Performance Benchmarking Made Easy

-
- -", - "journeyJustifiedContentEnabled": true, - "journeyLayout": "justified-right", - "journeyTheaterMode": true, - "linkActiveColor": "#007661", - "linkColor": "#009C80", - "linkedTrees": [], - "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoAltText": "Zardoz Logo", - "logoEnabled": true, - "logoHeight": "47", - "logoProfile": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoProfileAltText": "Zardaz Logo", - "logoProfileCollapsed": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoProfileCollapsedAltText": "Zardaz Logo", - "logoProfileCollapsedHeight": "28", - "logoProfileHeight": "40", - "name": "Zardoz", - "pageTitle": "#23282e", - "primaryColor": "#009C80", - "primaryOffColor": "#007661", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#009C80", - "secondaryColor": "#69788b", - "textColor": "#ffffff", }, - { - "_id": "86ce2f64-586d-44fe-8593-b12a85aac68d", - "accountFooter": "", - "accountFooterEnabled": false, - "accountPageSections": { - "accountControls": { - "enabled": false, + }, + "genericMapping": { + "cluster/*": { + "dnTemplate": "ou=cluster,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-cluster-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchClusterObject", + "objectClasses": [ + "uidObject", + "fr-idm-cluster-obj", + ], + }, + "config": { + "dnTemplate": "ou=config,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "file": { + "dnTemplate": "ou=file,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "import": { + "dnTemplate": "ou=import,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "import/*": { + "dnTemplate": "ou=import,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "internal/notification": { + "dnTemplate": "ou=notification,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-notification-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-notification", + ], + "properties": { + "target": { + "propertyName": "_notifications", + "resourcePath": "managed/user", + "type": "reverseReference", }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + }, + }, + "internal/usermeta": { + "dnTemplate": "ou=usermeta,ou=internal,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj", + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/user", + "type": "reverseReference", }, - "consent": { - "enabled": false, + }, + }, + "jsonstorage": { + "dnTemplate": "ou=jsonstorage,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "managed/*": { + "dnTemplate": "ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "managed/assignment": { + "dnTemplate": "ou=assignment,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-assignment-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-assignment", + ], + "properties": { + "condition": { + "ldapAttribute": "fr-idm-assignment-condition", + "type": "simple", }, - "oauthApplications": { - "enabled": false, + "members": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/user", + "type": "reverseReference", }, - "personalInformation": { - "enabled": true, + "roles": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/role", + "type": "reverseReference", }, - "preferences": { - "enabled": false, + }, + }, + "managed/organization": { + "dnTemplate": "ou=organization,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + ], + "properties": { + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/organization", + "type": "reverseReference", + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple", + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", + }, + }, + }, + "managed/role": { + "dnTemplate": "ou=role,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role", + ], + "properties": { + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-assignments", + "primaryKey": "uid", + "resourcePath": "managed/assignment", + "type": "reference", + }, + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/user", + "type": "reverseReference", + }, + }, + }, + "managed/user": { + "dnTemplate": "ou=user,ou=managed,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-managed-user-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedUser", + "objectClasses": [ + "uidObject", + "fr-idm-managed-user", + ], + "properties": { + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "internal/usermeta", + "type": "reference", + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference", }, - "social": { - "enabled": false, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", }, - "trustedDevices": { - "enabled": true, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-assignment-member", + "primaryKey": "uid", + "resourcePath": "managed/assignment", + "type": "reference", }, - }, - "backgroundColor": "#324054", - "backgroundImage": "", - "bodyText": "#23282e", - "buttonRounded": 5, - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": true, - "journeyFooter": "", - "journeyFooterEnabled": false, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": false, - "journeyLayout": "card", - "journeyTheaterMode": false, - "linkActiveColor": "#0c85cf", - "linkColor": "#109cf1", - "linkedTrees": [], - "logo": "", - "logoAltText": "", - "logoHeight": "40", - "logoProfile": "", - "logoProfileAltText": "", - "logoProfileCollapsed": "", - "logoProfileCollapsedAltText": "", - "logoProfileCollapsedHeight": "40", - "logoProfileHeight": "40", - "name": "Starter Theme", - "pageTitle": "#23282e", - "primaryColor": "#324054", - "primaryOffColor": "#242E3C", - "profileBackgroundColor": "#f6f8fa", - "profileMenuHighlightColor": "#f3f5f8", - "profileMenuHoverColor": "#324054", - "profileMenuHoverTextColor": "#ffffff", - "profileMenuTextHighlightColor": "#455469", - "secondaryColor": "#69788b", - "textColor": "#ffffff", - }, - { - "_id": "b82755e8-fe9a-4d27-b66b-45e37ae12345", - "accountFooter": " -", - "accountFooterEnabled": true, - "accountPageSections": { - "accountControls": { - "enabled": false, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/user", + "type": "reference", }, - "consent": { - "enabled": false, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", }, - "oauthApplications": { - "enabled": false, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/organization", + "type": "reference", }, - "personalInformation": { - "enabled": true, + "passwordExpirationTime": { + "ldapAttribute": "pwdExpirationTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", }, - "preferences": { - "enabled": false, + "passwordLastChangedTime": { + "ldapAttribute": "pwdChangedTime", + "type": "simple", + "writability": "readOnlyDiscardWrites", }, - "social": { - "enabled": false, + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/user", + "type": "reverseReference", }, - "trustedDevices": { - "enabled": true, + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/role", + "type": "reference", }, }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#5E6D82", - "buttonRounded": "50", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": " + }, + "reconprogressstate": { + "dnTemplate": "ou=reconprogressstate,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "relationships": { + "dnTemplate": "ou=relationships,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + "jsonAttribute": "fr-idm-relationship-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchRelationship", + "objectClasses": [ + "uidObject", + "fr-idm-relationship", + ], + }, + "scheduler": { + "dnTemplate": "ou=scheduler,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "scheduler/*": { + "dnTemplate": "ou=scheduler,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "ui/*": { + "dnTemplate": "ou=ui,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + "updates": { + "dnTemplate": "ou=updates,dc=openidm,dc=opendj-frodo-dev,dc=classic,dc=com", + }, + }, + }, + "rest2LdapOptions": { + "mvccAttribute": "etag", + "readOnUpdatePolicy": "controls", + "returnNullForMissingProperties": true, + "useMvcc": true, + "usePermissiveModify": true, + "useSubtreeDelete": false, + }, + "security": { + "fileBasedTrustManagerFile": "&{idm.install.dir}/security/truststore", + "fileBasedTrustManagerPasswordFile": "&{idm.install.dir}/security/storepass", + "fileBasedTrustManagerType": "JKS", + "trustManager": "file", + }, + }, + "repo.init": { + "_id": "repo.init", + "insert": { + "internal/role": [ + { + "description": "Administrative access", + "id": "openidm-admin", + "name": "openidm-admin", + }, + { + "description": "Basic minimum user", + "id": "openidm-authorized", + "name": "openidm-authorized", + }, + { + "description": "Anonymous access", + "id": "openidm-reg", + "name": "openidm-reg", + }, + { + "description": "Authenticated via certificate", + "id": "openidm-cert", + "name": "openidm-cert", + }, + { + "description": "Allowed to reassign workflow tasks", + "id": "openidm-tasks-manager", + "name": "openidm-tasks-manager", + }, + { + "description": "Platform provisioning access", + "id": "platform-provisioning", + "name": "platform-provisioning", + }, + ], + "internal/user": [ + { + "id": "openidm-admin", + "password": "&{openidm.admin.password}", + }, + { + "id": "anonymous", + "password": "anonymous", + }, + { + "id": "idm-provisioning", + }, + { + "id": "connector-server-client", + }, + ], + }, + }, + "router": { + "_id": "router", + "filters": [ + { + "methods": [ + "create", + "update", + ], + "onRequest": { + "file": "policyFilter.js", + "type": "text/javascript", + }, + "pattern": "^(managed|internal)($|(/.+))", + }, + { + "methods": [ + "update", + ], + "onRequest": { + "file": "policyFilter.js", + "type": "text/javascript", + }, + "pattern": "^config/managed$", + }, + { + "condition": { + "source": "(context.caller.external === true) && (typeof context.privilege === 'undefined' || Object.keys(context.privilege.matchingPrivileges).length === 0) ", - "journeyFooterEnabled": true, - "journeyHeader": "
- -
+ "type": "text/javascript", + }, + "onResponse": { + "source": "require('relationshipFilter').filterResponse() ", - "journeyHeaderEnabled": true, - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": true, - "journeyLayout": "justified-right", - "journeyTheaterMode": false, - "linkActiveColor": "#49871E", - "linkColor": "#5AA625", - "linkedTrees": [], - "logo": "", - "logoAltText": "", - "logoEnabled": true, - "logoHeight": "40", - "logoProfile": "data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", - "logoProfileAltText": "RobRoy", - "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A", - "logoProfileCollapsedAltText": "RobRoy", - "logoProfileCollapsedHeight": "28", - "logoProfileHeight": "28", - "name": "Robroy", - "pageTitle": "#23282e", - "primaryColor": "#5AA625", - "primaryOffColor": "#49871E", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#5AA625", - "secondaryColor": "#69788b", - "textColor": "#ffffff", + "type": "text/javascript", }, - { - "_id": "cd6c93e2-52e2-4340-9770-66a588343841", - "accountFooter": "", - "accountFooterEnabled": false, - "accountPageSections": { - "accountControls": { - "enabled": false, - }, - "accountSecurity": { - "enabled": true, - "subsections": { - "password": { - "enabled": true, - }, - "securityQuestions": { - "enabled": false, - }, - "twoStepVerification": { - "enabled": true, - }, - "username": { - "enabled": true, - }, - }, + "pattern": "^(managed|internal)($|(/.+))", + }, + ], + }, + "schedule/seantest": { + "_id": "schedule/seantest", + "concurrentExecution": false, + "enabled": false, + "endTime": null, + "invokeContext": { + "script": { + "globals": {}, + "source": "//sean has changed this script. Let's see if it is still working. qqqqqqqqqqqqqqSchedule1 +", + "type": "text/javascript", + }, + }, + "invokeLogLevel": "info", + "invokeService": "script", + "misfirePolicy": "fireAndProceed", + "persisted": true, + "recoverable": false, + "repeatCount": 0, + "repeatInterval": 0, + "schedule": null, + "startTime": null, + "type": "simple", + }, + "schedule/taskscan_activate": { + "_id": "schedule/taskscan_activate", + "concurrentExecution": false, + "enabled": false, + "invokeContext": { + "numberOfThreads": 5, + "scan": { + "_queryFilter": "((/activeDate le "\${Time.nowWithOffset}") AND (!(/inactiveDate pr) or /inactiveDate ge "\${Time.nowWithOffset}"))", + "object": "managed/user", + "recovery": { + "timeout": "10m", + }, + "taskState": { + "completed": "/activateAccount/task-completed", + "started": "/activateAccount/task-started", + }, + }, + "task": { + "script": { + "globals": {}, + "source": "var patch = [{ "operation" : "replace", "field" : "/accountStatus", "value" : "active" }]; + +logger.debug("Performing Activate Account Task on {} ({})", input.mail, objectID); + +openidm.patch(objectID, null, patch); true; +", + "type": "text/javascript", + }, + }, + "waitForCompletion": false, + }, + "invokeService": "taskscanner", + "persisted": true, + "repeatInterval": 86400000, + "type": "simple", + }, + "schedule/taskscan_expire": { + "_id": "schedule/taskscan_expire", + "concurrentExecution": false, + "enabled": false, + "invokeContext": { + "numberOfThreads": 5, + "scan": { + "_queryFilter": "((/inactiveDate lt "\${Time.nowWithOffset}") AND (!(/activeDate pr) or /activeDate le "\${Time.nowWithOffset}"))", + "object": "managed/user", + "recovery": { + "timeout": "10m", + }, + "taskState": { + "completed": "/expireAccount/task-completed", + "started": "/expireAccount/task-started", + }, + }, + "task": { + "script": { + "globals": {}, + "source": "var patch = [{ "operation" : "replace", "field" : "/accountStatus", "value" : "inactive" }]; + +logger.debug("Performing Expire Account Task on {} ({})", input.mail, objectID); + +openidm.patch(objectID, null, patch); true; +", + "type": "text/javascript", + }, + }, + "waitForCompletion": false, + }, + "invokeService": "taskscanner", + "persisted": true, + "repeatInterval": 86400000, + "type": "simple", + }, + "scheduler": { + "_id": "scheduler", + "scheduler": { + "executePersistentSchedules": { + "$bool": "&{openidm.scheduler.execute.persistent.schedules}", + }, + }, + "threadPool": { + "threadCount": 10, + }, + }, + "script": { + "ECMAScript": { + "javascript.optimization.level": 9, + "javascript.recompile.minimumInterval": 60000, + }, + "Groovy": { + "#groovy.disabled.global.ast.transformations": "", + "#groovy.errors.tolerance": 10, + "#groovy.output.debug": false, + "#groovy.output.verbose": false, + "#groovy.script.base": "#any class extends groovy.lang.Script", + "#groovy.script.extension": ".groovy", + "#groovy.target.bytecode": "1.8", + "#groovy.target.directory": "&{idm.data.dir}/classes", + "#groovy.target.indy": true, + "#groovy.warnings": "likely errors #othere values [none,likely,possible,paranoia]", + "groovy.classpath": "&{idm.install.dir}/lib", + "groovy.recompile": true, + "groovy.recompile.minimumInterval": 60000, + "groovy.source.encoding": "UTF-8", + }, + "_id": "script", + "properties": {}, + "sources": { + "default": { + "directory": "&{idm.install.dir}/bin/defaults/script", + }, + "install": { + "directory": "&{idm.install.dir}", + }, + "project": { + "directory": "&{idm.instance.dir}", + }, + "project-script": { + "directory": "&{idm.instance.dir}/script", + }, + }, + }, + "secrets": { + "_id": "secrets", + "stores": [ + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}", + "mappings": [ + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.default", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "consent": { - "enabled": false, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.config.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "oauthApplications": { - "enabled": false, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.password.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "personalInformation": { - "enabled": true, + { + "aliases": [ + "&{openidm.https.keystore.cert.alias|openidm-localhost}", + ], + "secretId": "idm.jwt.session.module.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "preferences": { - "enabled": false, + { + "aliases": [ + "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}", + ], + "secretId": "idm.jwt.session.module.signing", + "types": [ + "SIGN", + "VERIFY", + ], }, - "social": { - "enabled": false, + { + "aliases": [ + "selfservice", + ], + "secretId": "idm.selfservice.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "trustedDevices": { - "enabled": true, + { + "aliases": [ + "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}", + ], + "secretId": "idm.selfservice.signing", + "types": [ + "SIGN", + "VERIFY", + ], }, - }, - "backgroundColor": "#FFFFFF", - "backgroundImage": "", - "bodyText": "#000000", - "buttonRounded": "0", - "dangerColor": "#f7685b", - "favicon": "", - "isDefault": false, - "journeyFooter": "", - "journeyFooterEnabled": false, - "journeyHeader": "
Header Content
", - "journeyHeaderEnabled": false, - "journeyJustifiedContent": "", - "journeyJustifiedContentEnabled": false, - "journeyLayout": "card", - "journeyTheaterMode": false, - "linkActiveColor": "#000000", - "linkColor": "#000000", - "linkedTrees": [], - "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", - "logoAltText": "Contrast", - "logoEnabled": true, - "logoHeight": "72", - "logoProfile": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", - "logoProfileAltText": "Contrast", - "logoProfileCollapsed": "data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A", - "logoProfileCollapsedAltText": "", - "logoProfileCollapsedHeight": "22", - "logoProfileHeight": "22", - "name": "Contrast", - "pageTitle": "#23282e", - "primaryColor": "#000000", - "primaryOffColor": "#000000", - "profileBackgroundColor": "#FFFFFF", - "profileMenuHighlightColor": "#FFFFFF", - "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#000000", - "profileMenuTextHighlightColor": "#455469", - "secondaryColor": "#69788b", - "textColor": "#ffffff", + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.assignment.attribute.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], + }, + ], + "providerName": "&{openidm.keystore.provider|SunJCE}", + "storePassword": "&{openidm.keystore.password|changeit}", + "storetype": "&{openidm.keystore.type|JCEKS}", }, - ], + "name": "mainKeyStore", + }, + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.truststore.location|&{idm.install.dir}/security/truststore}", + "mappings": [], + "providerName": "&{openidm.truststore.provider|SUN}", + "storePassword": "&{openidm.truststore.password|changeit}", + "storetype": "&{openidm.truststore.type|JKS}", + }, + "name": "mainTrustStore", + }, + ], + }, + "selfservice.kba": { + "_id": "selfservice.kba", + "kbaPropertyName": "kbaInfo", + "minimumAnswersToDefine": 2, + "minimumAnswersToVerify": 1, + "questions": { + "1": { + "en": "What's your favorite color?", + "en_GB": "What is your favourite colour?", + "fr": "Quelle est votre couleur préférée?", + }, + "2": { + "en": "Who was your first employer?", + }, }, }, - "uilocale/fr": { - "_id": "uilocale/fr", - "admin": { - "overrides": { - "AppLogoURI": "URI du logo de l’application", - "EmailAddress": "Adresse e-mail", - "Name": "Nom", - "Owners": "Les propriétaires", + "selfservice.propertymap": { + "_id": "selfservice.propertymap", + "properties": [ + { + "source": "givenName", + "target": "givenName", }, - "sideMenu": { - "securityQuestions": "Questions de sécurité", + { + "source": "familyName", + "target": "sn", + }, + { + "source": "email", + "target": "mail", + }, + { + "condition": "/object/postalAddress pr", + "source": "postalAddress", + "target": "postalAddress", + }, + { + "condition": "/object/addressLocality pr", + "source": "addressLocality", + "target": "city", + }, + { + "condition": "/object/addressRegion pr", + "source": "addressRegion", + "target": "stateProvince", + }, + { + "condition": "/object/postalCode pr", + "source": "postalCode", + "target": "postalCode", + }, + { + "condition": "/object/country pr", + "source": "country", + "target": "country", + }, + { + "condition": "/object/phone pr", + "source": "phone", + "target": "telephoneNumber", + }, + { + "source": "username", + "target": "userName", }, + ], + }, + "selfservice.terms": { + "_id": "selfservice.terms", + "active": "0.0", + "uiConfig": { + "buttonText": "Accept", + "displayName": "We've updated our terms", + "purpose": "You must accept the updated terms in order to proceed.", }, - "enduser": { - "overrides": { - "FirstName": "Prénom", - "LastName": "Nom de famille", + "versions": [ + { + "createDate": "2019-10-28T04:20:11.320Z", + "termsTranslations": { + "en": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + }, + "version": "0.0", }, - "pages": { - "dashboard": { - "widgets": { - "welcome": { - "greeting": "Bonjour", + ], + }, + "servletfilter/cors": { + "_id": "servletfilter/cors", + "filterClass": "org.eclipse.jetty.ee10.servlets.CrossOriginFilter", + "initParams": { + "allowCredentials": true, + "allowedHeaders": "accept,x-openidm-password,x-openidm-nosession,x-openidm-username,content-type,origin,x-requested-with", + "allowedMethods": "GET,POST,PUT,DELETE,PATCH", + "allowedOrigins": "https://localhost:&{openidm.port.https}", + "chainPreflight": false, + }, + "urlPatterns": [ + "/*", + ], + }, + "servletfilter/payload": { + "_id": "servletfilter/payload", + "filterClass": "org.forgerock.openidm.jetty.LargePayloadServletFilter", + "initParams": { + "maxRequestSizeInMegabytes": 5, + }, + "urlPatterns": [ + "&{openidm.servlet.alias}/*", + ], + }, + "servletfilter/upload": { + "_id": "servletfilter/upload", + "filterClass": "org.forgerock.openidm.jetty.LargePayloadServletFilter", + "initParams": { + "maxRequestSizeInMegabytes": 50, + }, + "urlPatterns": [ + "&{openidm.servlet.upload.alias}/*", + ], + }, + "sync": { + "_id": "sync", + "mappings": [ + { + "_id": "sync/managedOrganization_managedRole", + "consentRequired": false, + "displayName": "managedOrganization_managedRole", + "icon": null, + "name": "managedOrganization_managedRole", + "policies": [ + { + "action": { + "globals": {}, + "source": "//seantest +", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "//seantest + + +//extract test +", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//seantest + +//seantesttttt + +//testsss +", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "//seantest +", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": " +", + "type": "groovy", + }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [], + "target": "managed/role", + }, + { + "_id": "sync/managedOrganization_managedSeantestmanagedobject", + "consentRequired": false, + "displayName": "managedOrganization_managedSeantestmanagedobject", + "icon": null, + "name": "managedOrganization_managedSeantestmanagedobject", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [ + "managedOrganization_managedRole", + ], + "target": "managed/seantestmanagedobject", + }, + { + "_id": "sync/managedAssignment_managedUser", + "consentRequired": false, + "displayName": "managedAssignment_managedUser", + "icon": null, + "name": "managedAssignment_managedUser", + "policies": [ + { + "action": { + "globals": {}, + "source": "//asdfasdf UPDATED +", + "type": "groovy", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdfas UPDATED POLICIES SOURCE_MISSING ACTION SCRIPT +", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//asdfasdfasdf +", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": " +", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf +", + "type": "text/javascript", }, + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + ], + "target": "managed/user", + }, + { + "_id": "sync/managedSeantestmanagedobject_managedUser", + "consentRequired": false, + "displayName": "managedSeantestmanagedobject_managedUser", + "icon": null, + "name": "managedSeantestmanagedobject_managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", }, - }, - }, - }, - "login": { - "login": { - "next": "Suivant", - }, - "overrides": { - "Password": "Mot de passe", - "UserName": "Nom d'utilisateur", - }, - }, - "shared": { - "sideMenu": { - "dashboard": "Tableau de bord", + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/seantestmanagedobject", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + ], + "target": "managed/user", }, - }, - }, - "undefined": { - "_id": "undefined", - "mapping": { - "mapping/managedBravo_user_managedBravo_user0": { - "_id": "mapping/managedBravo_user_managedBravo_user0", + { + "_id": "sync/seantestmapping", "consentRequired": false, - "displayName": "managedBravo_user_managedBravo_user0", + "displayName": "seantestmapping", "icon": null, - "name": "managedBravo_user_managedBravo_user0", + "name": "seantestmapping", "policies": [ { "action": "ASYNC", @@ -54782,21 +87295,581 @@ isGoogleEligible; }, ], "properties": [], - "source": "managed/bravo_user", - "target": "managed/bravo_user", + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + ], + "target": "managed/organization", + }, + { + "_id": "sync/systemCsvfileconnector__ACCOUNT___managedUser", + "consentRequired": false, + "displayName": "systemCsvfileconnector__ACCOUNT___managedUser", + "icon": null, + "name": "systemCsvfileconnector__ACCOUNT___managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "UPDATE", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "source": "name", + "target": "userName", + }, + { + "source": "firstName", + "target": "givenName", + }, + { + "source": "lastName", + "target": "sn", + }, + { + "source": "email", + "target": "mail", + }, + ], + "source": "system/csvFileConnector/__ACCOUNT__", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + "seantestmapping", + ], + "target": "managed/user", + }, + { + "_id": "sync/systemCsvsampleconnector__ACCOUNT___managedUser", + "consentRequired": false, + "displayName": "systemCsvsampleconnector__ACCOUNT___managedUser", + "icon": null, + "name": "systemCsvsampleconnector__ACCOUNT___managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "UPDATE", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "source": "email", + "target": "mail", + }, + { + "source": "lastname", + "target": "sn", + }, + { + "source": "description", + "target": "description", + }, + { + "source": "username", + "target": "userName", + }, + { + "source": "firstname", + "target": "givenName", + }, + ], + "source": "system/csvSampleConnector/__ACCOUNT__", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + "seantestmapping", + "systemCsvfileconnector__ACCOUNT___managedUser", + ], + "target": "managed/user", + }, + ], + }, + "ui.context/admin": { + "_id": "ui.context/admin", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/admin/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/admin/extension", + "responseHeaders": { + "X-Frame-Options": "SAMEORIGIN", + }, + "urlContextRoot": "/admin", + }, + "ui.context/api": { + "_id": "ui.context/api", + "authEnabled": true, + "cacheEnabled": false, + "defaultDir": "&{idm.install.dir}/ui/api/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/api/extension", + "urlContextRoot": "/api", + }, + "ui.context/enduser": { + "_id": "ui.context/enduser", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/enduser", + "enabled": true, + "responseHeaders": { + "X-Frame-Options": "DENY", + }, + "urlContextRoot": "/", + }, + "ui.context/oauth": { + "_id": "ui.context/oauth", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/oauth/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/oauth/extension", + "urlContextRoot": "/oauthReturn", + }, + "ui/configuration": { + "_id": "ui/configuration", + "configuration": { + "defaultNotificationType": "info", + "forgotUsername": false, + "lang": "en", + "notificationTypes": { + "error": { + "iconPath": "images/notifications/error.png", + "name": "common.notification.types.error", + }, + "info": { + "iconPath": "images/notifications/info.png", + "name": "common.notification.types.info", + }, + "warning": { + "iconPath": "images/notifications/warning.png", + "name": "common.notification.types.warning", + }, + }, + "passwordReset": false, + "passwordResetLink": "", + "roles": { + "internal/role/openidm-admin": "ui-admin", + "internal/role/openidm-authorized": "ui-user", + }, + "selfRegistration": false, + }, + }, + "ui/dashboard": { + "_id": "ui/dashboard", + "adminDashboards": [ + { + "isDefault": true, + "name": "Quick Start", + "widgets": [ + { + "cards": [ + { + "href": "#connectors/add/", + "icon": "fa-database", + "name": "Add Connector", + }, + { + "href": "#mapping/add/", + "icon": "fa-map-marker", + "name": "Create Mapping", + }, + { + "href": "#resource/managed/role/list/", + "icon": "fa-check-square-o", + "name": "Manage Roles", + }, + { + "href": "#managed/add/", + "icon": "fa-tablet", + "name": "Add Device", + }, + { + "href": "#selfservice/userregistration/", + "icon": "fa-gear", + "name": "Configure Registration", + }, + { + "href": "#selfservice/passwordreset/", + "icon": "fa-gear", + "name": "Configure Password Reset", + }, + { + "href": "#resource/managed/user/list/", + "icon": "fa-user", + "name": "Manage Users", + }, + { + "href": "#settings/", + "icon": "fa-user", + "name": "Configure System Preferences", + }, + ], + "size": "large", + "type": "quickStart", + }, + ], + }, + { + "isDefault": false, + "name": "System Monitoring", + "widgets": [ + { + "legendRange": { + "month": [ + 500, + 2500, + 5000, + ], + "week": [ + 10, + 30, + 90, + 270, + 810, + ], + "year": [ + 10000, + 40000, + 100000, + 250000, + ], + }, + "maxRange": "#24423c", + "minRange": "#b0d4cd", + "size": "large", + "type": "audit", + }, + { + "size": "large", + "type": "clusterStatus", + }, + { + "size": "large", + "type": "systemHealthFull", + }, + { + "barchart": "false", + "size": "large", + "type": "lastRecon", + }, + ], + }, + { + "isDefault": false, + "name": "Resource Report", + "widgets": [ + { + "selected": "activeUsers", + "size": "x-small", + "type": "counter", + }, + { + "selected": "rolesEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "activeConnectors", + "size": "x-small", + "type": "counter", + }, + { + "size": "large", + "type": "resourceList", + }, + ], + }, + { + "isDefault": false, + "name": "Business Report", + "widgets": [ + { + "graphType": "fa-pie-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "signIns", + "widgetTitle": "Sign-Ins", + }, + { + "graphType": "fa-bar-chart", + "size": "x-small", + "type": "passwordResets", + "widgetTitle": "Password Resets", + }, + { + "graphType": "fa-line-chart", + "providers": [ + "Username/Password", + ], + "size": "x-small", + "type": "newRegistrations", + "widgetTitle": "New Registrations", + }, + { + "size": "x-small", + "timezone": { + "hours": "07", + "minutes": "00", + "negative": true, + }, + "type": "socialLogin", + }, + { + "selected": "socialEnabled", + "size": "x-small", + "type": "counter", + }, + { + "selected": "manualRegistrations", + "size": "x-small", + "type": "counter", + }, + ], + }, + { + "isDefault": false, + "name": "seantestdashboard", + "widgets": [ + { + "size": "large", + "type": "resourceList", + }, + ], + }, + ], + "dashboard": { + "widgets": [ + { + "size": "large", + "type": "Welcome", + }, + ], + }, + }, + "ui/profile": { + "_id": "ui/profile", + "tabs": [ + { + "name": "personalInfoTab", + "view": "org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab", + }, + { + "name": "signInAndSecurity", + "view": "org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab", + }, + { + "name": "preference", + "view": "org/forgerock/openidm/ui/user/profile/PreferencesTab", + }, + { + "name": "trustedDevice", + "view": "org/forgerock/openidm/ui/user/profile/TrustedDevicesTab", + }, + { + "name": "oauthApplication", + "view": "org/forgerock/openidm/ui/user/profile/OauthApplicationsTab", + }, + { + "name": "privacyAndConsent", + "view": "org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab", + }, + { + "name": "sharing", + "view": "org/forgerock/openidm/ui/user/profile/uma/SharingTab", + }, + { + "name": "auditHistory", + "view": "org/forgerock/openidm/ui/user/profile/uma/ActivityTab", + }, + { + "name": "accountControls", + "view": "org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab", + }, + ], + }, + "ui/themeconfig": { + "_id": "ui/themeconfig", + "icon": "favicon.ico", + "path": "", + "settings": { + "footer": { + "mailto": "info@pingidentity.com", + }, + "loginLogo": { + "alt": "Ping Identity", + "height": "120px", + "src": "images/login-logo-dark.png", + "title": "Ping Identity", + "width": "120px", + }, + "logo": { + "alt": "Ping Identity", + "src": "images/logo-horizontal-white.png", + "title": "Ping Identity", }, }, + "stylesheets": [ + "css/bootstrap-3.4.1-custom.css", + "css/structure.css", + "css/theme.css", + ], + }, + "webserver": { + "_id": "webserver", + "gzip": { + "enabled": true, + "includedMethods": [ + "GET", + ], + }, + "maxThreads": { + "$int": "&{openidm.webserver.max.threads|&{org.ops4j.pax.web.server.maxThreads|200}}", + }, + }, + "webserver.listener/http": { + "_id": "webserver.listener/http", + "enabled": { + "$bool": "&{openidm.http.enabled|true}", + }, + "port": { + "$int": "&{openidm.port.http|8080}", + }, + }, + "webserver.listener/https": { + "_id": "webserver.listener/https", + "enabled": { + "$bool": "&{openidm.https.enabled|true}", + }, + "port": { + "$int": "&{openidm.port.https|8443}", + }, + "secure": true, + "sslCertAlias": "&{openidm.https.keystore.cert.alias|openidm-localhost}", + }, + "webserver.listener/mutualAuth": { + "_id": "webserver.listener/mutualAuth", + "enabled": { + "$bool": "&{openidm.mutualauth.enabled|true}", + }, + "mutualAuth": true, + "port": { + "$int": "&{openidm.port.mutualauth|8444}", + }, + "secure": true, + "sslCertAlias": "&{openidm.https.keystore.cert.alias|openidm-localhost}", }, }, "meta": Any, } `; -exports[`frodo idm export "frodo idm export -i script -D testDir4": should export the idm config entity with idm id "script" into the directory testDir4 1`] = `0`; +exports[`frodo idm export "frodo idm export -i script -D idmTestDir4": should export the idm config entity with idm id "script" into the directory idmTestDir4 1`] = `0`; -exports[`frodo idm export "frodo idm export -i script -D testDir4": should export the idm config entity with idm id "script" into the directory testDir4 2`] = `""`; +exports[`frodo idm export "frodo idm export -i script -D idmTestDir4": should export the idm config entity with idm id "script" into the directory idmTestDir4 2`] = `""`; -exports[`frodo idm export "frodo idm export -i script -D testDir4": should export the idm config entity with idm id "script" into the directory testDir4: testDir4/script.idm.json 1`] = ` +exports[`frodo idm export "frodo idm export -i script -D idmTestDir4": should export the idm config entity with idm id "script" into the directory idmTestDir4: idmTestDir4/script.idm.json 1`] = ` { "idm": { "script": { diff --git a/test/e2e/__snapshots__/idm-import.e2e.test.js.snap b/test/e2e/__snapshots__/idm-import.e2e.test.js.snap index 0524a36cb..94dd5b6a5 100644 --- a/test/e2e/__snapshots__/idm-import.e2e.test.js.snap +++ b/test/e2e/__snapshots__/idm-import.e2e.test.js.snap @@ -39,8 +39,12 @@ Error updating config entity endpoint/testEndpoint2 " `; +exports[`frodo idm import "frodo idm import -AD test/e2e/exports/all-separate-extracted-script/idm/global/idm -m idm": Should import on prem idm config according to the idmenv and entity files" 1`] = `""`; + exports[`frodo idm import "frodo idm import -af test/e2e/exports/all/all.idm.json -e test/e2e/env/testEnvFile.env -E test/e2e/env/testEntitiesFile.json": Should import all configs from the file 'test/e2e/exports/all/all.idm.json' according to the env and entity files" 1`] = `""`; +exports[`frodo idm import "frodo idm import -af test/e2e/exports/all/idm/all.idm.json -m idm": Should import on prem idm config' according to the idmenv and entity files" 1`] = `""`; + exports[`frodo idm import "frodo idm import -f test/e2e/exports/all-separate/cloud/global/idm/script.idm.json": should import the idm config from the file named 'test/e2e/exports/all-separate/cloud/global/idm/script.idm.json'" 1`] = `""`; exports[`frodo idm import "frodo idm import -i script -D test/e2e/exports/all-separate/cloud/global/idm": should import the idm config with name 'script' from the directory test/e2e/exports/all-separate/cloud/global/idm" 1`] = `""`; diff --git a/test/e2e/__snapshots__/idp-delete.e2e.test.js.snap b/test/e2e/__snapshots__/idp-delete.e2e.test.js.snap index ceae3f37b..81e254462 100644 --- a/test/e2e/__snapshots__/idp-delete.e2e.test.js.snap +++ b/test/e2e/__snapshots__/idp-delete.e2e.test.js.snap @@ -73,7 +73,7 @@ Options: walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", - "forgeops") + "forgeops", "idm") --no-cache Disable token cache for this operation. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) diff --git a/test/e2e/__snapshots__/mapping-export.e2e.test.js.snap b/test/e2e/__snapshots__/mapping-export.e2e.test.js.snap index b1f9e1b99..8519d346f 100644 --- a/test/e2e/__snapshots__/mapping-export.e2e.test.js.snap +++ b/test/e2e/__snapshots__/mapping-export.e2e.test.js.snap @@ -1268,39 +1268,47 @@ exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory 2`] = `""`; -exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/mapping/managedBravo_group_managedBravo_group.mapping.json 1`] = ` +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/allMappings.mapping.json 1`] = ` { "mapping": { - "mapping/managedBravo_group_managedBravo_group": { - "_id": "mapping/managedBravo_group_managedBravo_group", + "mapping/mappingtest": { + "_id": "mapping/mappingtest", "consentRequired": false, - "displayName": "managedBravo_group_managedBravo_group", + "displayName": "mappingtest", "icon": null, - "name": "managedBravo_group_managedBravo_group", + "name": "mappingtest", "policies": [ { - "action": "ASYNC", - "situation": "ABSENT", + "action": { + "globals": {}, + "source": "//asdfasdf", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", }, { "action": "ASYNC", - "situation": "ALL_GONE", + "situation": "SOURCE_MISSING", }, { - "action": "ASYNC", - "situation": "AMBIGUOUS", + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "groovy", + }, + "situation": "MISSING", }, { "action": "ASYNC", - "situation": "CONFIRMED", + "situation": "FOUND_ALREADY_LINKED", }, { "action": "ASYNC", - "situation": "FOUND", + "situation": "UNQUALIFIED", }, { "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + "situation": "UNASSIGNED", }, { "action": "ASYNC", @@ -1308,7 +1316,7 @@ exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": }, { "action": "ASYNC", - "situation": "MISSING", + "situation": "TARGET_IGNORED", }, { "action": "ASYNC", @@ -1316,39 +1324,31 @@ exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": }, { "action": "ASYNC", - "situation": "SOURCE_MISSING", + "situation": "ALL_GONE", }, { "action": "ASYNC", - "situation": "TARGET_IGNORED", + "situation": "CONFIRMED", }, { "action": "ASYNC", - "situation": "UNASSIGNED", + "situation": "FOUND", }, { "action": "ASYNC", - "situation": "UNQUALIFIED", + "situation": "ABSENT", }, ], "properties": [], - "source": "managed/bravo_group", - "target": "managed/bravo_group", + "source": "managed/assignment", + "target": "managed/organization", }, - }, - "meta": Any, -} -`; - -exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/mapping/managedBravo_user_managedBravo_user0.mapping.json 1`] = ` -{ - "mapping": { - "mapping/managedBravo_user_managedBravo_user0": { - "_id": "mapping/managedBravo_user_managedBravo_user0", + "mapping/seantestmapping": { + "_id": "mapping/seantestmapping", "consentRequired": false, - "displayName": "managedBravo_user_managedBravo_user0", + "displayName": "seantestmapping", "icon": null, - "name": "managedBravo_user_managedBravo_user0", + "name": "seantestmapping", "policies": [ { "action": "ASYNC", @@ -1404,606 +1404,2809 @@ exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": }, ], "properties": [], - "source": "managed/bravo_user", - "target": "managed/bravo_user", + "source": "managed/assignment", + "target": "managed/organization", }, }, "meta": Any, -} -`; - -exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/AlphaUser2GoogleApps.sync.json 1`] = ` -{ - "_id": "sync/AlphaUser2GoogleApps", - "consentRequired": false, - "correlationQuery": [ - { - "expressionTree": { - "all": [ - "__NAME__", + "sync": { + "_id": "sync", + "mappings": [ + { + "_id": "sync/managedOrganization_managedRole", + "consentRequired": false, + "displayName": "managedOrganization_managedRole", + "icon": null, + "name": "managedOrganization_managedRole", + "policies": [ + { + "action": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "//seantest", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": "//seantest", + "type": "groovy", + }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, ], + "properties": [], + "source": "managed/organization", + "syncAfter": [], + "target": "managed/role", }, - "file": "ui/correlateTreeToQueryFilter.js", - "linkQualifier": "default", - "mapping": "AlphaUser2GoogleApps", - "type": "text/javascript", - }, - ], - "displayName": "AlphaUser2GoogleApps", - "enableSync": { - "$bool": "&{esv.gac.enable.mapping}", - }, - "icon": null, - "name": "AlphaUser2GoogleApps", - "onCreate": { - "globals": {}, - "source": "target.orgUnitPath = "/NewAccounts";", - "type": "text/javascript", - }, - "onUpdate": { - "globals": {}, - "source": "//testing1234 -target.givenName = oldTarget.givenName; -target.familyName = oldTarget.familyName; -target.__NAME__ = oldTarget.__NAME__;", - "type": "text/javascript", - }, - "policies": [ - { - "action": "EXCEPTION", - "situation": "AMBIGUOUS", - }, - { - "action": "UNLINK", - "situation": "SOURCE_MISSING", - }, - { - "action": { - "globals": {}, - "source": "// Timing Constants -var ATTEMPT = 6; // Number of attempts to find the Google user. -var SLEEP_TIME = 500; // Milliseconds between retries. -var SYSTEM_ENDPOINT = "system/GoogleApps/__ACCOUNT__"; -var MAPPING_NAME = "AlphaUser2GoogleApps"; -var GOOGLE_DOMAIN = identityServer.getProperty("esv.gac.domain"); -var googleEmail = source.userName + "@" + GOOGLE_DOMAIN; -var frUserGUID = source._id; -var resultingAction = "ASYNC"; - -// Get the Google GUID -var linkQueryParams = {'_queryFilter': 'firstId eq "' + frUserGUID + '" and linkType eq "' + MAPPING_NAME + '"'}; -var linkResults = openidm.query("repo/link/", linkQueryParams, null); -var googleGUID; - -if (linkResults.resultCount === 1) { - googleGUID = linkResults.result[0].secondId; -} - -var queryResults; // Resulting query from looking for the Google user. -var params = {'_queryFilter': '__UID__ eq "' + googleGUID + '"'}; - -for (var i = 1; i <= ATTEMPT; i++) { - queryResults = openidm.query(SYSTEM_ENDPOINT, params); - if (queryResults.result && queryResults.result.length > 0) { - logger.info("idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in " + i + " attempts. Query result: " + JSON.stringify(queryResults)); - resultingAction = "UPDATE"; - break; - } - java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again. -} - -if (!queryResults.result || queryResults.resultCount === 0) { - logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); - resultingAction = "UNLINK"; -} -resultingAction; -", - "type": "text/javascript", - }, - "situation": "MISSING", - }, - { - "action": "EXCEPTION", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "IGNORE", - "situation": "UNQUALIFIED", - }, - { - "action": "IGNORE", - "situation": "UNASSIGNED", - }, - { - "action": "UNLINK", - "situation": "LINK_ONLY", - }, - { - "action": "IGNORE", - "situation": "TARGET_IGNORED", - }, - { - "action": "IGNORE", - "situation": "SOURCE_IGNORED", - }, - { - "action": "IGNORE", - "situation": "ALL_GONE", - }, - { - "action": "UPDATE", - "situation": "CONFIRMED", - }, - { - "action": "LINK", - "situation": "FOUND", - }, - { - "action": "CREATE", - "situation": "ABSENT", - }, - ], - "properties": [ + { + "_id": "sync/managedOrganization_managedSeantestmanagedobject", + "consentRequired": false, + "displayName": "managedOrganization_managedSeantestmanagedobject", + "icon": null, + "name": "managedOrganization_managedSeantestmanagedobject", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [ + "managedOrganization_managedRole", + ], + "target": "managed/seantestmanagedobject", + }, + { + "_id": "sync/managedAssignment_managedUser", + "consentRequired": false, + "displayName": "managedAssignment_managedUser", + "icon": null, + "name": "managedAssignment_managedUser", + "policies": [ + { + "action": { + "globals": {}, + "source": "//asdfasdf", + "type": "groovy", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": "//asdfasdf", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "text/javascript", + }, + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + ], + "target": "managed/user", + }, + { + "_id": "sync/seantestmapping", + "consentRequired": false, + "displayName": "seantestmapping", + "icon": null, + "name": "seantestmapping", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + ], + "target": "managed/organization", + }, + { + "_id": "sync/managedSeantestmanagedobject_managedUser", + "consentRequired": false, + "displayName": "managedSeantestmanagedobject_managedUser", + "icon": null, + "name": "managedSeantestmanagedobject_managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/seantestmanagedobject", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "seantestmapping", + ], + "target": "managed/user", + }, + ], + }, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/mapping/managedBravo_group_managedBravo_group.mapping.json 1`] = ` +{ + "mapping": { + "mapping/managedBravo_group_managedBravo_group": { + "_id": "mapping/managedBravo_group_managedBravo_group", + "consentRequired": false, + "displayName": "managedBravo_group_managedBravo_group", + "icon": null, + "name": "managedBravo_group_managedBravo_group", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_group", + "target": "managed/bravo_group", + }, + }, + "meta": Any, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/mapping/managedBravo_user_managedBravo_user0.mapping.json 1`] = ` +{ + "mapping": { + "mapping/managedBravo_user_managedBravo_user0": { + "_id": "mapping/managedBravo_user_managedBravo_user0", + "consentRequired": false, + "displayName": "managedBravo_user_managedBravo_user0", + "icon": null, + "name": "managedBravo_user_managedBravo_user0", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "target": "managed/bravo_user", + }, + }, + "meta": Any, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/AlphaUser2GoogleApps.sync.json 1`] = ` +{ + "_id": "sync/AlphaUser2GoogleApps", + "consentRequired": false, + "correlationQuery": [ + { + "expressionTree": { + "all": [ + "__NAME__", + ], + }, + "file": "ui/correlateTreeToQueryFilter.js", + "linkQualifier": "default", + "mapping": "AlphaUser2GoogleApps", + "type": "text/javascript", + }, + ], + "displayName": "AlphaUser2GoogleApps", + "enableSync": { + "$bool": "&{esv.gac.enable.mapping}", + }, + "icon": null, + "name": "AlphaUser2GoogleApps", + "onCreate": { + "globals": {}, + "source": "target.orgUnitPath = "/NewAccounts";", + "type": "text/javascript", + }, + "onUpdate": { + "globals": {}, + "source": "//testing1234 +target.givenName = oldTarget.givenName; +target.familyName = oldTarget.familyName; +target.__NAME__ = oldTarget.__NAME__;", + "type": "text/javascript", + }, + "policies": [ + { + "action": "EXCEPTION", + "situation": "AMBIGUOUS", + }, + { + "action": "UNLINK", + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "// Timing Constants +var ATTEMPT = 6; // Number of attempts to find the Google user. +var SLEEP_TIME = 500; // Milliseconds between retries. +var SYSTEM_ENDPOINT = "system/GoogleApps/__ACCOUNT__"; +var MAPPING_NAME = "AlphaUser2GoogleApps"; +var GOOGLE_DOMAIN = identityServer.getProperty("esv.gac.domain"); +var googleEmail = source.userName + "@" + GOOGLE_DOMAIN; +var frUserGUID = source._id; +var resultingAction = "ASYNC"; + +// Get the Google GUID +var linkQueryParams = {'_queryFilter': 'firstId eq "' + frUserGUID + '" and linkType eq "' + MAPPING_NAME + '"'}; +var linkResults = openidm.query("repo/link/", linkQueryParams, null); +var googleGUID; + +if (linkResults.resultCount === 1) { + googleGUID = linkResults.result[0].secondId; +} + +var queryResults; // Resulting query from looking for the Google user. +var params = {'_queryFilter': '__UID__ eq "' + googleGUID + '"'}; + +for (var i = 1; i <= ATTEMPT; i++) { + queryResults = openidm.query(SYSTEM_ENDPOINT, params); + if (queryResults.result && queryResults.result.length > 0) { + logger.info("idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in " + i + " attempts. Query result: " + JSON.stringify(queryResults)); + resultingAction = "UPDATE"; + break; + } + java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again. +} + +if (!queryResults.result || queryResults.resultCount === 0) { + logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); + resultingAction = "UNLINK"; +} +resultingAction; +", + "type": "text/javascript", + }, + "situation": "MISSING", + }, + { + "action": "EXCEPTION", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "IGNORE", + "situation": "UNQUALIFIED", + }, + { + "action": "IGNORE", + "situation": "UNASSIGNED", + }, + { + "action": "UNLINK", + "situation": "LINK_ONLY", + }, + { + "action": "IGNORE", + "situation": "TARGET_IGNORED", + }, + { + "action": "IGNORE", + "situation": "SOURCE_IGNORED", + }, + { + "action": "IGNORE", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "LINK", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "condition": { + "globals": {}, + "source": "object.custom_password_encrypted != null", + "type": "text/javascript", + }, + "source": "custom_password_encrypted", + "target": "__PASSWORD__", + "transform": { + "globals": {}, + "source": "openidm.decrypt(source);", + "type": "text/javascript", + }, + }, + { + "source": "cn", + "target": "__NAME__", + "transform": { + "globals": {}, + "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", + "type": "text/javascript", + }, + }, + { + "source": "givenName", + "target": "givenName", + }, + { + "source": "", + "target": "familyName", + "transform": { + "globals": {}, + "source": "if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) { + source.sn + " (Student)" +} else { + source.sn +}", + "type": "text/javascript", + }, + }, + ], + "queuedSync": { + "enabled": true, + "maxQueueSize": 20000, + "maxRetries": 5, + "pageSize": 100, + "pollingInterval": 1000, + "postRetryAction": "logged-ignore", + "retryDelay": 1000, + }, + "source": "managed/alpha_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + "managedAlpha_user_managedBravo_user", + "managedBravo_user_managedAlpha_user", + ], + "target": "system/GoogleApps/__ACCOUNT__", + "validSource": { + "globals": {}, + "source": "var isGoogleEligible = true; +//var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + " cn: " + source.cn + ") -"; +var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + ") -"; + +//Get Applicable userTypes (no Parent accounts) +if (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) { + isGoogleEligible = false; + logMsg = logMsg + " Account type not eligible."; +} + +//Make sure the account has a valid encrypted password. +if (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) { + isGoogleEligible = false; + logMsg = logMsg + " No encrypted password yet."; +} + +//Check that CN exists and has no space. +if (source.cn && source.cn.includes(' ')) { + isGoogleEligible = false; + logMsg = logMsg + " CN with a space is not allowed."; +} + +if (!isGoogleEligible) { + logMsg = logMsg + " Not sent to Google." + logger.info(logMsg); +} + +if (isGoogleEligible) { + logMsg = logMsg + " Sent to Google." + logger.info(logMsg); +} + +isGoogleEligible; +", + "type": "text/javascript", + }, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/managedAlpha_application_managedBravo_application.sync.json 1`] = ` +{ + "_id": "sync/managedAlpha_application_managedBravo_application", + "consentRequired": true, + "displayName": "Test Application Mapping", + "icon": null, + "name": "managedAlpha_application_managedBravo_application", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "source": "authoritative", + "target": "_id", + }, + ], + "source": "managed/alpha_application", + "sourceQuery": { + "_queryFilter": "(eq "" or eq "")", + }, + "syncAfter": [ + "managedBravo_user_managedBravo_user", + ], + "target": "managed/bravo_application", + "targetQuery": { + "_queryFilter": "!(eq "")", + }, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/managedAlpha_user_managedBravo_user.sync.json 1`] = ` +{ + "_id": "sync/managedAlpha_user_managedBravo_user", + "consentRequired": true, + "displayName": "Test Mapping for Frodo", + "icon": null, + "name": "managedAlpha_user_managedBravo_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "condition": { + "globals": {}, + "source": "console.log("Hello World!");", + "type": "text/javascript", + }, + "default": [ + "Default value string", + ], + "source": "accountStatus", + "target": "applications", + "transform": { + "globals": {}, + "source": "console.log("hello");", + "type": "text/javascript", + }, + }, + ], + "source": "managed/alpha_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + ], + "target": "managed/bravo_user", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/managedBravo_user_managedAlpha_user.sync.json 1`] = ` +{ + "_id": "sync/managedBravo_user_managedAlpha_user", + "consentRequired": false, + "displayName": "Frodo test mapping", + "icon": null, + "name": "managedBravo_user_managedAlpha_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + "managedAlpha_user_managedBravo_user", + ], + "target": "managed/alpha_user", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/managedBravo_user_managedBravo_user.sync.json 1`] = ` +{ + "_id": "sync/managedBravo_user_managedBravo_user", + "consentRequired": false, + "displayName": "managedBravo_user_managedBravo_user", + "icon": null, + "name": "managedBravo_user_managedBravo_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [], + "target": "managed/bravo_user", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + "file://managedBravo_user_managedBravo_user.sync.json", + "file://managedAlpha_application_managedBravo_application.sync.json", + "file://managedAlpha_user_managedBravo_user.sync.json", + "file://managedBravo_user_managedAlpha_user.sync.json", + "file://AlphaUser2GoogleApps.sync.json", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5 1`] = `0`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5 2`] = `""`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/mapping/mappingtest.mapping.json 1`] = ` +{ + "mapping": { + "mapping/mappingtest": { + "_id": "mapping/mappingtest", + "consentRequired": false, + "displayName": "mappingtest", + "icon": null, + "name": "mappingtest", + "policies": [ + { + "action": { + "globals": {}, + "source": "//asdfasdf +", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf +", + "type": "groovy", + }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "target": "managed/organization", + }, + }, + "meta": Any, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/mapping/seantestmapping.mapping.json 1`] = ` +{ + "mapping": { + "mapping/seantestmapping": { + "_id": "mapping/seantestmapping", + "consentRequired": false, + "displayName": "seantestmapping", + "icon": null, + "name": "seantestmapping", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/assignment", + "target": "managed/organization", + }, + }, + "meta": Any, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/sync/managedAssignment_managedUser.sync.json 1`] = ` +{ + "_id": "sync/managedAssignment_managedUser", + "consentRequired": false, + "displayName": "managedAssignment_managedUser", + "icon": null, + "name": "managedAssignment_managedUser", + "policies": [ + { + "action": { + "globals": {}, + "source": "//asdfasdf UPDATED +", + "type": "groovy", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdfas UPDATED POLICIES SOURCE_MISSING ACTION SCRIPT +", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//asdfasdfasdf +", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": " +", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": { + "globals": {}, + "source": "//asdfasdfasdf +", + "type": "text/javascript", + }, + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + ], + "target": "managed/user", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/sync/managedOrganization_managedRole.sync.json 1`] = ` +{ + "_id": "sync/managedOrganization_managedRole", + "consentRequired": false, + "displayName": "managedOrganization_managedRole", + "icon": null, + "name": "managedOrganization_managedRole", + "policies": [ + { + "action": { + "globals": {}, + "source": "//seantest +", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", + }, + { + "action": { + "globals": {}, + "source": "//seantest + + +//extract test +", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//seantest + +//seantesttttt + +//testsss +", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "//seantest +", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": " +", + "type": "groovy", + }, + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "ABSENT", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [], + "target": "managed/role", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/sync/managedOrganization_managedSeantestmanagedobject.sync.json 1`] = ` +{ + "_id": "sync/managedOrganization_managedSeantestmanagedobject", + "consentRequired": false, + "displayName": "managedOrganization_managedSeantestmanagedobject", + "icon": null, + "name": "managedOrganization_managedSeantestmanagedobject", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/organization", + "syncAfter": [ + "managedOrganization_managedRole", + ], + "target": "managed/seantestmanagedobject", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/sync/managedSeantestmanagedobject_managedUser.sync.json 1`] = ` +{ + "_id": "sync/managedSeantestmanagedobject_managedUser", + "consentRequired": false, + "displayName": "managedSeantestmanagedobject_managedUser", + "icon": null, + "name": "managedSeantestmanagedobject_managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/seantestmanagedobject", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + ], + "target": "managed/user", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/sync/seantestmapping.sync.json 1`] = ` +{ + "_id": "sync/seantestmapping", + "consentRequired": false, + "displayName": "seantestmapping", + "icon": null, + "name": "seantestmapping", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/assignment", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + ], + "target": "managed/organization", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/sync/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + "file://managedOrganization_managedRole.sync.json", + "file://managedOrganization_managedSeantestmanagedobject.sync.json", + "file://managedAssignment_managedUser.sync.json", + "file://managedSeantestmanagedobject_managedUser.sync.json", + "file://seantestmapping.sync.json", + "file://systemCsvfileconnector__ACCOUNT___managedUser.sync.json", + "file://systemCsvsampleconnector__ACCOUNT___managedUser.sync.json", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/sync/systemCsvfileconnector__ACCOUNT___managedUser.sync.json 1`] = ` +{ + "_id": "sync/systemCsvfileconnector__ACCOUNT___managedUser", + "consentRequired": false, + "displayName": "systemCsvfileconnector__ACCOUNT___managedUser", + "icon": null, + "name": "systemCsvfileconnector__ACCOUNT___managedUser", + "policies": [ + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "UPDATE", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "source": "name", + "target": "userName", + }, + { + "source": "firstName", + "target": "givenName", + }, + { + "source": "lastName", + "target": "sn", + }, + { + "source": "email", + "target": "mail", + }, + ], + "source": "system/csvFileConnector/__ACCOUNT__", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + "seantestmapping", + ], + "target": "managed/user", +} +`; + +exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir8 -m idm": should export all IDM mappings to separate files in the directory mappingExportTestDir5: mappingExportTestDir8/sync/systemCsvsampleconnector__ACCOUNT___managedUser.sync.json 1`] = ` +{ + "_id": "sync/systemCsvsampleconnector__ACCOUNT___managedUser", + "consentRequired": false, + "displayName": "systemCsvsampleconnector__ACCOUNT___managedUser", + "icon": null, + "name": "systemCsvsampleconnector__ACCOUNT___managedUser", + "policies": [ { - "condition": { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "UPDATE", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "source": "email", + "target": "mail", + }, + { + "source": "lastname", + "target": "sn", + }, + { + "source": "description", + "target": "description", + }, + { + "source": "username", + "target": "userName", + }, + { + "source": "firstname", + "target": "givenName", + }, + ], + "source": "system/csvSampleConnector/__ACCOUNT__", + "syncAfter": [ + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "managedSeantestmanagedobject_managedUser", + "seantestmapping", + "systemCsvfileconnector__ACCOUNT___managedUser", + ], + "target": "managed/user", +} +`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts 1`] = `0`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts 2`] = `""`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts: mappingExportTestDir7/sync/extract_script_test.sync.json 1`] = ` +{ + "_id": "sync/extract_script_test", + "consentRequired": false, + "correlationScript": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/correlationScript.script.js", + "type": "text/javascript", + }, + "displayName": "extract_script_test", + "icon": null, + "name": "extract_script_test", + "onCreate": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/onCreate.script.js", + "type": "text/javascript", + }, + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "source": "", + "target": "name", + "transform": { "globals": {}, - "source": "object.custom_password_encrypted != null", - "type": "text/javascript", + "source": "file://extract_script_test.sync.scripts/properties.SOURCE.name.transform.script.groovy", + "type": "groovy", + }, + }, + ], + "result": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/result.script.js", + "type": "text/javascript", + }, + "source": "managed/alpha_user", + "syncAfter": [], + "target": "managed/alpha_group", + "validSource": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/validSource.script.js", + "type": "text/javascript", + }, +} +`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts: mappingExportTestDir7/sync/extract_script_test.sync.scripts/correlationScript.script.js 1`] = ` +"//extract script test UPDATED CORRELATION QUERY +" +`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts: mappingExportTestDir7/sync/extract_script_test.sync.scripts/onCreate.script.js 1`] = ` +"//test UPDATED ONCREATED +" +`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts: mappingExportTestDir7/sync/extract_script_test.sync.scripts/properties.SOURCE.name.transform.script.groovy 1`] = ` +"//groovy EXTRACT SCRIPT test UPDATED +" +`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts: mappingExportTestDir7/sync/extract_script_test.sync.scripts/result.script.js 1`] = ` +"//tests UPDATED RESULT SCRIPT +" +`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts: mappingExportTestDir7/sync/extract_script_test.sync.scripts/validSource.script.js 1`] = ` +"//extract script test UPDATED VALIDSOURCE +" +`; + +exports[`frodo mapping export "frodo mapping export -AxD mappingExportTestDir7": should export all mappings into separated fils with extracted scripts: mappingExportTestDir7/sync/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + "file://extract_script_test.sync.json", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo mapping export "frodo mapping export -Ni mapping/managedBravo_group_managedBravo_group --no-deps --use-string-arrays -D mappingExportTestDir1": should export the mapping with mapping id "mapping/managedBravo_group_managedBravo_group" into the directory named mappingExportTestDir1 1`] = `0`; + +exports[`frodo mapping export "frodo mapping export -Ni mapping/managedBravo_group_managedBravo_group --no-deps --use-string-arrays -D mappingExportTestDir1": should export the mapping with mapping id "mapping/managedBravo_group_managedBravo_group" into the directory named mappingExportTestDir1 2`] = `""`; + +exports[`frodo mapping export "frodo mapping export -Ni mapping/managedBravo_group_managedBravo_group --no-deps --use-string-arrays -D mappingExportTestDir1": should export the mapping with mapping id "mapping/managedBravo_group_managedBravo_group" into the directory named mappingExportTestDir1: mappingExportTestDir1/managedBravo_group_managedBravo_group.mapping.json 1`] = ` +{ + "mapping": { + "mapping/managedBravo_group_managedBravo_group": { + "_id": "mapping/managedBravo_group_managedBravo_group", + "consentRequired": false, + "displayName": "managedBravo_group_managedBravo_group", + "icon": null, + "name": "managedBravo_group_managedBravo_group", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_group", + "target": "managed/bravo_group", + }, + }, + "sync": { + "_id": "sync", + "mappings": [], + }, +} +`; + +exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.mapping.json": should export all mappings to a single file named my-allMappings.mapping.json 1`] = `0`; + +exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.mapping.json": should export all mappings to a single file named my-allMappings.mapping.json 2`] = `""`; + +exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.mapping.json": should export all mappings to a single file named my-allMappings.mapping.json: my-allMappings.mapping.json 1`] = ` +{ + "mapping": { + "mapping/managedBravo_group_managedBravo_group": { + "_id": "mapping/managedBravo_group_managedBravo_group", + "consentRequired": false, + "displayName": "managedBravo_group_managedBravo_group", + "icon": null, + "name": "managedBravo_group_managedBravo_group", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_group", + "target": "managed/bravo_group", + }, + "mapping/managedBravo_user_managedBravo_user0": { + "_id": "mapping/managedBravo_user_managedBravo_user0", + "consentRequired": false, + "displayName": "managedBravo_user_managedBravo_user0", + "icon": null, + "name": "managedBravo_user_managedBravo_user0", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "target": "managed/bravo_user", + }, + }, + "meta": Any, + "sync": { + "_id": "sync", + "mappings": [ + { + "_id": "sync/managedBravo_user_managedBravo_user", + "consentRequired": false, + "displayName": "managedBravo_user_managedBravo_user", + "icon": null, + "name": "managedBravo_user_managedBravo_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [], + "target": "managed/bravo_user", }, - "source": "custom_password_encrypted", - "target": "__PASSWORD__", - "transform": { - "globals": {}, - "source": "openidm.decrypt(source);", - "type": "text/javascript", + { + "_id": "sync/managedAlpha_application_managedBravo_application", + "consentRequired": true, + "displayName": "Test Application Mapping", + "icon": null, + "name": "managedAlpha_application_managedBravo_application", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "source": "authoritative", + "target": "_id", + }, + ], + "source": "managed/alpha_application", + "sourceQuery": { + "_queryFilter": "(eq "" or eq "")", + }, + "syncAfter": [ + "managedBravo_user_managedBravo_user", + ], + "target": "managed/bravo_application", + "targetQuery": { + "_queryFilter": "!(eq "")", + }, }, - }, - { - "source": "cn", - "target": "__NAME__", - "transform": { - "globals": {}, - "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", - "type": "text/javascript", + { + "_id": "sync/managedAlpha_user_managedBravo_user", + "consentRequired": true, + "displayName": "Test Mapping for Frodo", + "icon": null, + "name": "managedAlpha_user_managedBravo_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [ + { + "condition": { + "globals": {}, + "source": "console.log("Hello World!");", + "type": "text/javascript", + }, + "default": [ + "Default value string", + ], + "source": "accountStatus", + "target": "applications", + "transform": { + "globals": {}, + "source": "console.log("hello");", + "type": "text/javascript", + }, + }, + ], + "source": "managed/alpha_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + ], + "target": "managed/bravo_user", }, - }, - { - "source": "givenName", - "target": "givenName", - }, - { - "source": "", - "target": "familyName", - "transform": { - "globals": {}, - "source": "if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) { - source.sn + " (Student)" -} else { - source.sn -}", - "type": "text/javascript", + { + "_id": "sync/managedBravo_user_managedAlpha_user", + "consentRequired": false, + "displayName": "Frodo test mapping", + "icon": null, + "name": "managedBravo_user_managedAlpha_user", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", + }, + { + "action": "ASYNC", + "situation": "ALL_GONE", + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", + }, + { + "action": "ASYNC", + "situation": "CONFIRMED", + }, + { + "action": "ASYNC", + "situation": "FOUND", + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY", + }, + { + "action": "ASYNC", + "situation": "MISSING", + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED", + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING", + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED", + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED", + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED", + }, + ], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + "managedAlpha_user_managedBravo_user", + ], + "target": "managed/alpha_user", }, - }, - ], - "queuedSync": { - "enabled": true, - "maxQueueSize": 20000, - "maxRetries": 5, - "pageSize": 100, - "pollingInterval": 1000, - "postRetryAction": "logged-ignore", - "retryDelay": 1000, - }, - "source": "managed/alpha_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - "managedAlpha_user_managedBravo_user", - "managedBravo_user_managedAlpha_user", - ], - "target": "system/GoogleApps/__ACCOUNT__", - "validSource": { - "globals": {}, - "source": "var isGoogleEligible = true; -//var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + " cn: " + source.cn + ") -"; -var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + ") -"; - -//Get Applicable userTypes (no Parent accounts) -if (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) { - isGoogleEligible = false; - logMsg = logMsg + " Account type not eligible."; -} + { + "_id": "sync/AlphaUser2GoogleApps", + "consentRequired": false, + "correlationQuery": [ + { + "expressionTree": { + "all": [ + "__NAME__", + ], + }, + "file": "ui/correlateTreeToQueryFilter.js", + "linkQualifier": "default", + "mapping": "AlphaUser2GoogleApps", + "type": "text/javascript", + }, + ], + "displayName": "AlphaUser2GoogleApps", + "enableSync": { + "$bool": "&{esv.gac.enable.mapping}", + }, + "icon": null, + "name": "AlphaUser2GoogleApps", + "onCreate": { + "globals": {}, + "source": "target.orgUnitPath = "/NewAccounts";", + "type": "text/javascript", + }, + "onUpdate": { + "globals": {}, + "source": "//testing1234 +target.givenName = oldTarget.givenName; +target.familyName = oldTarget.familyName; +target.__NAME__ = oldTarget.__NAME__;", + "type": "text/javascript", + }, + "policies": [ + { + "action": "EXCEPTION", + "situation": "AMBIGUOUS", + }, + { + "action": "UNLINK", + "situation": "SOURCE_MISSING", + }, + { + "action": { + "globals": {}, + "source": "// Timing Constants +var ATTEMPT = 6; // Number of attempts to find the Google user. +var SLEEP_TIME = 500; // Milliseconds between retries. +var SYSTEM_ENDPOINT = "system/GoogleApps/__ACCOUNT__"; +var MAPPING_NAME = "AlphaUser2GoogleApps"; +var GOOGLE_DOMAIN = identityServer.getProperty("esv.gac.domain"); +var googleEmail = source.userName + "@" + GOOGLE_DOMAIN; +var frUserGUID = source._id; +var resultingAction = "ASYNC"; -//Make sure the account has a valid encrypted password. -if (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) { - isGoogleEligible = false; - logMsg = logMsg + " No encrypted password yet."; -} +// Get the Google GUID +var linkQueryParams = {'_queryFilter': 'firstId eq "' + frUserGUID + '" and linkType eq "' + MAPPING_NAME + '"'}; +var linkResults = openidm.query("repo/link/", linkQueryParams, null); +var googleGUID; -//Check that CN exists and has no space. -if (source.cn && source.cn.includes(' ')) { - isGoogleEligible = false; - logMsg = logMsg + " CN with a space is not allowed."; +if (linkResults.resultCount === 1) { + googleGUID = linkResults.result[0].secondId; } -if (!isGoogleEligible) { - logMsg = logMsg + " Not sent to Google." - logger.info(logMsg); -} - -if (isGoogleEligible) { - logMsg = logMsg + " Sent to Google." - logger.info(logMsg); -} +var queryResults; // Resulting query from looking for the Google user. +var params = {'_queryFilter': '__UID__ eq "' + googleGUID + '"'}; -isGoogleEligible; -", - "type": "text/javascript", - }, +for (var i = 1; i <= ATTEMPT; i++) { + queryResults = openidm.query(SYSTEM_ENDPOINT, params); + if (queryResults.result && queryResults.result.length > 0) { + logger.info("idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in " + i + " attempts. Query result: " + JSON.stringify(queryResults)); + resultingAction = "UPDATE"; + break; + } + java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again. } -`; -exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/managedAlpha_application_managedBravo_application.sync.json 1`] = ` -{ - "_id": "sync/managedAlpha_application_managedBravo_application", - "consentRequired": true, - "displayName": "Test Application Mapping", - "icon": null, - "name": "managedAlpha_application_managedBravo_application", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [ - { - "source": "authoritative", - "target": "_id", - }, - ], - "source": "managed/alpha_application", - "sourceQuery": { - "_queryFilter": "(eq "" or eq "")", - }, - "syncAfter": [ - "managedBravo_user_managedBravo_user", - ], - "target": "managed/bravo_application", - "targetQuery": { - "_queryFilter": "!(eq "")", - }, +if (!queryResults.result || queryResults.resultCount === 0) { + logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); + resultingAction = "UNLINK"; } -`; +resultingAction; +", + "type": "text/javascript", + }, + "situation": "MISSING", + }, + { + "action": "EXCEPTION", + "situation": "FOUND_ALREADY_LINKED", + }, + { + "action": "IGNORE", + "situation": "UNQUALIFIED", + }, + { + "action": "IGNORE", + "situation": "UNASSIGNED", + }, + { + "action": "UNLINK", + "situation": "LINK_ONLY", + }, + { + "action": "IGNORE", + "situation": "TARGET_IGNORED", + }, + { + "action": "IGNORE", + "situation": "SOURCE_IGNORED", + }, + { + "action": "IGNORE", + "situation": "ALL_GONE", + }, + { + "action": "UPDATE", + "situation": "CONFIRMED", + }, + { + "action": "LINK", + "situation": "FOUND", + }, + { + "action": "CREATE", + "situation": "ABSENT", + }, + ], + "properties": [ + { + "condition": { + "globals": {}, + "source": "object.custom_password_encrypted != null", + "type": "text/javascript", + }, + "source": "custom_password_encrypted", + "target": "__PASSWORD__", + "transform": { + "globals": {}, + "source": "openidm.decrypt(source);", + "type": "text/javascript", + }, + }, + { + "source": "cn", + "target": "__NAME__", + "transform": { + "globals": {}, + "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", + "type": "text/javascript", + }, + }, + { + "source": "givenName", + "target": "givenName", + }, + { + "source": "", + "target": "familyName", + "transform": { + "globals": {}, + "source": "if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) { + source.sn + " (Student)" +} else { + source.sn +}", + "type": "text/javascript", + }, + }, + ], + "queuedSync": { + "enabled": true, + "maxQueueSize": 20000, + "maxRetries": 5, + "pageSize": 100, + "pollingInterval": 1000, + "postRetryAction": "logged-ignore", + "retryDelay": 1000, + }, + "source": "managed/alpha_user", + "syncAfter": [ + "managedBravo_user_managedBravo_user", + "managedAlpha_application_managedBravo_application", + "managedAlpha_user_managedBravo_user", + "managedBravo_user_managedAlpha_user", + ], + "target": "system/GoogleApps/__ACCOUNT__", + "validSource": { + "globals": {}, + "source": "var isGoogleEligible = true; +//var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + " cn: " + source.cn + ") -"; +var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + ") -"; -exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/managedAlpha_user_managedBravo_user.sync.json 1`] = ` -{ - "_id": "sync/managedAlpha_user_managedBravo_user", - "consentRequired": true, - "displayName": "Test Mapping for Frodo", - "icon": null, - "name": "managedAlpha_user_managedBravo_user", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [ - { - "condition": { - "globals": {}, - "source": "console.log("Hello World!");", - "type": "text/javascript", - }, - "default": [ - "Default value string", - ], - "source": "accountStatus", - "target": "applications", - "transform": { - "globals": {}, - "source": "console.log("hello");", - "type": "text/javascript", - }, - }, - ], - "source": "managed/alpha_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - ], - "target": "managed/bravo_user", +//Get Applicable userTypes (no Parent accounts) +if (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) { + isGoogleEligible = false; + logMsg = logMsg + " Account type not eligible."; } -`; -exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/managedBravo_user_managedAlpha_user.sync.json 1`] = ` -{ - "_id": "sync/managedBravo_user_managedAlpha_user", - "consentRequired": false, - "displayName": "Frodo test mapping", - "icon": null, - "name": "managedBravo_user_managedAlpha_user", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - "managedAlpha_user_managedBravo_user", - ], - "target": "managed/alpha_user", +//Make sure the account has a valid encrypted password. +if (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) { + isGoogleEligible = false; + logMsg = logMsg + " No encrypted password yet."; } -`; -exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/managedBravo_user_managedBravo_user.sync.json 1`] = ` -{ - "_id": "sync/managedBravo_user_managedBravo_user", - "consentRequired": false, - "displayName": "managedBravo_user_managedBravo_user", - "icon": null, - "name": "managedBravo_user_managedBravo_user", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, - { - "action": "ASYNC", - "situation": "CONFIRMED", - }, - { - "action": "ASYNC", - "situation": "FOUND", - }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [], - "target": "managed/bravo_user", +//Check that CN exists and has no space. +if (source.cn && source.cn.includes(' ')) { + isGoogleEligible = false; + logMsg = logMsg + " CN with a space is not allowed."; } -`; -exports[`frodo mapping export "frodo mapping export -AD mappingExportTestDir4": should export all mappings to separate files in the mappingExportTestDir4 directory: mappingExportTestDir4/sync/sync.idm.json 1`] = ` -{ - "idm": { - "sync": { - "_id": "sync", - "mappings": [ - "file://managedBravo_user_managedBravo_user.sync.json", - "file://managedAlpha_application_managedBravo_application.sync.json", - "file://managedAlpha_user_managedBravo_user.sync.json", - "file://managedBravo_user_managedAlpha_user.sync.json", - "file://AlphaUser2GoogleApps.sync.json", - ], - }, +if (!isGoogleEligible) { + logMsg = logMsg + " Not sent to Google." + logger.info(logMsg); +} + +if (isGoogleEligible) { + logMsg = logMsg + " Sent to Google." + logger.info(logMsg); +} + +isGoogleEligible; +", + "type": "text/javascript", + }, + }, + ], }, - "meta": Any, } `; -exports[`frodo mapping export "frodo mapping export -Ni mapping/managedBravo_group_managedBravo_group --no-deps --use-string-arrays -D mappingExportTestDir1": should export the mapping with mapping id "mapping/managedBravo_group_managedBravo_group" into the directory named mappingExportTestDir1 1`] = `0`; +exports[`frodo mapping export "frodo mapping export -aD mappingExportTestDir9 -m idm": should export all IDM mappings to one file in the directory mappingExportTestDir4 1`] = `0`; -exports[`frodo mapping export "frodo mapping export -Ni mapping/managedBravo_group_managedBravo_group --no-deps --use-string-arrays -D mappingExportTestDir1": should export the mapping with mapping id "mapping/managedBravo_group_managedBravo_group" into the directory named mappingExportTestDir1 2`] = `""`; +exports[`frodo mapping export "frodo mapping export -aD mappingExportTestDir9 -m idm": should export all IDM mappings to one file in the directory mappingExportTestDir4 2`] = `""`; -exports[`frodo mapping export "frodo mapping export -Ni mapping/managedBravo_group_managedBravo_group --no-deps --use-string-arrays -D mappingExportTestDir1": should export the mapping with mapping id "mapping/managedBravo_group_managedBravo_group" into the directory named mappingExportTestDir1: mappingExportTestDir1/managedBravo_group_managedBravo_group.mapping.json 1`] = ` +exports[`frodo mapping export "frodo mapping export -aD mappingExportTestDir9 -m idm": should export all IDM mappings to one file in the directory mappingExportTestDir4: mappingExportTestDir9/allMappings.mapping.json 1`] = ` { "mapping": { - "mapping/managedBravo_group_managedBravo_group": { - "_id": "mapping/managedBravo_group_managedBravo_group", + "mapping/mappingtest": { + "_id": "mapping/mappingtest", "consentRequired": false, - "displayName": "managedBravo_group_managedBravo_group", + "displayName": "mappingtest", "icon": null, - "name": "managedBravo_group_managedBravo_group", + "name": "mappingtest", "policies": [ { - "action": "ASYNC", - "situation": "ABSENT", - }, - { - "action": "ASYNC", - "situation": "ALL_GONE", - }, - { - "action": "ASYNC", + "action": { + "globals": {}, + "source": "//asdfasdf", + "type": "text/javascript", + }, "situation": "AMBIGUOUS", }, { "action": "ASYNC", - "situation": "CONFIRMED", + "situation": "SOURCE_MISSING", }, { - "action": "ASYNC", - "situation": "FOUND", + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "groovy", + }, + "situation": "MISSING", }, { "action": "ASYNC", @@ -2011,19 +4214,15 @@ exports[`frodo mapping export "frodo mapping export -Ni mapping/managedBravo_gro }, { "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", + "situation": "UNQUALIFIED", }, { "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "situation": "UNASSIGNED", }, { "action": "ASYNC", - "situation": "SOURCE_MISSING", + "situation": "LINK_ONLY", }, { "action": "ASYNC", @@ -2031,51 +4230,12 @@ exports[`frodo mapping export "frodo mapping export -Ni mapping/managedBravo_gro }, { "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", - }, - ], - "properties": [], - "source": "managed/bravo_group", - "target": "managed/bravo_group", - }, - }, - "sync": { - "_id": "sync", - "mappings": [], - }, -} -`; - -exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.mapping.json": should export all mappings to a single file named my-allMappings.mapping.json 1`] = `0`; - -exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.mapping.json": should export all mappings to a single file named my-allMappings.mapping.json 2`] = `""`; - -exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.mapping.json": should export all mappings to a single file named my-allMappings.mapping.json: my-allMappings.mapping.json 1`] = ` -{ - "mapping": { - "mapping/managedBravo_group_managedBravo_group": { - "_id": "mapping/managedBravo_group_managedBravo_group", - "consentRequired": false, - "displayName": "managedBravo_group_managedBravo_group", - "icon": null, - "name": "managedBravo_group_managedBravo_group", - "policies": [ - { - "action": "ASYNC", - "situation": "ABSENT", + "situation": "SOURCE_IGNORED", }, { "action": "ASYNC", "situation": "ALL_GONE", }, - { - "action": "ASYNC", - "situation": "AMBIGUOUS", - }, { "action": "ASYNC", "situation": "CONFIRMED", @@ -2086,47 +4246,19 @@ exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.map }, { "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", - }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", - }, - { - "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", - }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", - }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", - }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", - }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", + "situation": "ABSENT", }, ], "properties": [], - "source": "managed/bravo_group", - "target": "managed/bravo_group", + "source": "managed/assignment", + "target": "managed/organization", }, - "mapping/managedBravo_user_managedBravo_user0": { - "_id": "mapping/managedBravo_user_managedBravo_user0", + "mapping/seantestmapping": { + "_id": "mapping/seantestmapping", "consentRequired": false, - "displayName": "managedBravo_user_managedBravo_user0", + "displayName": "seantestmapping", "icon": null, - "name": "managedBravo_user_managedBravo_user0", + "name": "seantestmapping", "policies": [ { "action": "ASYNC", @@ -2182,8 +4314,8 @@ exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.map }, ], "properties": [], - "source": "managed/bravo_user", - "target": "managed/bravo_user", + "source": "managed/assignment", + "target": "managed/organization", }, }, "meta": Any, @@ -2191,35 +4323,57 @@ exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.map "_id": "sync", "mappings": [ { - "_id": "sync/managedBravo_user_managedBravo_user", + "_id": "sync/managedOrganization_managedRole", "consentRequired": false, - "displayName": "managedBravo_user_managedBravo_user", + "displayName": "managedOrganization_managedRole", "icon": null, - "name": "managedBravo_user_managedBravo_user", + "name": "managedOrganization_managedRole", "policies": [ { - "action": "ASYNC", - "situation": "ABSENT", + "action": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "situation": "AMBIGUOUS", }, { - "action": "ASYNC", - "situation": "ALL_GONE", + "action": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//seantest", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", }, { - "action": "ASYNC", - "situation": "AMBIGUOUS", + "action": { + "globals": {}, + "source": "//seantest", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": "//seantest", + "type": "groovy", + }, + "situation": "MISSING", }, { "action": "ASYNC", - "situation": "CONFIRMED", + "situation": "FOUND_ALREADY_LINKED", }, { "action": "ASYNC", - "situation": "FOUND", + "situation": "UNQUALIFIED", }, { "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + "situation": "UNASSIGNED", }, { "action": "ASYNC", @@ -2227,7 +4381,7 @@ exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.map }, { "action": "ASYNC", - "situation": "MISSING", + "situation": "TARGET_IGNORED", }, { "action": "ASYNC", @@ -2235,32 +4389,32 @@ exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.map }, { "action": "ASYNC", - "situation": "SOURCE_MISSING", + "situation": "ALL_GONE", }, { "action": "ASYNC", - "situation": "TARGET_IGNORED", + "situation": "CONFIRMED", }, { "action": "ASYNC", - "situation": "UNASSIGNED", + "situation": "FOUND", }, { "action": "ASYNC", - "situation": "UNQUALIFIED", + "situation": "ABSENT", }, ], "properties": [], - "source": "managed/bravo_user", + "source": "managed/organization", "syncAfter": [], - "target": "managed/bravo_user", + "target": "managed/role", }, { - "_id": "sync/managedAlpha_application_managedBravo_application", - "consentRequired": true, - "displayName": "Test Application Mapping", + "_id": "sync/managedOrganization_managedSeantestmanagedobject", + "consentRequired": false, + "displayName": "managedOrganization_managedSeantestmanagedobject", "icon": null, - "name": "managedAlpha_application_managedBravo_application", + "name": "managedOrganization_managedSeantestmanagedobject", "policies": [ { "action": "ASYNC", @@ -2315,54 +4469,65 @@ exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.map "situation": "UNQUALIFIED", }, ], - "properties": [ - { - "source": "authoritative", - "target": "_id", - }, - ], - "source": "managed/alpha_application", - "sourceQuery": { - "_queryFilter": "(eq "" or eq "")", - }, + "properties": [], + "source": "managed/organization", "syncAfter": [ - "managedBravo_user_managedBravo_user", + "managedOrganization_managedRole", ], - "target": "managed/bravo_application", - "targetQuery": { - "_queryFilter": "!(eq "")", - }, + "target": "managed/seantestmanagedobject", }, { - "_id": "sync/managedAlpha_user_managedBravo_user", - "consentRequired": true, - "displayName": "Test Mapping for Frodo", + "_id": "sync/managedAssignment_managedUser", + "consentRequired": false, + "displayName": "managedAssignment_managedUser", "icon": null, - "name": "managedAlpha_user_managedBravo_user", + "name": "managedAssignment_managedUser", "policies": [ { - "action": "ASYNC", - "situation": "ABSENT", + "action": { + "globals": {}, + "source": "//asdfasdf", + "type": "groovy", + }, + "situation": "AMBIGUOUS", }, { - "action": "ASYNC", - "situation": "ALL_GONE", + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "text/javascript", + }, + "condition": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "groovy", + }, + "postAction": { + "globals": {}, + "source": "//asdfasdf", + "type": "text/javascript", + }, + "situation": "SOURCE_MISSING", }, { "action": "ASYNC", - "situation": "AMBIGUOUS", + "situation": "MISSING", }, { "action": "ASYNC", - "situation": "CONFIRMED", + "situation": "FOUND_ALREADY_LINKED", }, { "action": "ASYNC", - "situation": "FOUND", + "situation": "UNQUALIFIED", }, { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + "action": { + "globals": {}, + "source": "//asdfasdfasdf", + "type": "text/javascript", + }, + "situation": "UNASSIGNED", }, { "action": "ASYNC", @@ -2370,61 +4535,43 @@ exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.map }, { "action": "ASYNC", - "situation": "MISSING", - }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "situation": "TARGET_IGNORED", }, { "action": "ASYNC", - "situation": "SOURCE_MISSING", + "situation": "SOURCE_IGNORED", }, { "action": "ASYNC", - "situation": "TARGET_IGNORED", + "situation": "ALL_GONE", }, { "action": "ASYNC", - "situation": "UNASSIGNED", + "situation": "CONFIRMED", }, { "action": "ASYNC", - "situation": "UNQUALIFIED", + "situation": "FOUND", }, - ], - "properties": [ { - "condition": { - "globals": {}, - "source": "console.log("Hello World!");", - "type": "text/javascript", - }, - "default": [ - "Default value string", - ], - "source": "accountStatus", - "target": "applications", - "transform": { - "globals": {}, - "source": "console.log("hello");", - "type": "text/javascript", - }, + "action": "ASYNC", + "situation": "ABSENT", }, ], - "source": "managed/alpha_user", + "properties": [], + "source": "managed/assignment", "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", ], - "target": "managed/bravo_user", + "target": "managed/user", }, { - "_id": "sync/managedBravo_user_managedAlpha_user", + "_id": "sync/seantestmapping", "consentRequired": false, - "displayName": "Frodo test mapping", + "displayName": "seantestmapping", "icon": null, - "name": "managedBravo_user_managedAlpha_user", + "name": "seantestmapping", "policies": [ { "action": "ASYNC", @@ -2480,241 +4627,83 @@ exports[`frodo mapping export "frodo mapping export -a --file my-allMappings.map }, ], "properties": [], - "source": "managed/bravo_user", + "source": "managed/assignment", "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - "managedAlpha_user_managedBravo_user", + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", ], - "target": "managed/alpha_user", + "target": "managed/organization", }, { - "_id": "sync/AlphaUser2GoogleApps", + "_id": "sync/managedSeantestmanagedobject_managedUser", "consentRequired": false, - "correlationQuery": [ - { - "expressionTree": { - "all": [ - "__NAME__", - ], - }, - "file": "ui/correlateTreeToQueryFilter.js", - "linkQualifier": "default", - "mapping": "AlphaUser2GoogleApps", - "type": "text/javascript", - }, - ], - "displayName": "AlphaUser2GoogleApps", - "enableSync": { - "$bool": "&{esv.gac.enable.mapping}", - }, + "displayName": "managedSeantestmanagedobject_managedUser", "icon": null, - "name": "AlphaUser2GoogleApps", - "onCreate": { - "globals": {}, - "source": "target.orgUnitPath = "/NewAccounts";", - "type": "text/javascript", - }, - "onUpdate": { - "globals": {}, - "source": "//testing1234 -target.givenName = oldTarget.givenName; -target.familyName = oldTarget.familyName; -target.__NAME__ = oldTarget.__NAME__;", - "type": "text/javascript", - }, + "name": "managedSeantestmanagedobject_managedUser", "policies": [ { - "action": "EXCEPTION", - "situation": "AMBIGUOUS", + "action": "ASYNC", + "situation": "ABSENT", }, { - "action": "UNLINK", - "situation": "SOURCE_MISSING", + "action": "ASYNC", + "situation": "ALL_GONE", }, { - "action": { - "globals": {}, - "source": "// Timing Constants -var ATTEMPT = 6; // Number of attempts to find the Google user. -var SLEEP_TIME = 500; // Milliseconds between retries. -var SYSTEM_ENDPOINT = "system/GoogleApps/__ACCOUNT__"; -var MAPPING_NAME = "AlphaUser2GoogleApps"; -var GOOGLE_DOMAIN = identityServer.getProperty("esv.gac.domain"); -var googleEmail = source.userName + "@" + GOOGLE_DOMAIN; -var frUserGUID = source._id; -var resultingAction = "ASYNC"; - -// Get the Google GUID -var linkQueryParams = {'_queryFilter': 'firstId eq "' + frUserGUID + '" and linkType eq "' + MAPPING_NAME + '"'}; -var linkResults = openidm.query("repo/link/", linkQueryParams, null); -var googleGUID; - -if (linkResults.resultCount === 1) { - googleGUID = linkResults.result[0].secondId; -} - -var queryResults; // Resulting query from looking for the Google user. -var params = {'_queryFilter': '__UID__ eq "' + googleGUID + '"'}; - -for (var i = 1; i <= ATTEMPT; i++) { - queryResults = openidm.query(SYSTEM_ENDPOINT, params); - if (queryResults.result && queryResults.result.length > 0) { - logger.info("idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in " + i + " attempts. Query result: " + JSON.stringify(queryResults)); - resultingAction = "UPDATE"; - break; - } - java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again. -} - -if (!queryResults.result || queryResults.resultCount === 0) { - logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); - resultingAction = "UNLINK"; -} -resultingAction; -", - "type": "text/javascript", - }, - "situation": "MISSING", + "action": "ASYNC", + "situation": "AMBIGUOUS", }, { - "action": "EXCEPTION", - "situation": "FOUND_ALREADY_LINKED", + "action": "ASYNC", + "situation": "CONFIRMED", }, { - "action": "IGNORE", - "situation": "UNQUALIFIED", + "action": "ASYNC", + "situation": "FOUND", }, { - "action": "IGNORE", - "situation": "UNASSIGNED", + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED", }, { - "action": "UNLINK", + "action": "ASYNC", "situation": "LINK_ONLY", }, { - "action": "IGNORE", - "situation": "TARGET_IGNORED", + "action": "ASYNC", + "situation": "MISSING", }, { - "action": "IGNORE", + "action": "ASYNC", "situation": "SOURCE_IGNORED", }, { - "action": "IGNORE", - "situation": "ALL_GONE", - }, - { - "action": "UPDATE", - "situation": "CONFIRMED", - }, - { - "action": "LINK", - "situation": "FOUND", - }, - { - "action": "CREATE", - "situation": "ABSENT", - }, - ], - "properties": [ - { - "condition": { - "globals": {}, - "source": "object.custom_password_encrypted != null", - "type": "text/javascript", - }, - "source": "custom_password_encrypted", - "target": "__PASSWORD__", - "transform": { - "globals": {}, - "source": "openidm.decrypt(source);", - "type": "text/javascript", - }, + "action": "ASYNC", + "situation": "SOURCE_MISSING", }, { - "source": "cn", - "target": "__NAME__", - "transform": { - "globals": {}, - "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", - "type": "text/javascript", - }, + "action": "ASYNC", + "situation": "TARGET_IGNORED", }, { - "source": "givenName", - "target": "givenName", + "action": "ASYNC", + "situation": "UNASSIGNED", }, { - "source": "", - "target": "familyName", - "transform": { - "globals": {}, - "source": "if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) { - source.sn + " (Student)" -} else { - source.sn -}", - "type": "text/javascript", - }, + "action": "ASYNC", + "situation": "UNQUALIFIED", }, ], - "queuedSync": { - "enabled": true, - "maxQueueSize": 20000, - "maxRetries": 5, - "pageSize": 100, - "pollingInterval": 1000, - "postRetryAction": "logged-ignore", - "retryDelay": 1000, - }, - "source": "managed/alpha_user", + "properties": [], + "source": "managed/seantestmanagedobject", "syncAfter": [ - "managedBravo_user_managedBravo_user", - "managedAlpha_application_managedBravo_application", - "managedAlpha_user_managedBravo_user", - "managedBravo_user_managedAlpha_user", + "managedOrganization_managedRole", + "managedOrganization_managedSeantestmanagedobject", + "managedAssignment_managedUser", + "seantestmapping", ], - "target": "system/GoogleApps/__ACCOUNT__", - "validSource": { - "globals": {}, - "source": "var isGoogleEligible = true; -//var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + " cn: " + source.cn + ") -"; -var logMsg = "idmlog: ---AplhaUser2GAC (username: " + source.userName + " - userType: " + source.frIndexedInteger1 + ") -"; - -//Get Applicable userTypes (no Parent accounts) -if (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) { - isGoogleEligible = false; - logMsg = logMsg + " Account type not eligible."; -} - -//Make sure the account has a valid encrypted password. -if (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) { - isGoogleEligible = false; - logMsg = logMsg + " No encrypted password yet."; -} - -//Check that CN exists and has no space. -if (source.cn && source.cn.includes(' ')) { - isGoogleEligible = false; - logMsg = logMsg + " CN with a space is not allowed."; -} - -if (!isGoogleEligible) { - logMsg = logMsg + " Not sent to Google." - logger.info(logMsg); -} - -if (isGoogleEligible) { - logMsg = logMsg + " Sent to Google." - logger.info(logMsg); -} - -isGoogleEligible; -", - "type": "text/javascript", - }, + "target": "managed/user", }, ], }, diff --git a/test/e2e/__snapshots__/mapping-import.e2e.test.js.snap b/test/e2e/__snapshots__/mapping-import.e2e.test.js.snap index 2b55b8881..5163419b3 100644 --- a/test/e2e/__snapshots__/mapping-import.e2e.test.js.snap +++ b/test/e2e/__snapshots__/mapping-import.e2e.test.js.snap @@ -8,10 +8,125 @@ exports[`frodo mapping import "frodo mapping import --no-deps --file allMappings exports[`frodo mapping import "frodo mapping import --no-deps --mapping-id mapping/managedBravo_group_managedBravo_group --file allMappings.mapping.json -D test/e2e/exports/all": should import the mapping with the id "mapping/managedBravo_group_managedBravo_group" from the file "test/e2e/exports/all/allMappings.mapping.json" 1`] = `""`; -exports[`frodo mapping import "frodo mapping import -AD test/e2e/exports/all-separate/cloud/global/idm": should import all mappings from the test/e2e/exports/all-separate/cloud/global/idm directory" 1`] = `""`; +exports[`frodo mapping import "frodo mapping import -AD test/e2e/exports/all-separate-extracted-script/cloud/global/sync": should import all mappings from the test/e2e/exports/all-separate/cloud/global/idm directory" 1`] = `""`; + +exports[`frodo mapping import "frodo mapping import -AD test/e2e/exports/all-separate-extracted-script/idm/global -m idm -m idm": should import all IDM mappings from the directory" 1`] = ` +"Usage: frodo mapping import [options] [host] [realm] [username] [password] + +Import IDM mappings. + +Arguments: + host AM base URL, e.g.: + https://cdk.iam.example.com/am. To use a + connection profile, just specify a + unique substring. + realm Realm. Specify realm as '/' for the root + realm or 'realm' or '/parent/child' + otherwise. (default: "alpha" for + Identity Cloud tenants, "/" otherwise.) + username Username to login with. Must be an admin + user with appropriate rights to manage + authentication journeys/trees. + password Password. + +Options: + -a, --all Import all mappings from single file. + Ignored with -i. + -A, --all-separate Import all mappings from separate files + (*.sync.json or *.mapping.json) in the + current directory. Ignored with -i and + -a. + --curlirize Output all network calls in curl format. + -D, --directory Set the working directory. + --debug Debug output during command execution. + If specified, may or may not produce + additional output helpful for + troubleshooting. + -f, --file Name of the file to import + --flush-cache Flush token cache. + -h, --help Help + -i, --mapping-id Mapping id. If specified, only one + mapping is imported and the options -a + and -A are ignored. + --idm-host IDM base URL, e.g.: + https://cdk.idm.example.com/myidm. Use + only if your IDM installation resides in + a different domain and/or if the base + path differs from the default + "/openidm". + -k, --insecure Allow insecure connections when using + SSL/TLS. Has no effect when using a + network proxy for https + (HTTPS_PROXY=http://:), in + that case the proxy must provide this + capability. (default: Don't allow + insecure connections) + --login-client-id Specify a custom OAuth2 client id to use + a your own oauth2 client for IDM API + calls in deployments of type "cloud" or + "forgeops". Your custom client must be + configured as a public client and allow + the authorization code grant using the + "openid fr:idm:*" scope. Use the + "--redirect-uri" parameter if you have + configured a custom redirect uri + (default: + "/platform/appAuthHelperRedirect.html"). + --login-redirect-uri Specify a custom redirect URI to use + with your custom OAuth2 client (efault: + "/platform/appAuthHelperRedirect.html"). + -m, --type Override auto-detected deployment type. + Valid values for type: + classic: A classic Access + Management-only deployment with custom + layout and configuration. + cloud: A ForgeRock Identity Cloud + environment. + forgeops: A ForgeOps CDK or CDM + deployment. + The detected or provided deployment type + controls certain behavior like obtaining + an Identity Management admin token or + not and whether to export/import + referenced email templates or how to + walk through the tenant admin login flow + of Identity Cloud and handle MFA + (choices: "classic", "cloud", + "forgeops", "idm") + --no-cache Disable token cache for this operation. + --no-deps Do not include any dependencies. + --sa-id Service account id. + --sa-jwk-file File containing the JSON Web Key (JWK) + associated with the the service account. + --verbose Verbose output during command execution. + If specified, may or may not produce + additional output. + +Environment Variables: + FRODO_HOST: AM base URL. Overridden by 'host' argument. + FRODO_IDM_HOST: IDM base URL. Overridden by '--idm-host' option. + FRODO_REALM: Realm. Overridden by 'realm' argument. + FRODO_USERNAME: Username. Overridden by 'username' argument. + FRODO_PASSWORD: Password. Overridden by 'password' argument. + FRODO_LOGIN_CLIENT_ID: OAuth2 client id for IDM API calls. Overridden by '--login-client-id' option. + FRODO_LOGIN_REDIRECT_URI: Redirect Uri for custom OAuth2 client id. Overridden by '--login-redirect-uri' option. + FRODO_SA_ID: Service account uuid. Overridden by '--sa-id' option. + FRODO_SA_JWK: Service account JWK. Overridden by '--sa-jwk-file' option but takes the actual JWK as a value, not a file name. + FRODO_NO_CACHE: Disable token cache. Same as '--no-cache' option. + FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'. + FRODO_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'. + FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use. + FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. + FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file. + FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH. + +" +`; exports[`frodo mapping import "frodo mapping import -af test/e2e/exports/all/allMappings.mapping.json": should import all mappings from the file "test/e2e/exports/all/allMappings.mapping.json" 1`] = `""`; +exports[`frodo mapping import "frodo mapping import -af test/e2e/exports/all/idm/allMappings.mapping.json -m idm": should import all IDM mappings from file." 1`] = `""`; + exports[`frodo mapping import "frodo mapping import -f test/e2e/exports/all/allMappings.mapping.json": should import the first mapping from the file "test/e2e/exports/all/allMappings.mapping.json" 1`] = `""`; exports[`frodo mapping import "frodo mapping import -i sync/managedAlpha_application_managedBravo_application -f test/e2e/exports/all/allMappings.mapping.json": should import the mapping with the id "sync/managedAlpha_application_managedBravo_application" from the file "test/e2e/exports/all/allMappings.mapping.json" 1`] = `""`; diff --git a/test/e2e/__snapshots__/role-export.e2e.test.js.snap b/test/e2e/__snapshots__/role-export.e2e.test.js.snap index 35f9fe824..9d123d293 100644 --- a/test/e2e/__snapshots__/role-export.e2e.test.js.snap +++ b/test/e2e/__snapshots__/role-export.e2e.test.js.snap @@ -1495,6 +1495,106 @@ exports[`frodo role export "frodo role export --role-name test-internal-role --f } `; +exports[`frodo role export "frodo role export -AD roleExportTestDir3 -m idm": should export all idm roles to separate files 1`] = `0`; + +exports[`frodo role export "frodo role export -AD roleExportTestDir3 -m idm": should export all idm roles to separate files 2`] = `""`; + +exports[`frodo role export "frodo role export -AD roleExportTestDir3 -m idm": should export all idm roles to separate files: roleExportTestDir3/openidm-admin.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-admin": { + "_id": "openidm-admin", + "condition": null, + "description": "Administrative access", + "name": "openidm-admin", + "privileges": [], + "temporalConstraints": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo role export "frodo role export -AD roleExportTestDir3 -m idm": should export all idm roles to separate files: roleExportTestDir3/openidm-authorized.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-authorized": { + "_id": "openidm-authorized", + "condition": null, + "description": "Basic minimum user", + "name": "openidm-authorized", + "privileges": [], + "temporalConstraints": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo role export "frodo role export -AD roleExportTestDir3 -m idm": should export all idm roles to separate files: roleExportTestDir3/openidm-cert.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-cert": { + "_id": "openidm-cert", + "condition": null, + "description": "Authenticated via certificate", + "name": "openidm-cert", + "privileges": [], + "temporalConstraints": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo role export "frodo role export -AD roleExportTestDir3 -m idm": should export all idm roles to separate files: roleExportTestDir3/openidm-reg.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-reg": { + "_id": "openidm-reg", + "condition": null, + "description": "Anonymous access", + "name": "openidm-reg", + "privileges": [], + "temporalConstraints": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo role export "frodo role export -AD roleExportTestDir3 -m idm": should export all idm roles to separate files: roleExportTestDir3/openidm-tasks-manager.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-tasks-manager": { + "_id": "openidm-tasks-manager", + "condition": null, + "description": "Allowed to reassign workflow tasks", + "name": "openidm-tasks-manager", + "privileges": [], + "temporalConstraints": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo role export "frodo role export -AD roleExportTestDir3 -m idm": should export all idm roles to separate files: roleExportTestDir3/platform-provisioning.internalRole.json 1`] = ` +{ + "internalRole": { + "platform-provisioning": { + "_id": "platform-provisioning", + "condition": null, + "description": "Platform provisioning access", + "name": "platform-provisioning", + "privileges": [], + "temporalConstraints": [], + }, + }, + "meta": Any, +} +`; + exports[`frodo role export "frodo role export -AND roleExportTestDir1": should export all roles to separate files 1`] = `0`; exports[`frodo role export "frodo role export -AND roleExportTestDir1": should export all roles to separate files 2`] = `""`; @@ -1922,6 +2022,66 @@ exports[`frodo role export "frodo role export -AND roleExportTestDir1": should e } `; +exports[`frodo role export "frodo role export -aD roleExportTestDir4 -m idm ": should export all idm roles to one file 1`] = `0`; + +exports[`frodo role export "frodo role export -aD roleExportTestDir4 -m idm ": should export all idm roles to one file 2`] = `""`; + +exports[`frodo role export "frodo role export -aD roleExportTestDir4 -m idm ": should export all idm roles to one file: roleExportTestDir4/allInternalRoles.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-admin": { + "_id": "openidm-admin", + "condition": null, + "description": "Administrative access", + "name": "openidm-admin", + "privileges": [], + "temporalConstraints": [], + }, + "openidm-authorized": { + "_id": "openidm-authorized", + "condition": null, + "description": "Basic minimum user", + "name": "openidm-authorized", + "privileges": [], + "temporalConstraints": [], + }, + "openidm-cert": { + "_id": "openidm-cert", + "condition": null, + "description": "Authenticated via certificate", + "name": "openidm-cert", + "privileges": [], + "temporalConstraints": [], + }, + "openidm-reg": { + "_id": "openidm-reg", + "condition": null, + "description": "Anonymous access", + "name": "openidm-reg", + "privileges": [], + "temporalConstraints": [], + }, + "openidm-tasks-manager": { + "_id": "openidm-tasks-manager", + "condition": null, + "description": "Allowed to reassign workflow tasks", + "name": "openidm-tasks-manager", + "privileges": [], + "temporalConstraints": [], + }, + "platform-provisioning": { + "_id": "platform-provisioning", + "condition": null, + "description": "Platform provisioning access", + "name": "platform-provisioning", + "privileges": [], + "temporalConstraints": [], + }, + }, + "meta": Any, +} +`; + exports[`frodo role export "frodo role export -aNf roleExportTestFile3.json": should export all roles to a single file. 1`] = `0`; exports[`frodo role export "frodo role export -aNf roleExportTestFile3.json": should export all roles to a single file. 2`] = `""`; diff --git a/test/e2e/__snapshots__/role-import.e2e.test.js.snap b/test/e2e/__snapshots__/role-import.e2e.test.js.snap index 1e90df4f1..b83011f5a 100644 --- a/test/e2e/__snapshots__/role-import.e2e.test.js.snap +++ b/test/e2e/__snapshots__/role-import.e2e.test.js.snap @@ -10,8 +10,12 @@ exports[`frodo role import "frodo role import --role-name test-internal-role --f exports[`frodo role import "frodo role import -AD test/e2e/exports/all-separate/cloud/global/internalRole": should import all roles from the test/e2e/exports/all-separate/cloud/global/internalRole directory" 1`] = `""`; +exports[`frodo role import "frodo role import -AD test/e2e/exports/all-separate/idm/global/internalRole -m idm ": should import all on prem idm roles from the directory" 1`] = `""`; + exports[`frodo role import "frodo role import -af test/e2e/exports/all/allInternalRoles.internalRole.json": should import all roles from the file "test/e2e/exports/all/allInternalRoles.internalRole.json" 1`] = `""`; +exports[`frodo role import "frodo role import -af test/e2e/exports/all/idm/allInternalRoles.internalRole.json -m idm": should import all on prem idm roles from one file" 1`] = `""`; + exports[`frodo role import "frodo role import -f test/e2e/exports/all/allInternalRoles.internalRole.json": should import the first role from the file "test/e2e/exports/all/allInternalRoles.internalRole.json" 1`] = `""`; exports[`frodo role import "frodo role import -i ccb11ba1-333b-4197-95db-89bb08a2ab56 -f test/e2e/exports/all/allInternalRoles.internalRole.json": should import the role with the id "ccb11ba1-333b-4197-95db-89bb08a2ab56" from the file "test/e2e/exports/all/allInternalRoles.internalRole.json" 1`] = `""`; diff --git a/test/e2e/__snapshots__/server-export.e2e.test.js.snap b/test/e2e/__snapshots__/server-export.e2e.test.js.snap index 054565bd0..525c4fa12 100644 --- a/test/e2e/__snapshots__/server-export.e2e.test.js.snap +++ b/test/e2e/__snapshots__/server-export.e2e.test.js.snap @@ -1,10 +1,10 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`frodo server export "frodo server export --all": should export all servers to a single file 1`] = `0`; +exports[`frodo server export "frodo server export --all -m classic": should export all servers to a single file 1`] = `0`; -exports[`frodo server export "frodo server export --all": should export all servers to a single file 2`] = `""`; +exports[`frodo server export "frodo server export --all -m classic": should export all servers to a single file 2`] = `""`; -exports[`frodo server export "frodo server export --all": should export all servers to a single file: allServers.server.json 1`] = ` +exports[`frodo server export "frodo server export --all -m classic": should export all servers to a single file: allServers.server.json 1`] = ` { "defaultProperties": {}, "meta": Any, @@ -1742,11 +1742,11 @@ exports[`frodo server export "frodo server export --all": should export all serv } `; -exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5": should export all servers to separate files in the directory serverExportTestDir5 1`] = `0`; +exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5 -m classic": should export all servers to separate files in the directory serverExportTestDir5 1`] = `0`; -exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5": should export all servers to separate files in the directory serverExportTestDir5 2`] = `""`; +exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5 -m classic": should export all servers to separate files in the directory serverExportTestDir5 2`] = `""`; -exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5": should export all servers to separate files in the directory serverExportTestDir5: serverExportTestDir5/01.server.json 1`] = ` +exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5 -m classic": should export all servers to separate files in the directory serverExportTestDir5: serverExportTestDir5/01.server.json 1`] = ` { "defaultProperties": {}, "meta": Any, @@ -2338,7 +2338,7 @@ exports[`frodo server export "frodo server export --all-separate --directory ser } `; -exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5": should export all servers to separate files in the directory serverExportTestDir5: serverExportTestDir5/03.server.json 1`] = ` +exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5 -m classic": should export all servers to separate files in the directory serverExportTestDir5: serverExportTestDir5/03.server.json 1`] = ` { "defaultProperties": {}, "meta": Any, @@ -2920,7 +2920,7 @@ exports[`frodo server export "frodo server export --all-separate --directory ser } `; -exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5": should export all servers to separate files in the directory serverExportTestDir5: serverExportTestDir5/04.server.json 1`] = ` +exports[`frodo server export "frodo server export --all-separate --directory serverExportTestDir5 -m classic": should export all servers to separate files in the directory serverExportTestDir5: serverExportTestDir5/04.server.json 1`] = ` { "defaultProperties": {}, "meta": Any, @@ -3502,11 +3502,11 @@ exports[`frodo server export "frodo server export --all-separate --directory ser } `; -exports[`frodo server export "frodo server export --server-id 01": should export the server with server id "01". 1`] = `0`; +exports[`frodo server export "frodo server export --server-id 01 -m classic": should export the server with server id "01". 1`] = `0`; -exports[`frodo server export "frodo server export --server-id 01": should export the server with server id "01". 2`] = `""`; +exports[`frodo server export "frodo server export --server-id 01 -m classic": should export the server with server id "01". 2`] = `""`; -exports[`frodo server export "frodo server export --server-id 01": should export the server with server id "01".: 01.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-id 01 -m classic": should export the server with server id "01".: 01.server.json 1`] = ` { "defaultProperties": {}, "meta": Any, @@ -4098,11 +4098,11 @@ exports[`frodo server export "frodo server export --server-id 01": should export } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties. 1`] = `0`; +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties. 1`] = `0`; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties. 2`] = `""`; +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties. 2`] = `""`; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03.server.json 1`] = ` { "defaultProperties": {}, "meta": Any, @@ -4126,14 +4126,14 @@ exports[`frodo server export "frodo server export --server-url http://localhost: } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/advanced.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/advanced.properties.server.json 1`] = ` { "_id": "03/properties/advanced", "com.iplanet.am.lbcookie.value": "03", } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/cts.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/cts.properties.server.json 1`] = ` { "_id": "03/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -4195,7 +4195,7 @@ exports[`frodo server export "frodo server export --server-url http://localhost: } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/directoryConfiguration.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/directoryConfiguration.properties.server.json 1`] = ` { "_id": "03/properties/directoryConfiguration", "directoryConfiguration": { @@ -4221,7 +4221,7 @@ exports[`frodo server export "frodo server export --server-url http://localhost: } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/general.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/general.properties.server.json 1`] = ` { "_id": "03/properties/general", "amconfig.header.debug": { @@ -4272,7 +4272,7 @@ exports[`frodo server export "frodo server export --server-url http://localhost: } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/sdk.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/sdk.properties.server.json 1`] = ` { "_id": "03/properties/sdk", "amconfig.header.cachingreplica": { @@ -4340,7 +4340,7 @@ exports[`frodo server export "frodo server export --server-url http://localhost: } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/security.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/security.properties.server.json 1`] = ` { "_id": "03/properties/security", "amconfig.header.cookie": { @@ -4484,7 +4484,7 @@ exports[`frodo server export "frodo server export --server-url http://localhost: } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/session.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/session.properties.server.json 1`] = ` { "_id": "03/properties/session", "amconfig.header.sessionlogging": { @@ -4534,7 +4534,7 @@ exports[`frodo server export "frodo server export --server-url http://localhost: } `; -exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/uma.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export --server-url http://localhost:8081/am --extract --directory serverExportTestDir2 -m classic": should export the server with url "http://localhost:8081/am" along with extracted properties.: serverExportTestDir2/03/uma.properties.server.json 1`] = ` { "_id": "03/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -4716,11 +4716,11 @@ exports[`frodo server export "frodo server export --server-url http://localhost: } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties 1`] = `0`; +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties 1`] = `0`; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties 2`] = `""`; +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties 2`] = `""`; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01.server.json 1`] = ` { "defaultProperties": { "advanced": "file://default/advanced.default.properties.server.json", @@ -4751,7 +4751,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/advanced.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/advanced.properties.server.json 1`] = ` { "_id": "01/properties/advanced", "bootstrap.file": "/home/prestonhales/.openamcfg/AMConfig_usr_local_tomcat_webapps_am_", @@ -4768,7 +4768,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/cts.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/cts.properties.server.json 1`] = ` { "_id": "01/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -4830,7 +4830,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/directoryConfiguration.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/directoryConfiguration.properties.server.json 1`] = ` { "_id": "01/properties/directoryConfiguration", "directoryConfiguration": { @@ -4856,7 +4856,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/general.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/general.properties.server.json 1`] = ` { "_id": "01/properties/general", "amconfig.header.debug": { @@ -4907,7 +4907,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/sdk.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/sdk.properties.server.json 1`] = ` { "_id": "01/properties/sdk", "amconfig.header.cachingreplica": { @@ -4975,7 +4975,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/security.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/security.properties.server.json 1`] = ` { "_id": "01/properties/security", "amconfig.header.cookie": { @@ -5119,7 +5119,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/session.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/session.properties.server.json 1`] = ` { "_id": "01/properties/session", "amconfig.header.sessionlogging": { @@ -5169,7 +5169,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/uma.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/01/uma.properties.server.json 1`] = ` { "_id": "01/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -5351,7 +5351,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03.server.json 1`] = ` { "defaultProperties": { "advanced": "file://default/advanced.default.properties.server.json", @@ -5382,14 +5382,14 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/advanced.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/advanced.properties.server.json 1`] = ` { "_id": "03/properties/advanced", "com.iplanet.am.lbcookie.value": "03", } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/cts.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/cts.properties.server.json 1`] = ` { "_id": "03/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -5451,7 +5451,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/directoryConfiguration.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/directoryConfiguration.properties.server.json 1`] = ` { "_id": "03/properties/directoryConfiguration", "directoryConfiguration": { @@ -5477,7 +5477,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/general.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/general.properties.server.json 1`] = ` { "_id": "03/properties/general", "amconfig.header.debug": { @@ -5528,7 +5528,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/sdk.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/sdk.properties.server.json 1`] = ` { "_id": "03/properties/sdk", "amconfig.header.cachingreplica": { @@ -5596,7 +5596,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/security.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/security.properties.server.json 1`] = ` { "_id": "03/properties/security", "amconfig.header.cookie": { @@ -5740,7 +5740,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/session.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/session.properties.server.json 1`] = ` { "_id": "03/properties/session", "amconfig.header.sessionlogging": { @@ -5790,7 +5790,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/uma.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/03/uma.properties.server.json 1`] = ` { "_id": "03/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -5972,7 +5972,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04.server.json 1`] = ` { "defaultProperties": { "advanced": "file://default/advanced.default.properties.server.json", @@ -6003,14 +6003,14 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/advanced.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/advanced.properties.server.json 1`] = ` { "_id": "04/properties/advanced", "com.iplanet.am.lbcookie.value": "04", } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/cts.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/cts.properties.server.json 1`] = ` { "_id": "04/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -6072,7 +6072,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/directoryConfiguration.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/directoryConfiguration.properties.server.json 1`] = ` { "_id": "04/properties/directoryConfiguration", "directoryConfiguration": { @@ -6098,7 +6098,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/general.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/general.properties.server.json 1`] = ` { "_id": "04/properties/general", "amconfig.header.debug": { @@ -6149,7 +6149,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/sdk.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/sdk.properties.server.json 1`] = ` { "_id": "04/properties/sdk", "amconfig.header.cachingreplica": { @@ -6217,7 +6217,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/security.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/security.properties.server.json 1`] = ` { "_id": "04/properties/security", "amconfig.header.cookie": { @@ -6361,7 +6361,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/session.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/session.properties.server.json 1`] = ` { "_id": "04/properties/session", "amconfig.header.sessionlogging": { @@ -6411,7 +6411,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/uma.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/04/uma.properties.server.json 1`] = ` { "_id": "04/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -6593,7 +6593,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/advanced.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/advanced.default.properties.server.json 1`] = ` { "_id": "null/properties/advanced", "com.iplanet.am.buildDate": "2024-March-28 16:00", @@ -6752,7 +6752,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/cts.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/cts.default.properties.server.json 1`] = ` { "_id": "null/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -6774,7 +6774,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/general.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/general.default.properties.server.json 1`] = ` { "_id": "null/properties/general", "amconfig.header.debug": { @@ -6795,7 +6795,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/sdk.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/sdk.default.properties.server.json 1`] = ` { "_id": "null/properties/sdk", "amconfig.header.cachingreplica": { @@ -6824,7 +6824,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/security.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/security.default.properties.server.json 1`] = ` { "_id": "null/properties/security", "amconfig.header.cookie": { @@ -6871,7 +6871,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/session.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/session.default.properties.server.json 1`] = ` { "_id": "null/properties/session", "amconfig.header.sessionlogging": { @@ -6894,7 +6894,7 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/uma.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4 -m classic": should export all servers to separate files along with extracted and default properties: serverExportTestDir4/default/uma.default.properties.server.json 1`] = ` { "_id": "null/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -6956,11 +6956,11 @@ exports[`frodo server export "frodo server export -AxNdD serverExportTestDir4": } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties. 1`] = `0`; +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties. 1`] = `0`; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties. 2`] = `""`; +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties. 2`] = `""`; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/advanced.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/advanced.properties.server.json 1`] = ` { "_id": "01/properties/advanced", "bootstrap.file": "/home/prestonhales/.openamcfg/AMConfig_usr_local_tomcat_webapps_am_", @@ -6977,7 +6977,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/cts.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/cts.properties.server.json 1`] = ` { "_id": "01/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -7039,7 +7039,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/directoryConfiguration.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/directoryConfiguration.properties.server.json 1`] = ` { "_id": "01/properties/directoryConfiguration", "directoryConfiguration": { @@ -7065,7 +7065,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/general.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/general.properties.server.json 1`] = ` { "_id": "01/properties/general", "amconfig.header.debug": { @@ -7116,7 +7116,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/sdk.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/sdk.properties.server.json 1`] = ` { "_id": "01/properties/sdk", "amconfig.header.cachingreplica": { @@ -7184,7 +7184,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/security.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/security.properties.server.json 1`] = ` { "_id": "01/properties/security", "amconfig.header.cookie": { @@ -7328,7 +7328,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/session.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/session.properties.server.json 1`] = ` { "_id": "01/properties/session", "amconfig.header.sessionlogging": { @@ -7378,7 +7378,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/uma.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/01/uma.properties.server.json 1`] = ` { "_id": "01/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -7560,14 +7560,14 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/advanced.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/advanced.properties.server.json 1`] = ` { "_id": "03/properties/advanced", "com.iplanet.am.lbcookie.value": "03", } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/cts.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/cts.properties.server.json 1`] = ` { "_id": "03/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -7629,7 +7629,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/directoryConfiguration.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/directoryConfiguration.properties.server.json 1`] = ` { "_id": "03/properties/directoryConfiguration", "directoryConfiguration": { @@ -7655,7 +7655,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/general.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/general.properties.server.json 1`] = ` { "_id": "03/properties/general", "amconfig.header.debug": { @@ -7706,7 +7706,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/sdk.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/sdk.properties.server.json 1`] = ` { "_id": "03/properties/sdk", "amconfig.header.cachingreplica": { @@ -7774,7 +7774,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/security.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/security.properties.server.json 1`] = ` { "_id": "03/properties/security", "amconfig.header.cookie": { @@ -7918,7 +7918,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/session.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/session.properties.server.json 1`] = ` { "_id": "03/properties/session", "amconfig.header.sessionlogging": { @@ -7968,7 +7968,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/uma.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/03/uma.properties.server.json 1`] = ` { "_id": "03/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -8150,14 +8150,14 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/advanced.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/advanced.properties.server.json 1`] = ` { "_id": "04/properties/advanced", "com.iplanet.am.lbcookie.value": "04", } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/cts.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/cts.properties.server.json 1`] = ` { "_id": "04/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -8219,7 +8219,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/directoryConfiguration.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/directoryConfiguration.properties.server.json 1`] = ` { "_id": "04/properties/directoryConfiguration", "directoryConfiguration": { @@ -8245,7 +8245,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/general.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/general.properties.server.json 1`] = ` { "_id": "04/properties/general", "amconfig.header.debug": { @@ -8296,7 +8296,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/sdk.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/sdk.properties.server.json 1`] = ` { "_id": "04/properties/sdk", "amconfig.header.cachingreplica": { @@ -8364,7 +8364,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/security.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/security.properties.server.json 1`] = ` { "_id": "04/properties/security", "amconfig.header.cookie": { @@ -8508,7 +8508,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/session.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/session.properties.server.json 1`] = ` { "_id": "04/properties/session", "amconfig.header.sessionlogging": { @@ -8558,7 +8558,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/uma.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/04/uma.properties.server.json 1`] = ` { "_id": "04/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -8740,7 +8740,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/advanced.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/advanced.default.properties.server.json 1`] = ` { "_id": "null/properties/advanced", "com.iplanet.am.buildDate": "2024-March-28 16:00", @@ -8899,7 +8899,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/cts.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/cts.default.properties.server.json 1`] = ` { "_id": "null/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -8921,7 +8921,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/general.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/general.default.properties.server.json 1`] = ` { "_id": "null/properties/general", "amconfig.header.debug": { @@ -8942,7 +8942,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/sdk.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/sdk.default.properties.server.json 1`] = ` { "_id": "null/properties/sdk", "amconfig.header.cachingreplica": { @@ -8971,7 +8971,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/security.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/security.default.properties.server.json 1`] = ` { "_id": "null/properties/security", "amconfig.header.cookie": { @@ -9018,7 +9018,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/session.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/session.default.properties.server.json 1`] = ` { "_id": "null/properties/session", "amconfig.header.sessionlogging": { @@ -9041,7 +9041,7 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/uma.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.json -D serverExportTestDir3 -m classic": should export all servers to a single file in the directory serverExportTestDir3 along with extracted and default properties.: serverExportTestDir3/default/uma.default.properties.server.json 1`] = ` { "_id": "null/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -9103,11 +9103,11 @@ exports[`frodo server export "frodo server export -axNdf serverExportTestFile3.j } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties. 1`] = `0`; +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties. 1`] = `0`; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties. 2`] = `""`; +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties. 2`] = `""`; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/advanced.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/advanced.properties.server.json 1`] = ` { "_id": "01/properties/advanced", "bootstrap.file": "/home/prestonhales/.openamcfg/AMConfig_usr_local_tomcat_webapps_am_", @@ -9124,7 +9124,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/cts.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/cts.properties.server.json 1`] = ` { "_id": "01/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -9186,7 +9186,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/directoryConfiguration.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/directoryConfiguration.properties.server.json 1`] = ` { "_id": "01/properties/directoryConfiguration", "directoryConfiguration": { @@ -9212,7 +9212,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/general.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/general.properties.server.json 1`] = ` { "_id": "01/properties/general", "amconfig.header.debug": { @@ -9263,7 +9263,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/sdk.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/sdk.properties.server.json 1`] = ` { "_id": "01/properties/sdk", "amconfig.header.cachingreplica": { @@ -9331,7 +9331,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/security.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/security.properties.server.json 1`] = ` { "_id": "01/properties/security", "amconfig.header.cookie": { @@ -9475,7 +9475,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/session.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/session.properties.server.json 1`] = ` { "_id": "01/properties/session", "amconfig.header.sessionlogging": { @@ -9525,7 +9525,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/uma.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/01/uma.properties.server.json 1`] = ` { "_id": "01/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -9707,7 +9707,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/advanced.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/advanced.default.properties.server.json 1`] = ` { "_id": "null/properties/advanced", "com.iplanet.am.buildDate": "2024-March-28 16:00", @@ -9866,7 +9866,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/cts.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/cts.default.properties.server.json 1`] = ` { "_id": "null/properties/cts", "amconfig.org.forgerock.services.cts.store.common.section": { @@ -9888,7 +9888,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/general.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/general.default.properties.server.json 1`] = ` { "_id": "null/properties/general", "amconfig.header.debug": { @@ -9909,7 +9909,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/sdk.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/sdk.default.properties.server.json 1`] = ` { "_id": "null/properties/sdk", "amconfig.header.cachingreplica": { @@ -9938,7 +9938,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/security.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/security.default.properties.server.json 1`] = ` { "_id": "null/properties/security", "amconfig.header.cookie": { @@ -9985,7 +9985,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/session.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/session.default.properties.server.json 1`] = ` { "_id": "null/properties/session", "amconfig.header.sessionlogging": { @@ -10008,7 +10008,7 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/uma.default.properties.server.json 1`] = ` +exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1.json -xNdD serverExportTestDir1 -m classic": should export the server with server id "01" along with extracted properties and default properties.: serverExportTestDir1/default/uma.default.properties.server.json 1`] = ` { "_id": "null/properties/uma", "amconfig.org.forgerock.services.resourcesets.store.common.section": { @@ -10070,11 +10070,11 @@ exports[`frodo server export "frodo server export -i 01 -f serverExportTestFile1 } `; -exports[`frodo server export "frodo server export -u 8081 --file serverExportTestFile2.json --default --no-metadata": should export the server with url containing "8081" along with default properties. 1`] = `0`; +exports[`frodo server export "frodo server export -u 8081 --file serverExportTestFile2.json --default --no-metadata -m classic": should export the server with url containing "8081" along with default properties. 1`] = `0`; -exports[`frodo server export "frodo server export -u 8081 --file serverExportTestFile2.json --default --no-metadata": should export the server with url containing "8081" along with default properties. 2`] = `""`; +exports[`frodo server export "frodo server export -u 8081 --file serverExportTestFile2.json --default --no-metadata -m classic": should export the server with url containing "8081" along with default properties. 2`] = `""`; -exports[`frodo server export "frodo server export -u 8081 --file serverExportTestFile2.json --default --no-metadata": should export the server with url containing "8081" along with default properties.: serverExportTestFile2.json 1`] = ` +exports[`frodo server export "frodo server export -u 8081 --file serverExportTestFile2.json --default --no-metadata -m classic": should export the server with url containing "8081" along with default properties.: serverExportTestFile2.json 1`] = ` { "defaultProperties": { "advanced": { diff --git a/test/e2e/__snapshots__/server-import.e2e.test.js.snap b/test/e2e/__snapshots__/server-import.e2e.test.js.snap index 8ca63397b..6855bf3b9 100644 --- a/test/e2e/__snapshots__/server-import.e2e.test.js.snap +++ b/test/e2e/__snapshots__/server-import.e2e.test.js.snap @@ -1,19 +1,27 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`frodo server import "frodo server import --all --file test/e2e/exports/all/allServers.server.json": should import all servers from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; +exports[`frodo server import "frodo server import --all --file test/e2e/exports/all/allServers.server.json -m classic": should import all servers from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; -exports[`frodo server import "frodo server import --all-separate --directory test/e2e/exports/all-separate/classic/global/server": should import all servers from the test/e2e/exports/all-separate/classic/global/server directory" 1`] = `""`; +exports[`frodo server import "frodo server import --all-separate --directory test/e2e/exports/all-separate/classic/global/server -m classic": should import all servers from the test/e2e/exports/all-separate/classic/global/server directory" 1`] = `""`; -exports[`frodo server import "frodo server import --default --server-url http://localhost:8081/am --file test/e2e/exports/all/allServers.server.json": should import the server with the url "http://localhost:8081/am" from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; +exports[`frodo server import "frodo server import --default --server-url http://localhost:8081/am --file test/e2e/exports/all/allServers.server.json -m classic": should import the server with the url "http://localhost:8081/am" from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; -exports[`frodo server import "frodo server import --server-id 01 --file test/e2e/exports/all/allServers.server.json": should import the server with the id "01" from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; +exports[`frodo server import "frodo server import --server-id 01 --file test/e2e/exports/all/allServers.server.json -m classic": should import the server with the id "01" from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; -exports[`frodo server import "frodo server import -dAD test/e2e/exports/all-separate/classic/global/server": should import all servers from the test/e2e/exports/all-separate/classic/global/server directory" 1`] = `""`; +exports[`frodo server import "frodo server import -dAD test/e2e/exports/all-separate/classic/global/server -m classic": should import all servers from the test/e2e/exports/all-separate/classic/global/server directory" 1`] = `""`; -exports[`frodo server import "frodo server import -daf test/e2e/exports/all/allServers.server.json": should import all servers from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; +exports[`frodo server import "frodo server import -daf test/e2e/exports/all/allServers.server.json -m classic": should import all servers from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; -exports[`frodo server import "frodo server import -di 01 -f test/e2e/exports/all/allServers.server.json": should import the server with the id "01" from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; +exports[`frodo server import "frodo server import -di 01 -f test/e2e/exports/all/allServers.server.json -m classic": should import the server with the id "01" from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; -exports[`frodo server import "frodo server import -f test/e2e/exports/all/allServers.server.json": should import the first server from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; +exports[`frodo server import "frodo server import -di 01 -f test/e2e/exports/all/allServers.server.json -m classic": should import the server with the id "01" from the file "test/e2e/exports/all/allServers.server.json" 2`] = ` +"Connected to http://openam-frodo-dev.classic.com:8080/am [/] as user amAdmin +- Reading server from file... +- Importing server... +- Successfully imported server 01. +" +`; -exports[`frodo server import "frodo server import -u 8081 -f test/e2e/exports/all/allServers.server.json": should import the server with the url containing "8081" from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; +exports[`frodo server import "frodo server import -f test/e2e/exports/all/allServers.server.json -m classic": should import the first server from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; + +exports[`frodo server import "frodo server import -u 8081 -f test/e2e/exports/all/allServers.server.json -m classic": should import the server with the url containing "8081" from the file "test/e2e/exports/all/allServers.server.json" 1`] = `""`; diff --git a/test/e2e/__snapshots__/server-list.e2e.test.js.snap b/test/e2e/__snapshots__/server-list.e2e.test.js.snap index 9f15cfe02..ec8fa9d71 100644 --- a/test/e2e/__snapshots__/server-list.e2e.test.js.snap +++ b/test/e2e/__snapshots__/server-list.e2e.test.js.snap @@ -1,24 +1,24 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`frodo server list "frodo server list --long": should list the ids, urls, and site names of the servers 1`] = ` -"Id│Url │Site Name -01│http://localhost:8080/am│ -03│http://localhost:8081/am│testsite -04│http://localhost:8082/am│ +exports[`frodo server list -m classic "frodo server list --long -m classic": should list the ids, urls, and site names of the servers 1`] = ` +"Id│Url │Site Name +03│http://localhost:8081/am │ +04│http://localhost:8082/am │ +01│http://openam-frodo-dev.classic.com:8080/am│ " `; -exports[`frodo server list "frodo server list -l": should list the ids, urls, and site names of the servers 1`] = ` -"Id│Url │Site Name -01│http://localhost:8080/am│ -03│http://localhost:8081/am│testsite -04│http://localhost:8082/am│ +exports[`frodo server list -m classic "frodo server list -l -m classic": should list the ids, urls, and site names of the servers 1`] = ` +"Id│Url │Site Name +03│http://localhost:8081/am │ +04│http://localhost:8082/am │ +01│http://openam-frodo-dev.classic.com:8080/am│ " `; -exports[`frodo server list "frodo server list": should list the urls of the servers 1`] = ` -"http://localhost:8080/am -http://localhost:8081/am +exports[`frodo server list -m classic "frodo server list": should list the urls of the servers 1`] = ` +"http://localhost:8081/am http://localhost:8082/am +http://openam-frodo-dev.classic.com:8080/am " `; diff --git a/test/e2e/config-export.e2e.test.js b/test/e2e/config-export.e2e.test.js index 49ad6eda7..f4b562aa6 100644 --- a/test/e2e/config-export.e2e.test.js +++ b/test/e2e/config-export.e2e.test.js @@ -63,15 +63,26 @@ FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openam-frodo-dev.classic.co FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openam-frodo-dev.classic.com:8080/am frodo config export --all-separate --no-metadata --default --directory exportAllTestDir8 --include-active-values --use-string-arrays --no-decode --no-coords --type classic FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openam-frodo-dev.classic.com:8080/am frodo config export --realm-only -AD exportAllTestDir10 -m classic FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openam-frodo-dev.classic.com:8080/am frodo config export --global-only -af testExportAllGlobal.json -m classic + +// IDM +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo config export -af idmexport.json -m idm +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo config export -aD exportAllTestDir12 -f testExportAllIdm.config.json -m idm +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo config export -AD exportAllTestDir13 -m idm +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo config export -AxD exportAllTestDir14 -m idm + */ + + + import { getEnv, testExport } from './utils/TestUtils'; -import { connection as c, classic_connection as cc } from './utils/TestConfig'; +import { connection as c, classic_connection as cc, idm_connection as ic } from './utils/TestConfig'; process.env['FRODO_MOCK'] = '1'; process.env['FRODO_CONNECTION_PROFILES_PATH'] = './test/e2e/env/Connections.json'; const env = getEnv(c); const classicEnv = getEnv(cc); +const idmEnv = getEnv(ic) const type = 'config'; @@ -177,4 +188,27 @@ describe.skip('frodo config export', () => { const CMD = `frodo config export --global-only -af ${exportFile} -m classic`; await testExport(CMD, env, type, exportFile); }); + + test('"frodo config export -af idmexport.json -m idm": should export all IDM config to a single file.', async () => { + const exportFile = 'idmexport.json'; + const CMD = `frodo config export -af ${exportFile} -m idm`; + await testExport(CMD, idmEnv, type, exportFile); + }); + + test('"frodo config export -aD exportAllTestDir12 -f testExportAllIdm.config.json -m idm": should export all IDM config to a single file.', async () => { + const exportFile = 'testExportAllIdm.config.json'; + const exportDirectory = 'exportAllTestDir12'; + const CMD = `frodo config export -aD ${exportDirectory} -f ${exportFile} -m idm`; + await testExport(CMD, idmEnv, type, exportFile, exportDirectory, false); + }); + test('"frodo config export -AD exportAllTestDir13 -m idm": should export all IDM config to the directory with separate mappings', async () => { + const exportDirectory = 'exportAllTestDir13'; + const CMD = `frodo config export -AD ${exportDirectory} -m idm`; + await testExport(CMD, idmEnv, undefined, undefined, exportDirectory, false); + }); + test('"frodo config export -AxD exportAllTestDir14 -m idm": should export all IDM config with script extracted to the directory with separate mappings', async () => { + const exportDirectory = 'exportAllTestDir14'; + const CMD = `frodo config export -AxD ${exportDirectory} -m idm`; + await testExport(CMD, idmEnv, undefined, undefined, exportDirectory, false); + }); }); diff --git a/test/e2e/config-import.e2e.test.js b/test/e2e/config-import.e2e.test.js index 73895a0e5..18cebaadc 100644 --- a/test/e2e/config-import.e2e.test.js +++ b/test/e2e/config-import.e2e.test.js @@ -59,6 +59,12 @@ rm -rf test/e2e/exports/all-separate/classic FRODO_NO_CACHE=1 FRODO_HOST=http://openam-frodo-dev.classic.com:8080/am frodo config export -NRdaD test/e2e/exports/all -f all.classic.json --include-active-values FRODO_NO_CACHE=1 FRODO_HOST=http://openam-frodo-dev.classic.com:8080/am frodo config export -NRdxAD test/e2e/exports/all-separate/classic --include-active-values +To update idm exports, ensure you have a local on-prem instance of idm with the host http://openidm-frodo-dev.classic.com:9080/openidm, then run these: +FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo config export -NRdaD test/e2e/exports/all/idm -f all.config.json --include-active-values +FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo config export -NRdxAD test/e2e/exports/all-separate-extracted-script/idm --include-active-values + + + To record, run these: // Cloud @@ -72,6 +78,8 @@ FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgebloc FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo config import -AD test/e2e/exports/all-separate/cloud --include-active-values FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo config import -gf test/e2e/exports/all-separate/cloud/global/sync/sync.idm.json FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo config import --file test/e2e/exports/all-separate/cloud/realm/root-alpha/script/mode.script.json +// Extract script +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo config import -AD test/e2e/exports/all-separate-extracted-script/cloud --type cloud // Classic FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openam-frodo-dev.classic.com:8080/am frodo config import -adf test/e2e/exports/all/all.classic.json -m classic FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openam-frodo-dev.classic.com:8080/am frodo config import --all --clean --re-uuid-scripts --re-uuid-journeys --include-active-values --file test/e2e/exports/all/all.classic.json --type classic diff --git a/test/e2e/email-template-export.e2e.test.js b/test/e2e/email-template-export.e2e.test.js index 9b4f27d2d..5451d2be3 100644 --- a/test/e2e/email-template-export.e2e.test.js +++ b/test/e2e/email-template-export.e2e.test.js @@ -46,7 +46,7 @@ * the recordings must be committed to the frodo-lib project. */ -/* +/* Cloud FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template export --template-id welcome FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template export -i welcome -f my-welcome.template.email.json FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template export -Ni welcome -D emailTemplateExportTestDir1 @@ -55,13 +55,18 @@ FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgebloc FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template export -NaD emailTemplateExportTestDir2 FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template export -A FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template export --all-separate --no-metadata --directory emailTemplateExportTestDir3 + +// IDM +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo email template export -AD testDir4 -m idm +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo email template export -aD testDir5 -m idm + */ import { getEnv, testExport } from './utils/TestUtils'; -import { connection as c } from './utils/TestConfig'; +import { connection as c, idm_connection as ic } from './utils/TestConfig'; process.env['FRODO_MOCK'] = '1'; const env = getEnv(c); - +const idmenv = getEnv(ic); const type = 'template.email'; describe('frodo email template export', () => { @@ -110,4 +115,14 @@ describe('frodo email template export', () => { const CMD = `frodo email template export --all-separate --no-metadata --directory ${exportDirectory}`; await testExport(CMD, env, type, undefined, exportDirectory, false); }); + test('"frodo email template export -AD emailTemplateExportTestDir4 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3', async () => { + const exportDirectory = 'emailTemplateExportTestDir4'; + const CMD = `frodo email template export -AD emailTemplateExportTestDir4 -m idm`; + await testExport(CMD, idmenv, type, undefined, exportDirectory, false); + }); + test('"frodo email template export -aD emailTemplateExportTestDir5 -m idm": should export all email templates to separate files in the directory emailTemplateExportTestDir3', async () => { + const exportDirectory = 'emailTemplateExportTestDir5'; + const CMD = `frodo email template export -aD emailTemplateExportTestDir5 -m idm`; + await testExport(CMD, idmenv, type, undefined, exportDirectory, false); + }); }); diff --git a/test/e2e/email-template-import.e2e.test.js b/test/e2e/email-template-import.e2e.test.js index 0d13d7fb4..014a5e2a4 100644 --- a/test/e2e/email-template-import.e2e.test.js +++ b/test/e2e/email-template-import.e2e.test.js @@ -46,7 +46,8 @@ * the recordings must be committed to the frodo-lib project. */ -/* + +/* Cloud FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template import --raw -i welcome -f emailTemplate-welcome.json -D test/e2e/exports/all-separate/raw FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template import --template-id welcome --file test/e2e/exports/all/allEmailTemplates.template.email.json FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template import --raw -f emailTemplate-welcome.json -D test/e2e/exports/all-separate/raw @@ -56,16 +57,21 @@ FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgebloc FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template import -af allEmailTemplates.template.email.json -D test/e2e/exports/all FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template import --raw -AD test/e2e/exports/all-separate/raw FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo email template import --all-separate --directory test/e2e/exports/all-separate/cloud/global/emailTemplate + +// IDM +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo email template import -af test/e2e/exports/all/idm/allEmailTemplates.template.email.json -m idm +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=http://openidm-frodo-dev.classic.com:9080/openidm frodo email template import -AD test/e2e/exports/all-separate/idm/global/emailTemplate -m idm */ import cp from 'child_process'; import { promisify } from 'util'; import { getEnv, removeAnsiEscapeCodes } from './utils/TestUtils'; -import { connection as c } from './utils/TestConfig'; +import { connection as c , idm_connection as ic } from './utils/TestConfig'; const exec = promisify(cp.exec); process.env['FRODO_MOCK'] = '1'; const env = getEnv(c); +const idmenv = getEnv(ic); const allDirectory = 'test/e2e/exports/all'; const allAlphaEmailTemplatesFileName = 'allEmailTemplates.template.email.json'; @@ -129,4 +135,15 @@ describe('frodo email template import', () => { const { stdout } = await exec(CMD, env); expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); }); + test(`"frodo email template import -af test/e2e/exports/all/idm/allEmailTemplates.template.email.json -m idm": should import email template for on prem idm from one file`, async () => { + const CMD = `frodo email template import -af test/e2e/exports/all/idm/allEmailTemplates.template.email.json -m idm`; + const { stdout } = await exec(CMD, idmenv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo email template import -AD test/e2e/exports/all-separate/idm/global/emailTemplate -m idm": should import all on prem idm email templates from the directory"`, async () => { + const CMD = `frodo email template import -AD test/e2e/exports/all-separate/idm/global/emailTemplate -m idm`; + const { stdout } = await exec(CMD, idmenv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); }); diff --git a/test/e2e/env/Connections.json b/test/e2e/env/Connections.json index b4326d4b1..8dba2df33 100644 --- a/test/e2e/env/Connections.json +++ b/test/e2e/env/Connections.json @@ -1,4 +1,9 @@ { + "http://openidm-frodo-dev.classic.com:9080/openidm": { + "deploymentType": "idm", + "encodedPassword": "TSdl7D/AJsuZD8hvsSsMCg/P4QUwXJDSggvr11TuCAavuUjvJtaPrr08oBGzG3HYlJFSZBM5aPpOaZGKP75WaUI67E6H+KtfLJz42wKWtOq2BXA6RcSU745krtbfBIcU5O/im9QfHz5XPG9Dg2CL", + "username": "openidm-admin" + }, "https://openam-frodo-dev.forgeblocks.com/am": { "deploymentType": "cloud", "encodedLogApiSecret": "s/jvumbnVBgyFKC1GQKdYvUNBYdKVKiZQueQUlj0iAxucif140oyKlOw0g4rIV9K4dJ+XG7XxnSP1+4YBrm0+gUiv9a871T3qqqCbdfd7n1fIgY4bxU/c9GM6JDyE3izEP33WBRmjwPTwsOSn/5L44/XlXrRSuMmWVr/6dRwu4cG0lG/jhecMuLGyCieA4h5MZNMvO0OEDcqB8+h+tqqOWug", diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/forgottenUsername.emailTemplate.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/forgottenUsername.emailTemplate.json new file mode 100644 index 000000000..e5469d572 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/forgottenUsername.emailTemplate.json @@ -0,0 +1,24 @@ +{ + "emailTemplate": { + "forgottenUsername": { + "_id": "emailTemplate/forgottenUsername", + "defaultLocale": "en", + "enabled": true, + "from": "", + "html": { + "en": "{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

" + }, + "message": { + "en": "

{{#if object.userName}}Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

", + "fr": "
{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

" + }, + "mimeType": "text/html", + "styles": "body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}", + "subject": { + "en": "Account Information - username", + "fr": "Informations sur le compte - nom d'utilisateur" + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/registration.emailTemplate.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/registration.emailTemplate.json new file mode 100644 index 000000000..bb77e55fc --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/registration.emailTemplate.json @@ -0,0 +1,24 @@ +{ + "emailTemplate": { + "registration": { + "_id": "emailTemplate/registration", + "defaultLocale": "en", + "enabled": true, + "from": "", + "html": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

" + }, + "message": { + "en": "

This is your registration email.

Email verification link

", + "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

" + }, + "mimeType": "text/html", + "styles": "body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}", + "subject": { + "en": "Register new account", + "fr": "Créer un nouveau compte" + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/resetPassword.emailTemplate.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/resetPassword.emailTemplate.json new file mode 100644 index 000000000..7d62f29a0 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/resetPassword.emailTemplate.json @@ -0,0 +1,19 @@ +{ + "emailTemplate": { + "resetPassword": { + "_id": "emailTemplate/resetPassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "message": { + "en": "

Click to reset your password

Password reset link

", + "fr": "

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

" + }, + "mimeType": "text/html", + "subject": { + "en": "Reset your password", + "fr": "Réinitialisez votre mot de passe" + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/updatePassword.emailTemplate.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/updatePassword.emailTemplate.json new file mode 100644 index 000000000..3d4156c44 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/updatePassword.emailTemplate.json @@ -0,0 +1,21 @@ +{ + "emailTemplate": { + "updatePassword": { + "_id": "emailTemplate/updatePassword", + "defaultLocale": "en", + "enabled": true, + "from": "", + "html": { + "en": "

Verify email to update password

Update password link

" + }, + "message": { + "en": "

Verify email to update password

Update password link

" + }, + "mimeType": "text/html", + "styles": "body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}", + "subject": { + "en": "Update your password" + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/welcome.emailTemplate.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/welcome.emailTemplate.json new file mode 100644 index 000000000..18c4597f0 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/emailTemplate/welcome.emailTemplate.json @@ -0,0 +1,21 @@ +{ + "emailTemplate": { + "welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "enabled": true, + "from": "", + "html": { + "en": "

Welcome. Your username is '{{object.userName}}'.

" + }, + "message": { + "en": "

Welcome. Your username is '{{object.userName}}'.

" + }, + "mimeType": "text/html", + "styles": "body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}", + "subject": { + "en": "Your account has been created" + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/access.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/access.idm.json new file mode 100644 index 000000000..3b8bc2e59 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/access.idm.json @@ -0,0 +1,316 @@ +{ + "idm": { + "access": { + "_id": "access", + "configs": [ + { + "actions": "*", + "methods": "read", + "pattern": "info/*", + "roles": "*" + }, + { + "actions": "login,logout", + "methods": "read,action", + "pattern": "authentication", + "roles": "*" + }, + { + "actions": "*", + "methods": "*", + "pattern": "config/fidc/*", + "roles": "internal/role/openidm-admin" + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themeconfig", + "roles": "*" + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/themerealm", + "roles": "*" + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/uilocale/*", + "roles": "*" + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/fieldPolicy/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "methods": "read", + "pattern": "info/uiconfig", + "roles": "*" + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/dashboard", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "methods": "query", + "pattern": "info/features", + "roles": "*" + }, + { + "actions": "listPrivileges", + "methods": "action", + "pattern": "privilege", + "roles": "*" + }, + { + "actions": "*", + "methods": "read", + "pattern": "privilege/*", + "roles": "*" + }, + { + "actions": "validate", + "methods": "action", + "pattern": "util/validateQueryFilter", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "customAuthz": "checkIfAnyFeatureEnabled('kba')", + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/openidm-authorized" + }, + { + "methods": "read", + "pattern": "*", + "roles": "~rcsclient-authorized", + "servlet": "openicf" + }, + { + "actions": "*", + "excludePatterns": "repo,repo/*", + "methods": "*", + "pattern": "*", + "roles": "internal/role/openidm-admin" + }, + { + "actions": "", + "methods": "create,read,update,delete,patch,query", + "pattern": "system/*", + "roles": "internal/role/openidm-admin" + }, + { + "actions": "*", + "methods": "script", + "pattern": "system/*", + "roles": "internal/role/openidm-admin" + }, + { + "actions": "test,testConfig,createconfiguration,liveSync,authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/openidm-admin" + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo", + "roles": "internal/role/openidm-admin" + }, + { + "actions": "*", + "customAuthz": "disallowCommandAction()", + "methods": "*", + "pattern": "repo/*", + "roles": "internal/role/openidm-admin" + }, + { + "actions": "command", + "customAuthz": "request.additionalParameters.commandId === 'delete-mapping-links'", + "methods": "action", + "pattern": "repo/link", + "roles": "internal/role/openidm-admin" + }, + { + "methods": "create,read,query,patch", + "pattern": "managed/*", + "roles": "internal/role/platform-provisioning" + }, + { + "methods": "read,query", + "pattern": "internal/role/*", + "roles": "internal/role/platform-provisioning" + }, + { + "actions": "*", + "methods": "create,read,action,update", + "pattern": "profile/*", + "roles": "internal/role/platform-provisioning" + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/platform-provisioning" + }, + { + "methods": "read", + "pattern": "schema/*", + "roles": "internal/role/platform-provisioning" + }, + { + "actions": "*", + "methods": "action,query", + "pattern": "consent", + "roles": "internal/role/platform-provisioning" + }, + { + "methods": "read", + "pattern": "selfservice/kba", + "roles": "internal/role/platform-provisioning" + }, + { + "methods": "read", + "pattern": "selfservice/terms", + "roles": "internal/role/platform-provisioning" + }, + { + "actions": "sendTemplate", + "methods": "action", + "pattern": "external/email", + "roles": "internal/role/platform-provisioning" + }, + { + "actions": "authenticate", + "methods": "action", + "pattern": "system/*", + "roles": "internal/role/platform-provisioning" + }, + { + "actions": "*", + "methods": "read,action", + "pattern": "policy/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "methods": "read", + "pattern": "config/ui/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "bind,unbind", + "customAuthz": "ownDataOnly()", + "methods": "read,action,delete", + "pattern": "*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('user', [])", + "methods": "update,patch,action", + "pattern": "*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "patch", + "customAuthz": "isQueryOneOf({'managed/user': ['for-userName']}) && restrictPatchToFields(['password'])", + "methods": "patch,action", + "pattern": "managed/user", + "roles": "internal/role/openidm-cert" + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_meta', false)", + "methods": "read", + "pattern": "internal/usermeta/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "customAuthz": "ownRelationshipProperty('_notifications', true)", + "methods": "read,delete", + "pattern": "internal/notification/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/user/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "", + "customAuthz": "ownDataOnly()", + "methods": "read,delete", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('alpha_user', [])", + "methods": "update,patch,action", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/alpha_user/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "", + "customAuthz": "ownDataOnly()", + "methods": "read,delete", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "patch", + "customAuthz": "ownDataOnly() && onlyEditableManagedObjectProperties('bravo_user', [])", + "methods": "update,patch,action", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "*", + "customAuthz": "ownRelationshipCollection(['_meta','_notifications'])", + "methods": "read,query", + "pattern": "managed/bravo_user/*", + "roles": "internal/role/openidm-authorized" + }, + { + "actions": "deleteNotificationsForTarget", + "customAuthz": "request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)", + "methods": "action", + "pattern": "notification", + "roles": "internal/role/openidm-authorized" + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/alphaOrgPrivileges.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/alphaOrgPrivileges.idm.json new file mode 100644 index 000000000..0fbaf3cfd --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/alphaOrgPrivileges.idm.json @@ -0,0 +1,761 @@ +{ + "idm": { + "alphaOrgPrivileges": { + "_id": "alphaOrgPrivileges", + "privileges": [ + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "owners", + "readOnly": true + }, + { + "attribute": "admins", + "readOnly": false + }, + { + "attribute": "members", + "readOnly": false + }, + { + "attribute": "parent", + "readOnly": false + }, + { + "attribute": "children", + "readOnly": false + }, + { + "attribute": "parentIDs", + "readOnly": true + }, + { + "attribute": "adminIDs", + "readOnly": true + }, + { + "attribute": "parentAdminIDs", + "readOnly": true + }, + { + "attribute": "ownerIDs", + "readOnly": true + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/ownerIDs eq \"{{_id}}\" or /parentOwnerIDs eq \"{{_id}}\"", + "name": "owner-view-update-delete-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE" + ] + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "owners", + "readOnly": true + }, + { + "attribute": "admins", + "readOnly": false + }, + { + "attribute": "members", + "readOnly": false + }, + { + "attribute": "parent", + "readOnly": false + }, + { + "attribute": "children", + "readOnly": false + }, + { + "attribute": "parentIDs", + "readOnly": true + }, + { + "attribute": "adminIDs", + "readOnly": true + }, + { + "attribute": "parentAdminIDs", + "readOnly": true + }, + { + "attribute": "ownerIDs", + "readOnly": true + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/parent pr", + "name": "owner-create-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "CREATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false + }, + { + "attribute": "password", + "readOnly": false + }, + { + "attribute": "givenName", + "readOnly": false + }, + { + "attribute": "sn", + "readOnly": false + }, + { + "attribute": "mail", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "accountStatus", + "readOnly": false + }, + { + "attribute": "telephoneNumber", + "readOnly": false + }, + { + "attribute": "postalAddress", + "readOnly": false + }, + { + "attribute": "city", + "readOnly": false + }, + { + "attribute": "postalCode", + "readOnly": false + }, + { + "attribute": "country", + "readOnly": false + }, + { + "attribute": "stateProvince", + "readOnly": false + }, + { + "attribute": "roles", + "readOnly": false + }, + { + "attribute": "groups", + "readOnly": false + }, + { + "attribute": "manager", + "readOnly": false + }, + { + "attribute": "authzRoles", + "readOnly": false + }, + { + "attribute": "reports", + "readOnly": false + }, + { + "attribute": "effectiveRoles", + "readOnly": false + }, + { + "attribute": "effectiveAssignments", + "readOnly": false + }, + { + "attribute": "effectiveGroups", + "readOnly": false + }, + { + "attribute": "lastSync", + "readOnly": false + }, + { + "attribute": "kbaInfo", + "readOnly": false + }, + { + "attribute": "preferences", + "readOnly": false + }, + { + "attribute": "consentedMappings", + "readOnly": false + }, + { + "attribute": "memberOfOrg", + "readOnly": false + }, + { + "attribute": "adminOfOrg", + "readOnly": false + }, + { + "attribute": "ownerOfOrg", + "readOnly": true + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/memberOfOrgIDs eq \"__org_id_placeholder__\"", + "name": "owner-view-update-delete-admins-and-members", + "path": "managed/alpha_user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false + }, + { + "attribute": "password", + "readOnly": false + }, + { + "attribute": "givenName", + "readOnly": false + }, + { + "attribute": "sn", + "readOnly": false + }, + { + "attribute": "mail", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "accountStatus", + "readOnly": false + }, + { + "attribute": "telephoneNumber", + "readOnly": false + }, + { + "attribute": "postalAddress", + "readOnly": false + }, + { + "attribute": "city", + "readOnly": false + }, + { + "attribute": "postalCode", + "readOnly": false + }, + { + "attribute": "country", + "readOnly": false + }, + { + "attribute": "stateProvince", + "readOnly": false + }, + { + "attribute": "roles", + "readOnly": false + }, + { + "attribute": "groups", + "readOnly": false + }, + { + "attribute": "manager", + "readOnly": false + }, + { + "attribute": "authzRoles", + "readOnly": false + }, + { + "attribute": "reports", + "readOnly": false + }, + { + "attribute": "effectiveRoles", + "readOnly": false + }, + { + "attribute": "effectiveAssignments", + "readOnly": false + }, + { + "attribute": "effectiveGroups", + "readOnly": false + }, + { + "attribute": "lastSync", + "readOnly": false + }, + { + "attribute": "kbaInfo", + "readOnly": false + }, + { + "attribute": "preferences", + "readOnly": false + }, + { + "attribute": "consentedMappings", + "readOnly": false + }, + { + "attribute": "memberOfOrg", + "readOnly": false + }, + { + "attribute": "adminOfOrg", + "readOnly": false + }, + { + "attribute": "ownerOfOrg", + "readOnly": true + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)", + "name": "owner-create-admins", + "path": "managed/alpha_user", + "permissions": [ + "CREATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "owners", + "readOnly": true + }, + { + "attribute": "admins", + "readOnly": true + }, + { + "attribute": "members", + "readOnly": false + }, + { + "attribute": "parent", + "readOnly": false + }, + { + "attribute": "children", + "readOnly": false + }, + { + "attribute": "parentIDs", + "readOnly": true + }, + { + "attribute": "adminIDs", + "readOnly": true + }, + { + "attribute": "parentAdminIDs", + "readOnly": true + }, + { + "attribute": "ownerIDs", + "readOnly": true + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/adminIDs eq \"{{_id}}\" or /parentAdminIDs eq \"{{_id}}\"", + "name": "admin-view-update-delete-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE" + ] + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "owners", + "readOnly": true + }, + { + "attribute": "admins", + "readOnly": true + }, + { + "attribute": "members", + "readOnly": false + }, + { + "attribute": "parent", + "readOnly": false + }, + { + "attribute": "children", + "readOnly": false + }, + { + "attribute": "parentIDs", + "readOnly": true + }, + { + "attribute": "adminIDs", + "readOnly": true + }, + { + "attribute": "parentAdminIDs", + "readOnly": true + }, + { + "attribute": "ownerIDs", + "readOnly": true + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/parent pr", + "name": "admin-create-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "CREATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false + }, + { + "attribute": "password", + "readOnly": false + }, + { + "attribute": "givenName", + "readOnly": false + }, + { + "attribute": "sn", + "readOnly": false + }, + { + "attribute": "mail", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "accountStatus", + "readOnly": false + }, + { + "attribute": "telephoneNumber", + "readOnly": false + }, + { + "attribute": "postalAddress", + "readOnly": false + }, + { + "attribute": "city", + "readOnly": false + }, + { + "attribute": "postalCode", + "readOnly": false + }, + { + "attribute": "country", + "readOnly": false + }, + { + "attribute": "stateProvince", + "readOnly": false + }, + { + "attribute": "roles", + "readOnly": false + }, + { + "attribute": "groups", + "readOnly": false + }, + { + "attribute": "manager", + "readOnly": false + }, + { + "attribute": "authzRoles", + "readOnly": false + }, + { + "attribute": "reports", + "readOnly": false + }, + { + "attribute": "effectiveRoles", + "readOnly": false + }, + { + "attribute": "effectiveAssignments", + "readOnly": false + }, + { + "attribute": "effectiveGroups", + "readOnly": false + }, + { + "attribute": "lastSync", + "readOnly": false + }, + { + "attribute": "kbaInfo", + "readOnly": false + }, + { + "attribute": "preferences", + "readOnly": false + }, + { + "attribute": "consentedMappings", + "readOnly": false + }, + { + "attribute": "memberOfOrg", + "readOnly": false + }, + { + "attribute": "adminOfOrg", + "readOnly": true + }, + { + "attribute": "ownerOfOrg", + "readOnly": true + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/memberOfOrgIDs eq \"__org_id_placeholder__\"", + "name": "admin-view-update-delete-members", + "path": "managed/alpha_user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false + }, + { + "attribute": "password", + "readOnly": false + }, + { + "attribute": "givenName", + "readOnly": false + }, + { + "attribute": "sn", + "readOnly": false + }, + { + "attribute": "mail", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "accountStatus", + "readOnly": false + }, + { + "attribute": "telephoneNumber", + "readOnly": false + }, + { + "attribute": "postalAddress", + "readOnly": false + }, + { + "attribute": "city", + "readOnly": false + }, + { + "attribute": "postalCode", + "readOnly": false + }, + { + "attribute": "country", + "readOnly": false + }, + { + "attribute": "stateProvince", + "readOnly": false + }, + { + "attribute": "roles", + "readOnly": false + }, + { + "attribute": "groups", + "readOnly": false + }, + { + "attribute": "manager", + "readOnly": false + }, + { + "attribute": "authzRoles", + "readOnly": false + }, + { + "attribute": "reports", + "readOnly": false + }, + { + "attribute": "effectiveRoles", + "readOnly": false + }, + { + "attribute": "effectiveAssignments", + "readOnly": false + }, + { + "attribute": "effectiveGroups", + "readOnly": false + }, + { + "attribute": "lastSync", + "readOnly": false + }, + { + "attribute": "kbaInfo", + "readOnly": false + }, + { + "attribute": "preferences", + "readOnly": false + }, + { + "attribute": "consentedMappings", + "readOnly": false + }, + { + "attribute": "memberOfOrg", + "readOnly": false + }, + { + "attribute": "adminOfOrg", + "readOnly": true + }, + { + "attribute": "ownerOfOrg", + "readOnly": true + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)", + "name": "admin-create-members", + "path": "managed/alpha_user", + "permissions": [ + "CREATE" + ] + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/audit.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/audit.idm.json new file mode 100644 index 000000000..edeb5816e --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/audit.idm.json @@ -0,0 +1,104 @@ +{ + "idm": { + "audit": { + "_id": "audit", + "auditServiceConfig": { + "availableAuditEventHandlers": [ + "org.forgerock.audit.handlers.csv.CsvAuditEventHandler", + "org.forgerock.audit.handlers.jms.JmsAuditEventHandler", + "org.forgerock.audit.handlers.json.JsonAuditEventHandler", + "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", + "org.forgerock.openidm.audit.impl.RouterAuditEventHandler", + "org.forgerock.audit.handlers.syslog.SyslogAuditEventHandler" + ], + "caseInsensitiveFields": [ + "/access/http/request/headers", + "/access/http/response/headers" + ], + "filterPolicies": { + "value": { + "excludeIf": [ + "/access/http/request/cookies/&{com.iplanet.am.cookie.name}", + "/access/http/request/cookies/session-jwt", + "/access/http/request/headers/&{com.sun.identity.auth.cookieName}", + "/access/http/request/headers/&{com.iplanet.am.cookie.name}", + "/access/http/request/headers/accept-encoding", + "/access/http/request/headers/accept-language", + "/access/http/request/headers/Authorization", + "/access/http/request/headers/cache-control", + "/access/http/request/headers/connection", + "/access/http/request/headers/content-length", + "/access/http/request/headers/content-type", + "/access/http/request/headers/proxy-authorization", + "/access/http/request/headers/X-OpenAM-Password", + "/access/http/request/headers/X-OpenIDM-Password", + "/access/http/request/queryParameters/access_token", + "/access/http/request/queryParameters/IDToken1", + "/access/http/request/queryParameters/id_token_hint", + "/access/http/request/queryParameters/Login.Token1", + "/access/http/request/queryParameters/redirect_uri", + "/access/http/request/queryParameters/requester", + "/access/http/request/queryParameters/sessionUpgradeSSOTokenId", + "/access/http/request/queryParameters/tokenId", + "/access/http/response/headers/Authorization", + "/access/http/response/headers/Set-Cookie", + "/access/http/response/headers/X-OpenIDM-Password" + ], + "includeIf": [] + } + }, + "handlerForQueries": "json" + }, + "eventHandlers": [ + { + "class": "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "config": { + "name": "json", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config" + ] + } + } + ], + "eventTopics": { + "activity": { + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action" + ] + }, + "passwordFields": [ + "password" + ], + "watchedFields": [ + "*" + ] + }, + "config": { + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action" + ] + } + } + }, + "exceptionFormatter": { + "file": "bin/defaults/script/audit/stacktraceFormatter.js", + "type": "text/javascript" + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/authentication.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/authentication.idm.json new file mode 100644 index 000000000..287fbf2d4 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/authentication.idm.json @@ -0,0 +1,36 @@ +{ + "idm": { + "authentication": { + "_id": "authentication", + "rsFilter": { + "augmentSecurityContext": { + "source": "file://authentication.idm.scripts/rsFilter.augmentSecurityContext.script.js", + "type": "text/javascript" + }, + "cache": { + "maxTimeout": "300 seconds" + }, + "scopes": [ + "fr:idm:*" + ], + "staticUserMapping": [], + "subjectMapping": [ + { + "additionalUserFields": [ + "adminOfOrg", + "ownerOfOrg" + ], + "defaultRoles": [ + "internal/role/openidm-authorized" + ], + "propertyMapping": { + "sub": "_id" + }, + "queryOnResource": "managed/{{substring realm 1}}_user", + "userRoles": "authzRoles/*" + } + ] + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/authentication.idm.scripts/rsFilter.augmentSecurityContext.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/authentication.idm.scripts/rsFilter.augmentSecurityContext.script.js new file mode 100644 index 000000000..0e72af277 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/authentication.idm.scripts/rsFilter.augmentSecurityContext.script.js @@ -0,0 +1 @@ +require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, security.authorization.component.includes('/alpha_') ? 'alphaOrgPrivileges' : 'bravoOrgPrivileges', 'privilegeAssignments'); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/bravoOrgPrivileges.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/bravoOrgPrivileges.idm.json new file mode 100644 index 000000000..3e5f74445 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/bravoOrgPrivileges.idm.json @@ -0,0 +1,761 @@ +{ + "idm": { + "bravoOrgPrivileges": { + "_id": "bravoOrgPrivileges", + "privileges": [ + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "owners", + "readOnly": true + }, + { + "attribute": "admins", + "readOnly": false + }, + { + "attribute": "members", + "readOnly": false + }, + { + "attribute": "parent", + "readOnly": false + }, + { + "attribute": "children", + "readOnly": false + }, + { + "attribute": "parentIDs", + "readOnly": true + }, + { + "attribute": "adminIDs", + "readOnly": true + }, + { + "attribute": "parentAdminIDs", + "readOnly": true + }, + { + "attribute": "ownerIDs", + "readOnly": true + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/ownerIDs eq \"{{_id}}\" or /parentOwnerIDs eq \"{{_id}}\"", + "name": "owner-view-update-delete-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE" + ] + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "owners", + "readOnly": true + }, + { + "attribute": "admins", + "readOnly": false + }, + { + "attribute": "members", + "readOnly": false + }, + { + "attribute": "parent", + "readOnly": false + }, + { + "attribute": "children", + "readOnly": false + }, + { + "attribute": "parentIDs", + "readOnly": true + }, + { + "attribute": "adminIDs", + "readOnly": true + }, + { + "attribute": "parentAdminIDs", + "readOnly": true + }, + { + "attribute": "ownerIDs", + "readOnly": true + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/parent pr", + "name": "owner-create-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "CREATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false + }, + { + "attribute": "password", + "readOnly": false + }, + { + "attribute": "givenName", + "readOnly": false + }, + { + "attribute": "sn", + "readOnly": false + }, + { + "attribute": "mail", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "accountStatus", + "readOnly": false + }, + { + "attribute": "telephoneNumber", + "readOnly": false + }, + { + "attribute": "postalAddress", + "readOnly": false + }, + { + "attribute": "city", + "readOnly": false + }, + { + "attribute": "postalCode", + "readOnly": false + }, + { + "attribute": "country", + "readOnly": false + }, + { + "attribute": "stateProvince", + "readOnly": false + }, + { + "attribute": "roles", + "readOnly": false + }, + { + "attribute": "groups", + "readOnly": false + }, + { + "attribute": "manager", + "readOnly": false + }, + { + "attribute": "authzRoles", + "readOnly": false + }, + { + "attribute": "reports", + "readOnly": false + }, + { + "attribute": "effectiveRoles", + "readOnly": false + }, + { + "attribute": "effectiveAssignments", + "readOnly": false + }, + { + "attribute": "effectiveGroups", + "readOnly": false + }, + { + "attribute": "lastSync", + "readOnly": false + }, + { + "attribute": "kbaInfo", + "readOnly": false + }, + { + "attribute": "preferences", + "readOnly": false + }, + { + "attribute": "consentedMappings", + "readOnly": false + }, + { + "attribute": "memberOfOrg", + "readOnly": false + }, + { + "attribute": "adminOfOrg", + "readOnly": false + }, + { + "attribute": "ownerOfOrg", + "readOnly": true + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/memberOfOrgIDs eq \"__org_id_placeholder__\"", + "name": "owner-view-update-delete-admins-and-members", + "path": "managed/bravo_user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false + }, + { + "attribute": "password", + "readOnly": false + }, + { + "attribute": "givenName", + "readOnly": false + }, + { + "attribute": "sn", + "readOnly": false + }, + { + "attribute": "mail", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "accountStatus", + "readOnly": false + }, + { + "attribute": "telephoneNumber", + "readOnly": false + }, + { + "attribute": "postalAddress", + "readOnly": false + }, + { + "attribute": "city", + "readOnly": false + }, + { + "attribute": "postalCode", + "readOnly": false + }, + { + "attribute": "country", + "readOnly": false + }, + { + "attribute": "stateProvince", + "readOnly": false + }, + { + "attribute": "roles", + "readOnly": false + }, + { + "attribute": "groups", + "readOnly": false + }, + { + "attribute": "manager", + "readOnly": false + }, + { + "attribute": "authzRoles", + "readOnly": false + }, + { + "attribute": "reports", + "readOnly": false + }, + { + "attribute": "effectiveRoles", + "readOnly": false + }, + { + "attribute": "effectiveAssignments", + "readOnly": false + }, + { + "attribute": "effectiveGroups", + "readOnly": false + }, + { + "attribute": "lastSync", + "readOnly": false + }, + { + "attribute": "kbaInfo", + "readOnly": false + }, + { + "attribute": "preferences", + "readOnly": false + }, + { + "attribute": "consentedMappings", + "readOnly": false + }, + { + "attribute": "memberOfOrg", + "readOnly": false + }, + { + "attribute": "adminOfOrg", + "readOnly": false + }, + { + "attribute": "ownerOfOrg", + "readOnly": true + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)", + "name": "owner-create-admins", + "path": "managed/bravo_user", + "permissions": [ + "CREATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "owners", + "readOnly": true + }, + { + "attribute": "admins", + "readOnly": true + }, + { + "attribute": "members", + "readOnly": false + }, + { + "attribute": "parent", + "readOnly": false + }, + { + "attribute": "children", + "readOnly": false + }, + { + "attribute": "parentIDs", + "readOnly": true + }, + { + "attribute": "adminIDs", + "readOnly": true + }, + { + "attribute": "parentAdminIDs", + "readOnly": true + }, + { + "attribute": "ownerIDs", + "readOnly": true + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/adminIDs eq \"{{_id}}\" or /parentAdminIDs eq \"{{_id}}\"", + "name": "admin-view-update-delete-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE" + ] + }, + { + "accessFlags": [ + { + "attribute": "name", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "owners", + "readOnly": true + }, + { + "attribute": "admins", + "readOnly": true + }, + { + "attribute": "members", + "readOnly": false + }, + { + "attribute": "parent", + "readOnly": false + }, + { + "attribute": "children", + "readOnly": false + }, + { + "attribute": "parentIDs", + "readOnly": true + }, + { + "attribute": "adminIDs", + "readOnly": true + }, + { + "attribute": "parentAdminIDs", + "readOnly": true + }, + { + "attribute": "ownerIDs", + "readOnly": true + }, + { + "attribute": "parentOwnerIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/parent pr", + "name": "admin-create-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "CREATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false + }, + { + "attribute": "password", + "readOnly": false + }, + { + "attribute": "givenName", + "readOnly": false + }, + { + "attribute": "sn", + "readOnly": false + }, + { + "attribute": "mail", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "accountStatus", + "readOnly": false + }, + { + "attribute": "telephoneNumber", + "readOnly": false + }, + { + "attribute": "postalAddress", + "readOnly": false + }, + { + "attribute": "city", + "readOnly": false + }, + { + "attribute": "postalCode", + "readOnly": false + }, + { + "attribute": "country", + "readOnly": false + }, + { + "attribute": "stateProvince", + "readOnly": false + }, + { + "attribute": "roles", + "readOnly": false + }, + { + "attribute": "groups", + "readOnly": false + }, + { + "attribute": "manager", + "readOnly": false + }, + { + "attribute": "authzRoles", + "readOnly": false + }, + { + "attribute": "reports", + "readOnly": false + }, + { + "attribute": "effectiveRoles", + "readOnly": false + }, + { + "attribute": "effectiveAssignments", + "readOnly": false + }, + { + "attribute": "effectiveGroups", + "readOnly": false + }, + { + "attribute": "lastSync", + "readOnly": false + }, + { + "attribute": "kbaInfo", + "readOnly": false + }, + { + "attribute": "preferences", + "readOnly": false + }, + { + "attribute": "consentedMappings", + "readOnly": false + }, + { + "attribute": "memberOfOrg", + "readOnly": false + }, + { + "attribute": "adminOfOrg", + "readOnly": true + }, + { + "attribute": "ownerOfOrg", + "readOnly": true + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/memberOfOrgIDs eq \"__org_id_placeholder__\"", + "name": "admin-view-update-delete-members", + "path": "managed/bravo_user", + "permissions": [ + "VIEW", + "DELETE", + "UPDATE" + ] + }, + { + "accessFlags": [ + { + "attribute": "userName", + "readOnly": false + }, + { + "attribute": "password", + "readOnly": false + }, + { + "attribute": "givenName", + "readOnly": false + }, + { + "attribute": "sn", + "readOnly": false + }, + { + "attribute": "mail", + "readOnly": false + }, + { + "attribute": "description", + "readOnly": false + }, + { + "attribute": "accountStatus", + "readOnly": false + }, + { + "attribute": "telephoneNumber", + "readOnly": false + }, + { + "attribute": "postalAddress", + "readOnly": false + }, + { + "attribute": "city", + "readOnly": false + }, + { + "attribute": "postalCode", + "readOnly": false + }, + { + "attribute": "country", + "readOnly": false + }, + { + "attribute": "stateProvince", + "readOnly": false + }, + { + "attribute": "roles", + "readOnly": false + }, + { + "attribute": "groups", + "readOnly": false + }, + { + "attribute": "manager", + "readOnly": false + }, + { + "attribute": "authzRoles", + "readOnly": false + }, + { + "attribute": "reports", + "readOnly": false + }, + { + "attribute": "effectiveRoles", + "readOnly": false + }, + { + "attribute": "effectiveAssignments", + "readOnly": false + }, + { + "attribute": "effectiveGroups", + "readOnly": false + }, + { + "attribute": "lastSync", + "readOnly": false + }, + { + "attribute": "kbaInfo", + "readOnly": false + }, + { + "attribute": "preferences", + "readOnly": false + }, + { + "attribute": "consentedMappings", + "readOnly": false + }, + { + "attribute": "memberOfOrg", + "readOnly": false + }, + { + "attribute": "adminOfOrg", + "readOnly": true + }, + { + "attribute": "ownerOfOrg", + "readOnly": true + }, + { + "attribute": "memberOfOrgIDs", + "readOnly": true + } + ], + "actions": [], + "filter": "/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)", + "name": "admin-create-members", + "path": "managed/bravo_user", + "permissions": [ + "CREATE" + ] + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/endpoint/extractscripttest.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/endpoint/extractscripttest.idm.json new file mode 100644 index 000000000..fabe03e4e --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/endpoint/extractscripttest.idm.json @@ -0,0 +1,11 @@ +{ + "idm": { + "endpoint/extractscripttest": { + "_id": "endpoint/extractscripttest", + "description": "", + "globalsObject": "\" {\\n \\\"request\\\": {\\n \\\"method\\\": \\\"create\\\"\\n }\\n }\"", + "source": "file://extractscripttest.script.js", + "type": "text/javascript" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/endpoint/extractscripttest.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/endpoint/extractscripttest.script.js new file mode 100644 index 000000000..a03302ff8 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/endpoint/extractscripttest.script.js @@ -0,0 +1,3 @@ +//extract idm script test + +//test diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/external.email.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/external.email.idm.json new file mode 100644 index 000000000..deed194ac --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/external.email.idm.json @@ -0,0 +1,27 @@ +{ + "idm": { + "external.email": { + "_id": "external.email", + "auth": { + "enable": true, + "password": "&{aic.customer.sasl.pass}", + "username": "&{aic.customer.sasl.user|donotuse@pingidentity.com}" + }, + "connectiontimeout": 300000, + "debug": false, + "from": "&{email.sender.address}", + "host": "&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}", + "port": 25, + "smtpProperties": [], + "ssl": { + "enable": false + }, + "starttls": { + "enable": false + }, + "threadPoolSize": 20, + "timeout": 300000, + "writetimeout": 300000 + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/external.emailDefault.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/external.emailDefault.idm.json new file mode 100644 index 000000000..3a3c214a0 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/external.emailDefault.idm.json @@ -0,0 +1,27 @@ +{ + "idm": { + "external.emailDefault": { + "_id": "external.emailDefault", + "auth": { + "enable": true, + "password": "&{aic.customer.sasl.pass}", + "username": "&{aic.customer.sasl.user|donotuse@pingidentity.com}" + }, + "connectiontimeout": 300000, + "debug": false, + "from": "&{email.sender.address}", + "host": "&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}", + "port": 25, + "smtpProperties": [], + "ssl": { + "enable": false + }, + "starttls": { + "enable": false + }, + "threadPoolSize": 20, + "timeout": 300000, + "writetimeout": 300000 + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/fieldPolicy/alpha_user.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/fieldPolicy/alpha_user.idm.json new file mode 100644 index 000000000..4ae5fba3c --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/fieldPolicy/alpha_user.idm.json @@ -0,0 +1,50 @@ +{ + "idm": { + "fieldPolicy/alpha_user": { + "_id": "fieldPolicy/alpha_user", + "defaultPasswordStorageScheme": [ + { + "_id": "PBKDF2-HMAC-SHA256" + } + ], + "passwordAttribute": "password", + "resourceCollection": "managed/alpha_user", + "type": "password-policy", + "validator": [ + { + "_id": "alpha_userPasswordPolicy-length-based-password-validator", + "enabled": true, + "maxPasswordLength": 0, + "minPasswordLength": 8, + "type": "length-based" + }, + { + "_id": "alpha_userPasswordPolicy-attribute-value-password-validator", + "checkSubstrings": true, + "enabled": true, + "matchAttribute": [ + "userName", + "givenName", + "sn" + ], + "minSubstringLength": 5, + "testReversedPassword": true, + "type": "attribute-value" + }, + { + "_id": "alpha_userPasswordPolicy-character-set-password-validator", + "allowUnclassifiedCharacters": true, + "characterSet": [ + "0:abcdefghijklmnopqrstuvwxyz", + "0:ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "0:0123456789", + "0:~!@#$%^&*()-_=+[]{}|;:,.<>/?\"'\\`" + ], + "enabled": true, + "minCharacterSets": 4, + "type": "character-set" + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/fieldPolicy/bravo_user.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/fieldPolicy/bravo_user.idm.json new file mode 100644 index 000000000..b1a893ca7 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/fieldPolicy/bravo_user.idm.json @@ -0,0 +1,50 @@ +{ + "idm": { + "fieldPolicy/bravo_user": { + "_id": "fieldPolicy/bravo_user", + "defaultPasswordStorageScheme": [ + { + "_id": "PBKDF2-HMAC-SHA256" + } + ], + "passwordAttribute": "password", + "resourceCollection": "managed/bravo_user", + "type": "password-policy", + "validator": [ + { + "_id": "bravo_userPasswordPolicy-length-based-password-validator", + "enabled": true, + "maxPasswordLength": 0, + "minPasswordLength": 8, + "type": "length-based" + }, + { + "_id": "bravo_userPasswordPolicy-attribute-value-password-validator", + "checkSubstrings": true, + "enabled": true, + "matchAttribute": [ + "mail", + "userName", + "givenName", + "sn" + ], + "minSubstringLength": 5, + "testReversedPassword": true, + "type": "attribute-value" + }, + { + "_id": "bravo_userPasswordPolicy-character-set-password-validator", + "allowUnclassifiedCharacters": true, + "characterSet": [ + "1:abcdefghijklmnopqrstuvwxyz", + "1:ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "1:0123456789", + "1:~!@#$%^&*()-_=+[]{}|;:,.<>/?\"'\\`" + ], + "enabled": true, + "type": "character-set" + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/internal.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/internal.idm.json new file mode 100644 index 000000000..4419c6726 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/internal.idm.json @@ -0,0 +1,34 @@ +{ + "idm": { + "internal": { + "_id": "internal", + "objects": [ + { + "name": "role", + "properties": { + "authzMembers": { + "items": { + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ] + } + } + } + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_application.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_application.managed.json new file mode 100644 index 000000000..620ae1d40 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_application.managed.json @@ -0,0 +1,335 @@ +{ + "name": "alpha_application", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "Application Object", + "icon": "fa-folder", + "order": [ + "name", + "description", + "url", + "icon", + "mappingNames", + "owners", + "roles", + "members" + ], + "properties": { + "_id": { + "description": "Application ID", + "isPersonal": false, + "searchable": false, + "type": "string", + "userEditable": false, + "viewable": false + }, + "authoritative": { + "description": "Is this an authoritative application", + "searchable": false, + "title": "Authoritative", + "type": "boolean", + "viewable": false + }, + "connectorId": { + "description": "Id of the connector associated with the application", + "searchable": false, + "title": "Connector ID", + "type": "string", + "userEditable": false, + "viewable": false + }, + "description": { + "description": "Application Description", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true + }, + "icon": { + "searchable": true, + "title": "Icon", + "type": "string", + "userEditable": true, + "viewable": true + }, + "mappingNames": { + "description": "Names of the sync mappings used by an application with provisioning configured.", + "items": { + "title": "Mapping Name Items", + "type": "string" + }, + "searchable": true, + "title": "Sync Mapping Names", + "type": "array", + "viewable": true + }, + "members": { + "description": "Application Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string" + } + }, + "title": "Group Members Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "applications", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true + }, + "name": { + "description": "Application name", + "notifyRelationships": [ + "roles", + "members" + ], + "policies": [ + { + "policyId": "unique" + } + ], + "returnByDefault": true, + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true + }, + "owners": { + "description": "Application Owners", + "items": { + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Application _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "ownerOfApp", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "searchable": false, + "title": "Owners", + "type": "array", + "userEditable": false, + "viewable": true + }, + "roles": { + "description": "Roles granting users the application", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/alpha_role", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "applications", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "searchable": false, + "title": "Roles", + "type": "array", + "userEditable": false, + "viewable": true + }, + "ssoEntities": { + "description": "SSO Entity Id", + "properties": { + "domain": { + "type": "string" + }, + "federatedDomain": { + "type": "string" + }, + "idpLocation": { + "type": "string" + }, + "idpLoginUrl": { + "type": "string" + }, + "idpPrivateId": { + "type": "string" + }, + "key": { + "type": "string" + }, + "oidcId": { + "type": "string" + }, + "pfApcId": { + "type": "string" + }, + "pfIdpAdapterId": { + "type": "string" + }, + "pfPolicyId": { + "type": "string" + }, + "pfSigningCertId": { + "type": "string" + }, + "pfSpConnectionId": { + "type": "string" + }, + "spLocation": { + "type": "string" + }, + "spPrivate": { + "type": "string" + }, + "spPrivateId": { + "type": "string" + } + }, + "searchable": false, + "title": "SSO Entity Id", + "type": "object", + "userEditable": false, + "viewable": false + }, + "templateName": { + "description": "Name of the template the application was created from", + "searchable": false, + "title": "Template Name", + "type": "string", + "userEditable": false, + "viewable": false + }, + "templateVersion": { + "description": "The template version", + "searchable": false, + "title": "Template Version", + "type": "string", + "userEditable": false, + "viewable": false + }, + "uiConfig": { + "description": "UI Config", + "isPersonal": false, + "properties": {}, + "searchable": false, + "title": "UI Config", + "type": "object", + "usageDescription": "", + "viewable": false + }, + "url": { + "searchable": true, + "title": "Url", + "type": "string", + "userEditable": true, + "viewable": true + } + }, + "required": [ + "name" + ], + "title": "Alpha realm - Application", + "type": "object" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_assignment.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_assignment.managed.json new file mode 100644 index 000000000..9aa8ef9dd --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_assignment.managed.json @@ -0,0 +1,254 @@ +{ + "attributeEncryption": {}, + "name": "alpha_assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "type", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight" + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false + }, + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value" + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string" + }, + "name": { + "description": "Name", + "type": "string" + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string" + }, + "value": { + "description": "Value", + "type": "string" + } + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object" + }, + "notifyRelationships": [ + "roles", + "members" + ], + "title": "Assignment Attributes", + "type": "array", + "viewable": true + }, + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false + }, + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true + }, + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", + "items": { + "title": "Link Qualifiers Items", + "type": "string" + }, + "title": "Link Qualifiers", + "type": "array", + "viewable": true + }, + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists" + } + ], + "searchable": true, + "title": "Mapping", + "type": "string", + "viewable": true + }, + "members": { + "description": "Assignment Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string" + } + }, + "title": "Assignment Members Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Assignment Members Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Assignment Members", + "type": "array", + "viewable": true + }, + "name": { + "description": "The assignment name, used for display purposes.", + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true + }, + "roles": { + "description": "Managed Roles", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Managed Roles Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/alpha_role", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Managed Roles Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Managed Roles", + "type": "array", + "userEditable": false, + "viewable": true + }, + "type": { + "description": "The type of object this assignment represents", + "title": "Type", + "type": "string", + "viewable": true + }, + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members" + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null" + ], + "viewable": true + } + }, + "required": [ + "name", + "description", + "mapping" + ], + "title": "Alpha realm - Assignment", + "type": "object" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_group.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_group.managed.json new file mode 100644 index 000000000..0c38caf28 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_group.managed.json @@ -0,0 +1,137 @@ +{ + "name": "alpha_group", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-group", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group", + "mat-icon": "group", + "order": [ + "_id", + "name", + "description", + "condition", + "members" + ], + "properties": { + "_id": { + "description": "Group ID", + "isPersonal": false, + "policies": [ + { + "params": { + "propertyName": "name" + }, + "policyId": "id-must-equal-property" + } + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false + }, + "condition": { + "description": "A filter for conditionally assigned members", + "isConditional": true, + "policies": [ + { + "policyId": "valid-query-filter" + } + ], + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false + }, + "description": { + "description": "Group Description", + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": false, + "viewable": true + }, + "members": { + "description": "Group Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Group Members Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "groups", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true + }, + "name": { + "description": "Group Name", + "policies": [ + { + "policyId": "required" + }, + { + "params": { + "forbiddenChars": [ + "/*" + ] + }, + "policyId": "cannot-contain-characters" + } + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true + } + }, + "required": [ + "name" + ], + "title": "Alpha realm - Group", + "viewable": true + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_organization.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_organization.managed.json new file mode 100644 index 000000000..654595c3b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_organization.managed.json @@ -0,0 +1,395 @@ +{ + "name": "alpha_organization", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs" + ], + "properties": { + "adminIDs": { + "isVirtual": true, + "items": { + "title": "admin ids", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id" + ], + "referencedRelationshipFields": [ + "admins" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "Admin user ids", + "type": "array", + "userEditable": false, + "viewable": false + }, + "admins": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "adminOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "notifyRelationships": [ + "children" + ], + "returnByDefault": false, + "searchable": false, + "title": "Administrators", + "type": "array", + "userEditable": false, + "viewable": true + }, + "children": { + "description": "Child Organizations", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + "description" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "parent", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Child Organizations", + "type": "array", + "userEditable": false, + "viewable": false + }, + "description": { + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": true, + "viewable": true + }, + "members": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "memberOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true + }, + "name": { + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true + }, + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id" + ], + "referencedRelationshipFields": [ + "owners" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "Owner user ids", + "type": "array", + "userEditable": false, + "viewable": false + }, + "owners": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "notifyRelationships": [ + "children" + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, + "viewable": true + }, + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members" + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + "description" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, + "viewable": true + }, + "parentAdminIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent admins", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs" + ], + "referencedRelationshipFields": [ + "parent" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent admins", + "type": "array", + "userEditable": false, + "viewable": false + }, + "parentIDs": { + "isVirtual": true, + "items": { + "title": "parent org ids", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs" + ], + "referencedRelationshipFields": [ + "parent" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", + "type": "array", + "userEditable": false, + "viewable": false + }, + "parentOwnerIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent owners", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs" + ], + "referencedRelationshipFields": [ + "parent" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", + "type": "array", + "userEditable": false, + "viewable": false + } + }, + "required": [ + "name" + ], + "title": "Alpha realm - Organization", + "type": "object" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_role.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_role.managed.json new file mode 100644 index 000000000..564429a2e --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_role.managed.json @@ -0,0 +1,247 @@ +{ + "name": "alpha_role", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "", + "icon": "fa-check-square-o", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "applications", + "condition", + "temporalConstraints" + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false + }, + "applications": { + "description": "Role Applications", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Role Application Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Application Items", + "type": "relationship", + "validate": true + }, + "notifyRelationships": [ + "members" + ], + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "viewable": false + }, + "assignments": { + "description": "Managed Assignments", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Managed Assignments Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/alpha_assignment", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Managed Assignments Items", + "type": "relationship", + "validate": true + }, + "notifyRelationships": [ + "members" + ], + "returnByDefault": false, + "title": "Managed Assignments", + "type": "array", + "viewable": true + }, + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false + }, + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true + }, + "members": { + "description": "Role Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Role Members Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Members Items", + "type": "relationship", + "validate": true + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Role Members", + "type": "array", + "viewable": true + }, + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique" + } + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true + }, + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, + "items": { + "order": [ + "duration" + ], + "properties": { + "duration": { + "description": "Duration", + "type": "string" + } + }, + "required": [ + "duration" + ], + "title": "Temporal Constraints Items", + "type": "object" + }, + "notifyRelationships": [ + "members" + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false + } + }, + "required": [ + "name" + ], + "title": "Alpha realm - Role", + "type": "object" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_user.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_user.managed.json new file mode 100644 index 000000000..9b5cf6277 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_user.managed.json @@ -0,0 +1,1818 @@ +{ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync" + }, + "name": "alpha_user", + "notifications": {}, + "onCreate": { + "globals": {}, + "source": "file://alpha_user.managed.scripts/onCreate.script.js", + "type": "text/javascript" + }, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "cn", + "sn", + "mail", + "profileImage", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "groups", + "applications", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "effectiveGroups", + "effectiveApplications", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "ownerOfApp", + "passwordLastChangedTime", + "passwordExpirationTime", + "frIndexedString1", + "frIndexedString2", + "frIndexedString3", + "frIndexedString4", + "frIndexedString5", + "frIndexedString6", + "frIndexedString7", + "frIndexedString8", + "frIndexedString9", + "frIndexedString10", + "frIndexedString11", + "frIndexedString12", + "frIndexedString13", + "frIndexedString14", + "frIndexedString15", + "frIndexedString16", + "frIndexedString17", + "frIndexedString18", + "frIndexedString19", + "frIndexedString20", + "frUnindexedString1", + "frUnindexedString2", + "frUnindexedString3", + "frUnindexedString4", + "frUnindexedString5", + "frIndexedMultivalued1", + "frIndexedMultivalued2", + "frIndexedMultivalued3", + "frIndexedMultivalued4", + "frIndexedMultivalued5", + "frUnindexedMultivalued1", + "frUnindexedMultivalued2", + "frUnindexedMultivalued3", + "frUnindexedMultivalued4", + "frUnindexedMultivalued5", + "frIndexedDate1", + "frIndexedDate2", + "frIndexedDate3", + "frIndexedDate4", + "frIndexedDate5", + "frUnindexedDate1", + "frUnindexedDate2", + "frUnindexedDate3", + "frUnindexedDate4", + "frUnindexedDate5", + "frIndexedInteger1", + "frIndexedInteger2", + "frIndexedInteger3", + "frIndexedInteger4", + "frIndexedInteger5", + "frUnindexedInteger1", + "frUnindexedInteger2", + "frUnindexedInteger3", + "frUnindexedInteger4", + "frUnindexedInteger5", + "assignedDashboard", + "devicePrintProfiles", + "deviceProfiles", + "oathDeviceProfiles", + "pushDeviceProfiles", + "webauthnDeviceProfiles" + ], + "properties": { + "_id": { + "description": "User ID", + "isPersonal": false, + "policies": [ + { + "params": { + "forbiddenChars": [ + "/" + ] + }, + "policyId": "cannot-contain-characters" + } + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false + }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "searchable": false, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true + }, + "aliasList": { + "description": "List of identity aliases used primarily to record social IdP subjects for this user", + "isVirtual": false, + "items": { + "title": "User Alias Names Items", + "type": "string" + }, + "returnByDefault": false, + "searchable": false, + "title": "User Alias Names List", + "type": "array", + "userEditable": true, + "viewable": false + }, + "applications": { + "description": "Applications", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string" + } + }, + "title": "Groups Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [ + "name" + ] + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": false + }, + "assignedDashboard": { + "description": "List of items to click on for this user", + "isVirtual": true, + "items": { + "title": "Assigned Dashboard Items", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "name" + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications" + ], + [ + "applications" + ] + ] + }, + "searchable": false, + "title": "Assigned Dashboard", + "type": "array", + "userEditable": false, + "viewable": true + }, + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string" + } + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/alpha_assignment", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "authzRoles": { + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Authorization Roles Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "city": { + "description": "City", + "isPersonal": false, + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "cn": { + "default": "{{givenName}} {{sn}}", + "description": "Common Name", + "isPersonal": true, + "scope": "private", + "searchable": false, + "title": "Common Name", + "type": "string", + "userEditable": false, + "viewable": false + }, + "consentedMappings": { + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "items": { + "order": [ + "mapping", + "consentDate" + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "searchable": false, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true + }, + "mapping": { + "description": "Mapping", + "searchable": false, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true + } + }, + "required": [ + "mapping", + "consentDate" + ], + "title": "Consented Mappings Item", + "type": "object" + }, + "title": "Consented Mappings Items", + "type": "array" + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false + }, + "country": { + "description": "Country", + "isPersonal": false, + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "description": { + "description": "Description", + "isPersonal": false, + "searchable": false, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "devicePrintProfiles": { + "description": "Device Print Profiles Information", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Device Print Profiles", + "type": "array", + "userEditable": true, + "viewable": true + }, + "deviceProfiles": { + "description": "Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Device Profiles", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "effectiveApplications": { + "description": "Effective Applications", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assigned Application Items", + "type": "object" + }, + "queryConfig": { + "referencedObjectFields": [ + "name" + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications" + ], + [ + "applications" + ] + ] + }, + "returnByDefault": true, + "title": "Effective Applications", + "type": "array", + "viewable": false + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object" + }, + "queryConfig": { + "referencedObjectFields": [ + "*" + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments" + ], + [ + "assignments" + ] + ] + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false + }, + "effectiveGroups": { + "description": "Effective Groups", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Groups Items", + "type": "object" + }, + "queryConfig": { + "referencedRelationshipFields": [ + "groups" + ] + }, + "returnByDefault": true, + "title": "Effective Groups", + "type": "array", + "usageDescription": "", + "viewable": false + }, + "effectiveRoles": { + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object" + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles" + ] + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false + }, + "frIndexedDate1": { + "description": "Generic Indexed Date 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedDate2": { + "description": "Generic Indexed Date 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedDate3": { + "description": "Generic Indexed Date 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedDate4": { + "description": "Generic Indexed Date 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedDate5": { + "description": "Generic Indexed Date 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger1": { + "description": "Generic Indexed Integer 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger2": { + "description": "Generic Indexed Integer 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger3": { + "description": "Generic Indexed Integer 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger4": { + "description": "Generic Indexed Integer 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger5": { + "description": "Generic Indexed Integer 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued1": { + "description": "Generic Indexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued2": { + "description": "Generic Indexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued3": { + "description": "Generic Indexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued4": { + "description": "Generic Indexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued5": { + "description": "Generic Indexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString1": { + "description": "Generic Indexed String 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString10": { + "description": "Generic Indexed String 10", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 10", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString11": { + "description": "Generic Indexed String 11", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 11", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString12": { + "description": "Generic Indexed String 12", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 12", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString13": { + "description": "Generic Indexed String 13", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 13", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString14": { + "description": "Generic Indexed String 14", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 14", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString15": { + "description": "Generic Indexed String 15", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 15", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString16": { + "description": "Generic Indexed String 16", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 16", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString17": { + "description": "Generic Indexed String 17", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 17", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString18": { + "description": "Generic Indexed String 18", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 18", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString19": { + "description": "Generic Indexed String 19", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 19", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString2": { + "description": "Generic Indexed String 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString20": { + "description": "Generic Indexed String 20", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 20", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString3": { + "description": "Generic Indexed String 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString4": { + "description": "Generic Indexed String 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString5": { + "description": "Generic Indexed String 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString6": { + "description": "Generic Indexed String 6", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 6", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString7": { + "description": "Generic Indexed String 7", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 7", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString8": { + "description": "Generic Indexed String 8", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 8", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString9": { + "description": "Generic Indexed String 9", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 9", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate1": { + "description": "Generic Unindexed Date 1", + "isPersonal": false, + "title": "Generic Unindexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate2": { + "description": "Generic Unindexed Date 2", + "isPersonal": false, + "title": "Generic Unindexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate3": { + "description": "Generic Unindexed Date 3", + "isPersonal": false, + "title": "Generic Unindexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate4": { + "description": "Generic Unindexed Date 4", + "isPersonal": false, + "title": "Generic Unindexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate5": { + "description": "Generic Unindexed Date 5", + "isPersonal": false, + "title": "Generic Unindexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger1": { + "description": "Generic Unindexed Integer 1", + "isPersonal": false, + "title": "Generic Unindexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger2": { + "description": "Generic Unindexed Integer 2", + "isPersonal": false, + "title": "Generic Unindexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger3": { + "description": "Generic Unindexed Integer 3", + "isPersonal": false, + "title": "Generic Unindexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger4": { + "description": "Generic Unindexed Integer 4", + "isPersonal": false, + "title": "Generic Unindexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger5": { + "description": "Generic Unindexed Integer 5", + "isPersonal": false, + "title": "Generic Unindexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued1": { + "description": "Generic Unindexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued2": { + "description": "Generic Unindexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued3": { + "description": "Generic Unindexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued4": { + "description": "Generic Unindexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued5": { + "description": "Generic Unindexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString1": { + "description": "Generic Unindexed String 1", + "isPersonal": false, + "title": "Generic Unindexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString2": { + "description": "Generic Unindexed String 2", + "isPersonal": false, + "title": "Generic Unindexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString3": { + "description": "Generic Unindexed String 3", + "isPersonal": false, + "title": "Generic Unindexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString4": { + "description": "Generic Unindexed String 4", + "isPersonal": false, + "title": "Generic Unindexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString5": { + "description": "Generic Unindexed String 5", + "isPersonal": false, + "title": "Generic Unindexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "givenName": { + "description": "First Name", + "isPersonal": true, + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "groups": { + "description": "Groups", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Groups Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Group", + "path": "managed/alpha_group", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true + }, + "relationshipGrantTemporalConstraintsEnforced": false, + "returnByDefault": false, + "title": "Groups", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId" + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string" + }, + "customQuestion": { + "description": "Custom question", + "type": "string" + }, + "questionId": { + "description": "Question ID", + "type": "string" + } + }, + "required": [], + "title": "KBA Info Items", + "type": "object" + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false + }, + "lastSync": { + "description": "Last Sync timestamp", + "isPersonal": false, + "order": [ + "effectiveAssignments", + "timestamp" + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object" + }, + "title": "Effective Assignments", + "type": "array" + }, + "timestamp": { + "description": "Timestamp", + "type": "string" + } + }, + "required": [], + "scope": "private", + "searchable": false, + "title": "Last Sync timestamp", + "type": "object", + "usageDescription": "", + "viewable": false + }, + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format" + } + ], + "searchable": true, + "title": "Email Address", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Manager _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", + "userEditable": false, + "validate": true, + "viewable": true + }, + "memberOfOrg": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations to which I Belong", + "type": "array", + "userEditable": false, + "viewable": true + }, + "memberOfOrgIDs": { + "isVirtual": true, + "items": { + "title": "org identifiers", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs" + ], + "referencedRelationshipFields": [ + "memberOfOrg" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false + }, + "oathDeviceProfiles": { + "description": "Oath Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Oath Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true + }, + "ownerOfApp": { + "items": { + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [ + "name" + ] + } + } + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "searchable": false, + "title": "Applications I Own", + "type": "array", + "userEditable": false, + "viewable": true + }, + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", + "type": "array", + "userEditable": false, + "viewable": true + }, + "password": { + "description": "Password", + "isPersonal": false, + "isProtected": true, + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false + }, + "passwordExpirationTime": { + "description": "Password Expiration Time", + "searchable": true, + "title": "Password Expiration Time", + "type": "string", + "userEditable": false, + "viewable": true + }, + "passwordLastChangedTime": { + "description": "Password Last Changed Time", + "searchable": true, + "title": "Password Last Changed Time", + "type": "string", + "userEditable": false, + "viewable": true + }, + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing" + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean" + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean" + } + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "profileImage": { + "description": "Profile Image", + "isPersonal": true, + "searchable": false, + "title": "Profile Image", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false + }, + "pushDeviceProfiles": { + "description": "Push Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Push Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true + }, + "reports": { + "description": "Direct Reports", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Direct Reports Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/alpha_role", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Provisioning Roles Items", + "type": "relationship", + "validate": true + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Provisioning Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "sn": { + "description": "Last Name", + "isPersonal": true, + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "userName": { + "description": "Username", + "isPersonal": true, + "minLength": 1, + "policies": [ + { + "policyId": "valid-username" + }, + { + "params": { + "forbiddenChars": [ + "/" + ] + }, + "policyId": "cannot-contain-characters" + }, + { + "params": { + "minLength": 1 + }, + "policyId": "minimum-length" + }, + { + "params": { + "maxLength": 255 + }, + "policyId": "maximum-length" + } + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "webauthnDeviceProfiles": { + "description": "Web AuthN Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Web AuthN Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true + } + }, + "required": [ + "userName", + "givenName", + "sn", + "mail" + ], + "title": "Alpha realm - User", + "type": "object", + "viewable": true + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_user.managed.scripts/onCreate.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_user.managed.scripts/onCreate.script.js new file mode 100644 index 000000000..3bb2307b2 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/alpha_user.managed.scripts/onCreate.script.js @@ -0,0 +1,5 @@ +//extract script test UPDATED + + +//test UPDATED + diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_application.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_application.managed.json new file mode 100644 index 000000000..78c0213a5 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_application.managed.json @@ -0,0 +1,332 @@ +{ + "name": "bravo_application", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "Application Object", + "icon": "fa-folder", + "order": [ + "name", + "description", + "url", + "icon", + "mappingNames", + "owners", + "roles", + "members" + ], + "properties": { + "_id": { + "description": "Application ID", + "isPersonal": false, + "searchable": false, + "type": "string", + "userEditable": false, + "viewable": false + }, + "authoritative": { + "description": "Is this an authoritative application", + "searchable": false, + "title": "Authoritative", + "type": "boolean", + "viewable": false + }, + "connectorId": { + "description": "Id of the connector associated with the application", + "searchable": false, + "title": "Connector ID", + "type": "string", + "userEditable": false, + "viewable": false + }, + "description": { + "description": "Application Description", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true + }, + "icon": { + "searchable": true, + "title": "Icon", + "type": "string", + "userEditable": true, + "viewable": true + }, + "mappingNames": { + "description": "Names of the sync mappings used by an application with provisioning configured.", + "items": { + "title": "Mapping Name Items", + "type": "string" + }, + "searchable": true, + "title": "Sync Mapping Names", + "type": "array", + "viewable": true + }, + "members": { + "description": "Application Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string" + } + }, + "title": "Group Members Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "applications", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true + }, + "name": { + "description": "Application name", + "notifyRelationships": [ + "roles", + "members" + ], + "policies": [ + { + "policyId": "unique" + } + ], + "returnByDefault": true, + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true + }, + "owners": { + "description": "Application Owners", + "items": { + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Application _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "ownerOfApp", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "searchable": false, + "title": "Owners", + "type": "array", + "userEditable": false, + "viewable": true + }, + "roles": { + "description": "Roles granting users the application", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/bravo_role", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "applications", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "searchable": false, + "title": "Roles", + "type": "array", + "userEditable": false, + "viewable": true + }, + "ssoEntities": { + "description": "SSO Entity Id", + "properties": { + "domain": { + "type": "string" + }, + "federatedDomain": { + "type": "string" + }, + "idpLocation": { + "type": "string" + }, + "idpLoginUrl": { + "type": "string" + }, + "idpPrivateId": { + "type": "string" + }, + "key": { + "type": "string" + }, + "oidcId": { + "type": "string" + }, + "pfApcId": { + "type": "string" + }, + "pfIdpAdapterId": { + "type": "string" + }, + "pfPolicyId": { + "type": "string" + }, + "pfSigningCertId": { + "type": "string" + }, + "pfSpConnectionId": { + "type": "string" + }, + "spLocation": { + "type": "string" + }, + "spPrivate": { + "type": "string" + } + }, + "searchable": false, + "title": "SSO Entity Id", + "type": "object", + "userEditable": false, + "viewable": false + }, + "templateName": { + "description": "Name of the template the application was created from", + "searchable": false, + "title": "Template Name", + "type": "string", + "userEditable": false, + "viewable": false + }, + "templateVersion": { + "description": "The template version", + "searchable": false, + "title": "Template Version", + "type": "string", + "userEditable": false, + "viewable": false + }, + "uiConfig": { + "description": "UI Config", + "isPersonal": false, + "properties": {}, + "searchable": false, + "title": "UI Config", + "type": "object", + "usageDescription": "", + "viewable": false + }, + "url": { + "searchable": true, + "title": "Url", + "type": "string", + "userEditable": true, + "viewable": true + } + }, + "required": [ + "name" + ], + "title": "Bravo realm - Application", + "type": "object" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_assignment.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_assignment.managed.json new file mode 100644 index 000000000..7f9f8e9d0 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_assignment.managed.json @@ -0,0 +1,254 @@ +{ + "attributeEncryption": {}, + "name": "bravo_assignment", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "A role assignment", + "icon": "fa-key", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment", + "mat-icon": "vpn_key", + "order": [ + "_id", + "name", + "description", + "type", + "mapping", + "attributes", + "linkQualifiers", + "roles", + "members", + "condition", + "weight" + ], + "properties": { + "_id": { + "description": "The assignment ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false + }, + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value" + ], + "properties": { + "assignmentOperation": { + "description": "Assignment operation", + "type": "string" + }, + "name": { + "description": "Name", + "type": "string" + }, + "unassignmentOperation": { + "description": "Unassignment operation", + "type": "string" + }, + "value": { + "description": "Value", + "type": "string" + } + }, + "required": [], + "title": "Assignment Attributes Items", + "type": "object" + }, + "notifyRelationships": [ + "roles", + "members" + ], + "title": "Assignment Attributes", + "type": "array", + "viewable": true + }, + "condition": { + "description": "A conditional filter for this assignment", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false + }, + "description": { + "description": "The assignment description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true + }, + "linkQualifiers": { + "description": "Conditional link qualifiers to restrict this assignment to.", + "items": { + "title": "Link Qualifiers Items", + "type": "string" + }, + "title": "Link Qualifiers", + "type": "array", + "viewable": true + }, + "mapping": { + "description": "The name of the mapping this assignment applies to", + "policies": [ + { + "policyId": "mapping-exists" + } + ], + "searchable": true, + "title": "Mapping", + "type": "string", + "viewable": true + }, + "members": { + "description": "Assignment Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string" + } + }, + "title": "Assignment Members Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Assignment Members Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Assignment Members", + "type": "array", + "viewable": true + }, + "name": { + "description": "The assignment name, used for display purposes.", + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true + }, + "roles": { + "description": "Managed Roles", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Managed Roles Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/bravo_role", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "assignments", + "reverseRelationship": true, + "title": "Managed Roles Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Managed Roles", + "type": "array", + "userEditable": false, + "viewable": true + }, + "type": { + "description": "The type of object this assignment represents", + "title": "Type", + "type": "string", + "viewable": true + }, + "weight": { + "description": "The weight of the assignment.", + "notifyRelationships": [ + "roles", + "members" + ], + "searchable": false, + "title": "Weight", + "type": [ + "number", + "null" + ], + "viewable": true + } + }, + "required": [ + "name", + "description", + "mapping" + ], + "title": "Bravo realm - Assignment", + "type": "object" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_group.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_group.managed.json new file mode 100644 index 000000000..639d20311 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_group.managed.json @@ -0,0 +1,137 @@ +{ + "name": "bravo_group", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-group", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group", + "mat-icon": "group", + "order": [ + "_id", + "name", + "description", + "condition", + "members" + ], + "properties": { + "_id": { + "description": "Group ID", + "isPersonal": false, + "policies": [ + { + "params": { + "propertyName": "name" + }, + "policyId": "id-must-equal-property" + } + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false + }, + "condition": { + "description": "A filter for conditionally assigned members", + "isConditional": true, + "policies": [ + { + "policyId": "valid-query-filter" + } + ], + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false + }, + "description": { + "description": "Group Description", + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": false, + "viewable": true + }, + "members": { + "description": "Group Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Group Members Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "groups", + "reverseRelationship": true, + "title": "Group Members Items", + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true + }, + "name": { + "description": "Group Name", + "policies": [ + { + "policyId": "required" + }, + { + "params": { + "forbiddenChars": [ + "/*" + ] + }, + "policyId": "cannot-contain-characters" + } + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true + } + }, + "required": [ + "name" + ], + "title": "Bravo realm - Group", + "viewable": true + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_organization.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_organization.managed.json new file mode 100644 index 000000000..e61030677 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_organization.managed.json @@ -0,0 +1,395 @@ +{ + "name": "bravo_organization", + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "An organization or tenant, whose resources are managed by organizational admins.", + "icon": "fa-building", + "mat-icon": "domain", + "order": [ + "name", + "description", + "owners", + "admins", + "members", + "parent", + "children", + "adminIDs", + "ownerIDs", + "parentAdminIDs", + "parentOwnerIDs", + "parentIDs" + ], + "properties": { + "adminIDs": { + "isVirtual": true, + "items": { + "title": "admin ids", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id" + ], + "referencedRelationshipFields": [ + "admins" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "Admin user ids", + "type": "array", + "userEditable": false, + "viewable": false + }, + "admins": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "adminOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "notifyRelationships": [ + "children" + ], + "returnByDefault": false, + "searchable": false, + "title": "Administrators", + "type": "array", + "userEditable": false, + "viewable": true + }, + "children": { + "description": "Child Organizations", + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + "description" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "parent", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Child Organizations", + "type": "array", + "userEditable": false, + "viewable": false + }, + "description": { + "searchable": true, + "title": "Description", + "type": "string", + "userEditable": true, + "viewable": true + }, + "members": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "memberOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "searchable": false, + "title": "Members", + "type": "array", + "userEditable": false, + "viewable": true + }, + "name": { + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true + }, + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id" + ], + "referencedRelationshipFields": [ + "owners" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "Owner user ids", + "type": "array", + "userEditable": false, + "viewable": false + }, + "owners": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "notifyRelationships": [ + "children" + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, + "viewable": true + }, + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members" + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + "description" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "returnByDefault": false, + "reversePropertyName": "children", + "reverseRelationship": true, + "searchable": false, + "title": "Parent Organization", + "type": "relationship", + "userEditable": false, + "validate": true, + "viewable": true + }, + "parentAdminIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent admins", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs" + ], + "referencedRelationshipFields": [ + "parent" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent admins", + "type": "array", + "userEditable": false, + "viewable": false + }, + "parentIDs": { + "isVirtual": true, + "items": { + "title": "parent org ids", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs" + ], + "referencedRelationshipFields": [ + "parent" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "parent org ids", + "type": "array", + "userEditable": false, + "viewable": false + }, + "parentOwnerIDs": { + "isVirtual": true, + "items": { + "title": "user ids of parent owners", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs" + ], + "referencedRelationshipFields": [ + "parent" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "user ids of parent owners", + "type": "array", + "userEditable": false, + "viewable": false + } + }, + "required": [ + "name" + ], + "title": "Bravo realm - Organization", + "type": "object" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_role.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_role.managed.json new file mode 100644 index 000000000..c1c0f5c7c --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_role.managed.json @@ -0,0 +1,251 @@ +{ + "name": "bravo_role", + "onValidate": { + "globals": {}, + "source": "file://bravo_role.managed.scripts/onValidate.script.js", + "type": "text/javascript" + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "icon": "fa-check-square-o", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role", + "mat-icon": "assignment_ind", + "order": [ + "_id", + "name", + "description", + "members", + "assignments", + "applications", + "condition", + "temporalConstraints" + ], + "properties": { + "_id": { + "description": "Role ID", + "searchable": false, + "title": "Name", + "type": "string", + "viewable": false + }, + "applications": { + "description": "Role Applications", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Role Application Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Application Items", + "type": "relationship", + "validate": true + }, + "notifyRelationships": [ + "members" + ], + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "viewable": false + }, + "assignments": { + "description": "Managed Assignments", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Managed Assignments Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/bravo_assignment", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Managed Assignments Items", + "type": "relationship", + "validate": true + }, + "notifyRelationships": [ + "members" + ], + "returnByDefault": false, + "title": "Managed Assignments", + "type": "array", + "viewable": true + }, + "condition": { + "description": "A conditional filter for this role", + "isConditional": true, + "searchable": false, + "title": "Condition", + "type": "string", + "viewable": false + }, + "description": { + "description": "The role description, used for display purposes.", + "searchable": true, + "title": "Description", + "type": "string", + "viewable": true + }, + "members": { + "description": "Role Members", + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Role Members Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "roles", + "reverseRelationship": true, + "title": "Role Members Items", + "type": "relationship", + "validate": true + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Role Members", + "type": "array", + "viewable": true + }, + "name": { + "description": "The role name, used for display purposes.", + "policies": [ + { + "policyId": "unique" + } + ], + "searchable": true, + "title": "Name", + "type": "string", + "viewable": true + }, + "temporalConstraints": { + "description": "An array of temporal constraints for a role", + "isTemporalConstraint": true, + "items": { + "order": [ + "duration" + ], + "properties": { + "duration": { + "description": "Duration", + "type": "string" + } + }, + "required": [ + "duration" + ], + "title": "Temporal Constraints Items", + "type": "object" + }, + "notifyRelationships": [ + "members" + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false + } + }, + "required": [ + "name" + ], + "title": "Bravo realm - Role", + "type": "object" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_role.managed.scripts/onValidate.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_role.managed.scripts/onValidate.script.js new file mode 100644 index 000000000..80f741cf7 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_role.managed.scripts/onValidate.script.js @@ -0,0 +1,3 @@ +//extract script test UPDATED ONVALIDATE + +//test UPDATED diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_user.managed.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_user.managed.json new file mode 100644 index 000000000..593e28295 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_user.managed.json @@ -0,0 +1,1817 @@ +{ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync" + }, + "name": "bravo_user", + "notifications": {}, + "postUpdate": { + "globals": {}, + "source": "file://bravo_user.managed.scripts/postUpdate.script.js", + "type": "text/javascript" + }, + "schema": { + "$schema": "http://json-schema.org/draft-03/schema", + "icon": "fa-user", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User", + "mat-icon": "people", + "order": [ + "_id", + "userName", + "password", + "givenName", + "cn", + "sn", + "mail", + "profileImage", + "description", + "accountStatus", + "telephoneNumber", + "postalAddress", + "city", + "postalCode", + "country", + "stateProvince", + "roles", + "assignments", + "groups", + "applications", + "manager", + "authzRoles", + "reports", + "effectiveRoles", + "effectiveAssignments", + "effectiveGroups", + "effectiveApplications", + "lastSync", + "kbaInfo", + "preferences", + "consentedMappings", + "ownerOfOrg", + "adminOfOrg", + "memberOfOrg", + "memberOfOrgIDs", + "ownerOfApp", + "passwordLastChangedTime", + "passwordExpirationTime", + "frIndexedString1", + "frIndexedString2", + "frIndexedString3", + "frIndexedString4", + "frIndexedString5", + "frIndexedString6", + "frIndexedString7", + "frIndexedString8", + "frIndexedString9", + "frIndexedString10", + "frIndexedString11", + "frIndexedString12", + "frIndexedString13", + "frIndexedString14", + "frIndexedString15", + "frIndexedString16", + "frIndexedString17", + "frIndexedString18", + "frIndexedString19", + "frIndexedString20", + "frUnindexedString1", + "frUnindexedString2", + "frUnindexedString3", + "frUnindexedString4", + "frUnindexedString5", + "frIndexedMultivalued1", + "frIndexedMultivalued2", + "frIndexedMultivalued3", + "frIndexedMultivalued4", + "frIndexedMultivalued5", + "frUnindexedMultivalued1", + "frUnindexedMultivalued2", + "frUnindexedMultivalued3", + "frUnindexedMultivalued4", + "frUnindexedMultivalued5", + "frIndexedDate1", + "frIndexedDate2", + "frIndexedDate3", + "frIndexedDate4", + "frIndexedDate5", + "frUnindexedDate1", + "frUnindexedDate2", + "frUnindexedDate3", + "frUnindexedDate4", + "frUnindexedDate5", + "frIndexedInteger1", + "frIndexedInteger2", + "frIndexedInteger3", + "frIndexedInteger4", + "frIndexedInteger5", + "frUnindexedInteger1", + "frUnindexedInteger2", + "frUnindexedInteger3", + "frUnindexedInteger4", + "frUnindexedInteger5", + "assignedDashboard", + "devicePrintProfiles", + "deviceProfiles", + "oathDeviceProfiles", + "pushDeviceProfiles", + "webauthnDeviceProfiles" + ], + "properties": { + "_id": { + "description": "User ID", + "isPersonal": false, + "policies": [ + { + "params": { + "forbiddenChars": [ + "/" + ] + }, + "policyId": "cannot-contain-characters" + } + ], + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false + }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "searchable": false, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "adminOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true + }, + "aliasList": { + "description": "List of identity aliases used primarily to record social IdP subjects for this user", + "isVirtual": false, + "items": { + "title": "User Alias Names Items", + "type": "string" + }, + "returnByDefault": false, + "searchable": false, + "title": "User Alias Names List", + "type": "array", + "userEditable": true, + "viewable": false + }, + "applications": { + "description": "Applications", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string" + } + }, + "title": "Groups Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [ + "name" + ] + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Applications", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": false + }, + "assignedDashboard": { + "description": "List of items to click on for this user", + "isVirtual": true, + "items": { + "title": "Assigned Dashboard Items", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "name" + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications" + ], + [ + "applications" + ] + ] + }, + "searchable": false, + "title": "Assigned Dashboard", + "type": "array", + "userEditable": false, + "viewable": true + }, + "assignments": { + "description": "Assignments", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_accountType": { + "description": "Account type", + "type": "string" + }, + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + }, + "_uniqueId": { + "description": "Unique identifier", + "type": "string" + } + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/bravo_assignment", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Assignments Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Assignments", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "authzRoles": { + "description": "Authorization Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Authorization Roles Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "authzMembers", + "reverseRelationship": true, + "title": "Authorization Roles Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "city": { + "description": "City", + "isPersonal": false, + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "cn": { + "default": "{{givenName}} {{sn}}", + "description": "Common Name", + "isPersonal": true, + "scope": "private", + "searchable": false, + "title": "Common Name", + "type": "string", + "userEditable": false, + "viewable": false + }, + "consentedMappings": { + "description": "Consented Mappings", + "isPersonal": false, + "isVirtual": false, + "items": { + "items": { + "order": [ + "mapping", + "consentDate" + ], + "properties": { + "consentDate": { + "description": "Consent Date", + "searchable": false, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true + }, + "mapping": { + "description": "Mapping", + "searchable": false, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true + } + }, + "required": [ + "mapping", + "consentDate" + ], + "title": "Consented Mappings Item", + "type": "object" + }, + "title": "Consented Mappings Items", + "type": "array" + }, + "returnByDefault": false, + "searchable": false, + "title": "Consented Mappings", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false + }, + "country": { + "description": "Country", + "isPersonal": false, + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "description": { + "description": "Description", + "isPersonal": false, + "searchable": false, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "devicePrintProfiles": { + "description": "Device Print Profiles Information", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Device Print Profiles", + "type": "array", + "userEditable": true, + "viewable": true + }, + "deviceProfiles": { + "description": "Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true + }, + "effectiveApplications": { + "description": "Effective Applications", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assigned Application Items", + "type": "object" + }, + "queryConfig": { + "referencedObjectFields": [ + "name" + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications" + ], + [ + "applications" + ] + ] + }, + "returnByDefault": true, + "title": "Effective Applications", + "type": "array", + "viewable": false + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object" + }, + "queryConfig": { + "referencedObjectFields": [ + "*" + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments" + ], + [ + "assignments" + ] + ] + }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false + }, + "effectiveGroups": { + "description": "Effective Groups", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Groups Items", + "type": "object" + }, + "queryConfig": { + "referencedRelationshipFields": [ + "groups" + ] + }, + "returnByDefault": true, + "title": "Effective Groups", + "type": "array", + "usageDescription": "", + "viewable": false + }, + "effectiveRoles": { + "description": "Effective Roles", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Roles Items", + "type": "object" + }, + "queryConfig": { + "referencedRelationshipFields": [ + "roles" + ] + }, + "returnByDefault": true, + "title": "Effective Roles", + "type": "array", + "usageDescription": "", + "viewable": false + }, + "frIndexedDate1": { + "description": "Generic Indexed Date 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedDate2": { + "description": "Generic Indexed Date 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedDate3": { + "description": "Generic Indexed Date 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedDate4": { + "description": "Generic Indexed Date 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedDate5": { + "description": "Generic Indexed Date 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger1": { + "description": "Generic Indexed Integer 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger2": { + "description": "Generic Indexed Integer 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger3": { + "description": "Generic Indexed Integer 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger4": { + "description": "Generic Indexed Integer 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedInteger5": { + "description": "Generic Indexed Integer 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued1": { + "description": "Generic Indexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued2": { + "description": "Generic Indexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued3": { + "description": "Generic Indexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued4": { + "description": "Generic Indexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedMultivalued5": { + "description": "Generic Indexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string" + }, + "searchable": true, + "title": "Generic Indexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString1": { + "description": "Generic Indexed String 1", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString10": { + "description": "Generic Indexed String 10", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 10", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString11": { + "description": "Generic Indexed String 11", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 11", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString12": { + "description": "Generic Indexed String 12", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 12", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString13": { + "description": "Generic Indexed String 13", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 13", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString14": { + "description": "Generic Indexed String 14", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 14", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString15": { + "description": "Generic Indexed String 15", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 15", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString16": { + "description": "Generic Indexed String 16", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 16", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString17": { + "description": "Generic Indexed String 17", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 17", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString18": { + "description": "Generic Indexed String 18", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 18", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString19": { + "description": "Generic Indexed String 19", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 19", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString2": { + "description": "Generic Indexed String 2", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString20": { + "description": "Generic Indexed String 20", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 20", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString3": { + "description": "Generic Indexed String 3", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString4": { + "description": "Generic Indexed String 4", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString5": { + "description": "Generic Indexed String 5", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString6": { + "description": "Generic Indexed String 6", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 6", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString7": { + "description": "Generic Indexed String 7", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 7", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString8": { + "description": "Generic Indexed String 8", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 8", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frIndexedString9": { + "description": "Generic Indexed String 9", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 9", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate1": { + "description": "Generic Unindexed Date 1", + "isPersonal": false, + "title": "Generic Unindexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate2": { + "description": "Generic Unindexed Date 2", + "isPersonal": false, + "title": "Generic Unindexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate3": { + "description": "Generic Unindexed Date 3", + "isPersonal": false, + "title": "Generic Unindexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate4": { + "description": "Generic Unindexed Date 4", + "isPersonal": false, + "title": "Generic Unindexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedDate5": { + "description": "Generic Unindexed Date 5", + "isPersonal": false, + "title": "Generic Unindexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger1": { + "description": "Generic Unindexed Integer 1", + "isPersonal": false, + "title": "Generic Unindexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger2": { + "description": "Generic Unindexed Integer 2", + "isPersonal": false, + "title": "Generic Unindexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger3": { + "description": "Generic Unindexed Integer 3", + "isPersonal": false, + "title": "Generic Unindexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger4": { + "description": "Generic Unindexed Integer 4", + "isPersonal": false, + "title": "Generic Unindexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedInteger5": { + "description": "Generic Unindexed Integer 5", + "isPersonal": false, + "title": "Generic Unindexed Integer 5", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued1": { + "description": "Generic Unindexed Multivalue 1", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued2": { + "description": "Generic Unindexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued3": { + "description": "Generic Unindexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued4": { + "description": "Generic Unindexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedMultivalued5": { + "description": "Generic Unindexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string" + }, + "title": "Generic Unindexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString1": { + "description": "Generic Unindexed String 1", + "isPersonal": false, + "title": "Generic Unindexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString2": { + "description": "Generic Unindexed String 2", + "isPersonal": false, + "title": "Generic Unindexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString3": { + "description": "Generic Unindexed String 3", + "isPersonal": false, + "title": "Generic Unindexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString4": { + "description": "Generic Unindexed String 4", + "isPersonal": false, + "title": "Generic Unindexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "frUnindexedString5": { + "description": "Generic Unindexed String 5", + "isPersonal": false, + "title": "Generic Unindexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "givenName": { + "description": "First Name", + "isPersonal": true, + "searchable": true, + "title": "First Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "groups": { + "description": "Groups", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Groups Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Group", + "path": "managed/bravo_group", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Groups Items", + "type": "relationship", + "validate": true + }, + "relationshipGrantTemporalConstraintsEnforced": false, + "returnByDefault": false, + "title": "Groups", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "kbaInfo": { + "description": "KBA Info", + "isPersonal": true, + "items": { + "order": [ + "answer", + "customQuestion", + "questionId" + ], + "properties": { + "answer": { + "description": "Answer", + "type": "string" + }, + "customQuestion": { + "description": "Custom question", + "type": "string" + }, + "questionId": { + "description": "Question ID", + "type": "string" + } + }, + "required": [], + "title": "KBA Info Items", + "type": "object" + }, + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": false + }, + "lastSync": { + "description": "Last Sync timestamp", + "isPersonal": false, + "order": [ + "effectiveAssignments", + "timestamp" + ], + "properties": { + "effectiveAssignments": { + "description": "Effective Assignments", + "items": { + "title": "Effective Assignments Items", + "type": "object" + }, + "title": "Effective Assignments", + "type": "array" + }, + "timestamp": { + "description": "Timestamp", + "type": "string" + } + }, + "required": [], + "scope": "private", + "searchable": false, + "title": "Last Sync timestamp", + "type": "object", + "usageDescription": "", + "viewable": false + }, + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format" + } + ], + "searchable": true, + "title": "Email Address", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "manager": { + "description": "Manager", + "isPersonal": false, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Manager _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "reports", + "reverseRelationship": true, + "searchable": false, + "title": "Manager", + "type": "relationship", + "usageDescription": "", + "userEditable": false, + "validate": true, + "viewable": true + }, + "memberOfOrg": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations to which I Belong", + "type": "array", + "userEditable": false, + "viewable": true + }, + "memberOfOrgIDs": { + "isVirtual": true, + "items": { + "title": "org identifiers", + "type": "string" + }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs" + ], + "referencedRelationshipFields": [ + "memberOfOrg" + ] + }, + "returnByDefault": true, + "searchable": false, + "title": "MemberOfOrgIDs", + "type": "array", + "userEditable": false, + "viewable": false + }, + "oathDeviceProfiles": { + "description": "Oath Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Oath Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true + }, + "ownerOfApp": { + "items": { + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [ + "name" + ] + } + } + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "searchable": false, + "title": "Applications I Own", + "type": "array", + "userEditable": false, + "viewable": true + }, + "ownerOfOrg": { + "items": { + "notifySelf": false, + "properties": { + "_ref": { + "type": "string" + }, + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string" + } + }, + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true", + "sortKeys": [] + } + } + ], + "reversePropertyName": "owners", + "reverseRelationship": true, + "type": "relationship", + "validate": true + }, + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Own", + "type": "array", + "userEditable": false, + "viewable": true + }, + "password": { + "description": "Password", + "isPersonal": false, + "isProtected": true, + "scope": "private", + "searchable": false, + "title": "Password", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false + }, + "passwordExpirationTime": { + "description": "Password Expiration Time", + "searchable": true, + "title": "Password Expiration Time", + "type": "string", + "userEditable": false, + "viewable": true + }, + "passwordLastChangedTime": { + "description": "Password Last Changed Time", + "searchable": true, + "title": "Password Last Changed Time", + "type": "string", + "userEditable": false, + "viewable": true + }, + "postalAddress": { + "description": "Address 1", + "isPersonal": true, + "title": "Address 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing" + ], + "properties": { + "marketing": { + "description": "Send me special offers and services", + "type": "boolean" + }, + "updates": { + "description": "Send me news and updates", + "type": "boolean" + } + }, + "required": [], + "searchable": false, + "title": "Preferences", + "type": "object", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "profileImage": { + "description": "Profile Image", + "isPersonal": true, + "searchable": false, + "title": "Profile Image", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false + }, + "pushDeviceProfiles": { + "description": "Push Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Push Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true + }, + "reports": { + "description": "Direct Reports", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items", + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Direct Reports Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "manager", + "reverseRelationship": true, + "title": "Direct Reports Items", + "type": "relationship", + "validate": true + }, + "returnByDefault": false, + "title": "Direct Reports", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "roles": { + "description": "Provisioning Roles", + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles", + "isPersonal": false, + "items": { + "id": "urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items", + "notifySelf": true, + "properties": { + "_ref": { + "description": "References a relationship from a managed object", + "type": "string" + }, + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string" + }, + "_id": { + "description": "_refProperties object ID", + "type": "string" + } + }, + "title": "Provisioning Roles Items _refProperties", + "type": "object" + } + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/bravo_role", + "query": { + "fields": [ + "name" + ], + "queryFilter": "true" + } + } + ], + "reversePropertyName": "members", + "reverseRelationship": true, + "title": "Provisioning Roles Items", + "type": "relationship", + "validate": true + }, + "relationshipGrantTemporalConstraintsEnforced": true, + "returnByDefault": false, + "title": "Provisioning Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true + }, + "sn": { + "description": "Last Name", + "isPersonal": true, + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "telephoneNumber": { + "description": "Telephone Number", + "isPersonal": true, + "pattern": "^\\+?([0-9\\- \\(\\)])*$", + "title": "Telephone Number", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "userName": { + "description": "Username", + "isPersonal": true, + "minLength": 1, + "policies": [ + { + "policyId": "valid-username" + }, + { + "params": { + "forbiddenChars": [ + "/" + ] + }, + "policyId": "cannot-contain-characters" + }, + { + "params": { + "minLength": 1 + }, + "policyId": "minimum-length" + }, + { + "params": { + "maxLength": 255 + }, + "policyId": "maximum-length" + } + ], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true + }, + "webauthnDeviceProfiles": { + "description": "Web AuthN Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string" + }, + "searchable": false, + "title": "Web AuthN Device Profiles", + "type": "array", + "userEditable": true, + "viewable": true + } + }, + "required": [ + "userName", + "givenName", + "sn", + "mail" + ], + "title": "Bravo realm - User", + "type": "object", + "viewable": true + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_user.managed.scripts/postUpdate.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_user.managed.scripts/postUpdate.script.js new file mode 100644 index 000000000..2802f2cac --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/bravo_user.managed.scripts/postUpdate.script.js @@ -0,0 +1,4 @@ +//extract feature test UPDATED POSTUPDATE SCRIPT + + +//test UPDATED diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/managed.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/managed.idm.json new file mode 100644 index 000000000..cffcb4462 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/managed/managed.idm.json @@ -0,0 +1,21 @@ +{ + "idm": { + "managed": { + "_id": "managed", + "objects": [ + "file://alpha_user.managed.json", + "file://bravo_user.managed.json", + "file://alpha_role.managed.json", + "file://bravo_role.managed.json", + "file://alpha_assignment.managed.json", + "file://bravo_assignment.managed.json", + "file://alpha_organization.managed.json", + "file://bravo_organization.managed.json", + "file://alpha_group.managed.json", + "file://bravo_group.managed.json", + "file://alpha_application.managed.json", + "file://bravo_application.managed.json" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/policy.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/policy.idm.json new file mode 100644 index 000000000..ab5b687a9 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/policy.idm.json @@ -0,0 +1,9 @@ +{ + "idm": { + "policy": { + "_id": "policy", + "additionalFiles": [], + "resources": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/privilegeAssignments.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/privilegeAssignments.idm.json new file mode 100644 index 000000000..7b0f0a2ce --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/privilegeAssignments.idm.json @@ -0,0 +1,31 @@ +{ + "idm": { + "privilegeAssignments": { + "_id": "privilegeAssignments", + "privilegeAssignments": [ + { + "name": "ownerPrivileges", + "privileges": [ + "owner-view-update-delete-orgs", + "owner-create-orgs", + "owner-view-update-delete-admins-and-members", + "owner-create-admins", + "admin-view-update-delete-members", + "admin-create-members" + ], + "relationshipField": "ownerOfOrg" + }, + { + "name": "adminPrivileges", + "privileges": [ + "admin-view-update-delete-orgs", + "admin-create-orgs", + "admin-view-update-delete-members", + "admin-create-members" + ], + "relationshipField": "adminOfOrg" + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/privileges.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/privileges.idm.json new file mode 100644 index 000000000..2df21b067 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/privileges.idm.json @@ -0,0 +1,8 @@ +{ + "idm": { + "privileges": { + "_id": "privileges", + "privileges": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/repo.ds.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/repo.ds.idm.json new file mode 100644 index 000000000..b305e195b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/repo.ds.idm.json @@ -0,0 +1,1437 @@ +{ + "idm": { + "repo.ds": { + "_id": "repo.ds", + "resourceMapping": { + "genericMapping": { + "managed/alpha_application": { + "dnTemplate": "ou=application,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-application-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-application" + ], + "properties": { + "members": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + }, + "name": { + "ldapAttribute": "fr-idm-managed-application-name", + "type": "simple" + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfApp", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + }, + "roles": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/alpha_role", + "type": "reverseReference" + } + } + }, + "managed/alpha_assignment": { + "dnTemplate": "ou=assignment,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-assignment-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-assignment" + ], + "properties": { + "condition": { + "ldapAttribute": "fr-idm-assignment-condition", + "type": "simple" + }, + "members": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + }, + "roles": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/alpha_role", + "type": "reverseReference" + } + } + }, + "managed/alpha_group": { + "dnTemplate": "ou=groups,o=alpha,o=root,ou=identities", + "idGenerator": { + "propertyName": "name", + "type": "property" + }, + "jsonAttribute": "fr-idm-managed-group-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "cn", + "type": "clientDnNaming" + }, + "nativeId": false, + "objectClasses": [ + "top", + "groupOfURLs", + "fr-idm-managed-group" + ], + "properties": { + "_id": { + "ldapAttribute": "cn", + "primaryKey": true, + "type": "simple", + "writability": "createOnly" + }, + "condition": { + "ldapAttribute": "fr-idm-managed-group-condition", + "type": "simple" + }, + "description": { + "ldapAttribute": "description", + "type": "simple" + }, + "members": { + "isMultiValued": true, + "propertyName": "groups", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + } + } + }, + "managed/alpha_organization": { + "dnTemplate": "ou=organization,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + "fr-ext-attrs" + ], + "properties": { + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/alpha_organization", + "type": "reverseReference" + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple" + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference" + } + } + }, + "managed/alpha_role": { + "dnTemplate": "ou=role,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role" + ], + "properties": { + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-applications", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference" + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-assignments", + "primaryKey": "uid", + "resourcePath": "managed/alpha_assignment", + "type": "reference" + }, + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + } + } + }, + "managed/alpha_user": { + "dnTemplate": "ou=user,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-custom-attrs", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "fr-idm-uuid", + "type": "clientDnNaming" + }, + "nativeId": false, + "objectClasses": [ + "person", + "organizationalPerson", + "inetOrgPerson", + "iplanet-am-user-service", + "devicePrintProfilesContainer", + "deviceProfilesContainer", + "kbaInfoContainer", + "fr-idm-managed-user-explicit", + "forgerock-am-dashboard-service", + "inetuser", + "iplanet-am-auth-configuration-service", + "iplanet-am-managed-person", + "iPlanetPreferences", + "oathDeviceProfilesContainer", + "pushDeviceProfilesContainer", + "sunAMAuthAccountLockout", + "sunFMSAML2NameIdentifier", + "webauthnDeviceProfilesContainer", + "fr-idm-hybrid-obj", + "fr-ext-attrs" + ], + "properties": { + "_id": { + "ldapAttribute": "fr-idm-uuid", + "primaryKey": true, + "type": "simple" + }, + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "managed/alpha_usermeta", + "type": "reference" + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference" + }, + "accountStatus": { + "ldapAttribute": "inetUserStatus", + "type": "simple" + }, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference" + }, + "aliasList": { + "isMultiValued": true, + "ldapAttribute": "iplanet-am-user-alias-list", + "type": "simple" + }, + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference" + }, + "assignedDashboard": { + "isMultiValued": true, + "ldapAttribute": "assignedDashboard", + "type": "simple" + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-assignment-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_assignment", + "type": "reference" + }, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference" + }, + "city": { + "ldapAttribute": "l", + "type": "simple" + }, + "cn": { + "ldapAttribute": "cn", + "type": "simple" + }, + "consentedMappings": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-consentedMapping", + "type": "json" + }, + "country": { + "ldapAttribute": "co", + "type": "simple" + }, + "description": { + "ldapAttribute": "description", + "type": "simple" + }, + "devicePrintProfiles": { + "isMultiValued": true, + "ldapAttribute": "devicePrintProfiles", + "type": "simple" + }, + "deviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "deviceProfiles", + "type": "simple" + }, + "displayName": { + "ldapAttribute": "displayName", + "type": "simple" + }, + "effectiveApplications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveApplications", + "type": "json" + }, + "effectiveAssignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveAssignment", + "type": "json" + }, + "effectiveGroups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveGroup", + "type": "json" + }, + "effectiveRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveRole", + "type": "json" + }, + "frIndexedDate1": { + "ldapAttribute": "fr-attr-idate1", + "type": "simple" + }, + "frIndexedDate2": { + "ldapAttribute": "fr-attr-idate2", + "type": "simple" + }, + "frIndexedDate3": { + "ldapAttribute": "fr-attr-idate3", + "type": "simple" + }, + "frIndexedDate4": { + "ldapAttribute": "fr-attr-idate4", + "type": "simple" + }, + "frIndexedDate5": { + "ldapAttribute": "fr-attr-idate5", + "type": "simple" + }, + "frIndexedInteger1": { + "ldapAttribute": "fr-attr-iint1", + "type": "simple" + }, + "frIndexedInteger2": { + "ldapAttribute": "fr-attr-iint2", + "type": "simple" + }, + "frIndexedInteger3": { + "ldapAttribute": "fr-attr-iint3", + "type": "simple" + }, + "frIndexedInteger4": { + "ldapAttribute": "fr-attr-iint4", + "type": "simple" + }, + "frIndexedInteger5": { + "ldapAttribute": "fr-attr-iint5", + "type": "simple" + }, + "frIndexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti1", + "type": "simple" + }, + "frIndexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti2", + "type": "simple" + }, + "frIndexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti3", + "type": "simple" + }, + "frIndexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti4", + "type": "simple" + }, + "frIndexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti5", + "type": "simple" + }, + "frIndexedString1": { + "ldapAttribute": "fr-attr-istr1", + "type": "simple" + }, + "frIndexedString10": { + "ldapAttribute": "fr-attr-istr10", + "type": "simple" + }, + "frIndexedString11": { + "ldapAttribute": "fr-attr-istr11", + "type": "simple" + }, + "frIndexedString12": { + "ldapAttribute": "fr-attr-istr12", + "type": "simple" + }, + "frIndexedString13": { + "ldapAttribute": "fr-attr-istr13", + "type": "simple" + }, + "frIndexedString14": { + "ldapAttribute": "fr-attr-istr14", + "type": "simple" + }, + "frIndexedString15": { + "ldapAttribute": "fr-attr-istr15", + "type": "simple" + }, + "frIndexedString16": { + "ldapAttribute": "fr-attr-istr16", + "type": "simple" + }, + "frIndexedString17": { + "ldapAttribute": "fr-attr-istr17", + "type": "simple" + }, + "frIndexedString18": { + "ldapAttribute": "fr-attr-istr18", + "type": "simple" + }, + "frIndexedString19": { + "ldapAttribute": "fr-attr-istr19", + "type": "simple" + }, + "frIndexedString2": { + "ldapAttribute": "fr-attr-istr2", + "type": "simple" + }, + "frIndexedString20": { + "ldapAttribute": "fr-attr-istr20", + "type": "simple" + }, + "frIndexedString3": { + "ldapAttribute": "fr-attr-istr3", + "type": "simple" + }, + "frIndexedString4": { + "ldapAttribute": "fr-attr-istr4", + "type": "simple" + }, + "frIndexedString5": { + "ldapAttribute": "fr-attr-istr5", + "type": "simple" + }, + "frIndexedString6": { + "ldapAttribute": "fr-attr-istr6", + "type": "simple" + }, + "frIndexedString7": { + "ldapAttribute": "fr-attr-istr7", + "type": "simple" + }, + "frIndexedString8": { + "ldapAttribute": "fr-attr-istr8", + "type": "simple" + }, + "frIndexedString9": { + "ldapAttribute": "fr-attr-istr9", + "type": "simple" + }, + "frUnindexedDate1": { + "ldapAttribute": "fr-attr-date1", + "type": "simple" + }, + "frUnindexedDate2": { + "ldapAttribute": "fr-attr-date2", + "type": "simple" + }, + "frUnindexedDate3": { + "ldapAttribute": "fr-attr-date3", + "type": "simple" + }, + "frUnindexedDate4": { + "ldapAttribute": "fr-attr-date4", + "type": "simple" + }, + "frUnindexedDate5": { + "ldapAttribute": "fr-attr-date5", + "type": "simple" + }, + "frUnindexedInteger1": { + "ldapAttribute": "fr-attr-int1", + "type": "simple" + }, + "frUnindexedInteger2": { + "ldapAttribute": "fr-attr-int2", + "type": "simple" + }, + "frUnindexedInteger3": { + "ldapAttribute": "fr-attr-int3", + "type": "simple" + }, + "frUnindexedInteger4": { + "ldapAttribute": "fr-attr-int4", + "type": "simple" + }, + "frUnindexedInteger5": { + "ldapAttribute": "fr-attr-int5", + "type": "simple" + }, + "frUnindexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi1", + "type": "simple" + }, + "frUnindexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi2", + "type": "simple" + }, + "frUnindexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi3", + "type": "simple" + }, + "frUnindexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi4", + "type": "simple" + }, + "frUnindexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi5", + "type": "simple" + }, + "frUnindexedString1": { + "ldapAttribute": "fr-attr-str1", + "type": "simple" + }, + "frUnindexedString2": { + "ldapAttribute": "fr-attr-str2", + "type": "simple" + }, + "frUnindexedString3": { + "ldapAttribute": "fr-attr-str3", + "type": "simple" + }, + "frUnindexedString4": { + "ldapAttribute": "fr-attr-str4", + "type": "simple" + }, + "frUnindexedString5": { + "ldapAttribute": "fr-attr-str5", + "type": "simple" + }, + "givenName": { + "ldapAttribute": "givenName", + "type": "simple" + }, + "groups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-groups", + "primaryKey": "cn", + "resourcePath": "managed/alpha_group", + "type": "reference" + }, + "kbaInfo": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-kbaInfo", + "type": "json" + }, + "lastSync": { + "ldapAttribute": "fr-idm-lastSync", + "type": "json" + }, + "mail": { + "ldapAttribute": "mail", + "type": "simple" + }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/alpha_user", + "type": "reference" + }, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference" + }, + "memberOfOrgIDs": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-memberoforgid", + "type": "simple" + }, + "oathDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "oathDeviceProfiles", + "type": "simple" + }, + "ownerOfApp": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-owner", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference" + }, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference" + }, + "password": { + "ldapAttribute": "userPassword", + "type": "simple" + }, + "passwordExpirationTime": { + "ldapAttribute": "pwdExpirationTime", + "type": "simple", + "writability": "readOnlyDiscardWrites" + }, + "passwordLastChangedTime": { + "ldapAttribute": "pwdChangedTime", + "type": "simple", + "writability": "readOnlyDiscardWrites" + }, + "postalAddress": { + "ldapAttribute": "street", + "type": "simple" + }, + "postalCode": { + "ldapAttribute": "postalCode", + "type": "simple" + }, + "preferences": { + "ldapAttribute": "fr-idm-preferences", + "type": "json" + }, + "profileImage": { + "ldapAttribute": "labeledURI", + "type": "simple" + }, + "pushDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "pushDeviceProfiles", + "type": "simple" + }, + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + }, + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/alpha_role", + "type": "reference" + }, + "sn": { + "ldapAttribute": "sn", + "type": "simple" + }, + "stateProvince": { + "ldapAttribute": "st", + "type": "simple" + }, + "telephoneNumber": { + "ldapAttribute": "telephoneNumber", + "type": "simple" + }, + "userName": { + "ldapAttribute": "uid", + "type": "simple" + }, + "webauthnDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "webauthnDeviceProfiles", + "type": "simple" + } + } + }, + "managed/alpha_usermeta": { + "dnTemplate": "ou=usermeta,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj" + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/alpha_user", + "type": "reverseReference" + } + } + }, + "managed/bravo_application": { + "dnTemplate": "ou=application,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-application-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-application" + ], + "properties": { + "members": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + }, + "name": { + "ldapAttribute": "fr-idm-managed-application-name", + "type": "simple" + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfApp", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + }, + "roles": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/bravo_role", + "type": "reverseReference" + } + } + }, + "managed/bravo_assignment": { + "dnTemplate": "ou=assignment,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-assignment-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-assignment" + ], + "properties": { + "condition": { + "ldapAttribute": "fr-idm-assignment-condition", + "type": "simple" + }, + "members": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + }, + "roles": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/bravo_role", + "type": "reverseReference" + } + } + }, + "managed/bravo_group": { + "dnTemplate": "ou=groups,o=bravo,o=root,ou=identities", + "idGenerator": { + "propertyName": "name", + "type": "property" + }, + "jsonAttribute": "fr-idm-managed-group-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "cn", + "type": "clientDnNaming" + }, + "nativeId": false, + "objectClasses": [ + "top", + "groupOfURLs", + "fr-idm-managed-group" + ], + "properties": { + "_id": { + "ldapAttribute": "cn", + "primaryKey": true, + "type": "simple", + "writability": "createOnly" + }, + "condition": { + "ldapAttribute": "fr-idm-managed-group-condition", + "type": "simple" + }, + "description": { + "ldapAttribute": "description", + "type": "simple" + }, + "members": { + "isMultiValued": true, + "propertyName": "groups", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + } + } + }, + "managed/bravo_organization": { + "dnTemplate": "ou=organization,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-managed-organization", + "fr-ext-attrs" + ], + "properties": { + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + }, + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/bravo_organization", + "type": "reverseReference" + }, + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + }, + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", + "type": "simple" + }, + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + }, + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference" + } + } + }, + "managed/bravo_role": { + "dnTemplate": "ou=role,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", + "objectClasses": [ + "uidObject", + "fr-idm-managed-role" + ], + "properties": { + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-applications", + "primaryKey": "uid", + "resourcePath": "managed/bravo_application", + "type": "reference" + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-assignments", + "primaryKey": "uid", + "resourcePath": "managed/bravo_assignment", + "type": "reference" + }, + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + } + } + }, + "managed/bravo_user": { + "dnTemplate": "ou=user,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-custom-attrs", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "fr-idm-uuid", + "type": "clientDnNaming" + }, + "nativeId": false, + "objectClasses": [ + "person", + "organizationalPerson", + "inetOrgPerson", + "iplanet-am-user-service", + "devicePrintProfilesContainer", + "deviceProfilesContainer", + "kbaInfoContainer", + "fr-idm-managed-user-explicit", + "forgerock-am-dashboard-service", + "inetuser", + "iplanet-am-auth-configuration-service", + "iplanet-am-managed-person", + "iPlanetPreferences", + "oathDeviceProfilesContainer", + "pushDeviceProfilesContainer", + "sunAMAuthAccountLockout", + "sunFMSAML2NameIdentifier", + "webauthnDeviceProfilesContainer", + "fr-idm-hybrid-obj", + "fr-ext-attrs" + ], + "properties": { + "_id": { + "ldapAttribute": "fr-idm-uuid", + "primaryKey": true, + "type": "simple" + }, + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "managed/bravo_usermeta", + "type": "reference" + }, + "_notifications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference" + }, + "accountStatus": { + "ldapAttribute": "inetUserStatus", + "type": "simple" + }, + "adminOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference" + }, + "aliasList": { + "isMultiValued": true, + "ldapAttribute": "iplanet-am-user-alias-list", + "type": "simple" + }, + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-member", + "primaryKey": "uid", + "resourcePath": "managed/bravo_application", + "type": "reference" + }, + "assignedDashboard": { + "isMultiValued": true, + "ldapAttribute": "assignedDashboard", + "type": "simple" + }, + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-assignment-member", + "primaryKey": "uid", + "resourcePath": "managed/bravo_assignment", + "type": "reference" + }, + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference" + }, + "city": { + "ldapAttribute": "l", + "type": "simple" + }, + "cn": { + "ldapAttribute": "cn", + "type": "simple" + }, + "consentedMappings": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-consentedMapping", + "type": "json" + }, + "country": { + "ldapAttribute": "co", + "type": "simple" + }, + "description": { + "ldapAttribute": "description", + "type": "simple" + }, + "devicePrintProfiles": { + "isMultiValued": true, + "ldapAttribute": "devicePrintProfiles", + "type": "simple" + }, + "deviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "deviceProfiles", + "type": "simple" + }, + "displayName": { + "ldapAttribute": "displayName", + "type": "simple" + }, + "effectiveApplications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveApplications", + "type": "json" + }, + "effectiveAssignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveAssignment", + "type": "json" + }, + "effectiveGroups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveGroup", + "type": "json" + }, + "effectiveRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveRole", + "type": "json" + }, + "frIndexedDate1": { + "ldapAttribute": "fr-attr-idate1", + "type": "simple" + }, + "frIndexedDate2": { + "ldapAttribute": "fr-attr-idate2", + "type": "simple" + }, + "frIndexedDate3": { + "ldapAttribute": "fr-attr-idate3", + "type": "simple" + }, + "frIndexedDate4": { + "ldapAttribute": "fr-attr-idate4", + "type": "simple" + }, + "frIndexedDate5": { + "ldapAttribute": "fr-attr-idate5", + "type": "simple" + }, + "frIndexedInteger1": { + "ldapAttribute": "fr-attr-iint1", + "type": "simple" + }, + "frIndexedInteger2": { + "ldapAttribute": "fr-attr-iint2", + "type": "simple" + }, + "frIndexedInteger3": { + "ldapAttribute": "fr-attr-iint3", + "type": "simple" + }, + "frIndexedInteger4": { + "ldapAttribute": "fr-attr-iint4", + "type": "simple" + }, + "frIndexedInteger5": { + "ldapAttribute": "fr-attr-iint5", + "type": "simple" + }, + "frIndexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti1", + "type": "simple" + }, + "frIndexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti2", + "type": "simple" + }, + "frIndexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti3", + "type": "simple" + }, + "frIndexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti4", + "type": "simple" + }, + "frIndexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti5", + "type": "simple" + }, + "frIndexedString1": { + "ldapAttribute": "fr-attr-istr1", + "type": "simple" + }, + "frIndexedString10": { + "ldapAttribute": "fr-attr-istr10", + "type": "simple" + }, + "frIndexedString11": { + "ldapAttribute": "fr-attr-istr11", + "type": "simple" + }, + "frIndexedString12": { + "ldapAttribute": "fr-attr-istr12", + "type": "simple" + }, + "frIndexedString13": { + "ldapAttribute": "fr-attr-istr13", + "type": "simple" + }, + "frIndexedString14": { + "ldapAttribute": "fr-attr-istr14", + "type": "simple" + }, + "frIndexedString15": { + "ldapAttribute": "fr-attr-istr15", + "type": "simple" + }, + "frIndexedString16": { + "ldapAttribute": "fr-attr-istr16", + "type": "simple" + }, + "frIndexedString17": { + "ldapAttribute": "fr-attr-istr17", + "type": "simple" + }, + "frIndexedString18": { + "ldapAttribute": "fr-attr-istr18", + "type": "simple" + }, + "frIndexedString19": { + "ldapAttribute": "fr-attr-istr19", + "type": "simple" + }, + "frIndexedString2": { + "ldapAttribute": "fr-attr-istr2", + "type": "simple" + }, + "frIndexedString20": { + "ldapAttribute": "fr-attr-istr20", + "type": "simple" + }, + "frIndexedString3": { + "ldapAttribute": "fr-attr-istr3", + "type": "simple" + }, + "frIndexedString4": { + "ldapAttribute": "fr-attr-istr4", + "type": "simple" + }, + "frIndexedString5": { + "ldapAttribute": "fr-attr-istr5", + "type": "simple" + }, + "frIndexedString6": { + "ldapAttribute": "fr-attr-istr6", + "type": "simple" + }, + "frIndexedString7": { + "ldapAttribute": "fr-attr-istr7", + "type": "simple" + }, + "frIndexedString8": { + "ldapAttribute": "fr-attr-istr8", + "type": "simple" + }, + "frIndexedString9": { + "ldapAttribute": "fr-attr-istr9", + "type": "simple" + }, + "frUnindexedDate1": { + "ldapAttribute": "fr-attr-date1", + "type": "simple" + }, + "frUnindexedDate2": { + "ldapAttribute": "fr-attr-date2", + "type": "simple" + }, + "frUnindexedDate3": { + "ldapAttribute": "fr-attr-date3", + "type": "simple" + }, + "frUnindexedDate4": { + "ldapAttribute": "fr-attr-date4", + "type": "simple" + }, + "frUnindexedDate5": { + "ldapAttribute": "fr-attr-date5", + "type": "simple" + }, + "frUnindexedInteger1": { + "ldapAttribute": "fr-attr-int1", + "type": "simple" + }, + "frUnindexedInteger2": { + "ldapAttribute": "fr-attr-int2", + "type": "simple" + }, + "frUnindexedInteger3": { + "ldapAttribute": "fr-attr-int3", + "type": "simple" + }, + "frUnindexedInteger4": { + "ldapAttribute": "fr-attr-int4", + "type": "simple" + }, + "frUnindexedInteger5": { + "ldapAttribute": "fr-attr-int5", + "type": "simple" + }, + "frUnindexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi1", + "type": "simple" + }, + "frUnindexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi2", + "type": "simple" + }, + "frUnindexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi3", + "type": "simple" + }, + "frUnindexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi4", + "type": "simple" + }, + "frUnindexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi5", + "type": "simple" + }, + "frUnindexedString1": { + "ldapAttribute": "fr-attr-str1", + "type": "simple" + }, + "frUnindexedString2": { + "ldapAttribute": "fr-attr-str2", + "type": "simple" + }, + "frUnindexedString3": { + "ldapAttribute": "fr-attr-str3", + "type": "simple" + }, + "frUnindexedString4": { + "ldapAttribute": "fr-attr-str4", + "type": "simple" + }, + "frUnindexedString5": { + "ldapAttribute": "fr-attr-str5", + "type": "simple" + }, + "givenName": { + "ldapAttribute": "givenName", + "type": "simple" + }, + "groups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-groups", + "primaryKey": "cn", + "resourcePath": "managed/bravo_group", + "type": "reference" + }, + "kbaInfo": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-kbaInfo", + "type": "json" + }, + "lastSync": { + "ldapAttribute": "fr-idm-lastSync", + "type": "json" + }, + "mail": { + "ldapAttribute": "mail", + "type": "simple" + }, + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/bravo_user", + "type": "reference" + }, + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference" + }, + "memberOfOrgIDs": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-memberoforgid", + "type": "simple" + }, + "oathDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "oathDeviceProfiles", + "type": "simple" + }, + "ownerOfApp": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-owner", + "primaryKey": "uid", + "resourcePath": "managed/bravo_application", + "type": "reference" + }, + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference" + }, + "password": { + "ldapAttribute": "userPassword", + "type": "simple" + }, + "passwordExpirationTime": { + "ldapAttribute": "pwdExpirationTime", + "type": "simple", + "writability": "readOnlyDiscardWrites" + }, + "passwordLastChangedTime": { + "ldapAttribute": "pwdChangedTime", + "type": "simple", + "writability": "readOnlyDiscardWrites" + }, + "postalAddress": { + "ldapAttribute": "street", + "type": "simple" + }, + "postalCode": { + "ldapAttribute": "postalCode", + "type": "simple" + }, + "preferences": { + "ldapAttribute": "fr-idm-preferences", + "type": "json" + }, + "profileImage": { + "ldapAttribute": "labeledURI", + "type": "simple" + }, + "pushDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "pushDeviceProfiles", + "type": "simple" + }, + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + }, + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/bravo_role", + "type": "reference" + }, + "sn": { + "ldapAttribute": "sn", + "type": "simple" + }, + "stateProvince": { + "ldapAttribute": "st", + "type": "simple" + }, + "telephoneNumber": { + "ldapAttribute": "telephoneNumber", + "type": "simple" + }, + "userName": { + "ldapAttribute": "uid", + "type": "simple" + }, + "webauthnDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "webauthnDeviceProfiles", + "type": "simple" + } + } + }, + "managed/bravo_usermeta": { + "dnTemplate": "ou=usermeta,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj" + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/bravo_user", + "type": "reverseReference" + } + } + }, + "managed/teammembermeta": { + "dnTemplate": "ou=teammembermeta,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "objectClasses": [ + "uidObject", + "fr-idm-generic-obj" + ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/teammember", + "type": "reverseReference" + } + } + } + } + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/router.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/router.idm.json new file mode 100644 index 000000000..4a80f1149 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/router.idm.json @@ -0,0 +1,8 @@ +{ + "idm": { + "router": { + "_id": "router", + "filters": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/secrets.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/secrets.idm.json new file mode 100644 index 000000000..281213d7b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/secrets.idm.json @@ -0,0 +1,113 @@ +{ + "idm": { + "secrets": { + "_id": "secrets", + "stores": [ + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}", + "mappings": [ + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + "openidm-localhost" + ], + "secretId": "idm.default", + "types": [ + "ENCRYPT", + "DECRYPT" + ] + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}" + ], + "secretId": "idm.config.encryption", + "types": [ + "ENCRYPT", + "DECRYPT" + ] + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}" + ], + "secretId": "idm.password.encryption", + "types": [ + "ENCRYPT", + "DECRYPT" + ] + }, + { + "aliases": [ + "&{openidm.https.keystore.cert.alias|openidm-localhost}" + ], + "secretId": "idm.jwt.session.module.encryption", + "types": [ + "ENCRYPT", + "DECRYPT" + ] + }, + { + "aliases": [ + "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}" + ], + "secretId": "idm.jwt.session.module.signing", + "types": [ + "SIGN", + "VERIFY" + ] + }, + { + "aliases": [ + "selfservice" + ], + "secretId": "idm.selfservice.encryption", + "types": [ + "ENCRYPT", + "DECRYPT" + ] + }, + { + "aliases": [ + "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}" + ], + "secretId": "idm.selfservice.signing", + "types": [ + "SIGN", + "VERIFY" + ] + }, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}" + ], + "secretId": "idm.assignment.attribute.encryption", + "types": [ + "ENCRYPT", + "DECRYPT" + ] + } + ], + "providerName": "&{openidm.keystore.provider|SunJCE}", + "storePassword": "&{openidm.keystore.password|changeit}", + "storetype": "&{openidm.keystore.type|JCEKS}" + }, + "name": "mainKeyStore" + }, + { + "class": "org.forgerock.openidm.secrets.config.KeyStoreSecretStore", + "config": { + "file": "&{openidm.truststore.location|&{idm.install.dir}/security/truststore}", + "mappings": [], + "providerName": "&{openidm.truststore.provider|SUN}", + "storePassword": "&{openidm.truststore.password|changeit}", + "storetype": "&{openidm.truststore.type|JKS}" + }, + "name": "mainTrustStore" + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/selfservice.kba.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/selfservice.kba.idm.json new file mode 100644 index 000000000..f05d4f189 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/selfservice.kba.idm.json @@ -0,0 +1,15 @@ +{ + "idm": { + "selfservice.kba": { + "_id": "selfservice.kba", + "kbaPropertyName": "kbaInfo", + "minimumAnswersToDefine": 1, + "minimumAnswersToVerify": 1, + "questions": { + "1": { + "en": "What's your favorite color?" + } + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/selfservice.terms.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/selfservice.terms.idm.json new file mode 100644 index 000000000..48341c5fe --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/selfservice.terms.idm.json @@ -0,0 +1,22 @@ +{ + "idm": { + "selfservice.terms": { + "_id": "selfservice.terms", + "active": "0.0", + "uiConfig": { + "buttonText": "Accept", + "displayName": "We've updated our terms", + "purpose": "You must accept the updated terms in order to proceed." + }, + "versions": [ + { + "createDate": "2019-10-28T04:20:11.320Z", + "termsTranslations": { + "en": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + }, + "version": "0.0" + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/cors.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/cors.idm.json new file mode 100644 index 000000000..9fe932668 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/cors.idm.json @@ -0,0 +1,18 @@ +{ + "idm": { + "servletfilter/cors": { + "_id": "servletfilter/cors", + "initParams": { + "allowCredentials": false, + "allowedHeaders": "authorization,accept,content-type,origin,x-requested-with,cache-control,accept-api-version,if-match,if-none-match", + "allowedMethods": "GET,POST,PUT,DELETE,PATCH", + "allowedOrigins": "*", + "chainPreflight": false, + "exposedHeaders": "WWW-Authenticate" + }, + "urlPatterns": [ + "/*" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/payload.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/payload.idm.json new file mode 100644 index 000000000..78c559ce2 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/payload.idm.json @@ -0,0 +1,13 @@ +{ + "idm": { + "servletfilter/payload": { + "_id": "servletfilter/payload", + "initParams": { + "maxRequestSizeInMegabytes": 5 + }, + "urlPatterns": [ + "&{openidm.servlet.alias}/*" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/upload.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/upload.idm.json new file mode 100644 index 000000000..a593d043b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/servletfilter/upload.idm.json @@ -0,0 +1,13 @@ +{ + "idm": { + "servletfilter/upload": { + "_id": "servletfilter/upload", + "initParams": { + "maxRequestSizeInMegabytes": 50 + }, + "urlPatterns": [ + "&{openidm.servlet.upload.alias}/*" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/admin.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/admin.idm.json new file mode 100644 index 000000000..c20b3f9a9 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/admin.idm.json @@ -0,0 +1,14 @@ +{ + "idm": { + "ui.context/admin": { + "_id": "ui.context/admin", + "defaultDir": "&{idm.install.dir}/ui/admin/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/admin/extension", + "responseHeaders": { + "X-Frame-Options": "SAMEORIGIN" + }, + "urlContextRoot": "/admin" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/api.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/api.idm.json new file mode 100644 index 000000000..0ace771f4 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/api.idm.json @@ -0,0 +1,13 @@ +{ + "idm": { + "ui.context/api": { + "_id": "ui.context/api", + "authEnabled": true, + "cacheEnabled": false, + "defaultDir": "&{idm.install.dir}/ui/api/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/api/extension", + "urlContextRoot": "/api" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/enduser.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/enduser.idm.json new file mode 100644 index 000000000..76ecb31fd --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/enduser.idm.json @@ -0,0 +1,13 @@ +{ + "idm": { + "ui.context/enduser": { + "_id": "ui.context/enduser", + "defaultDir": "&{idm.install.dir}/ui/enduser", + "enabled": true, + "responseHeaders": { + "X-Frame-Options": "DENY" + }, + "urlContextRoot": "/" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/oauth.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/oauth.idm.json new file mode 100644 index 000000000..63880cdda --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui.context/oauth.idm.json @@ -0,0 +1,12 @@ +{ + "idm": { + "ui.context/oauth": { + "_id": "ui.context/oauth", + "cacheEnabled": true, + "defaultDir": "&{idm.install.dir}/ui/oauth/default", + "enabled": true, + "extensionDir": "&{idm.install.dir}/ui/oauth/extension", + "urlContextRoot": "/oauthReturn" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/configuration.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/configuration.idm.json new file mode 100644 index 000000000..a9e34a8a5 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/configuration.idm.json @@ -0,0 +1,41 @@ +{ + "idm": { + "ui/configuration": { + "_id": "ui/configuration", + "configuration": { + "defaultNotificationType": "info", + "forgotUsername": false, + "lang": "en", + "notificationTypes": { + "error": { + "iconPath": "images/notifications/error.png", + "name": "common.notification.types.error" + }, + "info": { + "iconPath": "images/notifications/info.png", + "name": "common.notification.types.info" + }, + "warning": { + "iconPath": "images/notifications/warning.png", + "name": "common.notification.types.warning" + } + }, + "passwordReset": true, + "passwordResetLink": "", + "platformSettings": { + "adminOauthClient": "idmAdminClient", + "adminOauthClientScopes": "fr:idm:*", + "amUrl": "/am", + "loginUrl": "" + }, + "roles": { + "internal/role/openidm-admin": "ui-admin", + "internal/role/openidm-authorized": "ui-user", + "super-admins": "ui-admin", + "tenant-admins": "ui-admin" + }, + "selfRegistration": true + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/dashboard.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/dashboard.idm.json new file mode 100644 index 000000000..88000c060 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/dashboard.idm.json @@ -0,0 +1,178 @@ +{ + "idm": { + "ui/dashboard": { + "_id": "ui/dashboard", + "adminDashboards": [ + { + "isDefault": true, + "name": "Quick Start", + "widgets": [ + { + "cards": [ + { + "href": "#resource/managed/alpha_user/list/", + "icon": "fa-user", + "name": "Manage Users" + }, + { + "href": "#resource/managed/alpha_role/list/", + "icon": "fa-check-square-o", + "name": "Manage Roles" + }, + { + "href": "#connectors/add/", + "icon": "fa-database", + "name": "Add Connector" + }, + { + "href": "#mapping/add/", + "icon": "fa-map-marker", + "name": "Create Mapping" + }, + { + "href": "#managed/add/", + "icon": "fa-tablet", + "name": "Add Device" + }, + { + "href": "#settings/", + "icon": "fa-user", + "name": "Configure System Preferences" + } + ], + "size": "large", + "type": "quickStart" + } + ] + }, + { + "isDefault": false, + "name": "System Monitoring", + "widgets": [ + { + "legendRange": { + "month": [ + 500, + 2500, + 5000 + ], + "week": [ + 10, + 30, + 90, + 270, + 810 + ], + "year": [ + 10000, + 40000, + 100000, + 250000 + ] + }, + "maxRange": "#24423c", + "minRange": "#b0d4cd", + "size": "large", + "type": "audit" + }, + { + "size": "large", + "type": "clusterStatus" + }, + { + "size": "large", + "type": "systemHealthFull" + }, + { + "barchart": "false", + "size": "large", + "type": "lastRecon" + } + ] + }, + { + "isDefault": false, + "name": "Resource Report", + "widgets": [ + { + "selected": "activeUsers", + "size": "x-small", + "type": "counter" + }, + { + "selected": "rolesEnabled", + "size": "x-small", + "type": "counter" + }, + { + "selected": "activeConnectors", + "size": "x-small", + "type": "counter" + }, + { + "size": "large", + "type": "resourceList" + } + ] + }, + { + "isDefault": false, + "name": "Business Report", + "widgets": [ + { + "graphType": "fa-pie-chart", + "providers": [ + "Username/Password" + ], + "size": "x-small", + "type": "signIns", + "widgetTitle": "Sign-Ins" + }, + { + "graphType": "fa-bar-chart", + "size": "x-small", + "type": "passwordResets", + "widgetTitle": "Password Resets" + }, + { + "graphType": "fa-line-chart", + "providers": [ + "Username/Password" + ], + "size": "x-small", + "type": "newRegistrations", + "widgetTitle": "New Registrations" + }, + { + "size": "x-small", + "timezone": { + "hours": "07", + "minutes": "00", + "negative": true + }, + "type": "socialLogin" + }, + { + "selected": "socialEnabled", + "size": "x-small", + "type": "counter" + }, + { + "selected": "manualRegistrations", + "size": "x-small", + "type": "counter" + } + ] + } + ], + "dashboard": { + "widgets": [ + { + "size": "large", + "type": "Welcome" + } + ] + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/profile.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/profile.idm.json new file mode 100644 index 000000000..5a65db8a2 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/profile.idm.json @@ -0,0 +1,45 @@ +{ + "idm": { + "ui/profile": { + "_id": "ui/profile", + "tabs": [ + { + "name": "personalInfoTab", + "view": "org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab" + }, + { + "name": "signInAndSecurity", + "view": "org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab" + }, + { + "name": "preference", + "view": "org/forgerock/openidm/ui/user/profile/PreferencesTab" + }, + { + "name": "trustedDevice", + "view": "org/forgerock/openidm/ui/user/profile/TrustedDevicesTab" + }, + { + "name": "oauthApplication", + "view": "org/forgerock/openidm/ui/user/profile/OauthApplicationsTab" + }, + { + "name": "privacyAndConsent", + "view": "org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab" + }, + { + "name": "sharing", + "view": "org/forgerock/openidm/ui/user/profile/uma/SharingTab" + }, + { + "name": "auditHistory", + "view": "org/forgerock/openidm/ui/user/profile/uma/ActivityTab" + }, + { + "name": "accountControls", + "view": "org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab" + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/themeconfig.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/themeconfig.idm.json new file mode 100644 index 000000000..e497b7b41 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/idm/ui/themeconfig.idm.json @@ -0,0 +1,31 @@ +{ + "idm": { + "ui/themeconfig": { + "_id": "ui/themeconfig", + "icon": "favicon.ico", + "path": "", + "settings": { + "footer": { + "mailto": "info@pingidentity.com" + }, + "loginLogo": { + "alt": "Ping Identity", + "height": "120px", + "src": "images/login-logo-dark.png", + "title": "Ping Identity", + "width": "120px" + }, + "logo": { + "alt": "Ping Identity", + "src": "images/logo-horizontal-white.png", + "title": "Ping Identity" + } + }, + "stylesheets": [ + "css/bootstrap-3.4.1-custom.css", + "css/structure.css", + "css/theme.css" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-admin.internalRole.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-admin.internalRole.json new file mode 100644 index 000000000..092106e27 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-admin.internalRole.json @@ -0,0 +1,12 @@ +{ + "internalRole": { + "openidm-admin": { + "_id": "openidm-admin", + "condition": null, + "description": "Administrative access", + "name": "openidm-admin", + "privileges": [], + "temporalConstraints": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-authorized.internalRole.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-authorized.internalRole.json new file mode 100644 index 000000000..d198b81bf --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-authorized.internalRole.json @@ -0,0 +1,12 @@ +{ + "internalRole": { + "openidm-authorized": { + "_id": "openidm-authorized", + "condition": null, + "description": "Basic minimum user", + "name": "openidm-authorized", + "privileges": [], + "temporalConstraints": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-cert.internalRole.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-cert.internalRole.json new file mode 100644 index 000000000..203d7e3e3 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-cert.internalRole.json @@ -0,0 +1,12 @@ +{ + "internalRole": { + "openidm-cert": { + "_id": "openidm-cert", + "condition": null, + "description": "Authenticated via certificate", + "name": "openidm-cert", + "privileges": [], + "temporalConstraints": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-reg.internalRole.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-reg.internalRole.json new file mode 100644 index 000000000..5ba60972a --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-reg.internalRole.json @@ -0,0 +1,12 @@ +{ + "internalRole": { + "openidm-reg": { + "_id": "openidm-reg", + "condition": null, + "description": "Anonymous access", + "name": "openidm-reg", + "privileges": [], + "temporalConstraints": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-tasks-manager.internalRole.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-tasks-manager.internalRole.json new file mode 100644 index 000000000..56e161c52 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/openidm-tasks-manager.internalRole.json @@ -0,0 +1,12 @@ +{ + "internalRole": { + "openidm-tasks-manager": { + "_id": "openidm-tasks-manager", + "condition": null, + "description": "Allowed to reassign workflow tasks", + "name": "openidm-tasks-manager", + "privileges": [], + "temporalConstraints": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/platform-provisioning.internalRole.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/platform-provisioning.internalRole.json new file mode 100644 index 000000000..4cfee3ff9 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/internalRole/platform-provisioning.internalRole.json @@ -0,0 +1,12 @@ +{ + "internalRole": { + "platform-provisioning": { + "_id": "platform-provisioning", + "condition": null, + "description": "Platform provisioning access", + "name": "platform-provisioning", + "privileges": [], + "temporalConstraints": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/alpha.realm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/alpha.realm.json new file mode 100644 index 000000000..506521eec --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/alpha.realm.json @@ -0,0 +1,11 @@ +{ + "realm": { + "L2FscGhh": { + "_id": "L2FscGhh", + "active": true, + "aliases": [], + "name": "alpha", + "parentPath": "/" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/bravo.realm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/bravo.realm.json new file mode 100644 index 000000000..a582f5e85 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/bravo.realm.json @@ -0,0 +1,11 @@ +{ + "realm": { + "L2JyYXZv": { + "_id": "L2JyYXZv", + "active": true, + "aliases": [], + "name": "bravo", + "parentPath": "/" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/root.realm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/root.realm.json new file mode 100644 index 000000000..a90b665d5 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/realm/root.realm.json @@ -0,0 +1,11 @@ +{ + "realm": { + "Lw": { + "_id": "Lw", + "active": true, + "aliases": [], + "name": "/", + "parentPath": "" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_CLIENT_SIDE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_CLIENT_SIDE.scripttype.json new file mode 100644 index 000000000..e279dd797 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_CLIENT_SIDE.scripttype.json @@ -0,0 +1,31 @@ +{ + "scripttype": { + "AUTHENTICATION_CLIENT_SIDE": { + "_id": "AUTHENTICATION_CLIENT_SIDE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "AUTHENTICATION_CLIENT_SIDE", + "allowLists": [], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "[Empty]", + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_SERVER_SIDE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_SERVER_SIDE.scripttype.json new file mode 100644 index 000000000..fe05d9b0a --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_SERVER_SIDE.scripttype.json @@ -0,0 +1,348 @@ +{ + "scripttype": { + "AUTHENTICATION_SERVER_SIDE": { + "_id": "AUTHENTICATION_SERVER_SIDE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "AUTHENTICATION_SERVER_SIDE", + "allowLists": [ + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.ArrayList$Itr", + "java.util.ArrayList", + "java.util.HashMap$KeyIterator", + "java.util.HashMap", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.Cookie", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.protocol.Form", + "org.forgerock.http.protocol.Header", + "org.forgerock.http.protocol.Headers", + "org.forgerock.http.protocol.Message", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Response", + "org.forgerock.http.protocol.ResponseException", + "org.forgerock.http.protocol.Responses", + "org.forgerock.http.protocol.Status", + "org.forgerock.json.JsonValue", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.List", + "java.util.Map", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "7e3d7067-d50f-4674-8c76-a3e13a810c33", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{authentication.server.side.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{authentication.server.side.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{authentication.server.side.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_TREE_DECISION_NODE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_TREE_DECISION_NODE.scripttype.json new file mode 100644 index 000000000..dbe58b546 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/AUTHENTICATION_TREE_DECISION_NODE.scripttype.json @@ -0,0 +1,420 @@ +{ + "scripttype": { + "AUTHENTICATION_TREE_DECISION_NODE": { + "_id": "AUTHENTICATION_TREE_DECISION_NODE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "AUTHENTICATION_TREE_DECISION_NODE", + "allowLists": [ + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.Collections", + "java.util.Collections$*", + "java.util.concurrent.TimeUnit", + "java.util.concurrent.ExecutionException", + "java.util.concurrent.TimeoutException", + "java.util.HashSet", + "java.util.HashMap", + "java.util.HashMap$KeyIterator", + "java.util.LinkedHashMap", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.spec.InvalidKeySpecException", + "java.security.spec.X509EncodedKeySpec", + "java.security.spec.MGF1ParameterSpec", + "javax.crypto.SecretKeyFactory", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PBEKeySpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "com.sun.crypto.provider.PBKDF2KeyImpl", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.shared.debug.Debug", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.client.*", + "org.forgerock.http.Client", + "org.forgerock.http.Handler", + "org.forgerock.http.Context", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.protocol.Cookie", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.protocol.Form", + "org.forgerock.http.protocol.Header", + "org.forgerock.http.protocol.Headers", + "org.forgerock.http.protocol.Message", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Response", + "org.forgerock.http.protocol.ResponseException", + "org.forgerock.http.protocol.Responses", + "org.forgerock.http.protocol.Status", + "org.forgerock.json.JsonValue", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "groovy.json.JsonSlurper", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.List", + "java.util.Map", + "org.mozilla.javascript.ConsString", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "01e1a3c0-038b-4c16-956a-6c9d89328cff", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{authentication.tree.decision.node.script.context.core.threads|50}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{authentication.tree.decision.node.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{authentication.tree.decision.node.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.JweHeader", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.realms.impl.RealmImpl", + "org.forgerock.openam.core.realms.Realms", + "org.forgerock.openam.core.realms.RootRealm", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.placeholder.substitution.FbcPlaceholderSubstitution", + "org.forgerock.openam.placeholder.substitution.PlaceholderSubstitution", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openam.social.idp.OpenIDConnectClientConfig", + "org.forgerock.openam.social.idp.OpenIDConnectClientConfig$ByteBuddy*", + "org.forgerock.openam.social.idp.SocialIdentityProviders", + "org.forgerock.openam.social.idp.SocialIdentityProvidersImpl", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.concurrent.TimeUnit", + "java.util.concurrent.ExecutionException", + "java.util.concurrent.TimeoutException", + "java.util.zip.Deflater", + "java.util.zip.Inflater", + "java.util.zip.DeflaterOutputStream", + "java.util.zip.InflaterInputStream", + "javax.crypto.SecretKeyFactory", + "javax.crypto.spec.PBEKeySpec", + "com.sun.crypto.provider.PBKDF2KeyImpl", + "java.security.spec.InvalidKeySpecException", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/CONFIG_PROVIDER_NODE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/CONFIG_PROVIDER_NODE.scripttype.json new file mode 100644 index 000000000..22e95ac79 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/CONFIG_PROVIDER_NODE.scripttype.json @@ -0,0 +1,407 @@ +{ + "scripttype": { + "CONFIG_PROVIDER_NODE": { + "_id": "CONFIG_PROVIDER_NODE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "CONFIG_PROVIDER_NODE", + "allowLists": [ + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.Collections", + "java.util.Collections$*", + "java.util.concurrent.TimeUnit", + "java.util.concurrent.ExecutionException", + "java.util.concurrent.TimeoutException", + "java.util.HashSet", + "java.util.HashMap", + "java.util.HashMap$KeyIterator", + "java.util.LinkedHashMap", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.spec.InvalidKeySpecException", + "java.security.spec.X509EncodedKeySpec", + "java.security.spec.MGF1ParameterSpec", + "javax.crypto.SecretKeyFactory", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PBEKeySpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "com.sun.crypto.provider.PBKDF2KeyImpl", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.shared.debug.Debug", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.client.*", + "org.forgerock.http.Client", + "org.forgerock.http.Handler", + "org.forgerock.http.Context", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.protocol.Cookie", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.protocol.Form", + "org.forgerock.http.protocol.Header", + "org.forgerock.http.protocol.Headers", + "org.forgerock.http.protocol.Message", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Response", + "org.forgerock.http.protocol.ResponseException", + "org.forgerock.http.protocol.Responses", + "org.forgerock.http.protocol.Status", + "org.forgerock.json.JsonValue", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "groovy.json.JsonSlurper", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.List", + "java.util.Map", + "org.mozilla.javascript.ConsString", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "5e854779-6ec1-4c39-aeba-0477e0986646", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{config.provider.node.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{config.provider.node.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{config.provider.node.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.JweHeader", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "javax.crypto.SecretKeyFactory", + "javax.crypto.spec.PBEKeySpec", + "com.sun.crypto.provider.PBKDF2KeyImpl", + "java.util.concurrent.TimeUnit", + "java.util.concurrent.ExecutionException", + "java.util.concurrent.TimeoutException", + "java.security.spec.InvalidKeySpecException", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/CONFIG_PROVIDER_NODE_NEXT_GEN.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/CONFIG_PROVIDER_NODE_NEXT_GEN.scripttype.json new file mode 100644 index 000000000..0670333b9 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/CONFIG_PROVIDER_NODE_NEXT_GEN.scripttype.json @@ -0,0 +1,1631 @@ +{ + "scripttype": { + "CONFIG_PROVIDER_NODE_NEXT_GEN": { + "_id": "CONFIG_PROVIDER_NODE_NEXT_GEN", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "CONFIG_PROVIDER_NODE_NEXT_GEN", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [ + { + "elementType": "method", + "name": "innerJourney", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "name", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "identityResource", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "mustRun", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedTreeWrapper", + "javaScriptType": "object", + "name": "journey" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestParameters" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getIdentity", + "parameters": [ + { + "javaScriptType": "string", + "name": "userName" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepositoryScriptWrapper", + "javaScriptType": "object", + "name": "idRepository" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestHeaders" + }, + { + "elements": [ + { + "elementType": "method", + "name": "remove", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "get", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "keys", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getObject", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "isDefined", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "putShared", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putTransient", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeShared", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeTransient", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.node.api.NodeStateScriptWrapper", + "javaScriptType": "object", + "name": "nodeState" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "existingSession" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.security.AccessController", + "java.lang.reflect.*" + ], + "coreThreads": { + "$int": "&{config.provider.node.next.gen.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{config.provider.node.next.gen.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{config.provider.node.next.gen.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "java.lang.Float", + "org.forgerock.http.protocol.Header", + "java.lang.Integer", + "org.forgerock.http.Client", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Long", + "java.lang.Short", + "java.util.Map", + "org.forgerock.http.client.*", + "java.lang.Math", + "org.forgerock.opendj.ldap.Dn", + "java.lang.Byte", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "java.lang.StrictMath", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.http.Context", + "java.lang.Void", + "org.codehaus.groovy.runtime.GStringImpl", + "groovy.json.JsonSlurper", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.context.RootContext", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "java.util.List", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Responses", + "org.forgerock.util.promise.Promise", + "java.util.HashMap$KeyIterator", + "com.sun.identity.shared.debug.Debug", + "java.lang.Double", + "org.forgerock.http.protocol.Headers", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.http.protocol.Status", + "java.util.HashMap", + "java.lang.Character$Subset", + "java.util.TreeSet", + "java.util.ArrayList", + "java.util.HashSet", + "java.util.LinkedHashMap", + "org.forgerock.http.protocol.ResponseException", + "java.util.Collections$UnmodifiableRandomAccessList", + "org.forgerock.http.protocol.Message", + "java.lang.Boolean", + "java.lang.String", + "java.lang.Number", + "java.util.LinkedList", + "java.util.LinkedHashSet", + "org.forgerock.http.protocol.Response", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.TreeMap", + "java.util.Collections$EmptyList", + "org.forgerock.openam.scripting.api.ScriptedSession", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.http.Handler", + "java.lang.Object", + "org.forgerock.http.protocol.Form" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/DEVICE_MATCH_NODE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/DEVICE_MATCH_NODE.scripttype.json new file mode 100644 index 000000000..553e1c293 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/DEVICE_MATCH_NODE.scripttype.json @@ -0,0 +1,3152 @@ +{ + "scripttype": { + "DEVICE_MATCH_NODE": { + "_id": "DEVICE_MATCH_NODE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "DEVICE_MATCH_NODE", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Float", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.Void", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.Collections", + "java.util.concurrent.TimeUnit", + "java.util.Collections$*", + "java.util.HashSet", + "java.util.HashMap$KeyIterator", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeSet", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.spec.X509EncodedKeySpec", + "java.security.spec.MGF1ParameterSpec", + "javax.crypto.SecretKeyFactory", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PBEKeySpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "org.forgerock.json.JsonValue", + "org.forgerock.util.promise.NeverThrowsException", + "java.util.concurrent.ExecutionException", + "java.util.concurrent.TimeoutException", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "com.sun.crypto.provider.PBKDF2KeyImpl", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "sun.security.ec.ECPrivateKeyImpl", + "org.slf4j.Logger", + "com.sun.proxy.$*", + "java.util.Date", + "java.security.spec.InvalidKeySpecException", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "getDeviceProfiles", + "parameters": [ + { + "javaScriptType": "string", + "name": "username" + }, + { + "javaScriptType": "string", + "name": "realm" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "saveDeviceProfiles", + "parameters": [ + { + "javaScriptType": "string", + "name": "username" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "javaScriptType": "array", + "name": "deviceProfiles" + } + ], + "returnType": "void" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.DeviceProfilesDaoScriptWrapper", + "javaScriptType": "object", + "name": "deviceProfilesDao" + }, + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [ + { + "elementType": "method", + "name": "innerJourney", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "name", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "identityResource", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "mustRun", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedTreeWrapper", + "javaScriptType": "object", + "name": "journey" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestParameters" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getChoiceCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getNameCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getPasswordCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getHiddenValueCallbacks", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getTextInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getStringAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getNumberAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getBooleanAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getConfirmationCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getLanguageCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getIdpCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getValidatedPasswordCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getValidatedUsernameCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getHttpCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getX509CertificateCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getConsentMappingCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getDeviceProfileCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getKbaCreateCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getSelectIdPCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getTermsAndConditionsCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "isEmpty", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedCallbacksWrapper", + "javaScriptType": "object", + "name": "callbacks" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getIdentity", + "parameters": [ + { + "javaScriptType": "string", + "name": "userName" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepositoryScriptWrapper", + "javaScriptType": "object", + "name": "idRepository" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestHeaders" + }, + { + "elements": [ + { + "elementType": "method", + "name": "generateJwt", + "parameters": [ + { + "javaScriptType": "object", + "name": "jwtData" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.JwtAssertionScriptWrapper", + "javaScriptType": "object", + "name": "jwtAssertion" + }, + { + "elements": [ + { + "elementType": "method", + "name": "remove", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "get", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "keys", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getObject", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "isDefined", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "putShared", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putTransient", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeShared", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeTransient", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.node.api.NodeStateScriptWrapper", + "javaScriptType": "object", + "name": "nodeState" + }, + { + "javaScriptType": "boolean", + "name": "resumedFromSuspend" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "elements": [ + { + "elementType": "method", + "name": "withIdentifiedUser", + "parameters": [ + { + "javaScriptType": "string", + "name": "username" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withIdentifiedAgent", + "parameters": [ + { + "javaScriptType": "string", + "name": "agentName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + }, + { + "javaScriptType": "object", + "name": "additionalLogic" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + }, + { + "javaScriptType": "object", + "name": "additionalLogic" + }, + { + "javaScriptType": "number", + "name": "maximumSuspendDuration" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "goTo", + "parameters": [ + { + "javaScriptType": "string", + "name": "outcome" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withHeader", + "parameters": [ + { + "javaScriptType": "string", + "name": "header" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withDescription", + "parameters": [ + { + "javaScriptType": "string", + "name": "description" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withStage", + "parameters": [ + { + "javaScriptType": "string", + "name": "stage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withErrorMessage", + "parameters": [ + { + "javaScriptType": "string", + "name": "errorMessage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withLockoutMessage", + "parameters": [ + { + "javaScriptType": "string", + "name": "lockoutMessage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "removeSessionProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withMaxSessionTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "maxSessionTime" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withMaxIdleTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "maxIdleTime" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putSessionProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "string", + "name": "value" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ActionWrapper", + "javaScriptType": "object", + "name": "action" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "validateJwtClaims", + "parameters": [ + { + "javaScriptType": "object", + "name": "jwtData" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.JwtValidatorScriptWrapper", + "javaScriptType": "object", + "name": "jwtValidator" + }, + { + "elements": [ + { + "elementType": "method", + "name": "languageCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "language" + }, + { + "javaScriptType": "string", + "name": "country" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "idPCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "provider" + }, + { + "javaScriptType": "string", + "name": "clientId" + }, + { + "javaScriptType": "string", + "name": "redirectUri" + }, + { + "javaScriptType": "array", + "name": "scope" + }, + { + "javaScriptType": "string", + "name": "nonce" + }, + { + "javaScriptType": "string", + "name": "request" + }, + { + "javaScriptType": "string", + "name": "requestUri" + }, + { + "javaScriptType": "array", + "name": "acrValues" + }, + { + "javaScriptType": "boolean", + "name": "requestNativeAppForUserInfo" + }, + { + "javaScriptType": "string", + "name": "token" + }, + { + "javaScriptType": "string", + "name": "tokenType" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "idPCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "provider" + }, + { + "javaScriptType": "string", + "name": "clientId" + }, + { + "javaScriptType": "string", + "name": "redirectUri" + }, + { + "javaScriptType": "array", + "name": "scope" + }, + { + "javaScriptType": "string", + "name": "nonce" + }, + { + "javaScriptType": "string", + "name": "request" + }, + { + "javaScriptType": "string", + "name": "requestUri" + }, + { + "javaScriptType": "array", + "name": "acrValues" + }, + { + "javaScriptType": "boolean", + "name": "requestNativeAppForUserInfo" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "httpCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "authRHeader" + }, + { + "javaScriptType": "string", + "name": "negoName" + }, + { + "javaScriptType": "string", + "name": "negoValue" + }, + { + "javaScriptType": "number", + "name": "errorCode" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "httpCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "authorizationHeader" + }, + { + "javaScriptType": "string", + "name": "negotiationHeader" + }, + { + "javaScriptType": "string", + "name": "errorCode" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "certificate" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "certificate" + }, + { + "javaScriptType": "boolean", + "name": "requestSignature" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "consentMappingCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "config" + }, + { + "javaScriptType": "string", + "name": "message" + }, + { + "javaScriptType": "boolean", + "name": "isRequired" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "consentMappingCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "displayName" + }, + { + "javaScriptType": "string", + "name": "icon" + }, + { + "javaScriptType": "string", + "name": "accessLevel" + }, + { + "javaScriptType": "array", + "name": "titles" + }, + { + "javaScriptType": "string", + "name": "message" + }, + { + "javaScriptType": "boolean", + "name": "isRequired" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "deviceProfileCallback", + "parameters": [ + { + "javaScriptType": "boolean", + "name": "metadata" + }, + { + "javaScriptType": "boolean", + "name": "location" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "kbaCreateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "array", + "name": "predefinedQuestions" + }, + { + "javaScriptType": "boolean", + "name": "allowUserDefinedQuestions" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "selectIdPCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "providers" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "termsAndConditionsCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "version" + }, + { + "javaScriptType": "string", + "name": "terms" + }, + { + "javaScriptType": "string", + "name": "createDate" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "suspendedTextOutputCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "defaultText" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "scriptTextOutputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "metadataCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "outputValue" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textOutputCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "number", + "name": "optionType" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "array", + "name": "options" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "array", + "name": "options" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "number", + "name": "optionType" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "choiceCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "array", + "name": "choices" + }, + { + "javaScriptType": "number", + "name": "defaultChoice" + }, + { + "javaScriptType": "boolean", + "name": "multipleSelectionsAllowed" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "boolean", + "name": "setTrackingCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "string", + "name": "statusParameter" + }, + { + "javaScriptType": "string", + "name": "redirectBackUrlCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "string", + "name": "statusParameter" + }, + { + "javaScriptType": "string", + "name": "redirectBackUrlCookie" + }, + { + "javaScriptType": "boolean", + "name": "setTrackingCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "pollingWaitCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "waitTime" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "hiddenValueCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "value" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "nameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "nameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "defaultName" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "passwordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedUsernameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedUsernameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedPasswordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedPasswordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedCallbacksBuilder", + "javaScriptType": "object", + "name": "callbacksBuilder" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestCookies" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "11e1a3c0-038b-4c16-956a-6c9d89328d00", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{device.match.node.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{device.match.node.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{device.match.node.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "jdk.proxy*", + "org.mozilla.javascript.WrappedException", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.List", + "java.util.Map", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.mozilla.javascript.JavaScriptException" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/LIBRARY.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/LIBRARY.scripttype.json new file mode 100644 index 000000000..34bf5c7b1 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/LIBRARY.scripttype.json @@ -0,0 +1,1452 @@ +{ + "scripttype": { + "LIBRARY": { + "_id": "LIBRARY", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "LIBRARY", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.security.AccessController", + "java.lang.reflect.*" + ], + "coreThreads": 10, + "idleTimeout": 60, + "maxThreads": 50, + "propertyNamePrefix": "script", + "queueSize": 10, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "java.lang.Float", + "org.forgerock.http.protocol.Header", + "java.lang.Integer", + "org.forgerock.http.Client", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Long", + "java.lang.Short", + "java.util.Map", + "org.forgerock.http.client.*", + "java.lang.Math", + "org.forgerock.opendj.ldap.Dn", + "java.lang.Byte", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "java.lang.StrictMath", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.http.Context", + "java.lang.Void", + "org.codehaus.groovy.runtime.GStringImpl", + "groovy.json.JsonSlurper", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.context.RootContext", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "java.util.List", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Responses", + "org.forgerock.util.promise.Promise", + "java.util.HashMap$KeyIterator", + "com.sun.identity.shared.debug.Debug", + "java.lang.Double", + "org.forgerock.http.protocol.Headers", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.http.protocol.Status", + "java.util.HashMap", + "java.lang.Character$Subset", + "java.util.TreeSet", + "java.util.ArrayList", + "java.util.HashSet", + "java.util.LinkedHashMap", + "org.forgerock.http.protocol.ResponseException", + "java.util.Collections$UnmodifiableRandomAccessList", + "org.forgerock.http.protocol.Message", + "java.lang.Boolean", + "java.lang.String", + "java.lang.Number", + "java.util.LinkedList", + "java.util.LinkedHashSet", + "org.forgerock.http.protocol.Response", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.TreeMap", + "java.util.Collections$EmptyList", + "org.forgerock.openam.scripting.api.ScriptedSession", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.http.Handler", + "java.lang.Object", + "org.forgerock.http.protocol.Form" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/NODE_DESIGNER.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/NODE_DESIGNER.scripttype.json new file mode 100644 index 000000000..0b18986fe --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/NODE_DESIGNER.scripttype.json @@ -0,0 +1,3170 @@ +{ + "scripttype": { + "NODE_DESIGNER": { + "_id": "NODE_DESIGNER", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "NODE_DESIGNER", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Float", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.Void", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.Collections", + "java.util.concurrent.TimeUnit", + "java.util.Collections$*", + "java.util.HashSet", + "java.util.HashMap$KeyIterator", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeSet", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.spec.X509EncodedKeySpec", + "java.security.spec.MGF1ParameterSpec", + "javax.crypto.SecretKeyFactory", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PBEKeySpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "org.forgerock.json.JsonValue", + "org.forgerock.util.promise.NeverThrowsException", + "java.util.concurrent.ExecutionException", + "java.util.concurrent.TimeoutException", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "com.sun.crypto.provider.PBKDF2KeyImpl", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "sun.security.ec.ECPrivateKeyImpl", + "ch.qos.logback.classic.Logger", + "com.sun.proxy.$*", + "java.util.Date", + "java.security.spec.InvalidKeySpecException" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [ + { + "elementType": "method", + "name": "innerJourney", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "name", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "identityResource", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "mustRun", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedTreeWrapper", + "javaScriptType": "object", + "name": "journey" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestParameters" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getChoiceCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getNameCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getPasswordCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getHiddenValueCallbacks", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getTextInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getStringAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getNumberAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getBooleanAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getConfirmationCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getLanguageCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getIdpCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getValidatedPasswordCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getValidatedUsernameCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getHttpCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getX509CertificateCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getConsentMappingCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getDeviceProfileCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getKbaCreateCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getSelectIdPCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getTermsAndConditionsCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "isEmpty", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedCallbacksWrapper", + "javaScriptType": "object", + "name": "callbacks" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getIdentity", + "parameters": [ + { + "javaScriptType": "string", + "name": "userName" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepositoryScriptWrapper", + "javaScriptType": "object", + "name": "idRepository" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestHeaders" + }, + { + "elements": [ + { + "elementType": "method", + "name": "generateJwt", + "parameters": [ + { + "javaScriptType": "object", + "name": "jwtData" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.JwtAssertionScriptWrapper", + "javaScriptType": "object", + "name": "jwtAssertion" + }, + { + "elements": [ + { + "elementType": "method", + "name": "remove", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "get", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "keys", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getObject", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "isDefined", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "putShared", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putTransient", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeShared", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeTransient", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.node.api.NodeStateScriptWrapper", + "javaScriptType": "object", + "name": "nodeState" + }, + { + "javaScriptType": "boolean", + "name": "resumedFromSuspend" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "existingSession" + }, + { + "elements": [ + { + "elementType": "method", + "name": "withIdentifiedUser", + "parameters": [ + { + "javaScriptType": "string", + "name": "username" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withIdentifiedAgent", + "parameters": [ + { + "javaScriptType": "string", + "name": "agentName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + }, + { + "javaScriptType": "object", + "name": "additionalLogic" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + }, + { + "javaScriptType": "object", + "name": "additionalLogic" + }, + { + "javaScriptType": "number", + "name": "maximumSuspendDuration" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "goTo", + "parameters": [ + { + "javaScriptType": "string", + "name": "outcome" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withHeader", + "parameters": [ + { + "javaScriptType": "string", + "name": "header" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withDescription", + "parameters": [ + { + "javaScriptType": "string", + "name": "description" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withStage", + "parameters": [ + { + "javaScriptType": "string", + "name": "stage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withErrorMessage", + "parameters": [ + { + "javaScriptType": "string", + "name": "errorMessage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withLockoutMessage", + "parameters": [ + { + "javaScriptType": "string", + "name": "lockoutMessage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "removeSessionProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withMaxSessionTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "maxSessionTime" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withMaxIdleTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "maxIdleTime" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putSessionProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "string", + "name": "value" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ActionWrapper", + "javaScriptType": "object", + "name": "action" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "validateJwtClaims", + "parameters": [ + { + "javaScriptType": "object", + "name": "jwtData" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.JwtValidatorScriptWrapper", + "javaScriptType": "object", + "name": "jwtValidator" + }, + { + "elements": [ + { + "elementType": "method", + "name": "languageCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "language" + }, + { + "javaScriptType": "string", + "name": "country" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "idPCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "provider" + }, + { + "javaScriptType": "string", + "name": "clientId" + }, + { + "javaScriptType": "string", + "name": "redirectUri" + }, + { + "javaScriptType": "array", + "name": "scope" + }, + { + "javaScriptType": "string", + "name": "nonce" + }, + { + "javaScriptType": "string", + "name": "request" + }, + { + "javaScriptType": "string", + "name": "requestUri" + }, + { + "javaScriptType": "array", + "name": "acrValues" + }, + { + "javaScriptType": "boolean", + "name": "requestNativeAppForUserInfo" + }, + { + "javaScriptType": "string", + "name": "token" + }, + { + "javaScriptType": "string", + "name": "tokenType" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "idPCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "provider" + }, + { + "javaScriptType": "string", + "name": "clientId" + }, + { + "javaScriptType": "string", + "name": "redirectUri" + }, + { + "javaScriptType": "array", + "name": "scope" + }, + { + "javaScriptType": "string", + "name": "nonce" + }, + { + "javaScriptType": "string", + "name": "request" + }, + { + "javaScriptType": "string", + "name": "requestUri" + }, + { + "javaScriptType": "array", + "name": "acrValues" + }, + { + "javaScriptType": "boolean", + "name": "requestNativeAppForUserInfo" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "httpCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "authRHeader" + }, + { + "javaScriptType": "string", + "name": "negoName" + }, + { + "javaScriptType": "string", + "name": "negoValue" + }, + { + "javaScriptType": "number", + "name": "errorCode" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "httpCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "authorizationHeader" + }, + { + "javaScriptType": "string", + "name": "negotiationHeader" + }, + { + "javaScriptType": "string", + "name": "errorCode" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "certificate" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "certificate" + }, + { + "javaScriptType": "boolean", + "name": "requestSignature" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "consentMappingCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "config" + }, + { + "javaScriptType": "string", + "name": "message" + }, + { + "javaScriptType": "boolean", + "name": "isRequired" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "consentMappingCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "displayName" + }, + { + "javaScriptType": "string", + "name": "icon" + }, + { + "javaScriptType": "string", + "name": "accessLevel" + }, + { + "javaScriptType": "array", + "name": "titles" + }, + { + "javaScriptType": "string", + "name": "message" + }, + { + "javaScriptType": "boolean", + "name": "isRequired" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "deviceProfileCallback", + "parameters": [ + { + "javaScriptType": "boolean", + "name": "metadata" + }, + { + "javaScriptType": "boolean", + "name": "location" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "kbaCreateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "array", + "name": "predefinedQuestions" + }, + { + "javaScriptType": "boolean", + "name": "allowUserDefinedQuestions" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "selectIdPCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "providers" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "termsAndConditionsCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "version" + }, + { + "javaScriptType": "string", + "name": "terms" + }, + { + "javaScriptType": "string", + "name": "createDate" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "suspendedTextOutputCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "defaultText" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "scriptTextOutputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "metadataCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "outputValue" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textOutputCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "number", + "name": "optionType" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "array", + "name": "options" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "array", + "name": "options" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "number", + "name": "optionType" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "choiceCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "array", + "name": "choices" + }, + { + "javaScriptType": "number", + "name": "defaultChoice" + }, + { + "javaScriptType": "boolean", + "name": "multipleSelectionsAllowed" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "boolean", + "name": "setTrackingCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "string", + "name": "statusParameter" + }, + { + "javaScriptType": "string", + "name": "redirectBackUrlCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "string", + "name": "statusParameter" + }, + { + "javaScriptType": "string", + "name": "redirectBackUrlCookie" + }, + { + "javaScriptType": "boolean", + "name": "setTrackingCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "pollingWaitCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "waitTime" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "hiddenValueCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "value" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "nameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "nameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "defaultName" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "passwordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedUsernameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedUsernameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedPasswordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedPasswordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedCallbacksBuilder", + "javaScriptType": "object", + "name": "callbacksBuilder" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestCookies" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "properties" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.security.AccessController", + "java.lang.reflect.*" + ], + "coreThreads": { + "$int": "&{node.designer.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{node.designer.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{node.designer.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "java.lang.Float", + "org.forgerock.http.protocol.Header", + "java.lang.Integer", + "org.forgerock.http.Client", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Long", + "java.lang.Short", + "java.util.Map", + "org.forgerock.http.client.*", + "java.lang.Math", + "org.forgerock.opendj.ldap.Dn", + "java.lang.Byte", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "java.lang.StrictMath", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.http.Context", + "java.lang.Void", + "org.codehaus.groovy.runtime.GStringImpl", + "groovy.json.JsonSlurper", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.context.RootContext", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "java.util.List", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Responses", + "org.forgerock.util.promise.Promise", + "java.util.HashMap$KeyIterator", + "com.sun.identity.shared.debug.Debug", + "java.lang.Double", + "org.forgerock.http.protocol.Headers", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.http.protocol.Status", + "java.util.HashMap", + "java.lang.Character$Subset", + "java.util.TreeSet", + "java.util.ArrayList", + "java.util.HashSet", + "java.util.LinkedHashMap", + "org.forgerock.http.protocol.ResponseException", + "java.util.Collections$UnmodifiableRandomAccessList", + "org.forgerock.http.protocol.Message", + "java.lang.Boolean", + "java.lang.String", + "java.lang.Number", + "java.util.LinkedList", + "java.util.LinkedHashSet", + "org.forgerock.http.protocol.Response", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.TreeMap", + "java.util.Collections$EmptyList", + "org.forgerock.openam.scripting.api.ScriptedSession", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.http.Handler", + "java.lang.Object", + "org.forgerock.http.protocol.Form" + ] + }, + "isHidden": true, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_ACCESS_TOKEN_MODIFICATION.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_ACCESS_TOKEN_MODIFICATION.scripttype.json new file mode 100644 index 000000000..891eb795c --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_ACCESS_TOKEN_MODIFICATION.scripttype.json @@ -0,0 +1,377 @@ +{ + "scripttype": { + "OAUTH2_ACCESS_TOKEN_MODIFICATION": { + "_id": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "allowLists": [ + "com.google.common.collect.Sets$1", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.net.URI", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableSet", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "d22f9a0c-426a-4466-b95e-d0f125b0d5fa", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{oauth2.access.token.modification.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{oauth2.access.token.modification.script.context.max.threads|50}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{oauth2.access.token.modification.script.context.queue.size|10}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.crypto.provider.PBKDF2KeyImpl", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.SecretKeyFactory", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PBEKeySpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.EcJWK", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.SupportedEllipticCurve", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretECDSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableSet", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_ACCESS_TOKEN_MODIFICATION_NEXT_GEN.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_ACCESS_TOKEN_MODIFICATION_NEXT_GEN.scripttype.json new file mode 100644 index 000000000..8228517b1 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_ACCESS_TOKEN_MODIFICATION_NEXT_GEN.scripttype.json @@ -0,0 +1,2055 @@ +{ + "scripttype": { + "OAUTH2_ACCESS_TOKEN_MODIFICATION_NEXT_GEN": { + "_id": "OAUTH2_ACCESS_TOKEN_MODIFICATION_NEXT_GEN", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OAUTH2_ACCESS_TOKEN_MODIFICATION_NEXT_GEN", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestProperties" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "clientProperties" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "elements": [ + { + "elementType": "method", + "name": "setNonce", + "parameters": [ + { + "javaScriptType": "string", + "name": "nonce" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getNonce", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getField", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "toMap", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getPermissions", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "setPermissions", + "parameters": [ + { + "javaScriptType": "object", + "name": "permissions" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setFields", + "parameters": [ + { + "javaScriptType": "object", + "name": "fields" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setField", + "parameters": [ + { + "javaScriptType": "string", + "name": "field" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getRealm", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "setRealm", + "parameters": [ + { + "javaScriptType": "string", + "name": "realm" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getScope", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "setScope", + "parameters": [ + { + "javaScriptType": "array", + "name": "scopes" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeRealm", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getAuthLevel", + "parameters": [], + "returnType": "number" + }, + { + "elementType": "method", + "name": "setId", + "parameters": [ + { + "javaScriptType": "string", + "name": "tokenId" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isExpired", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "getTokenId", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getExpiryTime", + "parameters": [], + "returnType": "number" + }, + { + "elementType": "method", + "name": "setClaims", + "parameters": [ + { + "javaScriptType": "string", + "name": "claims" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getClientId", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getClaims", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getTokenType", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getGrantType", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getAuditTrackingId", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getAct", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "setAct", + "parameters": [ + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getMayAct", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "setMayAct", + "parameters": [ + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getResourceOwnerId", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getAuthTimeSeconds", + "parameters": [], + "returnType": "number" + }, + { + "elementType": "method", + "name": "getResourceOwner", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getCustomFields", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getTokenName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getTokenInfo", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "addExtraData", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "string", + "name": "value" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getAuthGrantId", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "removeNonce", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeClaims", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setTokenType", + "parameters": [ + { + "javaScriptType": "string", + "name": "tokenType" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeTokenType", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setGrantType", + "parameters": [ + { + "javaScriptType": "string", + "name": "grantType" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeGrantType", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getConfirmationKey", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "setConfirmationKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "confirmationKey" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeConfirmationKey", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "addExtraJsonData", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setAuditTrackingId", + "parameters": [ + { + "javaScriptType": "string", + "name": "auditTrackingId" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeAuditTrackingId", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removePermissions", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setAuthGrantId", + "parameters": [ + { + "javaScriptType": "string", + "name": "authGrantId" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeAuthGrantId", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setExpiryTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "expiryTime" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setClientId", + "parameters": [ + { + "javaScriptType": "string", + "name": "clientId" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeClientId", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setResourceOwnerId", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceOwnerId" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeResourceOwnerId", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeScopes", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setAuthTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "authTime" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeAuthTime", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setAuthLevel", + "parameters": [ + { + "javaScriptType": "number", + "name": "authLevel" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeAuthLevel", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setTokenName", + "parameters": [ + { + "javaScriptType": "string", + "name": "tokenName" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "removeTokenName", + "parameters": [], + "returnType": "void" + } + ], + "javaClass": "org.forgerock.oauth2.core.scripting.AccessTokenScriptWrapper", + "javaScriptType": "object", + "name": "accessToken" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "store", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setAttribute", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + }, + { + "javaScriptType": "array", + "name": "attributeValues" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "addAttribute", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + }, + { + "javaScriptType": "string", + "name": "attributeValue" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getAttributeValues", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getUniversalId", + "parameters": [], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.identity.ScriptedIdentityScriptWrapper", + "javaScriptType": "object", + "name": "identity" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "javaScriptType": "array", + "name": "scopes" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.security.AccessController", + "java.lang.reflect.*" + ], + "coreThreads": { + "$int": "&{oauth2.access.token.modification.next.gen.script.context.core.threads|50}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{oauth2.access.token.modification.next.gen.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{oauth2.access.token.modification.next.gen.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "java.lang.Float", + "org.forgerock.http.protocol.Header", + "java.lang.Integer", + "org.forgerock.http.Client", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Long", + "java.lang.Short", + "java.util.Map", + "org.forgerock.http.client.*", + "java.lang.Math", + "org.forgerock.opendj.ldap.Dn", + "java.lang.Byte", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "java.lang.StrictMath", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.http.Context", + "java.lang.Void", + "org.codehaus.groovy.runtime.GStringImpl", + "groovy.json.JsonSlurper", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.context.RootContext", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "java.util.List", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Responses", + "org.forgerock.util.promise.Promise", + "java.util.HashMap$KeyIterator", + "com.sun.identity.shared.debug.Debug", + "java.lang.Double", + "org.forgerock.http.protocol.Headers", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.http.protocol.Status", + "java.util.HashMap", + "java.lang.Character$Subset", + "java.util.TreeSet", + "java.util.ArrayList", + "java.util.HashSet", + "java.util.LinkedHashMap", + "org.forgerock.http.protocol.ResponseException", + "java.util.Collections$UnmodifiableRandomAccessList", + "org.forgerock.http.protocol.Message", + "java.lang.Boolean", + "java.lang.String", + "java.lang.Number", + "java.util.LinkedList", + "java.util.LinkedHashSet", + "org.forgerock.http.protocol.Response", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.TreeMap", + "java.util.Collections$EmptyList", + "org.forgerock.openam.scripting.api.ScriptedSession", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.http.Handler", + "java.lang.Object", + "org.forgerock.http.protocol.Form" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER.scripttype.json new file mode 100644 index 000000000..d52b226be --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER.scripttype.json @@ -0,0 +1,361 @@ +{ + "scripttype": { + "OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER": { + "_id": "OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER", + "allowLists": [ + "com.google.common.collect.Sets$1", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.net.URI", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableSet", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.exceptions.ServerException", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{oauth2.authorize.endpoint.data.provider.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{oauth2.authorize.endpoint.data.provider.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{oauth2.authorize.endpoint.data.provider.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableSet", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_DYNAMIC_CLIENT_REGISTRATION.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_DYNAMIC_CLIENT_REGISTRATION.scripttype.json new file mode 100644 index 000000000..e2e46b59f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_DYNAMIC_CLIENT_REGISTRATION.scripttype.json @@ -0,0 +1,1538 @@ +{ + "scripttype": { + "OAUTH2_DYNAMIC_CLIENT_REGISTRATION": { + "_id": "OAUTH2_DYNAMIC_CLIENT_REGISTRATION", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OAUTH2_DYNAMIC_CLIENT_REGISTRATION", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "softwareStatement" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestProperties" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "javaScriptType": "string", + "name": "operation" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "store", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setAttribute", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + }, + { + "javaScriptType": "array", + "name": "attributeValues" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "addAttribute", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + }, + { + "javaScriptType": "string", + "name": "attributeValue" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getAttributeValues", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getUniversalId", + "parameters": [], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.identity.ScriptedIdentityScriptWrapper", + "javaScriptType": "object", + "name": "clientIdentity" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "4b6b7e8e-cf03-46c8-949f-c5742dbd6bc5", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.security.AccessController", + "java.lang.reflect.*" + ], + "coreThreads": { + "$int": "&{dynamic.client.registration.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{dynamic.client.registration.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{dynamic.client.registration.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "java.lang.Float", + "org.forgerock.http.protocol.Header", + "java.lang.Integer", + "org.forgerock.http.Client", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Long", + "java.lang.Short", + "java.util.Map", + "org.forgerock.http.client.*", + "java.lang.Math", + "org.forgerock.opendj.ldap.Dn", + "java.lang.Byte", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "java.lang.StrictMath", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.http.Context", + "java.lang.Void", + "org.codehaus.groovy.runtime.GStringImpl", + "groovy.json.JsonSlurper", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.context.RootContext", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "java.util.List", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Responses", + "org.forgerock.util.promise.Promise", + "java.util.HashMap$KeyIterator", + "com.sun.identity.shared.debug.Debug", + "java.lang.Double", + "org.forgerock.http.protocol.Headers", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.http.protocol.Status", + "java.util.HashMap", + "java.lang.Character$Subset", + "java.util.TreeSet", + "java.util.ArrayList", + "java.util.HashSet", + "java.util.LinkedHashMap", + "org.forgerock.http.protocol.ResponseException", + "java.util.Collections$UnmodifiableRandomAccessList", + "org.forgerock.http.protocol.Message", + "java.lang.Boolean", + "java.lang.String", + "java.lang.Number", + "java.util.LinkedList", + "java.util.LinkedHashSet", + "org.forgerock.http.protocol.Response", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.TreeMap", + "java.util.Collections$EmptyList", + "org.forgerock.openam.scripting.api.ScriptedSession", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.http.Handler", + "java.lang.Object", + "org.forgerock.http.protocol.Form" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_EVALUATE_SCOPE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_EVALUATE_SCOPE.scripttype.json new file mode 100644 index 000000000..82f51bc79 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_EVALUATE_SCOPE.scripttype.json @@ -0,0 +1,371 @@ +{ + "scripttype": { + "OAUTH2_EVALUATE_SCOPE": { + "_id": "OAUTH2_EVALUATE_SCOPE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OAUTH2_EVALUATE_SCOPE", + "allowLists": [ + "com.google.common.collect.Sets$1", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.net.URI", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableSet", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{oauth2.evaluate.scope.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{oauth2.evaluate.scope.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{oauth2.evaluate.scope.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableSet", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_MAY_ACT.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_MAY_ACT.scripttype.json new file mode 100644 index 000000000..0e56ada20 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_MAY_ACT.scripttype.json @@ -0,0 +1,373 @@ +{ + "scripttype": { + "OAUTH2_MAY_ACT": { + "_id": "OAUTH2_MAY_ACT", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OAUTH2_MAY_ACT", + "allowLists": [ + "com.google.common.collect.Sets$1", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.net.URI", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableSet", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{oauth2.may.act.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{oauth2.may.act.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{oauth2.may.act.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableSet", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_SCRIPTED_JWT_ISSUER.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_SCRIPTED_JWT_ISSUER.scripttype.json new file mode 100644 index 000000000..1bf198fdd --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_SCRIPTED_JWT_ISSUER.scripttype.json @@ -0,0 +1,207 @@ +{ + "scripttype": { + "OAUTH2_SCRIPTED_JWT_ISSUER": { + "_id": "OAUTH2_SCRIPTED_JWT_ISSUER", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OAUTH2_SCRIPTED_JWT_ISSUER", + "allowLists": [ + "com.google.common.collect.Sets$1", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.net.URI", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableSet", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.TrustedJwtIssuerConfig", + "org.forgerock.oauth2.core.exceptions.ServerException", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "400e48ba-3f13-4144-ac7b-f824ea8e98c5", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{oauth2.scripted.jwt.issuer.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{oauth2.scripted.jwt.issuer.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{oauth2.scripted.jwt.issuer.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.Sets$1", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.net.URI", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableSet", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.TrustedJwtIssuerConfig", + "org.forgerock.oauth2.core.exceptions.ServerException", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_VALIDATE_SCOPE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_VALIDATE_SCOPE.scripttype.json new file mode 100644 index 000000000..823e8d9be --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OAUTH2_VALIDATE_SCOPE.scripttype.json @@ -0,0 +1,361 @@ +{ + "scripttype": { + "OAUTH2_VALIDATE_SCOPE": { + "_id": "OAUTH2_VALIDATE_SCOPE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OAUTH2_VALIDATE_SCOPE", + "allowLists": [ + "com.google.common.collect.Sets$1", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.net.URI", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableSet", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.exceptions.InvalidScopeException", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{oauth2.validate.scope.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{oauth2.validate.scope.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{oauth2.validate.scope.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.exceptions.InvalidScopeException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableSet", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OIDC_CLAIMS.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OIDC_CLAIMS.scripttype.json new file mode 100644 index 000000000..37ef75c6e --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/OIDC_CLAIMS.scripttype.json @@ -0,0 +1,368 @@ +{ + "scripttype": { + "OIDC_CLAIMS": { + "_id": "OIDC_CLAIMS", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "OIDC_CLAIMS", + "allowLists": [ + "com.google.common.collect.Sets$1", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.net.URI", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableSet", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "36863ffb-40ec-48b9-94b1-9a99f71cc3b5", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{oidc.claims.script.context.core.threads|50}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{oidc.claims.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{oidc.claims.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableMap", + "java.util.Collections$UnmodifiableSet", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/PINGONE_VERIFY_COMPLETION_DECISION_NODE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/PINGONE_VERIFY_COMPLETION_DECISION_NODE.scripttype.json new file mode 100644 index 000000000..4a761662f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/PINGONE_VERIFY_COMPLETION_DECISION_NODE.scripttype.json @@ -0,0 +1,1759 @@ +{ + "scripttype": { + "PINGONE_VERIFY_COMPLETION_DECISION_NODE": { + "_id": "PINGONE_VERIFY_COMPLETION_DECISION_NODE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "PINGONE_VERIFY_COMPLETION_DECISION_NODE", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [ + { + "elementType": "method", + "name": "remove", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "get", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "keys", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getObject", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "isDefined", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "putShared", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putTransient", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeShared", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeTransient", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.node.api.NodeStateScriptWrapper", + "javaScriptType": "object", + "name": "nodeState" + }, + { + "javaScriptType": "unknown", + "name": "verifyTransactionsHelper" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "elements": [ + { + "elementType": "method", + "name": "withIdentifiedUser", + "parameters": [ + { + "javaScriptType": "string", + "name": "username" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withIdentifiedAgent", + "parameters": [ + { + "javaScriptType": "string", + "name": "agentName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + }, + { + "javaScriptType": "object", + "name": "additionalLogic" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + }, + { + "javaScriptType": "object", + "name": "additionalLogic" + }, + { + "javaScriptType": "number", + "name": "maximumSuspendDuration" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "goTo", + "parameters": [ + { + "javaScriptType": "string", + "name": "outcome" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withHeader", + "parameters": [ + { + "javaScriptType": "string", + "name": "header" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withDescription", + "parameters": [ + { + "javaScriptType": "string", + "name": "description" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withStage", + "parameters": [ + { + "javaScriptType": "string", + "name": "stage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withErrorMessage", + "parameters": [ + { + "javaScriptType": "string", + "name": "errorMessage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withLockoutMessage", + "parameters": [ + { + "javaScriptType": "string", + "name": "lockoutMessage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "removeSessionProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withMaxSessionTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "maxSessionTime" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withMaxIdleTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "maxIdleTime" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putSessionProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "string", + "name": "value" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ActionWrapper", + "javaScriptType": "object", + "name": "action" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.security.AccessController", + "java.lang.reflect.*" + ], + "coreThreads": { + "$int": "&{pingone.verify.completion.decision.node.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{pingone.verify.completion.decision.node.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{pingone.verify.completion.decision.node.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "java.lang.Float", + "org.forgerock.http.protocol.Header", + "java.lang.Integer", + "org.forgerock.http.Client", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Long", + "java.lang.Short", + "java.util.Map", + "org.forgerock.http.client.*", + "java.lang.Math", + "org.forgerock.opendj.ldap.Dn", + "java.lang.Byte", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "java.lang.StrictMath", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.http.Context", + "java.lang.Void", + "org.codehaus.groovy.runtime.GStringImpl", + "groovy.json.JsonSlurper", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.context.RootContext", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "java.util.List", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Responses", + "org.forgerock.util.promise.Promise", + "java.util.HashMap$KeyIterator", + "com.sun.identity.shared.debug.Debug", + "java.lang.Double", + "org.forgerock.http.protocol.Headers", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.http.protocol.Status", + "java.util.HashMap", + "java.lang.Character$Subset", + "java.util.TreeSet", + "java.util.ArrayList", + "java.util.HashSet", + "java.util.LinkedHashMap", + "org.forgerock.http.protocol.ResponseException", + "java.util.Collections$UnmodifiableRandomAccessList", + "org.forgerock.http.protocol.Message", + "java.lang.Boolean", + "java.lang.String", + "java.lang.Number", + "java.util.LinkedList", + "java.util.LinkedHashSet", + "org.forgerock.http.protocol.Response", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.TreeMap", + "java.util.Collections$EmptyList", + "org.forgerock.openam.scripting.api.ScriptedSession", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.http.Handler", + "java.lang.Object", + "org.forgerock.http.protocol.Form" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/POLICY_CONDITION.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/POLICY_CONDITION.scripttype.json new file mode 100644 index 000000000..05b1586f8 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/POLICY_CONDITION.scripttype.json @@ -0,0 +1,283 @@ +{ + "scripttype": { + "POLICY_CONDITION": { + "_id": "POLICY_CONDITION", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "POLICY_CONDITION", + "allowLists": [], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "9de3eb62-f131-4fac-a294-7bd170fd4acb", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{policy.condition.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{policy.condition.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{policy.condition.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/POLICY_CONDITION_NEXT_GEN.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/POLICY_CONDITION_NEXT_GEN.scripttype.json new file mode 100644 index 000000000..fa5b24426 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/POLICY_CONDITION_NEXT_GEN.scripttype.json @@ -0,0 +1,1573 @@ +{ + "scripttype": { + "POLICY_CONDITION_NEXT_GEN": { + "_id": "POLICY_CONDITION_NEXT_GEN", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "POLICY_CONDITION_NEXT_GEN", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "advice" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "responseAttributes" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.ScriptedSession", + "javaScriptType": "object", + "name": "session" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "javaScriptType": "string", + "name": "resourceURI" + }, + { + "javaScriptType": "number", + "name": "ttl" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "environment" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "store", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setAttribute", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + }, + { + "javaScriptType": "array", + "name": "attributeValues" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "addAttribute", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + }, + { + "javaScriptType": "string", + "name": "attributeValue" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getAttributeValues", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getUniversalId", + "parameters": [], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.identity.ScriptedIdentityScriptWrapper", + "javaScriptType": "object", + "name": "identity" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "javaScriptType": "boolean", + "name": "authorized" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "javaScriptType": "string", + "name": "username" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.security.AccessController", + "java.lang.reflect.*" + ], + "coreThreads": { + "$int": "&{policy.condition.next.gen.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{policy.condition.next.gen.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{policy.condition.next.gen.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "java.lang.Float", + "org.forgerock.http.protocol.Header", + "java.lang.Integer", + "org.forgerock.http.Client", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Long", + "java.lang.Short", + "java.util.Map", + "org.forgerock.http.client.*", + "java.lang.Math", + "org.forgerock.opendj.ldap.Dn", + "java.lang.Byte", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "java.lang.StrictMath", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.http.Context", + "java.lang.Void", + "org.codehaus.groovy.runtime.GStringImpl", + "groovy.json.JsonSlurper", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.context.RootContext", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "java.util.List", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Responses", + "org.forgerock.util.promise.Promise", + "java.util.HashMap$KeyIterator", + "com.sun.identity.shared.debug.Debug", + "java.lang.Double", + "org.forgerock.http.protocol.Headers", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.http.protocol.Status", + "java.util.HashMap", + "java.lang.Character$Subset", + "java.util.TreeSet", + "java.util.ArrayList", + "java.util.HashSet", + "java.util.LinkedHashMap", + "org.forgerock.http.protocol.ResponseException", + "java.util.Collections$UnmodifiableRandomAccessList", + "org.forgerock.http.protocol.Message", + "java.lang.Boolean", + "java.lang.String", + "java.lang.Number", + "java.util.LinkedList", + "java.util.LinkedHashSet", + "org.forgerock.http.protocol.Response", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.TreeMap", + "java.util.Collections$EmptyList", + "org.forgerock.openam.scripting.api.ScriptedSession", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.http.Handler", + "java.lang.Object", + "org.forgerock.http.protocol.Form" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_IDP_ADAPTER.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_IDP_ADAPTER.scripttype.json new file mode 100644 index 000000000..5a49df8b2 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_IDP_ADAPTER.scripttype.json @@ -0,0 +1,214 @@ +{ + "scripttype": { + "SAML2_IDP_ADAPTER": { + "_id": "SAML2_IDP_ADAPTER", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "SAML2_IDP_ADAPTER", + "allowLists": [ + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.saml2.assertion.*", + "com.sun.identity.saml2.assertion.impl.*", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.ScriptEntitlementInfo", + "com.sun.identity.saml2.protocol.*", + "com.sun.identity.saml2.protocol.impl.*", + "com.sun.identity.shared.debug.Debug", + "java.io.PrintWriter", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.util.Collections$EmptyMap", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$SingletonSet", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "java.net.URI", + "javax.security.auth.Subject", + "jakarta.servlet.http.HttpServletRequestWrapper", + "jakarta.servlet.http.HttpServletResponseWrapper", + "groovy.json.internal.LazyMap", + "groovy.json.JsonSlurper", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "com.sun.identity.saml2.plugins.scripted.IdpAdapterScriptHelper" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{saml2.idp.adapter.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{saml2.idp.adapter.script.context.max.threads|50}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{saml2.idp.adapter.script.context.queue.size|10}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.saml2.assertion.*", + "com.sun.identity.saml2.assertion.impl.*", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.ScriptEntitlementInfo", + "com.sun.identity.saml2.protocol.*", + "com.sun.identity.saml2.protocol.impl.*", + "com.sun.identity.shared.debug.Debug", + "java.io.PrintWriter", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.util.Collections$EmptyMap", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$SingletonSet", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "java.net.URI", + "javax.security.auth.Subject", + "javax.servlet.http.HttpServletRequestWrapper", + "javax.servlet.http.HttpServletResponseWrapper", + "jakarta.servlet.http.HttpServletRequestWrapper", + "jakarta.servlet.http.HttpServletResponseWrapper", + "groovy.json.internal.LazyMap", + "groovy.json.JsonSlurper", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "com.sun.identity.saml2.plugins.scripted.IdpAdapterScriptHelper", + "java.util.List", + "java.util.Map", + "javax.servlet.http.Cookie", + "javax.xml.parsers.DocumentBuilder", + "javax.xml.parsers.DocumentBuilderFactory", + "org.w3c.dom.Document", + "org.w3c.dom.Element", + "org.xml.sax.InputSource", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_IDP_ATTRIBUTE_MAPPER.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_IDP_ATTRIBUTE_MAPPER.scripttype.json new file mode 100644 index 000000000..00681428b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_IDP_ATTRIBUTE_MAPPER.scripttype.json @@ -0,0 +1,350 @@ +{ + "scripttype": { + "SAML2_IDP_ATTRIBUTE_MAPPER": { + "_id": "SAML2_IDP_ATTRIBUTE_MAPPER", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "SAML2_IDP_ATTRIBUTE_MAPPER", + "allowLists": [ + "com.iplanet.am.sdk.AMHashMap", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.util.Collections$EmptyMap", + "java.lang.Double", + "java.lang.Float", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "java.net.URI", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.json.JsonValue", + "com.sun.identity.saml2.common.SAML2Exception", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.mozilla.javascript.JavaScriptException", + "javax.servlet.http.Cookie", + "javax.xml.parsers.DocumentBuilder", + "javax.xml.parsers.DocumentBuilderFactory", + "org.w3c.dom.Document", + "org.w3c.dom.Element", + "org.xml.sax.InputSource" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{saml2.idp.attribute.mapper.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{saml2.idp.attribute.mapper.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{saml2.idp.attribute.mapper.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_NAMEID_MAPPER.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_NAMEID_MAPPER.scripttype.json new file mode 100644 index 000000000..4ec3c906f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_NAMEID_MAPPER.scripttype.json @@ -0,0 +1,1590 @@ +{ + "scripttype": { + "SAML2_NAMEID_MAPPER": { + "_id": "SAML2_NAMEID_MAPPER", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "SAML2_NAMEID_MAPPER", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Float", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.Void", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$EmptyMap", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "java.net.URI", + "com.sun.identity.common.CaseInsensitiveHashMap", + "org.forgerock.json.JsonValue", + "org.mozilla.javascript.JavaScriptException", + "javax.servlet.http.Cookie", + "org.xml.sax.InputSource", + "java.security.cert.CertificateFactory", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.io.PrintWriter", + "javax.security.auth.Subject", + "jakarta.servlet.http.HttpServletRequestWrapper", + "jakarta.servlet.http.HttpServletResponseWrapper", + "sun.security.ec.ECPrivateKeyImpl" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "javaScriptType": "unknown", + "name": "nameIDScriptHelper" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "store", + "parameters": [], + "returnType": "void" + }, + { + "elementType": "method", + "name": "setAttribute", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + }, + { + "javaScriptType": "array", + "name": "attributeValues" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "addAttribute", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + }, + { + "javaScriptType": "string", + "name": "attributeValue" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "getAttributeValues", + "parameters": [ + { + "javaScriptType": "string", + "name": "attributeName" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getUniversalId", + "parameters": [], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.identity.ScriptedIdentityScriptWrapper", + "javaScriptType": "object", + "name": "identity" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "javaScriptType": "string", + "name": "nameIDFormat" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "javaScriptType": "string", + "name": "remoteEntityId" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "javaScriptType": "string", + "name": "hostedEntityId" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.security.AccessController", + "java.lang.reflect.*" + ], + "coreThreads": { + "$int": "&{saml2.nameid.mapper.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{saml2.nameid.mapper.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{saml2.nameid.mapper.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "java.lang.Float", + "org.forgerock.http.protocol.Header", + "java.lang.Integer", + "org.forgerock.http.Client", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Long", + "java.lang.Short", + "java.util.Map", + "org.forgerock.http.client.*", + "java.lang.Math", + "org.forgerock.opendj.ldap.Dn", + "java.lang.Byte", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "java.lang.StrictMath", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.http.Context", + "java.lang.Void", + "org.codehaus.groovy.runtime.GStringImpl", + "groovy.json.JsonSlurper", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.context.RootContext", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "java.util.List", + "org.forgerock.http.protocol.RequestCookies", + "org.forgerock.http.protocol.Responses", + "org.forgerock.util.promise.Promise", + "java.util.HashMap$KeyIterator", + "com.sun.identity.shared.debug.Debug", + "java.lang.Double", + "org.forgerock.http.protocol.Headers", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.http.protocol.Status", + "java.util.HashMap", + "java.lang.Character$Subset", + "java.util.TreeSet", + "java.util.ArrayList", + "java.util.HashSet", + "java.util.LinkedHashMap", + "org.forgerock.http.protocol.ResponseException", + "java.util.Collections$UnmodifiableRandomAccessList", + "org.forgerock.http.protocol.Message", + "java.lang.Boolean", + "java.lang.String", + "java.lang.Number", + "java.util.LinkedList", + "java.util.LinkedHashSet", + "org.forgerock.http.protocol.Response", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.TreeMap", + "java.util.Collections$EmptyList", + "org.forgerock.openam.scripting.api.ScriptedSession", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.http.Handler", + "java.lang.Object", + "org.forgerock.http.protocol.Form" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_SP_ADAPTER.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_SP_ADAPTER.scripttype.json new file mode 100644 index 000000000..3a0917f83 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SAML2_SP_ADAPTER.scripttype.json @@ -0,0 +1,245 @@ +{ + "scripttype": { + "SAML2_SP_ADAPTER": { + "_id": "SAML2_SP_ADAPTER", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "SAML2_SP_ADAPTER", + "allowLists": [ + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.saml2.assertion.*", + "com.sun.identity.saml2.assertion.impl.*", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.ScriptEntitlementInfo", + "com.sun.identity.saml2.protocol.*", + "com.sun.identity.saml2.protocol.impl.*", + "com.sun.identity.shared.debug.Debug", + "java.io.PrintWriter", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.util.Collections$EmptyMap", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$SingletonSet", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "java.net.URI", + "javax.security.auth.Subject", + "jakarta.servlet.http.HttpServletRequestWrapper", + "jakarta.servlet.http.HttpServletResponseWrapper", + "groovy.json.internal.LazyMap", + "groovy.json.JsonSlurper", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "com.sun.identity.saml2.plugins.scripted.SpAdapterScriptHelper" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "[Empty]", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{saml2.sp.adapter.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{saml2.sp.adapter.script.context.max.threads|50}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{saml2.sp.adapter.script.context.queue.size|10}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.saml2.assertion.*", + "com.sun.identity.saml2.assertion.impl.*", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.ScriptEntitlementInfo", + "com.sun.identity.saml2.protocol.*", + "com.sun.identity.saml2.protocol.impl.*", + "com.sun.identity.shared.debug.Debug", + "java.io.PrintWriter", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.util.Collections$EmptyMap", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "java.net.URI", + "javax.security.auth.Subject", + "javax.servlet.http.HttpServletRequestWrapper", + "javax.servlet.http.HttpServletResponseWrapper", + "jakarta.servlet.http.HttpServletRequestWrapper", + "jakarta.servlet.http.HttpServletResponseWrapper", + "groovy.json.internal.LazyMap", + "groovy.json.JsonSlurper", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.Client", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "com.sun.identity.saml2.plugins.scripted.SpAdapterScriptHelper", + "java.util.List", + "java.util.Map", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "javax.crypto.spec.SecretKeySpec", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.UUID", + "java.util.Date" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SCRIPTED_DECISION_NODE.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SCRIPTED_DECISION_NODE.scripttype.json new file mode 100644 index 000000000..6b7cf1f1f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SCRIPTED_DECISION_NODE.scripttype.json @@ -0,0 +1,3173 @@ +{ + "scripttype": { + "SCRIPTED_DECISION_NODE": { + "_id": "SCRIPTED_DECISION_NODE", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "SCRIPTED_DECISION_NODE", + "allowLists": [ + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.util.promise.Promises$*", + "java.lang.Object", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Float", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.Void", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.Collections", + "java.util.concurrent.TimeUnit", + "java.util.Collections$*", + "java.util.HashSet", + "java.util.HashMap$KeyIterator", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeSet", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.spec.X509EncodedKeySpec", + "java.security.spec.MGF1ParameterSpec", + "javax.crypto.SecretKeyFactory", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PBEKeySpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "org.forgerock.json.JsonValue", + "org.forgerock.util.promise.NeverThrowsException", + "java.util.concurrent.ExecutionException", + "java.util.concurrent.TimeoutException", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "com.sun.crypto.provider.PBKDF2KeyImpl", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "sun.security.ec.ECPrivateKeyImpl", + "ch.qos.logback.classic.Logger", + "com.sun.proxy.$*", + "java.util.Date", + "java.security.spec.InvalidKeySpecException", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ], + "bindings": [ + { + "elements": [ + { + "elementType": "method", + "name": "getIdpAttributes", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getFlowInitiator", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getSpAttributes", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getAuthnRequest", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getApplicationId", + "parameters": [], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.saml2.SAMLScriptedBindingObjectImpl", + "javaScriptType": "object", + "name": "samlApplication" + }, + { + "elements": [ + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + }, + { + "javaScriptType": "object", + "name": "requestOptions" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "send", + "parameters": [ + { + "javaScriptType": "string", + "name": "uri" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.HttpClientScriptWrapper", + "javaScriptType": "object", + "name": "httpClient" + }, + { + "elements": [ + { + "elementType": "method", + "name": "innerJourney", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "name", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "identityResource", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "mustRun", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedTreeWrapper", + "javaScriptType": "object", + "name": "journey" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getName", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "info", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "trace", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "debug", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "error", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "array", + "name": "arguments" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + }, + { + "javaScriptType": "object", + "name": "t" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "msg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg1" + }, + { + "javaScriptType": "object", + "name": "arg2" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "warn", + "parameters": [ + { + "javaScriptType": "string", + "name": "format" + }, + { + "javaScriptType": "object", + "name": "arg" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "isTraceEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isDebugEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isErrorEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isInfoEnabled", + "parameters": [], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "isWarnEnabled", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.scripting.logging.ScriptedLoggerWrapper", + "javaScriptType": "object", + "name": "logger" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestParameters" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getChoiceCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getNameCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getPasswordCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getHiddenValueCallbacks", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getTextInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getStringAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getNumberAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getBooleanAttributeInputCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getConfirmationCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getLanguageCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getIdpCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getValidatedPasswordCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getValidatedUsernameCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getHttpCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getX509CertificateCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getConsentMappingCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getDeviceProfileCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getKbaCreateCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getSelectIdPCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "getTermsAndConditionsCallbacks", + "parameters": [], + "returnType": "array" + }, + { + "elementType": "method", + "name": "isEmpty", + "parameters": [], + "returnType": "boolean" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedCallbacksWrapper", + "javaScriptType": "object", + "name": "callbacks" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getGenericSecret", + "parameters": [ + { + "javaScriptType": "string", + "name": "secretId" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "javaScriptType": "object", + "name": "secrets" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getIdentity", + "parameters": [ + { + "javaScriptType": "string", + "name": "userName" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepositoryScriptWrapper", + "javaScriptType": "object", + "name": "idRepository" + }, + { + "elements": [ + { + "elementType": "method", + "name": "getRequestProperties", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getApplicationId", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getClientProperties", + "parameters": [], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.oauth2.core.application.tree.OAuthScriptedBindingObjectImpl", + "javaScriptType": "object", + "name": "oauthApplication" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestHeaders" + }, + { + "elements": [ + { + "elementType": "method", + "name": "generateJwt", + "parameters": [ + { + "javaScriptType": "object", + "name": "jwtData" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.JwtAssertionScriptWrapper", + "javaScriptType": "object", + "name": "jwtAssertion" + }, + { + "elements": [ + { + "elementType": "method", + "name": "remove", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "get", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "keys", + "parameters": [], + "returnType": "object" + }, + { + "elementType": "method", + "name": "getObject", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "isDefined", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "putShared", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putTransient", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeShared", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "mergeTransient", + "parameters": [ + { + "javaScriptType": "object", + "name": "object" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.node.api.NodeStateScriptWrapper", + "javaScriptType": "object", + "name": "nodeState" + }, + { + "javaScriptType": "boolean", + "name": "resumedFromSuspend" + }, + { + "elements": [ + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "randomUUID", + "parameters": [], + "returnType": "string" + }, + { + "elementType": "method", + "name": "getRandomValues", + "parameters": [ + { + "javaScriptType": "array", + "name": "array" + } + ], + "returnType": "array" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "sign", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "digest", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "verify", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + }, + { + "javaScriptType": "array", + "name": "signature" + } + ], + "returnType": "boolean" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "encrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "decrypt", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithmOptions" + }, + { + "javaScriptType": "array", + "name": "key" + }, + { + "javaScriptType": "array", + "name": "data" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "object", + "name": "algorithm" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "generateKey", + "parameters": [ + { + "javaScriptType": "string", + "name": "algorithm" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.subtle.ScriptSubtleService", + "javaScriptType": "object", + "name": "subtle" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.crypto.ScriptCryptoService", + "javaScriptType": "object", + "name": "crypto" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "array", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "decodeToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "array" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64Service", + "javaScriptType": "object", + "name": "base64" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "decode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "encode", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "btoa", + "parameters": [ + { + "javaScriptType": "string", + "name": "toEncode" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "atob", + "parameters": [ + { + "javaScriptType": "string", + "name": "toDecode" + } + ], + "returnType": "string" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptBase64UrlService", + "javaScriptType": "object", + "name": "base64url" + }, + { + "elementType": "field", + "elements": [ + { + "elementType": "method", + "name": "bytesToString", + "parameters": [ + { + "javaScriptType": "array", + "name": "bytes" + } + ], + "returnType": "string" + }, + { + "elementType": "method", + "name": "stringToBytes", + "parameters": [ + { + "javaScriptType": "string", + "name": "string" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptTypesService", + "javaScriptType": "object", + "name": "types" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptUtilityService", + "javaScriptType": "object", + "name": "utils" + }, + { + "elements": [ + { + "elementType": "method", + "name": "withIdentifiedUser", + "parameters": [ + { + "javaScriptType": "string", + "name": "username" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withIdentifiedAgent", + "parameters": [ + { + "javaScriptType": "string", + "name": "agentName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + }, + { + "javaScriptType": "object", + "name": "additionalLogic" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + }, + { + "javaScriptType": "object", + "name": "additionalLogic" + }, + { + "javaScriptType": "number", + "name": "maximumSuspendDuration" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "suspend", + "parameters": [ + { + "javaScriptType": "string", + "name": "callbackTextFormat" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "goTo", + "parameters": [ + { + "javaScriptType": "string", + "name": "outcome" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withHeader", + "parameters": [ + { + "javaScriptType": "string", + "name": "header" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withDescription", + "parameters": [ + { + "javaScriptType": "string", + "name": "description" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withStage", + "parameters": [ + { + "javaScriptType": "string", + "name": "stage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withErrorMessage", + "parameters": [ + { + "javaScriptType": "string", + "name": "errorMessage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withLockoutMessage", + "parameters": [ + { + "javaScriptType": "string", + "name": "lockoutMessage" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "removeSessionProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withMaxSessionTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "maxSessionTime" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "withMaxIdleTime", + "parameters": [ + { + "javaScriptType": "number", + "name": "maxIdleTime" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "putSessionProperty", + "parameters": [ + { + "javaScriptType": "string", + "name": "key" + }, + { + "javaScriptType": "string", + "name": "value" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ActionWrapper", + "javaScriptType": "object", + "name": "action" + }, + { + "javaScriptType": "string", + "name": "scriptName" + }, + { + "javaScriptType": "string", + "name": "realm" + }, + { + "elements": [ + { + "elementType": "method", + "name": "validateJwtClaims", + "parameters": [ + { + "javaScriptType": "object", + "name": "jwtData" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.JwtValidatorScriptWrapper", + "javaScriptType": "object", + "name": "jwtValidator" + }, + { + "elements": [ + { + "elementType": "method", + "name": "languageCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "language" + }, + { + "javaScriptType": "string", + "name": "country" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "idPCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "provider" + }, + { + "javaScriptType": "string", + "name": "clientId" + }, + { + "javaScriptType": "string", + "name": "redirectUri" + }, + { + "javaScriptType": "array", + "name": "scope" + }, + { + "javaScriptType": "string", + "name": "nonce" + }, + { + "javaScriptType": "string", + "name": "request" + }, + { + "javaScriptType": "string", + "name": "requestUri" + }, + { + "javaScriptType": "array", + "name": "acrValues" + }, + { + "javaScriptType": "boolean", + "name": "requestNativeAppForUserInfo" + }, + { + "javaScriptType": "string", + "name": "token" + }, + { + "javaScriptType": "string", + "name": "tokenType" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "idPCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "provider" + }, + { + "javaScriptType": "string", + "name": "clientId" + }, + { + "javaScriptType": "string", + "name": "redirectUri" + }, + { + "javaScriptType": "array", + "name": "scope" + }, + { + "javaScriptType": "string", + "name": "nonce" + }, + { + "javaScriptType": "string", + "name": "request" + }, + { + "javaScriptType": "string", + "name": "requestUri" + }, + { + "javaScriptType": "array", + "name": "acrValues" + }, + { + "javaScriptType": "boolean", + "name": "requestNativeAppForUserInfo" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "httpCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "authRHeader" + }, + { + "javaScriptType": "string", + "name": "negoName" + }, + { + "javaScriptType": "string", + "name": "negoValue" + }, + { + "javaScriptType": "number", + "name": "errorCode" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "httpCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "authorizationHeader" + }, + { + "javaScriptType": "string", + "name": "negotiationHeader" + }, + { + "javaScriptType": "string", + "name": "errorCode" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "certificate" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "x509CertificateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "certificate" + }, + { + "javaScriptType": "boolean", + "name": "requestSignature" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "consentMappingCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "config" + }, + { + "javaScriptType": "string", + "name": "message" + }, + { + "javaScriptType": "boolean", + "name": "isRequired" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "consentMappingCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "displayName" + }, + { + "javaScriptType": "string", + "name": "icon" + }, + { + "javaScriptType": "string", + "name": "accessLevel" + }, + { + "javaScriptType": "array", + "name": "titles" + }, + { + "javaScriptType": "string", + "name": "message" + }, + { + "javaScriptType": "boolean", + "name": "isRequired" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "deviceProfileCallback", + "parameters": [ + { + "javaScriptType": "boolean", + "name": "metadata" + }, + { + "javaScriptType": "boolean", + "name": "location" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "kbaCreateCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "array", + "name": "predefinedQuestions" + }, + { + "javaScriptType": "boolean", + "name": "allowUserDefinedQuestions" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "selectIdPCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "providers" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "termsAndConditionsCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "version" + }, + { + "javaScriptType": "string", + "name": "terms" + }, + { + "javaScriptType": "string", + "name": "createDate" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "suspendedTextOutputCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "defaultText" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "scriptTextOutputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "metadataCallback", + "parameters": [ + { + "javaScriptType": "object", + "name": "outputValue" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "stringAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "numberAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "booleanAttributeInputCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "name" + }, + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "value" + }, + { + "javaScriptType": "boolean", + "name": "required" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "textOutputCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "number", + "name": "optionType" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "array", + "name": "options" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "array", + "name": "options" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "confirmationCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "number", + "name": "messageType" + }, + { + "javaScriptType": "number", + "name": "optionType" + }, + { + "javaScriptType": "number", + "name": "defaultOption" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "choiceCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "array", + "name": "choices" + }, + { + "javaScriptType": "number", + "name": "defaultChoice" + }, + { + "javaScriptType": "boolean", + "name": "multipleSelectionsAllowed" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "boolean", + "name": "setTrackingCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "string", + "name": "statusParameter" + }, + { + "javaScriptType": "string", + "name": "redirectBackUrlCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "redirectCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "redirectUrl" + }, + { + "javaScriptType": "object", + "name": "redirectData" + }, + { + "javaScriptType": "string", + "name": "method" + }, + { + "javaScriptType": "string", + "name": "statusParameter" + }, + { + "javaScriptType": "string", + "name": "redirectBackUrlCookie" + }, + { + "javaScriptType": "boolean", + "name": "setTrackingCookie" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "pollingWaitCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "waitTime" + }, + { + "javaScriptType": "string", + "name": "message" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "hiddenValueCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "value" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "nameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "nameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "string", + "name": "defaultName" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "passwordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedUsernameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedUsernameCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedPasswordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + }, + { + "javaScriptType": "array", + "name": "failedPolicies" + } + ], + "returnType": "void" + }, + { + "elementType": "method", + "name": "validatedPasswordCallback", + "parameters": [ + { + "javaScriptType": "string", + "name": "prompt" + }, + { + "javaScriptType": "boolean", + "name": "echoOn" + }, + { + "javaScriptType": "object", + "name": "policies" + }, + { + "javaScriptType": "boolean", + "name": "validateOnly" + } + ], + "returnType": "void" + } + ], + "javaClass": "org.forgerock.openam.auth.nodes.script.ScriptedCallbacksBuilder", + "javaScriptType": "object", + "name": "callbacksBuilder" + }, + { + "elements": [ + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "update", + "parameters": [ + { + "javaScriptType": "string", + "name": "id" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "value" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "read", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "delete", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "action", + "parameters": [ + { + "javaScriptType": "string", + "name": "resource" + }, + { + "javaScriptType": "string", + "name": "actionName" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "query", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "create", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "newResourceId" + }, + { + "javaScriptType": "object", + "name": "content" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + }, + { + "javaScriptType": "array", + "name": "fields" + } + ], + "returnType": "object" + }, + { + "elementType": "method", + "name": "patch", + "parameters": [ + { + "javaScriptType": "string", + "name": "resourceName" + }, + { + "javaScriptType": "string", + "name": "rev" + }, + { + "javaScriptType": "array", + "name": "patch" + }, + { + "javaScriptType": "object", + "name": "params" + } + ], + "returnType": "object" + } + ], + "javaClass": "org.forgerock.openam.scripting.wrappers.IdmIntegrationServiceScriptWrapper", + "javaScriptType": "object", + "name": "openidm" + }, + { + "elements": [], + "javaScriptType": "object", + "name": "requestCookies" + }, + { + "javaScriptType": "string", + "name": "cookieName" + }, + { + "elements": [ + { + "elementType": "method", + "name": "evaluate", + "parameters": [ + { + "javaScriptType": "object", + "name": "subject" + }, + { + "javaScriptType": "string", + "name": "application" + }, + { + "javaScriptType": "array", + "name": "resourceNames" + }, + { + "javaScriptType": "object", + "name": "environment" + } + ], + "returnType": "array" + } + ], + "javaClass": "org.forgerock.openam.scripting.bindings.ScriptPolicyService", + "javaScriptType": "object", + "name": "policy" + } + ], + "evaluatorVersions": { + "JAVASCRIPT": [ + "2.0" + ] + } + }, + "defaultScript": "11e1a3c0-038b-4c16-956a-6c9d89328cff", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{scripted.decision.node.script.context.core.threads|&{authentication.tree.decision.node.script.context.core.threads|50}}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{scripted.decision.node.script.context.max.threads|&{authentication.tree.decision.node.script.context.max.threads|100}}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{scripted.decision.node.script.context.queue.size|&{authentication.tree.decision.node.script.context.queue.size|50}}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "jdk.proxy*", + "org.mozilla.javascript.WrappedException", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.List", + "java.util.Map", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.mozilla.javascript.JavaScriptException" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SOCIAL_IDP_PROFILE_TRANSFORMATION.scripttype.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SOCIAL_IDP_PROFILE_TRANSFORMATION.scripttype.json new file mode 100644 index 000000000..88021dcb4 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/scripttype/SOCIAL_IDP_PROFILE_TRANSFORMATION.scripttype.json @@ -0,0 +1,346 @@ +{ + "scripttype": { + "SOCIAL_IDP_PROFILE_TRANSFORMATION": { + "_id": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "_type": { + "_id": "contexts", + "collection": true, + "name": "scriptContext" + }, + "context": { + "_id": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "allowLists": [ + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Character", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.Number", + "java.lang.Object", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.util.AbstractMap$SimpleImmutableEntry", + "java.util.ArrayList$Itr", + "java.util.ArrayList", + "java.util.Collections$1", + "java.util.Collections$EmptyList", + "java.util.Collections$SingletonList", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$Node", + "java.util.HashMap", + "java.util.HashSet", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.TreeMap", + "java.util.TreeSet", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.http.client.*", + "org.forgerock.http.protocol.Entity", + "org.forgerock.http.protocol.Request", + "org.forgerock.http.protocol.Response", + "org.forgerock.json.JsonValue", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.shared.security.crypto.CertificateService", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.util.promise.PromiseImpl", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "java.util.List", + "java.util.Map", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.oauth.clients.oidc.Claim", + "java.util.Locale", + "org.mozilla.javascript.JavaScriptException", + "sun.security.ec.ECPrivateKeyImpl", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn" + ], + "bindings": [], + "evaluatorVersions": { + "GROOVY": [ + "1.0" + ], + "JAVASCRIPT": [ + "1.0" + ] + } + }, + "defaultScript": "1d475815-72cb-42eb-aafd-4026989d28a7", + "engineConfiguration": { + "_id": "engineConfiguration", + "_type": { + "_id": "engineConfiguration", + "collection": false, + "name": "Scripting engine configuration" + }, + "blackList": [ + "java.lang.Class", + "java.lang.Thread", + "java.lang.invoke.*", + "java.lang.reflect.*", + "java.security.AccessController" + ], + "coreThreads": { + "$int": "&{social.idp.profile.transformation.script.context.core.threads|10}" + }, + "idleTimeout": 60, + "maxThreads": { + "$int": "&{social.idp.profile.transformation.script.context.max.threads|100}" + }, + "propertyNamePrefix": "esv.", + "queueSize": { + "$int": "&{social.idp.profile.transformation.script.context.queue.size|50}" + }, + "serverTimeout": 0, + "useSecurityManager": true, + "whiteList": [ + "com.google.common.collect.ImmutableList", + "com.google.common.collect.Sets$1", + "com.iplanet.am.sdk.AMHashMap", + "com.iplanet.sso.providers.dpro.SSOTokenIDImpl", + "com.iplanet.sso.providers.dpro.SessionSsoToken", + "com.sun.identity.authentication.callbacks.HiddenValueCallback", + "com.sun.identity.authentication.callbacks.ReCaptchaCallback", + "com.sun.identity.authentication.callbacks.ScriptTextOutputCallback", + "com.sun.identity.authentication.spi.HttpCallback", + "com.sun.identity.authentication.spi.IdentifiableCallback", + "com.sun.identity.authentication.spi.MetadataCallback", + "com.sun.identity.authentication.spi.PagePropertiesCallback", + "com.sun.identity.authentication.spi.RedirectCallback", + "com.sun.identity.authentication.spi.X509CertificateCallback", + "com.sun.identity.common.CaseInsensitiveHashMap", + "com.sun.identity.common.CaseInsensitiveHashMap$Entry", + "com.sun.identity.idm.AMIdentity", + "com.sun.identity.idm.IdType", + "com.sun.identity.saml2.assertion.impl.AttributeImpl", + "com.sun.identity.saml2.common.SAML2Exception", + "com.sun.identity.saml2.plugins.scripted.IdpAttributeMapperScriptHelper", + "com.sun.identity.shared.debug.Debug", + "groovy.json.JsonSlurper", + "groovy.json.StringEscapeUtils", + "groovy.json.internal.LazyMap", + "java.io.ByteArrayInputStream", + "java.io.ByteArrayOutputStream", + "java.io.UnsupportedEncodingException", + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Character$Subset", + "java.lang.Character$UnicodeBlock", + "java.lang.Double", + "java.lang.Float", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Math", + "java.lang.NullPointerException", + "java.lang.Number", + "java.lang.Object", + "java.lang.RuntimeException", + "java.lang.SecurityException", + "java.lang.Short", + "java.lang.StrictMath", + "java.lang.String", + "java.lang.Void", + "java.math.BigDecimal", + "java.math.BigInteger", + "java.net.URI", + "java.security.KeyFactory", + "java.security.KeyPair", + "java.security.KeyPairGenerator", + "java.security.KeyPairGenerator$*", + "java.security.MessageDigest", + "java.security.MessageDigest$Delegate", + "java.security.MessageDigest$Delegate$CloneableDelegate", + "java.security.NoSuchAlgorithmException", + "java.security.PrivateKey", + "java.security.PublicKey", + "java.security.cert.CertificateFactory", + "java.security.cert.X509Certificate", + "java.security.spec.MGF1ParameterSpec", + "java.security.spec.PKCS8EncodedKeySpec", + "java.security.spec.X509EncodedKeySpec", + "java.text.SimpleDateFormat", + "java.time.Clock", + "java.time.Clock$FixedClock", + "java.time.Clock$OffsetClock", + "java.time.Clock$SystemClock", + "java.time.Clock$TickClock", + "java.time.temporal.ChronoUnit", + "java.util.AbstractMap$*", + "java.util.ArrayList", + "java.util.ArrayList$Itr", + "java.util.Arrays", + "java.util.Collections", + "java.util.Collections$*", + "java.util.Date", + "java.util.HashMap", + "java.util.HashMap$Entry", + "java.util.HashMap$KeyIterator", + "java.util.HashMap$KeySet", + "java.util.HashMap$Node", + "java.util.HashSet", + "java.util.LinkedHashMap", + "java.util.LinkedHashMap$Entry", + "java.util.LinkedHashMap$LinkedEntryIterator", + "java.util.LinkedHashMap$LinkedEntrySet", + "java.util.LinkedHashMap$LinkedKeySet", + "java.util.LinkedHashSet", + "java.util.LinkedList", + "java.util.List", + "java.util.Locale", + "java.util.Map", + "java.util.TreeMap", + "java.util.TreeSet", + "java.util.UUID", + "javax.crypto.Cipher", + "javax.crypto.Mac", + "javax.crypto.spec.IvParameterSpec", + "javax.crypto.spec.OAEPParameterSpec", + "javax.crypto.spec.PSource", + "javax.crypto.spec.PSource$*", + "javax.crypto.spec.SecretKeySpec", + "javax.security.auth.callback.ChoiceCallback", + "javax.security.auth.callback.ConfirmationCallback", + "javax.security.auth.callback.LanguageCallback", + "javax.security.auth.callback.NameCallback", + "javax.security.auth.callback.PasswordCallback", + "javax.security.auth.callback.TextInputCallback", + "javax.security.auth.callback.TextOutputCallback", + "org.apache.groovy.json.internal.LazyMap", + "org.codehaus.groovy.runtime.GStringImpl", + "org.codehaus.groovy.runtime.ScriptBytecodeAdapter", + "org.forgerock.guice.core.IdentityProvider", + "org.forgerock.guice.core.InjectorHolder", + "org.forgerock.http.Client", + "org.forgerock.http.Context", + "org.forgerock.http.Handler", + "org.forgerock.http.client.*", + "org.forgerock.http.context.RootContext", + "org.forgerock.http.header.*", + "org.forgerock.http.header.authorization.*", + "org.forgerock.http.protocol.*", + "org.forgerock.json.JsonValue", + "org.forgerock.json.jose.builders.EncryptedJwtBuilder", + "org.forgerock.json.jose.builders.EncryptedThenSignedJwtBuilder", + "org.forgerock.json.jose.builders.JweHeaderBuilder", + "org.forgerock.json.jose.builders.JwsHeaderBuilder", + "org.forgerock.json.jose.builders.JwtBuilderFactory", + "org.forgerock.json.jose.builders.SignedJwtBuilderImpl", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtBuilder", + "org.forgerock.json.jose.builders.SignedThenEncryptedJwtHeaderBuilder", + "org.forgerock.json.jose.jwe.EncryptedJwt", + "org.forgerock.json.jose.jwe.EncryptionMethod", + "org.forgerock.json.jose.jwe.JweAlgorithm", + "org.forgerock.json.jose.jwe.SignedThenEncryptedJwt", + "org.forgerock.json.jose.jwk.JWKSet", + "org.forgerock.json.jose.jwk.RsaJWK", + "org.forgerock.json.jose.jws.EncryptedThenSignedJwt", + "org.forgerock.json.jose.jws.JwsAlgorithm", + "org.forgerock.json.jose.jws.JwsHeader", + "org.forgerock.json.jose.jws.SignedEncryptedJwt", + "org.forgerock.json.jose.jws.SignedJwt", + "org.forgerock.json.jose.jws.SigningManager", + "org.forgerock.json.jose.jws.handlers.HmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.RSASigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretHmacSigningHandler", + "org.forgerock.json.jose.jws.handlers.SecretRSASigningHandler", + "org.forgerock.json.jose.jwt.JwtClaimsSet", + "org.forgerock.macaroons.Macaroon", + "org.forgerock.oauth.clients.oidc.Claim", + "org.forgerock.oauth2.core.GrantType", + "org.forgerock.oauth2.core.StatefulAccessToken", + "org.forgerock.oauth2.core.UserInfoClaims", + "org.forgerock.oauth2.core.exceptions.InvalidRequestException", + "org.forgerock.oauth2.core.tokenexchange.ExchangeableToken", + "org.forgerock.openam.auth.node.api.Action", + "org.forgerock.openam.auth.node.api.Action$ActionBuilder", + "org.forgerock.openam.auth.node.api.NodeState", + "org.forgerock.openam.auth.node.api.SuspendedTextOutputCallback", + "org.forgerock.openam.auth.nodes.IdentityProvider", + "org.forgerock.openam.auth.nodes.InjectorHolder", + "org.forgerock.openam.authentication.callbacks.AbstractValidatedCallback", + "org.forgerock.openam.authentication.callbacks.AttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.BooleanAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.ConsentMappingCallback", + "org.forgerock.openam.authentication.callbacks.DeviceProfileCallback", + "org.forgerock.openam.authentication.callbacks.IdPCallback", + "org.forgerock.openam.authentication.callbacks.KbaCreateCallback", + "org.forgerock.openam.authentication.callbacks.NumberAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.PollingWaitCallback", + "org.forgerock.openam.authentication.callbacks.SelectIdPCallback", + "org.forgerock.openam.authentication.callbacks.StringAttributeInputCallback", + "org.forgerock.openam.authentication.callbacks.TermsAndConditionsCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedPasswordCallback", + "org.forgerock.openam.authentication.callbacks.ValidatedUsernameCallback", + "org.forgerock.openam.authentication.modules.scripted.*", + "org.forgerock.openam.core.rest.authn.callbackhandlers.*", + "org.forgerock.openam.core.rest.devices.deviceprint.DeviceIdDao", + "org.forgerock.openam.core.rest.devices.profile.DeviceProfilesDao", + "org.forgerock.openam.oauth2.OpenAMAccessToken", + "org.forgerock.openam.oauth2.token.grantset.Authorization$ModifiedAccessToken", + "org.forgerock.openam.oauth2.token.macaroon.MacaroonAccessToken", + "org.forgerock.openam.oauth2.token.stateless.StatelessAccessToken", + "org.forgerock.openam.scripting.api.PrefixedScriptPropertyResolver", + "org.forgerock.openam.scripting.api.ScriptedIdentity", + "org.forgerock.openam.scripting.api.ScriptedSession", + "org.forgerock.openam.scripting.api.http.GroovyHttpClient", + "org.forgerock.openam.scripting.api.http.JavaScriptHttpClient", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentity", + "org.forgerock.openam.scripting.api.identity.ScriptedIdentityRepository", + "org.forgerock.openam.scripting.api.secrets.ScriptedSecrets", + "org.forgerock.openam.scripting.api.secrets.Secret", + "org.forgerock.openam.scripting.idrepo.ScriptIdentityRepository", + "org.forgerock.openam.shared.security.ThreadLocalSecureRandom", + "org.forgerock.openidconnect.Claim", + "org.forgerock.openidconnect.OpenIdConnectToken", + "org.forgerock.openidconnect.ssoprovider.OpenIdConnectSSOToken", + "org.forgerock.secrets.SecretBuilder", + "org.forgerock.secrets.keys.SigningKey", + "org.forgerock.secrets.keys.VerificationKey", + "org.forgerock.util.encode.Base64", + "org.forgerock.util.encode.Base64url", + "org.forgerock.util.encode.Hex", + "org.forgerock.util.promise.NeverThrowsException", + "org.forgerock.util.promise.Promise", + "org.forgerock.util.promise.PromiseImpl", + "org.mozilla.javascript.ConsString", + "org.mozilla.javascript.JavaScriptException", + "org.mozilla.javascript.WrappedException", + "sun.security.ec.ECPrivateKeyImpl", + "sun.security.rsa.RSAPrivateCrtKeyImpl", + "sun.security.rsa.RSAPublicKeyImpl", + "sun.security.x509.X500Name", + "sun.security.x509.X509CertImpl", + "java.util.Collections$UnmodifiableRandomAccessList", + "java.util.Collections$UnmodifiableCollection$1", + "org.forgerock.opendj.ldap.Rdn", + "org.forgerock.opendj.ldap.Dn", + "org.forgerock.openam.auth.nodes.VerifyTransactionsHelper" + ] + }, + "isHidden": false, + "languages": [ + "JAVASCRIPT", + "GROOVY" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/serverInformation/information.serverInformation.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/serverInformation/information.serverInformation.json new file mode 100644 index 000000000..32647486f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/serverInformation/information.serverInformation.json @@ -0,0 +1,36 @@ +{ + "serverInformation": { + "*": { + "_id": "*", + "cloudOnlyFeaturesEnabled": true, + "cookieName": "6ac6499e9da2071", + "domains": [ + "openam-frodo-dev.forgeblocks.com" + ], + "fileBasedConfiguration": true, + "forgotPassword": "false", + "forgotUsername": "false", + "kbaEnabled": "false", + "lang": "en-US", + "protectedUserAttributes": [ + "telephoneNumber", + "mail" + ], + "realm": "/", + "referralsEnabled": "false", + "secureCookie": true, + "selfRegistration": "false", + "socialImplementations": [], + "successfulUserRegistrationDestination": "default", + "userIdAttributes": [ + "fr-idm-uuid" + ], + "xuiUserSessionValidationEnabled": true, + "zeroPageLogin": { + "allowedWithoutReferer": true, + "enabled": false, + "refererWhitelist": [] + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/serverVersion/version.serverVersion.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/serverVersion/version.serverVersion.json new file mode 100644 index 000000000..b28f4789a --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/serverVersion/version.serverVersion.json @@ -0,0 +1,11 @@ +{ + "serverVersion": { + "version": { + "_id": "version", + "date": "2025-October-17 10:30", + "fullVersion": "ForgeRock Access Management 8.1.0-SNAPSHOT Build a810c4bdfeb5ac15d4a1cabcb6767429314609f6 (2025-October-17 10:30)", + "revision": "a810c4bdfeb5ac15d4a1cabcb6767429314609f6", + "version": "8.1.0-SNAPSHOT" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/service/CorsService.service.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/service/CorsService.service.json new file mode 100644 index 000000000..d81cc9a43 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/service/CorsService.service.json @@ -0,0 +1,15 @@ +{ + "service": { + "CorsService": { + "_id": "", + "_type": { + "_id": "CorsService", + "collection": false, + "name": "CORS Service" + }, + "enabled": true, + "location": "global", + "nextDescendents": [] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/service/dashboard.service.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/service/dashboard.service.json new file mode 100644 index 000000000..3ad929306 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/service/dashboard.service.json @@ -0,0 +1,60 @@ +{ + "service": { + "dashboard": { + "_id": "", + "_type": { + "_id": "dashboard", + "collection": false, + "name": "Dashboard" + }, + "defaults": { + "assignedDashboard": [] + }, + "location": "global", + "nextDescendents": [ + { + "_id": "Google", + "_type": { + "_id": "instances", + "collection": true, + "name": "instance" + }, + "className": "SAML2ApplicationClass", + "displayName": "Google", + "icfIdentifier": "idm magic 34", + "icon": "images/logos/googleplus.png", + "login": "http://www.google.com", + "name": "Google" + }, + { + "_id": "SalesForce", + "_type": { + "_id": "instances", + "collection": true, + "name": "instance" + }, + "className": "SAML2ApplicationClass", + "displayName": "SalesForce", + "icfIdentifier": "idm magic 12", + "icon": "images/logos/salesforce.png", + "login": "http://www.salesforce.com", + "name": "SalesForce" + }, + { + "_id": "ZenDesk", + "_type": { + "_id": "instances", + "collection": true, + "name": "instance" + }, + "className": "SAML2ApplicationClass", + "displayName": "ZenDesk", + "icfIdentifier": "idm magic 56", + "icon": "images/logos/zendesk.png", + "login": "http://www.ZenDesk.com", + "name": "ZenDesk" + } + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.json new file mode 100644 index 000000000..0ffa7d44e --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.json @@ -0,0 +1,95 @@ +{ + "_id": "sync/extract_script_test", + "consentRequired": false, + "correlationScript": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/correlationScript.script.js", + "type": "text/javascript" + }, + "displayName": "extract_script_test", + "icon": null, + "name": "extract_script_test", + "onCreate": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/onCreate.script.js", + "type": "text/javascript" + }, + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT" + }, + { + "action": "ASYNC", + "situation": "ALL_GONE" + }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS" + }, + { + "action": "ASYNC", + "situation": "CONFIRMED" + }, + { + "action": "ASYNC", + "situation": "FOUND" + }, + { + "action": "ASYNC", + "situation": "FOUND_ALREADY_LINKED" + }, + { + "action": "ASYNC", + "situation": "LINK_ONLY" + }, + { + "action": "ASYNC", + "situation": "MISSING" + }, + { + "action": "ASYNC", + "situation": "SOURCE_IGNORED" + }, + { + "action": "ASYNC", + "situation": "SOURCE_MISSING" + }, + { + "action": "ASYNC", + "situation": "TARGET_IGNORED" + }, + { + "action": "ASYNC", + "situation": "UNASSIGNED" + }, + { + "action": "ASYNC", + "situation": "UNQUALIFIED" + } + ], + "properties": [ + { + "source": "", + "target": "name", + "transform": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/properties.SOURCE.name.transform.script.groovy", + "type": "groovy" + } + } + ], + "result": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/result.script.js", + "type": "text/javascript" + }, + "source": "managed/alpha_user", + "syncAfter": [], + "target": "managed/alpha_group", + "validSource": { + "globals": {}, + "source": "file://extract_script_test.sync.scripts/validSource.script.js", + "type": "text/javascript" + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/correlationScript.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/correlationScript.script.js new file mode 100644 index 000000000..b6152bc88 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/correlationScript.script.js @@ -0,0 +1 @@ +//extract script test UPDATED CORRELATION QUERY diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/onCreate.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/onCreate.script.js new file mode 100644 index 000000000..60da68e48 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/onCreate.script.js @@ -0,0 +1 @@ +//test UPDATED ONCREATED diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/properties.SOURCE.name.transform.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/properties.SOURCE.name.transform.script.groovy new file mode 100644 index 000000000..b4f832f8c --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/properties.SOURCE.name.transform.script.groovy @@ -0,0 +1 @@ +//groovy EXTRACT SCRIPT test UPDATED diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/result.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/result.script.js new file mode 100644 index 000000000..3ce191e0f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/result.script.js @@ -0,0 +1 @@ +//tests UPDATED RESULT SCRIPT diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/validSource.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/validSource.script.js new file mode 100644 index 000000000..84a29b036 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/extract_script_test.sync.scripts/validSource.script.js @@ -0,0 +1 @@ +//extract script test UPDATED VALIDSOURCE diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/sync.idm.json b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/sync.idm.json new file mode 100644 index 000000000..727c06fca --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/global/sync/sync.idm.json @@ -0,0 +1,10 @@ +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + "file://extract_script_test.sync.json" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/iPlanetAMWebAgentService.applicationTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/iPlanetAMWebAgentService.applicationTypes.json new file mode 100644 index 000000000..4cfb431a6 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/iPlanetAMWebAgentService.applicationTypes.json @@ -0,0 +1,21 @@ +{ + "applicationTypes": { + "iPlanetAMWebAgentService": { + "_id": "iPlanetAMWebAgentService", + "actions": { + "DELETE": true, + "GET": true, + "HEAD": true, + "OPTIONS": true, + "PATCH": true, + "POST": true, + "PUT": true + }, + "applicationClassName": "com.sun.identity.entitlement.Application", + "name": "iPlanetAMWebAgentService", + "resourceComparator": "com.sun.identity.entitlement.URLResourceName", + "saveIndex": "org.forgerock.openam.entitlement.indextree.TreeSaveIndex", + "searchIndex": "org.forgerock.openam.entitlement.indextree.TreeSearchIndex" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/sunAMDelegationService.applicationTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/sunAMDelegationService.applicationTypes.json new file mode 100644 index 000000000..81983ac8d --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/sunAMDelegationService.applicationTypes.json @@ -0,0 +1,17 @@ +{ + "applicationTypes": { + "sunAMDelegationService": { + "_id": "sunAMDelegationService", + "actions": { + "DELEGATE": true, + "MODIFY": true, + "READ": true + }, + "applicationClassName": "com.sun.identity.entitlement.Application", + "name": "sunAMDelegationService", + "resourceComparator": "com.sun.identity.entitlement.RegExResourceName", + "saveIndex": "com.sun.identity.entitlement.opensso.DelegationResourceNameIndexGenerator", + "searchIndex": "com.sun.identity.entitlement.opensso.DelegationResourceNameSplitter" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/umaApplicationType.applicationTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/umaApplicationType.applicationTypes.json new file mode 100644 index 000000000..fc804fd08 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/applicationTypes/umaApplicationType.applicationTypes.json @@ -0,0 +1,13 @@ +{ + "applicationTypes": { + "umaApplicationType": { + "_id": "umaApplicationType", + "actions": {}, + "applicationClassName": "com.sun.identity.entitlement.Application", + "name": "umaApplicationType", + "resourceComparator": "org.forgerock.openam.uma.UmaPolicyResourceMatcher", + "saveIndex": "org.forgerock.openam.uma.UmaPolicySaveIndex", + "searchIndex": "org.forgerock.openam.uma.UmaPolicySearchIndex" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authentication/root-alpha.authentication.settings.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authentication/root-alpha.authentication.settings.json new file mode 100644 index 000000000..b41693a04 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authentication/root-alpha.authentication.settings.json @@ -0,0 +1,69 @@ +{ + "authentication": { + "_id": "", + "_type": { + "_id": "EMPTY", + "collection": false, + "name": "Core" + }, + "accountlockout": { + "lockoutDuration": 0, + "lockoutDurationMultiplier": 1, + "lockoutWarnUserCount": 0, + "loginFailureCount": 5, + "loginFailureDuration": 300, + "loginFailureLockoutMode": false, + "storeInvalidAttemptsInDataStore": true + }, + "core": { + "adminAuthModule": "Login", + "orgConfig": "Login" + }, + "general": { + "defaultAuthLevel": 0, + "identityType": [ + "agent", + "user" + ], + "locale": "en_US", + "statelessSessionsEnabled": false, + "twoFactorRequired": false, + "userStatusCallbackPlugins": [] + }, + "postauthprocess": { + "loginFailureUrl": [], + "loginPostProcessClass": [], + "loginSuccessUrl": [ + "/enduser/?realm=/alpha" + ], + "userAttributeSessionMapping": [], + "usernameGeneratorClass": "com.sun.identity.authentication.spi.DefaultUserIDGenerator", + "usernameGeneratorEnabled": true + }, + "security": { + "addClearSiteDataHeader": true, + "keyAlias": "test", + "moduleBasedAuthEnabled": false, + "sharedSecret": { + "$string": "&{am.authentication.shared.secret}" + }, + "zeroPageLoginAllowedWithoutReferrer": true, + "zeroPageLoginEnabled": false, + "zeroPageLoginReferrerWhiteList": [] + }, + "trees": { + "authenticationSessionsMaxDuration": 5, + "authenticationSessionsStateManagement": "JWT", + "authenticationSessionsWhitelist": true, + "authenticationTreeCookieHttpOnly": true, + "suspendedAuthenticationTimeout": 5 + }, + "userprofile": { + "aliasAttributeName": [ + "uid" + ], + "defaultRole": [], + "dynamicProfileCreation": "false" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/Federation.authenticationModules.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/Federation.authenticationModules.json new file mode 100644 index 000000000..9ffd5c9d5 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/Federation.authenticationModules.json @@ -0,0 +1,13 @@ +{ + "authenticationModules": { + "Federation": { + "_id": "Federation", + "_type": { + "_id": "federation", + "collection": true, + "name": "Federation" + }, + "authenticationLevel": 0 + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/amster.authenticationModules.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/amster.authenticationModules.json new file mode 100644 index 000000000..1ad59cb90 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/amster.authenticationModules.json @@ -0,0 +1,15 @@ +{ + "authenticationModules": { + "amster": { + "_id": "amster", + "_type": { + "_id": "amster", + "collection": true, + "name": "ForgeRock Amster" + }, + "authenticationLevel": 0, + "authorizedKeys": "/home/forgerock/openam/security/keys/amster/authorized_keys", + "enabled": true + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/datastore.authenticationModules.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/datastore.authenticationModules.json new file mode 100644 index 000000000..d7e97d61f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/datastore.authenticationModules.json @@ -0,0 +1,13 @@ +{ + "authenticationModules": { + "datastore": { + "_id": "datastore", + "_type": { + "_id": "datastore", + "collection": true, + "name": "Data Store" + }, + "authenticationLevel": 0 + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/federation.authenticationModules.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/federation.authenticationModules.json new file mode 100644 index 000000000..57bce1d99 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/federation.authenticationModules.json @@ -0,0 +1,13 @@ +{ + "authenticationModules": { + "federation": { + "_id": "federation", + "_type": { + "_id": "federation", + "collection": true, + "name": "Federation" + }, + "authenticationLevel": 0 + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/hotp.authenticationModules.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/hotp.authenticationModules.json new file mode 100644 index 000000000..f432ebff2 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/hotp.authenticationModules.json @@ -0,0 +1,27 @@ +{ + "authenticationModules": { + "hotp": { + "_id": "hotp", + "_type": { + "_id": "hotp", + "collection": true, + "name": "HOTP" + }, + "authenticationLevel": 0, + "autoSendOTP": false, + "otpDeliveryMethod": "SMS and E-mail", + "otpLength": "8", + "otpMaxRetry": 3, + "otpValidityDuration": 5, + "smsGatewayClass": "com.sun.identity.authentication.modules.hotp.DefaultSMSGatewayImpl", + "smtpFromAddress": "no-reply@openam.org", + "smtpHostPort": 465, + "smtpHostname": "smtp.gmail.com", + "smtpSslEnabled": "SSL", + "smtpUserPassword": null, + "smtpUsername": "opensso.sun", + "userProfileEmailAttribute": "mail", + "userProfileTelephoneAttribute": "telephoneNumber" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/ldap.authenticationModules.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/ldap.authenticationModules.json new file mode 100644 index 000000000..884d40267 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/ldap.authenticationModules.json @@ -0,0 +1,39 @@ +{ + "authenticationModules": { + "ldap": { + "_id": "ldap", + "_type": { + "_id": "ldap", + "collection": true, + "name": "LDAP" + }, + "authenticationLevel": 0, + "beheraPasswordPolicySupportEnabled": true, + "connectionHeartbeatInterval": 10, + "connectionHeartbeatTimeUnit": "SECONDS", + "minimumPasswordLength": "8", + "openam-auth-ldap-connection-mode": "LDAP", + "operationTimeout": 0, + "primaryLdapServer": [ + "userstore-1.userstore.fr-platform.svc.cluster.local:1389", + "userstore-2.userstore.fr-platform.svc.cluster.local:1389", + "userstore-0.userstore.fr-platform.svc.cluster.local:1389" + ], + "profileAttributeMappings": [], + "returnUserDN": true, + "searchScope": "SUBTREE", + "secondaryLdapServer": [], + "stopLdapbindAfterInmemoryLockedEnabled": false, + "trustAllServerCertificates": false, + "userBindDN": "uid=admin", + "userBindPassword": null, + "userProfileRetrievalAttribute": "uid", + "userSearchAttributes": [ + "uid" + ], + "userSearchStartDN": [ + "ou=identities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/oath.authenticationModules.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/oath.authenticationModules.json new file mode 100644 index 000000000..e12d27857 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/oath.authenticationModules.json @@ -0,0 +1,24 @@ +{ + "authenticationModules": { + "oath": { + "_id": "oath", + "_type": { + "_id": "oath", + "collection": true, + "name": "OATH" + }, + "addChecksum": "False", + "authenticationLevel": 0, + "forgerock-oath-maximum-clock-drift": 0, + "forgerock-oath-sharedsecret-implementation-class": "org.forgerock.openam.authentication.modules.oath.plugins.DefaultSharedSecretProvider", + "hotpWindowSize": 100, + "minimumSecretKeyLength": "32", + "oathAlgorithm": "HOTP", + "oathOtpMaxRetry": 3, + "passwordLength": "6", + "stepsInWindow": 2, + "timeStepSize": 30, + "truncationOffset": -1 + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/sae.authenticationModules.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/sae.authenticationModules.json new file mode 100644 index 000000000..fe57fd499 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/authenticationModules/sae.authenticationModules.json @@ -0,0 +1,13 @@ +{ + "authenticationModules": { + "sae": { + "_id": "sae", + "_type": { + "_id": "sae", + "collection": true, + "name": "SAE" + }, + "authenticationLevel": 0 + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AMIdentityMembership.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AMIdentityMembership.conditionTypes.json new file mode 100644 index 000000000..42eea5a6a --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AMIdentityMembership.conditionTypes.json @@ -0,0 +1,20 @@ +{ + "conditionTypes": { + "AMIdentityMembership": { + "_id": "AMIdentityMembership", + "config": { + "properties": { + "amIdentityName": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "logical": false, + "title": "AMIdentityMembership" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AND.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AND.conditionTypes.json new file mode 100644 index 000000000..21b4be2bd --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AND.conditionTypes.json @@ -0,0 +1,17 @@ +{ + "conditionTypes": { + "AND": { + "_id": "AND", + "config": { + "properties": { + "conditions": { + "type": "array" + } + }, + "type": "object" + }, + "logical": true, + "title": "AND" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthLevel.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthLevel.conditionTypes.json new file mode 100644 index 000000000..adfe33c7b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthLevel.conditionTypes.json @@ -0,0 +1,17 @@ +{ + "conditionTypes": { + "AuthLevel": { + "_id": "AuthLevel", + "config": { + "properties": { + "authLevel": { + "type": "integer" + } + }, + "type": "object" + }, + "logical": false, + "title": "AuthLevel" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthScheme.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthScheme.conditionTypes.json new file mode 100644 index 000000000..95ac511fa --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthScheme.conditionTypes.json @@ -0,0 +1,26 @@ +{ + "conditionTypes": { + "AuthScheme": { + "_id": "AuthScheme", + "config": { + "properties": { + "applicationIdleTimeout": { + "type": "integer" + }, + "applicationName": { + "type": "string" + }, + "authScheme": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "logical": false, + "title": "AuthScheme" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthenticateToRealm.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthenticateToRealm.conditionTypes.json new file mode 100644 index 000000000..ebf57539b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthenticateToRealm.conditionTypes.json @@ -0,0 +1,17 @@ +{ + "conditionTypes": { + "AuthenticateToRealm": { + "_id": "AuthenticateToRealm", + "config": { + "properties": { + "authenticateToRealm": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "AuthenticateToRealm" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthenticateToService.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthenticateToService.conditionTypes.json new file mode 100644 index 000000000..3b090d061 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/AuthenticateToService.conditionTypes.json @@ -0,0 +1,17 @@ +{ + "conditionTypes": { + "AuthenticateToService": { + "_id": "AuthenticateToService", + "config": { + "properties": { + "authenticateToService": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "AuthenticateToService" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IPv4.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IPv4.conditionTypes.json new file mode 100644 index 000000000..390432856 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IPv4.conditionTypes.json @@ -0,0 +1,26 @@ +{ + "conditionTypes": { + "IPv4": { + "_id": "IPv4", + "config": { + "properties": { + "dnsName": { + "items": { + "type": "string" + }, + "type": "array" + }, + "endIp": { + "type": "string" + }, + "startIp": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "IPv4" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IPv6.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IPv6.conditionTypes.json new file mode 100644 index 000000000..a2d115225 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IPv6.conditionTypes.json @@ -0,0 +1,26 @@ +{ + "conditionTypes": { + "IPv6": { + "_id": "IPv6", + "config": { + "properties": { + "dnsName": { + "items": { + "type": "string" + }, + "type": "array" + }, + "endIp": { + "type": "string" + }, + "startIp": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "IPv6" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IdmUser.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IdmUser.conditionTypes.json new file mode 100644 index 000000000..a340c64d1 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/IdmUser.conditionTypes.json @@ -0,0 +1,36 @@ +{ + "conditionTypes": { + "IdmUser": { + "_id": "IdmUser", + "config": { + "properties": { + "comparator": { + "enum": [ + "EQUALS", + "CONTAINS", + "STARTS_WITH", + "ENDS_WITH", + "REGEX" + ], + "type": "string" + }, + "decisionField": { + "type": "string" + }, + "identityResource": { + "type": "string" + }, + "queryField": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "IdmUser" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/LDAPFilter.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/LDAPFilter.conditionTypes.json new file mode 100644 index 000000000..3e4927c34 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/LDAPFilter.conditionTypes.json @@ -0,0 +1,17 @@ +{ + "conditionTypes": { + "LDAPFilter": { + "_id": "LDAPFilter", + "config": { + "properties": { + "ldapFilter": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "LDAPFilter" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/LEAuthLevel.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/LEAuthLevel.conditionTypes.json new file mode 100644 index 000000000..0ecb0a436 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/LEAuthLevel.conditionTypes.json @@ -0,0 +1,17 @@ +{ + "conditionTypes": { + "LEAuthLevel": { + "_id": "LEAuthLevel", + "config": { + "properties": { + "authLevel": { + "type": "integer" + } + }, + "type": "object" + }, + "logical": false, + "title": "LEAuthLevel" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/NOT.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/NOT.conditionTypes.json new file mode 100644 index 000000000..b590ce0fd --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/NOT.conditionTypes.json @@ -0,0 +1,18 @@ +{ + "conditionTypes": { + "NOT": { + "_id": "NOT", + "config": { + "properties": { + "condition": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + }, + "logical": true, + "title": "NOT" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/OAuth2Scope.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/OAuth2Scope.conditionTypes.json new file mode 100644 index 000000000..3ca68fdef --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/OAuth2Scope.conditionTypes.json @@ -0,0 +1,20 @@ +{ + "conditionTypes": { + "OAuth2Scope": { + "_id": "OAuth2Scope", + "config": { + "properties": { + "requiredScopes": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "logical": false, + "title": "OAuth2Scope" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/OR.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/OR.conditionTypes.json new file mode 100644 index 000000000..e695c3884 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/OR.conditionTypes.json @@ -0,0 +1,17 @@ +{ + "conditionTypes": { + "OR": { + "_id": "OR", + "config": { + "properties": { + "conditions": { + "type": "array" + } + }, + "type": "object" + }, + "logical": true, + "title": "OR" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Policy.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Policy.conditionTypes.json new file mode 100644 index 000000000..abae26163 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Policy.conditionTypes.json @@ -0,0 +1,20 @@ +{ + "conditionTypes": { + "Policy": { + "_id": "Policy", + "config": { + "properties": { + "className": { + "type": "string" + }, + "properties": { + "type": "object" + } + }, + "type": "object" + }, + "logical": false, + "title": "Policy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/ResourceEnvIP.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/ResourceEnvIP.conditionTypes.json new file mode 100644 index 000000000..cf397d375 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/ResourceEnvIP.conditionTypes.json @@ -0,0 +1,20 @@ +{ + "conditionTypes": { + "ResourceEnvIP": { + "_id": "ResourceEnvIP", + "config": { + "properties": { + "resourceEnvIPConditionValue": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "logical": false, + "title": "ResourceEnvIP" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Script.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Script.conditionTypes.json new file mode 100644 index 000000000..a761e9268 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Script.conditionTypes.json @@ -0,0 +1,17 @@ +{ + "conditionTypes": { + "Script": { + "_id": "Script", + "config": { + "properties": { + "scriptId": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "Script" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Session.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Session.conditionTypes.json new file mode 100644 index 000000000..e252719d8 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Session.conditionTypes.json @@ -0,0 +1,21 @@ +{ + "conditionTypes": { + "Session": { + "_id": "Session", + "config": { + "properties": { + "maxSessionTime": { + "type": "integer" + }, + "terminateSession": { + "required": true, + "type": "boolean" + } + }, + "type": "object" + }, + "logical": false, + "title": "Session" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/SessionProperty.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/SessionProperty.conditionTypes.json new file mode 100644 index 000000000..21751a42e --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/SessionProperty.conditionTypes.json @@ -0,0 +1,21 @@ +{ + "conditionTypes": { + "SessionProperty": { + "_id": "SessionProperty", + "config": { + "properties": { + "ignoreValueCase": { + "required": true, + "type": "boolean" + }, + "properties": { + "type": "object" + } + }, + "type": "object" + }, + "logical": false, + "title": "SessionProperty" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/SimpleTime.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/SimpleTime.conditionTypes.json new file mode 100644 index 000000000..6290d3337 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/SimpleTime.conditionTypes.json @@ -0,0 +1,35 @@ +{ + "conditionTypes": { + "SimpleTime": { + "_id": "SimpleTime", + "config": { + "properties": { + "endDate": { + "type": "string" + }, + "endDay": { + "type": "string" + }, + "endTime": { + "type": "string" + }, + "enforcementTimeZone": { + "type": "string" + }, + "startDate": { + "type": "string" + }, + "startDay": { + "type": "string" + }, + "startTime": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "SimpleTime" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Transaction.conditionTypes.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Transaction.conditionTypes.json new file mode 100644 index 000000000..4a269b680 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/conditionTypes/Transaction.conditionTypes.json @@ -0,0 +1,27 @@ +{ + "conditionTypes": { + "Transaction": { + "_id": "Transaction", + "config": { + "properties": { + "authenticationStrategy": { + "enum": [ + "AuthenticateToServiceConditionAdvice", + "AuthenticateToRealmConditionAdvice", + "AuthenticateToTreeConditionAdvice", + "AuthSchemeConditionAdvice", + "AuthLevelConditionAdvice" + ], + "type": "string" + }, + "strategySpecifier": { + "type": "string" + } + }, + "type": "object" + }, + "logical": false, + "title": "Transaction" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/decisionCombiners/DenyOverride.decisionCombiners.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/decisionCombiners/DenyOverride.decisionCombiners.json new file mode 100644 index 000000000..a83167550 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/decisionCombiners/DenyOverride.decisionCombiners.json @@ -0,0 +1,8 @@ +{ + "decisionCombiners": { + "DenyOverride": { + "_id": "DenyOverride", + "title": "DenyOverride" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Agent.journey.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Agent.journey.json new file mode 100644 index 000000000..d0b506055 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Agent.journey.json @@ -0,0 +1,181 @@ +{ + "trees": { + "Agent": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "2eaad2f9-5c4b-405f-bf3f-1e99bdc0d018": { + "_id": "2eaad2f9-5c4b-405f-bf3f-1e99bdc0d018", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedUsernameNode", + "collection": true, + "name": "Platform Username", + "version": "1.0" + }, + "usernameAttribute": "userName", + "validateInput": false + }, + "6072842f-5f7c-4b62-8ae2-4f18a5701ba4": { + "_id": "6072842f-5f7c-4b62-8ae2-4f18a5701ba4", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0" + }, + "passwordAttribute": "password", + "validateInput": false + } + }, + "nodes": { + "51e2cd24-cf1f-4313-8af0-35ea9e04d2fe": { + "_id": "51e2cd24-cf1f-4313-8af0-35ea9e04d2fe", + "_outcomes": [ + { + "displayName": "Has Credentials", + "id": "true" + }, + { + "displayName": "No Credentials", + "id": "false" + } + ], + "_type": { + "_id": "ZeroPageLoginNode", + "collection": true, + "name": "Zero Page Login Collector", + "version": "1.0" + }, + "allowWithoutReferer": true, + "passwordHeader": "X-OpenAM-Password", + "referrerWhiteList": [], + "usernameHeader": "X-OpenAM-Username" + }, + "6736a00a-fc65-438e-b4ea-23f66b4a8739": { + "_id": "6736a00a-fc65-438e-b4ea-23f66b4a8739", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "AgentDataStoreDecisionNode", + "collection": true, + "name": "Agent Data Store Decision", + "version": "1.0" + } + }, + "cbd1f1af-eb0a-4274-a762-adacf04c7080": { + "_id": "cbd1f1af-eb0a-4274-a762-adacf04c7080", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "2eaad2f9-5c4b-405f-bf3f-1e99bdc0d018", + "displayName": "Platform Username", + "nodeType": "ValidatedUsernameNode" + }, + { + "_id": "6072842f-5f7c-4b62-8ae2-4f18a5701ba4", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode" + } + ], + "pageDescription": {}, + "pageHeader": {} + } + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "Agent", + "description": "CAUTION: PingAM Agent and PingGateway profiles require an Agent journey. Don't change this configuration.", + "enabled": true, + "entryNodeId": "51e2cd24-cf1f-4313-8af0-35ea9e04d2fe", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "51e2cd24-cf1f-4313-8af0-35ea9e04d2fe": { + "connections": { + "false": "cbd1f1af-eb0a-4274-a762-adacf04c7080", + "true": "6736a00a-fc65-438e-b4ea-23f66b4a8739" + }, + "displayName": "Zero Page Login Collector", + "nodeType": "ZeroPageLoginNode", + "x": 163, + "y": 225 + }, + "6736a00a-fc65-438e-b4ea-23f66b4a8739": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0" + }, + "displayName": "Agent Data Store Decision", + "nodeType": "AgentDataStoreDecisionNode", + "x": 762, + "y": 243 + }, + "cbd1f1af-eb0a-4274-a762-adacf04c7080": { + "connections": { + "outcome": "6736a00a-fc65-438e-b4ea-23f66b4a8739" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 477, + "y": 324 + } + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1065, + "y": 206 + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 1064, + "y": 394 + }, + "startNode": { + "x": 50, + "y": 250 + } + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "[\"Authentication\"]" + } + }, + "variable": {} + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ForgottenUsername.journey.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ForgottenUsername.journey.json new file mode 100644 index 000000000..2510d389e --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ForgottenUsername.journey.json @@ -0,0 +1,198 @@ +{ + "trees": { + "ForgottenUsername": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "9f1e8d94-4922-481b-9e14-212b66548900": { + "_id": "9f1e8d94-4922-481b-9e14-212b66548900", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "AttributeCollectorNode", + "collection": true, + "name": "Attribute Collector", + "version": "1.0" + }, + "attributesToCollect": [ + "mail" + ], + "identityAttribute": "mail", + "required": true, + "validateInputs": false + } + }, + "nodes": { + "5e2a7c95-94af-4b23-8724-deb13853726a": { + "_id": "5e2a7c95-94af-4b23-8724-deb13853726a", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "9f1e8d94-4922-481b-9e14-212b66548900", + "displayName": "Attribute Collector", + "nodeType": "AttributeCollectorNode" + } + ], + "pageDescription": { + "en": "Enter your email address or Sign in" + }, + "pageHeader": { + "en": "Forgotten Username" + } + }, + "b93ce36e-1976-4610-b24f-8d6760b5463b": { + "_id": "b93ce36e-1976-4610-b24f-8d6760b5463b", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "InnerTreeEvaluatorNode", + "collection": true, + "name": "Inner Tree Evaluator", + "version": "1.0" + }, + "displayErrorOutcome": false, + "tree": "Login" + }, + "bf9ea8d5-9802-4f26-9664-a21840faac23": { + "_id": "bf9ea8d5-9802-4f26-9664-a21840faac23", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "IdentifyExistingUserNode", + "collection": true, + "name": "Identify Existing User", + "version": "1.0" + }, + "identifier": "userName", + "identityAttribute": "mail" + }, + "d9a79f01-2ce3-4be2-a28a-975f35c3c8ca": { + "_id": "d9a79f01-2ce3-4be2-a28a-975f35c3c8ca", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "EmailSuspendNode", + "collection": true, + "name": "Email Suspend Node", + "version": "1.0" + }, + "emailAttribute": "mail", + "emailSuspendMessage": { + "en": "An email has been sent to the address you entered. Click the link in that email to proceed." + }, + "emailTemplateName": "forgottenUsername", + "identityAttribute": "mail", + "objectLookup": true + } + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "ForgottenUsername", + "description": "Forgotten Username Tree", + "enabled": true, + "entryNodeId": "5e2a7c95-94af-4b23-8724-deb13853726a", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "5e2a7c95-94af-4b23-8724-deb13853726a": { + "connections": { + "outcome": "bf9ea8d5-9802-4f26-9664-a21840faac23" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 139, + "y": 146 + }, + "b93ce36e-1976-4610-b24f-8d6760b5463b": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0" + }, + "displayName": "Inner Tree Evaluator", + "nodeType": "InnerTreeEvaluatorNode", + "x": 767, + "y": 188 + }, + "bf9ea8d5-9802-4f26-9664-a21840faac23": { + "connections": { + "false": "d9a79f01-2ce3-4be2-a28a-975f35c3c8ca", + "true": "d9a79f01-2ce3-4be2-a28a-975f35c3c8ca" + }, + "displayName": "Identify Existing User", + "nodeType": "IdentifyExistingUserNode", + "x": 324, + "y": 152 + }, + "d9a79f01-2ce3-4be2-a28a-975f35c3c8ca": { + "connections": { + "outcome": "b93ce36e-1976-4610-b24f-8d6760b5463b" + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "x": 563, + "y": 193 + } + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 970, + "y": 149 + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 982, + "y": 252 + }, + "startNode": { + "x": 50, + "y": 25 + } + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "[\"Username Reset\"]" + } + }, + "variable": {} + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Login.journey.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Login.journey.json new file mode 100644 index 000000000..b091456b1 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Login.journey.json @@ -0,0 +1,282 @@ +{ + "trees": { + "Login": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "0c80c39b-4813-4e67-b4fb-5a0bba85f994": { + "_id": "0c80c39b-4813-4e67-b4fb-5a0bba85f994", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0" + }, + "passwordAttribute": "password", + "validateInput": false + }, + "7354982f-57b6-4b04-9ddc-f1dd1e1e07d0": { + "_id": "7354982f-57b6-4b04-9ddc-f1dd1e1e07d0", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedUsernameNode", + "collection": true, + "name": "Platform Username", + "version": "1.0" + }, + "usernameAttribute": "userName", + "validateInput": false + } + }, + "nodes": { + "2119f332-0f69-4088-a7a1-6582bf0f2001": { + "_id": "2119f332-0f69-4088-a7a1-6582bf0f2001", + "_outcomes": [ + { + "displayName": "Retry", + "id": "Retry" + }, + { + "displayName": "Reject", + "id": "Reject" + } + ], + "_type": { + "_id": "RetryLimitDecisionNode", + "collection": true, + "name": "Retry Limit Decision", + "version": "1.0" + }, + "incrementUserAttributeOnFailure": true, + "retryLimit": 5 + }, + "33b24514-3e50-4180-8f08-ab6f4e51b07e": { + "_id": "33b24514-3e50-4180-8f08-ab6f4e51b07e", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "InnerTreeEvaluatorNode", + "collection": true, + "name": "Inner Tree Evaluator", + "version": "1.0" + }, + "displayErrorOutcome": false, + "tree": "ProgressiveProfile" + }, + "51e8c4c1-3509-4635-90e6-d2cc31c4a6a5": { + "_id": "51e8c4c1-3509-4635-90e6-d2cc31c4a6a5", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "AccountLockoutNode", + "collection": true, + "name": "Account Lockout", + "version": "1.0" + }, + "lockAction": "LOCK" + }, + "7f0c2aee-8c74-4d02-82a6-9d4ed9d11708": { + "_id": "7f0c2aee-8c74-4d02-82a6-9d4ed9d11708", + "_outcomes": [ + { + "displayName": "True", + "id": "TRUE" + }, + { + "displayName": "False", + "id": "FALSE" + }, + { + "displayName": "Locked", + "id": "LOCKED" + }, + { + "displayName": "Cancelled", + "id": "CANCELLED" + }, + { + "displayName": "Expired", + "id": "EXPIRED" + } + ], + "_type": { + "_id": "IdentityStoreDecisionNode", + "collection": true, + "name": "Identity Store Decision", + "version": "1.0" + }, + "minimumPasswordLength": 8, + "mixedCaseForPasswordChangeMessages": false, + "useUniversalIdForUsername": false + }, + "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8": { + "_id": "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "7354982f-57b6-4b04-9ddc-f1dd1e1e07d0", + "displayName": "Platform Username", + "nodeType": "ValidatedUsernameNode" + }, + { + "_id": "0c80c39b-4813-4e67-b4fb-5a0bba85f994", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode" + } + ], + "pageDescription": { + "en": "New here? Create an account
Forgot username? Forgot password?" + }, + "pageHeader": { + "en": "Sign In" + } + }, + "bba3e0d8-8525-4e82-bf48-ac17f7988917": { + "_id": "bba3e0d8-8525-4e82-bf48-ac17f7988917", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "IncrementLoginCountNode", + "collection": true, + "name": "Increment Login Count", + "version": "1.0" + }, + "identityAttribute": "userName" + } + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "Login", + "description": "Platform Login Tree", + "enabled": true, + "entryNodeId": "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "2119f332-0f69-4088-a7a1-6582bf0f2001": { + "connections": { + "Reject": "51e8c4c1-3509-4635-90e6-d2cc31c4a6a5", + "Retry": "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8" + }, + "displayName": "Retry Limit Decision", + "nodeType": "RetryLimitDecisionNode", + "x": 612, + "y": 105.015625 + }, + "33b24514-3e50-4180-8f08-ab6f4e51b07e": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0" + }, + "displayName": "Inner Tree Evaluator", + "nodeType": "InnerTreeEvaluatorNode", + "x": 827, + "y": 13 + }, + "51e8c4c1-3509-4635-90e6-d2cc31c4a6a5": { + "connections": { + "outcome": "e301438c-0bd0-429c-ab0c-66126501069a" + }, + "displayName": "Account Lockout", + "nodeType": "AccountLockoutNode", + "x": 836, + "y": 184.015625 + }, + "7f0c2aee-8c74-4d02-82a6-9d4ed9d11708": { + "connections": { + "CANCELLED": "e301438c-0bd0-429c-ab0c-66126501069a", + "EXPIRED": "e301438c-0bd0-429c-ab0c-66126501069a", + "FALSE": "2119f332-0f69-4088-a7a1-6582bf0f2001", + "LOCKED": "e301438c-0bd0-429c-ab0c-66126501069a", + "TRUE": "bba3e0d8-8525-4e82-bf48-ac17f7988917" + }, + "displayName": "Identity Store Decision", + "nodeType": "IdentityStoreDecisionNode", + "x": 352, + "y": 40.015625 + }, + "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8": { + "connections": { + "outcome": "7f0c2aee-8c74-4d02-82a6-9d4ed9d11708" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 136, + "y": 59 + }, + "bba3e0d8-8525-4e82-bf48-ac17f7988917": { + "connections": { + "outcome": "33b24514-3e50-4180-8f08-ab6f4e51b07e" + }, + "displayName": "Increment Login Count", + "nodeType": "IncrementLoginCountNode", + "x": 579, + "y": 34 + } + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1073, + "y": 30 + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 761, + "y": 401 + }, + "startNode": { + "x": 50, + "y": 25 + } + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "[\"Authentication\"]" + } + }, + "variable": {} + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ProgressiveProfile.journey.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ProgressiveProfile.journey.json new file mode 100644 index 000000000..0b052ecf1 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ProgressiveProfile.journey.json @@ -0,0 +1,200 @@ +{ + "trees": { + "ProgressiveProfile": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "0a042e10-b22e-4e02-86c4-65e26e775f7a": { + "_id": "0a042e10-b22e-4e02-86c4-65e26e775f7a", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "AttributeCollectorNode", + "collection": true, + "name": "Attribute Collector", + "version": "1.0" + }, + "attributesToCollect": [ + "preferences/updates", + "preferences/marketing" + ], + "identityAttribute": "userName", + "required": false, + "validateInputs": false + } + }, + "nodes": { + "423a959a-a1b9-498a-b0f7-596b6b6e775a": { + "_id": "423a959a-a1b9-498a-b0f7-596b6b6e775a", + "_outcomes": [ + { + "displayName": "Patched", + "id": "PATCHED" + }, + { + "displayName": "Failed", + "id": "FAILURE" + } + ], + "_type": { + "_id": "PatchObjectNode", + "collection": true, + "name": "Patch Object", + "version": "1.0" + }, + "identityAttribute": "userName", + "identityResource": "managed/alpha_user", + "ignoredFields": [], + "patchAsObject": false + }, + "8afdaec3-275e-4301-bb53-34f03e6a4b29": { + "_id": "8afdaec3-275e-4301-bb53-34f03e6a4b29", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "LoginCountDecisionNode", + "collection": true, + "name": "Login Count Decision", + "version": "1.0" + }, + "amount": 3, + "identityAttribute": "userName", + "interval": "AT" + }, + "a1f45b44-5bf7-4c57-aa3f-75c619c7db8e": { + "_id": "a1f45b44-5bf7-4c57-aa3f-75c619c7db8e", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "QueryFilterDecisionNode", + "collection": true, + "name": "Query Filter Decision", + "version": "1.0" + }, + "identityAttribute": "userName", + "queryFilter": "!(/preferences pr) or /preferences/marketing eq false or /preferences/updates eq false" + }, + "a5aecad8-854a-4ed5-b719-ff6c90e858c0": { + "_id": "a5aecad8-854a-4ed5-b719-ff6c90e858c0", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "0a042e10-b22e-4e02-86c4-65e26e775f7a", + "displayName": "Attribute Collector", + "nodeType": "AttributeCollectorNode" + } + ], + "pageDescription": {}, + "pageHeader": { + "en": "Please select your preferences" + } + } + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "ProgressiveProfile", + "description": "Prompt for missing preferences on 3rd login", + "enabled": true, + "entryNodeId": "8afdaec3-275e-4301-bb53-34f03e6a4b29", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "423a959a-a1b9-498a-b0f7-596b6b6e775a": { + "connections": { + "FAILURE": "e301438c-0bd0-429c-ab0c-66126501069a", + "PATCHED": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0" + }, + "displayName": "Patch Object", + "nodeType": "PatchObjectNode", + "x": 766, + "y": 36 + }, + "8afdaec3-275e-4301-bb53-34f03e6a4b29": { + "connections": { + "false": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + "true": "a1f45b44-5bf7-4c57-aa3f-75c619c7db8e" + }, + "displayName": "Login Count Decision", + "nodeType": "LoginCountDecisionNode", + "x": 152, + "y": 36 + }, + "a1f45b44-5bf7-4c57-aa3f-75c619c7db8e": { + "connections": { + "false": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + "true": "a5aecad8-854a-4ed5-b719-ff6c90e858c0" + }, + "displayName": "Query Filter Decision", + "nodeType": "QueryFilterDecisionNode", + "x": 357, + "y": 36 + }, + "a5aecad8-854a-4ed5-b719-ff6c90e858c0": { + "connections": { + "outcome": "423a959a-a1b9-498a-b0f7-596b6b6e775a" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 555, + "y": 20 + } + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 802, + "y": 312 + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 919, + "y": 171 + }, + "startNode": { + "x": 50, + "y": 58.5 + } + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "[\"Progressive Profile\"]" + } + }, + "variable": {} + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Registration.journey.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Registration.journey.json new file mode 100644 index 000000000..c5c31dd33 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/Registration.journey.json @@ -0,0 +1,283 @@ +{ + "trees": { + "Registration": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "120c69d3-90b4-4ad4-b7af-380e8b119340": { + "_id": "120c69d3-90b4-4ad4-b7af-380e8b119340", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "KbaCreateNode", + "collection": true, + "name": "KBA Definition", + "version": "1.0" + }, + "allowUserDefinedQuestions": true, + "message": { + "en": "Select a security question" + } + }, + "3d8709a1-f09f-4d1f-8094-2850e472c1db": { + "_id": "3d8709a1-f09f-4d1f-8094-2850e472c1db", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0" + }, + "passwordAttribute": "password", + "validateInput": true + }, + "7fcaf48e-a754-4959-858b-05b2933b825f": { + "_id": "7fcaf48e-a754-4959-858b-05b2933b825f", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedUsernameNode", + "collection": true, + "name": "Platform Username", + "version": "1.0" + }, + "usernameAttribute": "userName", + "validateInput": true + }, + "b4a0e915-c15d-4b83-9c9d-18347d645976": { + "_id": "b4a0e915-c15d-4b83-9c9d-18347d645976", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "AcceptTermsAndConditionsNode", + "collection": true, + "name": "Accept Terms and Conditions", + "version": "1.0" + } + }, + "d3ce2036-1523-4ce8-b1a2-895a2a036667": { + "_id": "d3ce2036-1523-4ce8-b1a2-895a2a036667", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "AttributeCollectorNode", + "collection": true, + "name": "Attribute Collector", + "version": "1.0" + }, + "attributesToCollect": [ + "givenName", + "sn", + "mail", + "preferences/marketing", + "preferences/updates" + ], + "identityAttribute": "userName", + "required": true, + "validateInputs": true + } + }, + "nodes": { + "0c091c49-f3af-48fb-ac6f-07fba0499dd6": { + "_id": "0c091c49-f3af-48fb-ac6f-07fba0499dd6", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "7fcaf48e-a754-4959-858b-05b2933b825f", + "displayName": "Platform Username", + "nodeType": "ValidatedUsernameNode" + }, + { + "_id": "d3ce2036-1523-4ce8-b1a2-895a2a036667", + "displayName": "Attribute Collector", + "nodeType": "AttributeCollectorNode" + }, + { + "_id": "3d8709a1-f09f-4d1f-8094-2850e472c1db", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode" + }, + { + "_id": "120c69d3-90b4-4ad4-b7af-380e8b119340", + "displayName": "KBA Definition", + "nodeType": "KbaCreateNode" + }, + { + "_id": "b4a0e915-c15d-4b83-9c9d-18347d645976", + "displayName": "Accept Terms and Conditions", + "nodeType": "AcceptTermsAndConditionsNode" + } + ], + "pageDescription": { + "en": "Signing up is fast and easy.
Already have an account? Sign In" + }, + "pageHeader": { + "en": "Sign Up" + } + }, + "466f8b54-07fb-4e31-a11d-a6842618cc37": { + "_id": "466f8b54-07fb-4e31-a11d-a6842618cc37", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "EmailSuspendNode", + "collection": true, + "name": "Email Suspend Node", + "version": "1.0" + }, + "emailAttribute": "mail", + "emailSuspendMessage": { + "en": "An email has been sent to the address you entered. Click the link in that email to proceed." + }, + "emailTemplateName": "registration", + "identityAttribute": "userName", + "objectLookup": false + }, + "97a15eb2-a015-4b6d-81a0-be78c3aa1a3b": { + "_id": "97a15eb2-a015-4b6d-81a0-be78c3aa1a3b", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "IncrementLoginCountNode", + "collection": true, + "name": "Increment Login Count", + "version": "1.0" + }, + "identityAttribute": "userName" + }, + "ad5dcbb3-7335-49b7-b3e7-7d850bb88237": { + "_id": "ad5dcbb3-7335-49b7-b3e7-7d850bb88237", + "_outcomes": [ + { + "displayName": "Created", + "id": "CREATED" + }, + { + "displayName": "Failed", + "id": "FAILURE" + } + ], + "_type": { + "_id": "CreateObjectNode", + "collection": true, + "name": "Create Object", + "version": "1.0" + }, + "identityResource": "managed/alpha_user" + } + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "Registration", + "description": "Platform Registration Tree", + "enabled": true, + "entryNodeId": "0c091c49-f3af-48fb-ac6f-07fba0499dd6", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "0c091c49-f3af-48fb-ac6f-07fba0499dd6": { + "connections": { + "outcome": "466f8b54-07fb-4e31-a11d-a6842618cc37" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 261, + "y": 168 + }, + "466f8b54-07fb-4e31-a11d-a6842618cc37": { + "connections": { + "outcome": "ad5dcbb3-7335-49b7-b3e7-7d850bb88237" + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "x": 484, + "y": 267.015625 + }, + "97a15eb2-a015-4b6d-81a0-be78c3aa1a3b": { + "connections": { + "outcome": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0" + }, + "displayName": "Increment Login Count", + "nodeType": "IncrementLoginCountNode", + "x": 861, + "y": 221 + }, + "ad5dcbb3-7335-49b7-b3e7-7d850bb88237": { + "connections": { + "CREATED": "97a15eb2-a015-4b6d-81a0-be78c3aa1a3b", + "FAILURE": "e301438c-0bd0-429c-ab0c-66126501069a" + }, + "displayName": "Create Object", + "nodeType": "CreateObjectNode", + "x": 717, + "y": 283 + } + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1085, + "y": 248 + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 921, + "y": 370 + }, + "startNode": { + "x": 50, + "y": 25 + } + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "[\"Registration\"]" + } + }, + "variable": {} + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ResetPassword.journey.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ResetPassword.journey.json new file mode 100644 index 000000000..16c8a0d28 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/ResetPassword.journey.json @@ -0,0 +1,254 @@ +{ + "trees": { + "ResetPassword": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "009c19c8-9572-47bb-adb2-1f092c559a43": { + "_id": "009c19c8-9572-47bb-adb2-1f092c559a43", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0" + }, + "passwordAttribute": "password", + "validateInput": true + }, + "276afa7c-a680-4cf4-a5f6-d6c78191f5c9": { + "_id": "276afa7c-a680-4cf4-a5f6-d6c78191f5c9", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "AttributeCollectorNode", + "collection": true, + "name": "Attribute Collector", + "version": "1.0" + }, + "attributesToCollect": [ + "mail" + ], + "identityAttribute": "mail", + "required": true, + "validateInputs": false + } + }, + "nodes": { + "06c97be5-7fdd-4739-aea1-ecc7fe082865": { + "_id": "06c97be5-7fdd-4739-aea1-ecc7fe082865", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "EmailSuspendNode", + "collection": true, + "name": "Email Suspend Node", + "version": "1.0" + }, + "emailAttribute": "mail", + "emailSuspendMessage": { + "en": "An email has been sent to the address you entered. Click the link in that email to proceed." + }, + "emailTemplateName": "resetPassword", + "identityAttribute": "mail", + "objectLookup": true + }, + "21b8ddf3-0203-4ae1-ab05-51cf3a3a707a": { + "_id": "21b8ddf3-0203-4ae1-ab05-51cf3a3a707a", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "IdentifyExistingUserNode", + "collection": true, + "name": "Identify Existing User", + "version": "1.0" + }, + "identifier": "userName", + "identityAttribute": "mail" + }, + "989f0bf8-a328-4217-b82b-5275d79ca8bd": { + "_id": "989f0bf8-a328-4217-b82b-5275d79ca8bd", + "_outcomes": [ + { + "displayName": "Patched", + "id": "PATCHED" + }, + { + "displayName": "Failed", + "id": "FAILURE" + } + ], + "_type": { + "_id": "PatchObjectNode", + "collection": true, + "name": "Patch Object", + "version": "1.0" + }, + "identityAttribute": "mail", + "identityResource": "managed/alpha_user", + "ignoredFields": [], + "patchAsObject": false + }, + "cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b": { + "_id": "cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "276afa7c-a680-4cf4-a5f6-d6c78191f5c9", + "displayName": "Attribute Collector", + "nodeType": "AttributeCollectorNode" + } + ], + "pageDescription": { + "en": "Enter your email address or Sign in" + }, + "pageHeader": { + "en": "Reset Password" + } + }, + "e4c752f9-c625-48c9-9644-a58802fa9e9c": { + "_id": "e4c752f9-c625-48c9-9644-a58802fa9e9c", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "009c19c8-9572-47bb-adb2-1f092c559a43", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode" + } + ], + "pageDescription": { + "en": "Change password" + }, + "pageHeader": { + "en": "Reset Password" + } + } + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "ResetPassword", + "description": "Reset Password Tree", + "enabled": true, + "entryNodeId": "cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "06c97be5-7fdd-4739-aea1-ecc7fe082865": { + "connections": { + "outcome": "e4c752f9-c625-48c9-9644-a58802fa9e9c" + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "x": 453, + "y": 66 + }, + "21b8ddf3-0203-4ae1-ab05-51cf3a3a707a": { + "connections": { + "false": "06c97be5-7fdd-4739-aea1-ecc7fe082865", + "true": "06c97be5-7fdd-4739-aea1-ecc7fe082865" + }, + "displayName": "Identify Existing User", + "nodeType": "IdentifyExistingUserNode", + "x": 271, + "y": 21 + }, + "989f0bf8-a328-4217-b82b-5275d79ca8bd": { + "connections": { + "FAILURE": "e301438c-0bd0-429c-ab0c-66126501069a", + "PATCHED": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0" + }, + "displayName": "Patch Object", + "nodeType": "PatchObjectNode", + "x": 819, + "y": 61 + }, + "cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b": { + "connections": { + "outcome": "21b8ddf3-0203-4ae1-ab05-51cf3a3a707a" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 103, + "y": 50 + }, + "e4c752f9-c625-48c9-9644-a58802fa9e9c": { + "connections": { + "outcome": "989f0bf8-a328-4217-b82b-5275d79ca8bd" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 643, + "y": 50 + } + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 970, + "y": 79 + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 981, + "y": 147 + }, + "startNode": { + "x": 25, + "y": 25 + } + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "[\"Password Reset\"]" + } + }, + "variable": {} + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/UpdatePassword.journey.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/UpdatePassword.journey.json new file mode 100644 index 000000000..4c7d97899 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/journey/UpdatePassword.journey.json @@ -0,0 +1,307 @@ +{ + "trees": { + "UpdatePassword": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "21a99653-a7a7-47ee-b650-f493a84bba09": { + "_id": "21a99653-a7a7-47ee-b650-f493a84bba09", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0" + }, + "passwordAttribute": "password", + "validateInput": true + }, + "fe2962fc-4db3-4066-8624-553649afc438": { + "_id": "fe2962fc-4db3-4066-8624-553649afc438", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0" + }, + "passwordAttribute": "password", + "validateInput": false + } + }, + "nodes": { + "0f0904e6-1da3-4cdb-9abf-0d2545016fab": { + "_id": "0f0904e6-1da3-4cdb-9abf-0d2545016fab", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "AttributePresentDecisionNode", + "collection": true, + "name": "Attribute Present Decision", + "version": "1.0" + }, + "identityAttribute": "userName", + "presentAttribute": "password" + }, + "20237b34-26cb-4a0b-958f-abb422290d42": { + "_id": "20237b34-26cb-4a0b-958f-abb422290d42", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "fe2962fc-4db3-4066-8624-553649afc438", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode" + } + ], + "pageDescription": { + "en": "Enter current password" + }, + "pageHeader": { + "en": "Verify Existing Password" + } + }, + "3990ce1f-cce6-435b-ae1c-f138e89411c1": { + "_id": "3990ce1f-cce6-435b-ae1c-f138e89411c1", + "_outcomes": [ + { + "displayName": "Patched", + "id": "PATCHED" + }, + { + "displayName": "Failed", + "id": "FAILURE" + } + ], + "_type": { + "_id": "PatchObjectNode", + "collection": true, + "name": "Patch Object", + "version": "1.0" + }, + "identityAttribute": "userName", + "identityResource": "managed/alpha_user", + "ignoredFields": [ + "userName" + ], + "patchAsObject": false + }, + "7d1deabe-cd98-49c8-943f-ca12305775f3": { + "_id": "7d1deabe-cd98-49c8-943f-ca12305775f3", + "_outcomes": [ + { + "displayName": "True", + "id": "true" + }, + { + "displayName": "False", + "id": "false" + } + ], + "_type": { + "_id": "DataStoreDecisionNode", + "collection": true, + "name": "Data Store Decision", + "version": "1.0" + } + }, + "a3d97b53-e38a-4b24-aed0-a021050eb744": { + "_id": "a3d97b53-e38a-4b24-aed0-a021050eb744", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "EmailSuspendNode", + "collection": true, + "name": "Email Suspend Node", + "version": "1.0" + }, + "emailAttribute": "mail", + "emailSuspendMessage": { + "en": "An email has been sent to your address, please verify your email address to update your password. Click the link in that email to proceed." + }, + "emailTemplateName": "updatePassword", + "identityAttribute": "userName", + "objectLookup": true + }, + "d018fcd1-4e22-4160-8c41-63bee51c9cb3": { + "_id": "d018fcd1-4e22-4160-8c41-63bee51c9cb3", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0" + }, + "nodes": [ + { + "_id": "21a99653-a7a7-47ee-b650-f493a84bba09", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode" + } + ], + "pageDescription": { + "en": "Enter new password" + }, + "pageHeader": { + "en": "Update Password" + } + }, + "d1b79744-493a-44fe-bc26-7d324a8caa4e": { + "_id": "d1b79744-493a-44fe-bc26-7d324a8caa4e", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome" + } + ], + "_type": { + "_id": "SessionDataNode", + "collection": true, + "name": "Get Session Data", + "version": "1.0" + }, + "sessionDataKey": "UserToken", + "sharedStateKey": "userName" + } + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "UpdatePassword", + "description": "Update password using active session", + "enabled": true, + "entryNodeId": "d1b79744-493a-44fe-bc26-7d324a8caa4e", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "0f0904e6-1da3-4cdb-9abf-0d2545016fab": { + "connections": { + "false": "a3d97b53-e38a-4b24-aed0-a021050eb744", + "true": "20237b34-26cb-4a0b-958f-abb422290d42" + }, + "displayName": "Attribute Present Decision", + "nodeType": "AttributePresentDecisionNode", + "x": 288, + "y": 133 + }, + "20237b34-26cb-4a0b-958f-abb422290d42": { + "connections": { + "outcome": "7d1deabe-cd98-49c8-943f-ca12305775f3" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 526, + "y": 46 + }, + "3990ce1f-cce6-435b-ae1c-f138e89411c1": { + "connections": { + "FAILURE": "e301438c-0bd0-429c-ab0c-66126501069a", + "PATCHED": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0" + }, + "displayName": "Patch Object", + "nodeType": "PatchObjectNode", + "x": 1062, + "y": 189 + }, + "7d1deabe-cd98-49c8-943f-ca12305775f3": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "d018fcd1-4e22-4160-8c41-63bee51c9cb3" + }, + "displayName": "Data Store Decision", + "nodeType": "DataStoreDecisionNode", + "x": 722, + "y": 45 + }, + "a3d97b53-e38a-4b24-aed0-a021050eb744": { + "connections": { + "outcome": "d018fcd1-4e22-4160-8c41-63bee51c9cb3" + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "x": 659, + "y": 223 + }, + "d018fcd1-4e22-4160-8c41-63bee51c9cb3": { + "connections": { + "outcome": "3990ce1f-cce6-435b-ae1c-f138e89411c1" + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "x": 943, + "y": 30 + }, + "d1b79744-493a-44fe-bc26-7d324a8caa4e": { + "connections": { + "outcome": "0f0904e6-1da3-4cdb-9abf-0d2545016fab" + }, + "displayName": "Get Session Data", + "nodeType": "SessionDataNode", + "x": 122, + "y": 129 + } + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1212, + "y": 128 + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 939, + "y": 290 + }, + "startNode": { + "x": 50, + "y": 25 + } + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "[\"Password Reset\"]" + } + }, + "variable": {} + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/oauth2.app/RCSClient.oauth2.app.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/oauth2.app/RCSClient.oauth2.app.json new file mode 100644 index 000000000..4f783be72 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/oauth2.app/RCSClient.oauth2.app.json @@ -0,0 +1,562 @@ +{ + "application": { + "RCSClient": { + "_id": "RCSClient", + "_provider": { + "_id": "", + "_type": { + "_id": "oauth-oidc", + "collection": false, + "name": "OAuth2 Provider" + }, + "advancedOAuth2Config": { + "allowClientCredentialsInTokenRequestQueryParameters": true, + "allowedAudienceValues": [], + "authenticationAttributes": [ + "uid" + ], + "codeVerifierEnforced": "false", + "defaultScopes": [ + "address", + "phone", + "openid", + "profile", + "email" + ], + "displayNameAttribute": "cn", + "expClaimRequiredInRequestObject": false, + "grantTypes": [ + "implicit", + "urn:ietf:params:oauth:grant-type:saml2-bearer", + "refresh_token", + "password", + "client_credentials", + "urn:ietf:params:oauth:grant-type:device_code", + "authorization_code", + "urn:openid:params:grant-type:ciba", + "urn:ietf:params:oauth:grant-type:uma-ticket", + "urn:ietf:params:oauth:grant-type:jwt-bearer" + ], + "hashSalt": "&{am.oidc.client.subject.identifier.hash.salt}", + "includeClientIdClaimInStatelessTokens": true, + "includeSubnameInTokenClaims": true, + "macaroonTokenFormat": "V2", + "maxAgeOfRequestObjectNbfClaim": 0, + "maxDifferenceBetweenRequestObjectNbfAndExp": 0, + "moduleMessageEnabledInPasswordGrant": false, + "nbfClaimRequiredInRequestObject": false, + "parRequestUriLifetime": 90, + "passwordGrantAuthService": "Login", + "persistentClaims": [], + "refreshTokenGracePeriod": 0, + "requestObjectProcessing": "OIDC", + "requirePushedAuthorizationRequests": false, + "responseTypeClasses": [ + "code|org.forgerock.oauth2.core.AuthorizationCodeResponseTypeHandler", + "device_code|org.forgerock.oauth2.core.TokenResponseTypeHandler", + "token|org.forgerock.oauth2.core.TokenResponseTypeHandler", + "id_token|org.forgerock.openidconnect.IdTokenResponseTypeHandler" + ], + "supportedScopes": [ + "email|Your email address", + "openid|", + "address|Your postal address", + "phone|Your telephone number(s)", + "profile|Your personal information", + "fr:idm:*", + "am-introspect-all-tokens" + ], + "supportedSubjectTypes": [ + "public", + "pairwise" + ], + "tlsCertificateBoundAccessTokensEnabled": true, + "tlsCertificateRevocationCheckingEnabled": false, + "tlsClientCertificateHeaderFormat": "BASE64_ENCODED_CERT", + "tokenCompressionEnabled": false, + "tokenEncryptionEnabled": false, + "tokenExchangeClasses": [ + "urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToAccessTokenExchanger", + "urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToIdTokenExchanger", + "urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToIdTokenExchanger", + "urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToAccessTokenExchanger" + ], + "tokenSigningAlgorithm": "HS256", + "tokenValidatorClasses": [ + "urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.OidcIdTokenValidator", + "urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.OAuth2AccessTokenValidator" + ] + }, + "advancedOIDCConfig": { + "alwaysAddClaimsToToken": true, + "amrMappings": {}, + "authorisedIdmDelegationClients": [], + "authorisedOpenIdConnectSSOClients": [], + "claimsParameterSupported": false, + "defaultACR": [], + "idTokenInfoClientAuthenticationEnabled": true, + "includeAllKtyAlgCombinationsInJwksUri": false, + "jwtSigningKidHeaderMappings": {}, + "loaMapping": {}, + "storeOpsTokens": true, + "supportedAuthorizationResponseEncryptionAlgorithms": [ + "ECDH-ES+A256KW", + "ECDH-ES+A192KW", + "RSA-OAEP", + "ECDH-ES+A128KW", + "RSA-OAEP-256", + "A128KW", + "A256KW", + "ECDH-ES", + "dir", + "A192KW" + ], + "supportedAuthorizationResponseEncryptionEnc": [ + "A256GCM", + "A192GCM", + "A128GCM", + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512" + ], + "supportedAuthorizationResponseSigningAlgorithms": [ + "PS384", + "RS384", + "EdDSA", + "ES384", + "HS256", + "HS512", + "ES256", + "RS256", + "HS384", + "ES512", + "PS256", + "PS512", + "RS512" + ], + "supportedRequestParameterEncryptionAlgorithms": [ + "ECDH-ES+A256KW", + "ECDH-ES+A192KW", + "ECDH-ES+A128KW", + "RSA-OAEP", + "RSA-OAEP-256", + "A128KW", + "A256KW", + "ECDH-ES", + "dir", + "A192KW" + ], + "supportedRequestParameterEncryptionEnc": [ + "A256GCM", + "A192GCM", + "A128GCM", + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512" + ], + "supportedRequestParameterSigningAlgorithms": [ + "PS384", + "ES384", + "RS384", + "HS256", + "HS512", + "ES256", + "RS256", + "HS384", + "ES512", + "PS256", + "PS512", + "RS512" + ], + "supportedTokenEndpointAuthenticationSigningAlgorithms": [ + "PS384", + "ES384", + "RS384", + "HS256", + "HS512", + "ES256", + "RS256", + "HS384", + "ES512", + "PS256", + "PS512", + "RS512" + ], + "supportedTokenIntrospectionResponseEncryptionAlgorithms": [ + "ECDH-ES+A256KW", + "ECDH-ES+A192KW", + "RSA-OAEP", + "ECDH-ES+A128KW", + "RSA-OAEP-256", + "A128KW", + "A256KW", + "ECDH-ES", + "dir", + "A192KW" + ], + "supportedTokenIntrospectionResponseEncryptionEnc": [ + "A256GCM", + "A192GCM", + "A128GCM", + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512" + ], + "supportedTokenIntrospectionResponseSigningAlgorithms": [ + "PS384", + "RS384", + "EdDSA", + "ES384", + "HS256", + "HS512", + "ES256", + "RS256", + "HS384", + "ES512", + "PS256", + "PS512", + "RS512" + ], + "supportedUserInfoEncryptionAlgorithms": [ + "ECDH-ES+A256KW", + "ECDH-ES+A192KW", + "RSA-OAEP", + "ECDH-ES+A128KW", + "RSA-OAEP-256", + "A128KW", + "A256KW", + "ECDH-ES", + "dir", + "A192KW" + ], + "supportedUserInfoEncryptionEnc": [ + "A256GCM", + "A192GCM", + "A128GCM", + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512" + ], + "supportedUserInfoSigningAlgorithms": [ + "ES384", + "HS256", + "HS512", + "ES256", + "RS256", + "HS384", + "ES512" + ], + "useForceAuthnForMaxAge": false, + "useForceAuthnForPromptLogin": false + }, + "cibaConfig": { + "cibaAuthReqIdLifetime": 600, + "cibaMinimumPollingInterval": 2, + "supportedCibaSigningAlgorithms": [ + "ES256", + "PS256" + ] + }, + "clientDynamicRegistrationConfig": { + "allowDynamicRegistration": false, + "dynamicClientRegistrationScope": "dynamic_client_registration", + "dynamicClientRegistrationScript": "[Empty]", + "dynamicClientRegistrationSoftwareStatementRequired": false, + "generateRegistrationAccessTokens": true, + "requiredSoftwareStatementAttestedAttributes": [ + "redirect_uris" + ] + }, + "consent": { + "clientsCanSkipConsent": true, + "enableRemoteConsent": false, + "supportedRcsRequestEncryptionAlgorithms": [ + "ECDH-ES+A256KW", + "ECDH-ES+A192KW", + "RSA-OAEP", + "ECDH-ES+A128KW", + "RSA-OAEP-256", + "A128KW", + "A256KW", + "ECDH-ES", + "dir", + "A192KW" + ], + "supportedRcsRequestEncryptionMethods": [ + "A256GCM", + "A192GCM", + "A128GCM", + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512" + ], + "supportedRcsRequestSigningAlgorithms": [ + "PS384", + "ES384", + "RS384", + "HS256", + "HS512", + "ES256", + "RS256", + "HS384", + "ES512", + "PS256", + "PS512", + "RS512" + ], + "supportedRcsResponseEncryptionAlgorithms": [ + "ECDH-ES+A256KW", + "ECDH-ES+A192KW", + "ECDH-ES+A128KW", + "RSA-OAEP", + "RSA-OAEP-256", + "A128KW", + "A256KW", + "ECDH-ES", + "dir", + "A192KW" + ], + "supportedRcsResponseEncryptionMethods": [ + "A256GCM", + "A192GCM", + "A128GCM", + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512" + ], + "supportedRcsResponseSigningAlgorithms": [ + "PS384", + "ES384", + "RS384", + "HS256", + "HS512", + "ES256", + "RS256", + "HS384", + "ES512", + "PS256", + "PS512", + "RS512" + ] + }, + "coreOAuth2Config": { + "accessTokenLifetime": 3600, + "accessTokenMayActScript": "[Empty]", + "codeLifetime": 120, + "issueRefreshToken": true, + "issueRefreshTokenOnRefreshedToken": true, + "macaroonTokensEnabled": false, + "oidcMayActScript": "[Empty]", + "refreshTokenLifetime": 604800, + "scopesPolicySet": "oauth2Scopes", + "statelessTokensEnabled": true, + "usePolicyEngineForScope": false + }, + "coreOIDCConfig": { + "jwtTokenLifetime": 3600, + "oidcDiscoveryEndpointEnabled": true, + "overrideableOIDCClaims": [], + "supportedClaims": [], + "supportedIDTokenEncryptionAlgorithms": [ + "ECDH-ES+A256KW", + "ECDH-ES+A192KW", + "RSA-OAEP", + "ECDH-ES+A128KW", + "RSA-OAEP-256", + "A128KW", + "A256KW", + "ECDH-ES", + "dir", + "A192KW" + ], + "supportedIDTokenEncryptionMethods": [ + "A256GCM", + "A192GCM", + "A128GCM", + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512" + ], + "supportedIDTokenSigningAlgorithms": [ + "PS384", + "ES384", + "RS384", + "HS256", + "HS512", + "ES256", + "RS256", + "HS384", + "ES512", + "PS256", + "PS512", + "RS512" + ] + }, + "deviceCodeConfig": { + "deviceCodeLifetime": 300, + "devicePollInterval": 5, + "deviceUserCodeCharacterSet": "234567ACDEFGHJKLMNPQRSTWXYZabcdefhijkmnopqrstwxyz", + "deviceUserCodeLength": 8, + "realmAllowUnauthorisedAccessToUserCodeForm": false + }, + "pluginsConfig": { + "accessTokenEnricherClass": "org.forgerock.openam.oauth2.OpenAMScopeValidator", + "accessTokenModificationPluginType": "SCRIPTED", + "accessTokenModificationScript": "39c08084-1238-43e8-857f-2e11005eac49", + "accessTokenModifierClass": "org.forgerock.openam.oauth2.OpenAMScopeValidator", + "authorizeEndpointDataProviderClass": "org.forgerock.openam.oauth2.OpenAMScopeValidator", + "authorizeEndpointDataProviderPluginType": "JAVA", + "authorizeEndpointDataProviderScript": "[Empty]", + "evaluateScopeClass": "org.forgerock.openam.oauth2.OpenAMScopeValidator", + "evaluateScopePluginType": "JAVA", + "evaluateScopeScript": "[Empty]", + "oidcClaimsClass": "org.forgerock.openam.oauth2.OpenAMScopeValidator", + "oidcClaimsPluginType": "SCRIPTED", + "oidcClaimsScript": "cf3515f0-8278-4ee3-a530-1bad7424c416", + "userCodeGeneratorClass": "org.forgerock.oauth2.core.plugins.registry.DefaultUserCodeGenerator", + "validateScopeClass": "org.forgerock.openam.oauth2.OpenAMScopeValidator", + "validateScopePluginType": "JAVA", + "validateScopeScript": "[Empty]" + } + }, + "_type": { + "_id": "OAuth2Client", + "collection": true, + "name": "OAuth2 Clients" + }, + "advancedOAuth2ClientConfig": { + "clientUri": [], + "contacts": [], + "customProperties": [], + "descriptions": [], + "grantTypes": [ + "client_credentials" + ], + "introspectionPolicySets": [], + "isConsentImplied": false, + "javascriptOrigins": [], + "logoUri": [], + "mixUpMitigation": false, + "name": [], + "policyUri": [], + "refreshTokenGracePeriod": 0, + "requestUris": [], + "require_pushed_authorization_requests": false, + "responseTypes": [ + "code", + "token", + "id_token", + "code token", + "token id_token", + "code id_token", + "code token id_token", + "device_code", + "device_code id_token" + ], + "sectorIdentifierUri": null, + "softwareIdentity": null, + "softwareVersion": null, + "subjectType": "public", + "tokenEndpointAuthMethod": "client_secret_basic", + "tokenExchangeAuthLevel": 0, + "tosURI": [], + "treeName": "[Empty]", + "updateAccessToken": null + }, + "coreOAuth2ClientConfig": { + "accessTokenLifetime": 0, + "agentgroup": null, + "authorizationCodeLifetime": 0, + "clientName": [], + "clientType": "Confidential", + "defaultScopes": [], + "loopbackInterfaceRedirection": false, + "redirectionUris": [], + "refreshTokenLifetime": 0, + "scopes": [ + "fr:idm:*" + ], + "secretLabelIdentifier": null, + "status": "Active", + "userpassword": null + }, + "coreOpenIDClientConfig": { + "backchannel_logout_session_required": false, + "backchannel_logout_uri": null, + "claims": [], + "clientSessionUri": null, + "defaultAcrValues": [], + "defaultMaxAge": 600, + "defaultMaxAgeEnabled": false, + "jwtTokenLifetime": 0, + "postLogoutRedirectUri": [] + }, + "coreUmaClientConfig": { + "claimsRedirectionUris": [] + }, + "overrideOAuth2ClientConfig": { + "accessTokenMayActScript": "[Empty]", + "accessTokenModificationPluginType": "SCRIPTED", + "accessTokenModificationScript": "c234ba0b-58a1-4cfd-9567-09edde980745", + "accessTokenModifierClass": null, + "authorizeEndpointDataProviderClass": "org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider", + "authorizeEndpointDataProviderPluginType": "PROVIDER", + "authorizeEndpointDataProviderScript": "[Empty]", + "clientsCanSkipConsent": true, + "customLoginUrlTemplate": null, + "enableRemoteConsent": false, + "evaluateScopeClass": "org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator", + "evaluateScopePluginType": "PROVIDER", + "evaluateScopeScript": "[Empty]", + "issueRefreshToken": true, + "issueRefreshTokenOnRefreshedToken": true, + "oidcClaimsClass": null, + "oidcClaimsPluginType": "SCRIPTED", + "oidcClaimsScript": "1f389a3d-21cf-417c-a6d3-42ea620071f0", + "oidcMayActScript": "[Empty]", + "overrideableOIDCClaims": [], + "providerOverridesEnabled": true, + "remoteConsentServiceId": null, + "scopesPolicySet": "oauth2Scopes", + "statelessTokensEnabled": true, + "tokenEncryptionEnabled": false, + "useForceAuthnForMaxAge": false, + "usePolicyEngineForScope": false, + "validateScopeClass": "org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator", + "validateScopePluginType": "PROVIDER", + "validateScopeScript": "[Empty]" + }, + "signEncOAuth2ClientConfig": { + "authorizationResponseEncryptionAlgorithm": null, + "authorizationResponseEncryptionMethod": null, + "authorizationResponseSigningAlgorithm": "RS256", + "clientJwtPublicKey": null, + "idTokenEncryptionAlgorithm": "RSA-OAEP-256", + "idTokenEncryptionEnabled": false, + "idTokenEncryptionMethod": "A128CBC-HS256", + "idTokenPublicEncryptionKey": null, + "idTokenSignedResponseAlg": "RS256", + "jwkSet": null, + "jwkStoreCacheMissCacheTime": 60000, + "jwksCacheTimeout": 3600000, + "jwksUri": "http://am.fr-platform:80/am/oauth2/connect/jwk_uri", + "mTLSCertificateBoundAccessTokens": false, + "mTLSSubjectDN": null, + "mTLSTrustedCert": null, + "publicKeyLocation": "jwks_uri", + "requestParameterEncryptedAlg": null, + "requestParameterEncryptedEncryptionAlgorithm": "A128CBC-HS256", + "requestParameterSignedAlg": null, + "tokenEndpointAuthSigningAlgorithm": "RS256", + "tokenIntrospectionEncryptedResponseAlg": "RSA-OAEP-256", + "tokenIntrospectionEncryptedResponseEncryptionAlgorithm": "A128CBC-HS256", + "tokenIntrospectionResponseFormat": "JSON", + "tokenIntrospectionSignedResponseAlg": "RS256", + "userinfoEncryptedResponseAlg": null, + "userinfoEncryptedResponseEncryptionAlgorithm": "A128CBC-HS256", + "userinfoResponseFormat": "JSON", + "userinfoSignedResponseAlg": null + } + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/policyset/oauth2Scopes.policyset.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/policyset/oauth2Scopes.policyset.json new file mode 100644 index 000000000..4a78a05a8 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/policyset/oauth2Scopes.policyset.json @@ -0,0 +1,53 @@ +{ + "policyset": { + "oauth2Scopes": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [ + "Script", + "AMIdentityMembership", + "IPv6", + "SimpleTime", + "IPv4", + "LEAuthLevel", + "LDAPFilter", + "AuthScheme", + "Session", + "AND", + "AuthenticateToRealm", + "ResourceEnvIP", + "SessionProperty", + "OAuth2Scope", + "OR", + "Transaction", + "NOT", + "AuthLevel", + "AuthenticateToService" + ], + "createdBy": "id=dsameuser,ou=user,ou=am-config", + "creationDate": 1578580064992, + "description": "The built-in Application used by the OAuth2 scope authorization process.", + "displayName": "Default OAuth2 Scopes Policy Set", + "editable": true, + "entitlementCombiner": "DenyOverride", + "lastModifiedBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "lastModifiedDate": 1761154812786, + "name": "oauth2Scopes", + "resourceComparator": null, + "resourceTypeUuids": [ + "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b" + ], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "AuthenticatedUsers", + "NOT", + "Identity", + "OR", + "AND", + "NONE", + "JwtClaim" + ] + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/resourcetype/OAuth2-Scope.resourcetype.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/resourcetype/OAuth2-Scope.resourcetype.json new file mode 100644 index 000000000..9c0913a58 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/resourcetype/OAuth2-Scope.resourcetype.json @@ -0,0 +1,21 @@ +{ + "resourcetype": { + "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b": { + "actions": { + "GRANT": true + }, + "createdBy": "id=dsameuser,ou=user,ou=am-config", + "creationDate": 1595479030586, + "description": "The built-in OAuth2 Scope Resource Type for OAuth2policy-provided scope.", + "lastModifiedBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "lastModifiedDate": 1761154812166, + "name": "OAuth2 Scope", + "patterns": [ + "*://*:*/*", + "*://*:*/*?*", + "*" + ], + "uuid": "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/resourcetype/URL.resourcetype.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/resourcetype/URL.resourcetype.json new file mode 100644 index 000000000..cd3145dd3 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/resourcetype/URL.resourcetype.json @@ -0,0 +1,26 @@ +{ + "resourcetype": { + "76656a38-5f8e-401b-83aa-4ccb74ce88d2": { + "actions": { + "DELETE": true, + "GET": true, + "HEAD": true, + "OPTIONS": true, + "PATCH": true, + "POST": true, + "PUT": true + }, + "createdBy": "id=dsameuser,ou=user,ou=am-config", + "creationDate": 1595479030487, + "description": "The built-in URL Resource Type available to OpenAMPolicies.", + "lastModifiedBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "lastModifiedDate": 1761154812387, + "name": "URL", + "patterns": [ + "*://*:*/*", + "*://*:*/*?*" + ], + "uuid": "76656a38-5f8e-401b-83aa-4ccb74ce88d2" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OAuth2-Access-Token-Modification-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OAuth2-Access-Token-Modification-Script.script.js new file mode 100644 index 000000000..7b81ba243 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OAuth2-Access-Token-Modification-Script.script.js @@ -0,0 +1,135 @@ +/* + * Copyright 2019-2021 ForgeRock AS. All Rights Reserved. + * + * Use of this code requires a commercial software license with ForgeRock AS + * or with one of its affiliates. All use shall be exclusively subject + * to such license between the licensee and ForgeRock AS. + */ + +/* + * This script lets you modify information associated with an OAuth2 access token + * with methods provided by the AccessToken (1) interface. + * The changes made to OAuth2 access tokens will directly impact the size of the CTS tokens, + * and, similarly, the size of the JWTs if client-based OAuth2 tokens are utilized. + * When adding/updating fields make sure that the token size remains within client/user-agent limits. + * + * Defined variables: + * accessToken - AccessToken (1). + * The access token to be updated. + * Mutable object, all changes to the access token will be reflected. + * scopes - Set (6). + * Always present, the requested scopes. + * requestProperties - Unmodifiable Map (5). + * Always present, contains a map of request properties: + * requestUri - The request URI. + * realm - The realm that the request relates to. + * requestParams - A map of the request params and/or posted data. + * Each value is a list of one or more properties. + * Please note that these should be handled in accordance with OWASP best practices: + * https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection. + * clientProperties - Unmodifiable Map (5). + * Present if the client specified in the request was identified, contains a map of client properties: + * clientId - The client's URI for the request locale. + * allowedGrantTypes - List of the allowed grant types (org.forgerock.oauth2.core.GrantType) for the client. + * allowedResponseTypes - List of the allowed response types for the client. + * allowedScopes - List of the allowed scopes for the client. + * customProperties - A map of the custom properties of the client. + * Lists or maps will be included as sub-maps; for example: + * customMap[Key1]=Value1 will be returned as customMap -> Key1 -> Value1. + * To add custom properties to a client, update the Custom Properties field + * in AM Console > Realm Name > Applications > OAuth 2.0 > Clients > Client ID > Advanced. + * identity - AMIdentity (3). + * Always present, the identity of the resource owner. + * session - SSOToken (4). + * Present if the request contains the session cookie, the user's session object. + * scriptName - String (primitive). + * Always present, the display name of the script. + * logger - Always present, the "OAuth2Provider" debug logger instance: + * https://backstage.pingidentity.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding log files will be prefixed with: scripts.OAUTH2_ACCESS_TOKEN_MODIFICATION. + * httpClient - HTTP Client (8). + * Always present, the HTTP Client instance: + * https://backstage.pingidentity.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * + * Return - no value is expected, changes shall be made to the accessToken parameter directly. + * + * Class reference: + * (1) AccessToken - https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/oauth2/core/AccessToken.html. + * (3) AMIdentity - https://backstage.pingidentity.com/docs/am/7/apidocs/com/sun/identity/idm/AMIdentity.html. + * (4) SSOToken - https://backstage.pingidentity.com/docs/am/7/apidocs/com/iplanet/sso/SSOToken.html. + * (5) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html, + * or https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/LinkedHashMap.html. + * (6) Set - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashSet.html. + * (8) Client - https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/http/Client.html. + */ + +/* EXAMPLE +(function () { + var frJava = JavaImporter( + org.forgerock.http.protocol.Request, + org.forgerock.http.protocol.Response + ); + + // Always includes this field in the token. + accessToken.setField('key1', 'value1'); + + // Receives and adds to the access token additional values by performing a REST call to an external service. + // WARNING: Below, you will find a reference to a third-party site, which is provided only as an example. + var uri = 'https://jsonplaceholder.typicode.com/posts'; + + try { + var request = new frJava.Request(); + + // You can chain methods that return the request object. + request.setUri(uri) + .setMethod('POST') + .setEntity(JSON.stringify({ + updatedFields: { + key2: 'value2', + key3: 'value3' + } + })); + + // You can call a method when chaining is not possible. + request.getHeaders().add('Content-Type', 'application/json; charset=UTF-8'); + + // Sends the request and receives the response. + var response = httpClient.send(request).getOrThrow(); + + // Checks if the response status is as expected. + if (response.getStatus() === org.forgerock.http.protocol.Status.CREATED) { + var result = JSON.parse(response.getEntity().getString()); + + // Set multiple token fields at once. + accessToken.setFields(result.updatedFields); + } else { + logger.error('Unable to obtain access token modifications. Status: ' + response.getStatus() + '. Content: ' + response.getEntity().getString()); + } + } catch (e) { + logger.error('The request processing was interrupted. ' + e); + + // The access token request fails with the HTTP 500 error in this case. + throw ('Unable to obtain response from: ' + uri); + } + + // Adds new fields containing identity attribute values to the access token. + accessToken.setField('mail', identity.getAttribute('mail')); + accessToken.setField('phone', identity.getAttribute('telephoneNumber').toArray()[0]); + + // Adds new fields containing the session property values. + // NOTE: session may not be available for non-interactive authorization grants. + if (session) { + try { + accessToken.setField('ipAddress', session.getProperty('Host')); + } catch (e) { + logger.error('Unable to retrieve session property value. ' + e); + } + } + + // Removes a native field from the token entry, that was set by AM. + // WARNING: removing native fields from the token may result in loss of functionality. + // accessToken.removeTokenName() + + // No return value is expected. Let it be undefined. +}()); +*/ diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OAuth2-Access-Token-Modification-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OAuth2-Access-Token-Modification-Script.script.json new file mode 100644 index 000000000..23966ff41 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OAuth2-Access-Token-Modification-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "39c08084-1238-43e8-857f-2e11005eac49": { + "_id": "39c08084-1238-43e8-857f-2e11005eac49", + "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Default alpha realm script for OAuth2 Access Token Modification", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "lastModifiedDate": 1761154811282, + "name": "Alpha OAuth2 Access Token Modification Script", + "script": "file://Alpha-OAuth2-Access-Token-Modification-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OIDC-Claims-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OIDC-Claims-Script.script.js new file mode 100644 index 000000000..eabbbe810 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OIDC-Claims-Script.script.js @@ -0,0 +1,620 @@ +/* + * Copyright 2014-2021 ForgeRock AS. All Rights Reserved + * + * Use of this code requires a commercial software license with ForgeRock AS + * or with one of its affiliates. All use shall be exclusively subject + * to such license between the licensee and ForgeRock AS. + */ + +/* + * This script computes claim values returned in ID tokens and/or at the UserInfo Endpoint. + * The claim values are computed for: + * the claims derived from the requested scopes, + * the claims provided by the authorization server, + * and the claims requested by the client via the claims parameter. + * + * In the CONFIGURATION AND CUSTOMIZATION section, you can + * define the scope-to-claims mapping, and + * assign to each claim a resolver function that will compute the claim value. + * + * Defined variables (class references are provided below): + * scopes - Set (6). + * Always present, the requested scopes. + * claims - Map (5). + * Always present, default server provided claims. + * claimObjects - List (7, 2). + * Always present, the default server provided claims. + * requestedClaims - Map> (5). + * Always present, not empty if the request contains the claims parameter and the server has enabled + * claims_parameter_supported. A map of the requested claims to possible values, otherwise empty; + * requested claims with no requested values will have a key but no value in the map. A key with + * a single value in its Set (6) indicates that this is the only value that should be returned. + * requestedTypedClaims - List (7, 2). + * Always present, the requested claims. + * Requested claims with no requested values will have a claim with no values. + * A claim with a single value indicates this is the only value that should be returned. + * claimsLocales - List (7). + * The values from the 'claims_locales' parameter. + * See https://openid.net/specs/openid-connect-core-1_0.html#ClaimsLanguagesAndScripts for the OIDC specification details. + * requestProperties - Unmodifiable Map (5). + * Always present, contains a map of request properties: + * requestUri - The request URI. + * realm - The realm that the request relates to. + * requestParams - A map of the request params and/or posted data. + * Each value is a list of one or more properties. + * Please note that these should be handled in accordance with OWASP best practices: + * https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection. + * clientProperties - Unmodifiable Map (5). + * Present if the client specified in the request was identified, contains a map of client properties: + * clientId - The client's URI for the request locale. + * allowedGrantTypes - List of the allowed grant types (org.forgerock.oauth2.core.GrantType) for the client. + * allowedResponseTypes - List of the allowed response types for the client. + * allowedScopes - List of the allowed scopes for the client. + * customProperties - A map of the custom properties of the client. + * Lists or maps will be included as sub-maps; for example: + * customMap[Key1]=Value1 will be returned as customMap -> Key1 -> Value1. + * To add custom properties to a client, update the Custom Properties field + * in AM Console > Realm Name > Applications > OAuth 2.0 > Clients > Client ID > Advanced. + * identity - AMIdentity (3). + * Always present, the identity of the resource owner. + * session - SSOToken (4). + * Present if the request contains the session cookie, the user's session object. + * scriptName - String (primitive). + * Always present, the display name of the script. + * logger - Always present, the "OAuth2Provider" debug logger instance: + * https://backstage.pingidentity.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding files will be prefixed with: scripts.OIDC_CLAIMS. + * httpClient - HTTP Client (8). + * Always present, the HTTP Client instance: + * https://backstage.pingidentity.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * In order to use the client, you may need to add + * org.forgerock.http.Client, + * org.forgerock.http.protocol.*, + * and org.forgerock.util.promise.PromiseImpl + * to the allowed Java classes in the scripting engine configuration, as described in: + * https://backstage.pingidentity.com/docs/am/7/scripting-guide/script-engine-security.html + * + * Return - a new UserInfoClaims(Map values, Map> compositeScopes) (1) object. + * The result of the last statement in the script is returned to the server. + * Currently, the Immediately Invoked Function Expression (also known as Self-Executing Anonymous Function) + * is the last (and only) statement in this script, and its return value will become the script result. + * Do not use "return variable" statement outside of a function definition. + * See RESULTS section for additional details. + * + * Class reference: + * (1) UserInfoClaims - https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html. + * (2) Claim - https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html). + * An instance of org.forgerock.openidconnect.Claim has methods to access + * the claim name, requested values, locale, and whether the claim is essential. + * (3) AMIdentity - https://backstage.pingidentity.com/docs/am/7/apidocs/com/sun/identity/idm/AMIdentity.html. + * (4) SSOToken - https://backstage.pingidentity.com/docs/am/7/apidocs/com/iplanet/sso/SSOToken.html. + * (5) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html, + * or https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/LinkedHashMap.html. + * (6) Set - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashSet.html. + * (7) List - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayList.html. + * (8) Client - https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/http/Client.html. +*/ + +(function () { + // SETUP + + /** + * Claim processing utilities. + * An object that contains reusable functions for processing claims. + * @see CLAIM PROCESSING UTILITIES section for details. + */ + var utils = getUtils(); + + // CONFIGURATION AND CUSTOMIZATION + + /** + * OAuth 2.0 scope values (scopes) can be used by the Client to request OIDC claims. + * + * Call this configuration method, and pass in as the first argument + * an object that maps a scope value to an array of claim names + * to specify which claims need to be processed and returned for the requested scopes. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims} + * for the scope values that could be used to request claims as defined in the OIDC specification. + * + * Below, find a default configuration that is expected to work in the current environment. + * + * CUSTOMIZATION + * You can choose the claim names returned for a scope. + */ + utils.setScopeClaimsMap({ + profile: [ + 'name', + 'family_name', + 'given_name', + 'zoneinfo', + 'locale' + ], + email: ['email'], + address: ['address'], + phone: ['phone_number'] + }); + + /** + * In this script, each claim + * derived from the requested scopes, + * provided by the authorization server, and + * requested by the client via the claims parameter + * will be processed by a function associated with the claim name. + * + * Call this configuration method, and pass in as the first argument + * an object that maps a claim name to a resolver function, + * which will be automatically executed for each claim processed by the script. + * + * The claim resolver function will receive the requested claim information + * in an instance of org.forgerock.openidconnect.Claim as the first argument. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} + * for details on the Claim class. + * + * If the claim resolver function returns a value, + * other than undefined or null, + * the claim will be included in the script's results. + * + * The Claim instance provides methods to check + * what the name of the claim is, + * which values the claim request contains, + * whether the claim is essential, and + * which locale the claim is associated with. + * The resolver function can consider this information when computing and returning the claim value. + * + * Below, find a default configuration that is expected to work in the current environment. + * A reusable function, utils.getUserProfileClaimResolver(String attribute-name), + * is called to return a claim resolver function based on a user profile attribute. + * @see CLAIM RESOLVERS section for the implementation details and examples. + * For the address claim, an example of a claim resolver that uses another claim resolver is provided. + * + * CUSTOMIZATION + * You can reuse the predefined utils methods with your custom arguments. + * You can also specify a custom resolver function for a claim name, + * that will compute and return the claim value—as shown in the commented out example below. + */ + utils.setClaimResolvers({ + /* + // An example of a simple claim resolver function that is defined for a claim + // directly in the configuration object: + custom-claim-name: function (requestedClaim) { + // In this case, initially, the claim value comes straight from a user profile attribute value: + var claimValue = identity.getAttribute('custom-attribute-name').toArray()[0] + + // Optionally, provide additional logic for processing (filtering, formatting, etc.) the claim value. + // You can use: + // requestedClaim.getName() + // requestedClaim.getValues() + // requestedClaim.getLocale() + // requestedClaim.isEssential() + + return claimValue + }, + */ + /** + * The use of utils.getUserProfileClaimResolver shows how + * an argument passed to a function that returns a claim resolver + * becomes available to the resolver function (via its lexical context). + */ + name: utils.getUserProfileClaimResolver('cn'), + family_name: utils.getUserProfileClaimResolver('sn'), + given_name: utils.getUserProfileClaimResolver('givenname'), + zoneinfo: utils.getUserProfileClaimResolver('preferredtimezone'), + locale: utils.getUserProfileClaimResolver('preferredlocale'), + email: utils.getUserProfileClaimResolver('mail'), + address: utils.getAddressClaimResolver( + /** + * The passed in user profile claim resolver function + * can be used by the address claim resolver function + * to obtain the claim value to be formatted as per the OIDC specification: + * @see https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim. + */ + utils.getUserProfileClaimResolver('postaladdress') + ), + phone_number: utils.getUserProfileClaimResolver('telephonenumber') + }); + + // CLAIM PROCESSING UTILITIES + + /** + * @returns {object} An object that contains reusable claim processing utilities. + * @see PUBLIC METHODS section and the return statement for the list of exported functions. + */ + function getUtils () { + // IMPORT JAVA + + /** + * Provides Java scripting functionality. + * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Scripting_Java#javaimporter_constructor}. + */ + var frJava = JavaImporter( + org.forgerock.oauth2.core.exceptions.InvalidRequestException, + org.forgerock.oauth2.core.UserInfoClaims, + org.forgerock.openidconnect.Claim, + + java.util.LinkedHashMap, + java.util.ArrayList + ); + + // SET UP CONFIGURATION + + /** + * Placeholder for a configuration option that contains + * an object that maps the supported scope values (scopes) + * and the corresponding claim names for each scope value. + */ + var scopeClaimsMap; + + /** + * Placeholder for a configuration option that contains + * an object that maps the supported claim names + * and the resolver functions returning the claim value. + */ + var claimResolvers; + + /** + * A (public) method that accepts an object that maps the supported scopes and the corresponding claim names, + * and assigns it to a (private) variable that serves as a configuration option. + * @param {object} params - An object that maps each supported scope value to an array of claim names, + * in order to specify which claims need to be processed for the requested scopes. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims} for details. + * @param {string[]} [params.profile] - An array of claim names to be returned if the profile scope is requested. + * @param {string[]} [params.email] - An array of claim names to be returned if the email scope is requested. + * @param {string[]} [params.address] - An array of claim names to be returned if the address scope is requested. + * @param {string[]} [params.phone] - An array of claim names to be returned if the phone scope is requested. + * @returns {undefined} + */ + function setScopeClaimsMap(params) { + scopeClaimsMap = params; + } + + /** + * A (public) method that accepts an object that maps the supported claim names + * and the resolver functions returning the claim value, + * and assigns it to a (private) variable that serves as a configuration option. + * @param {object} params - An object that maps + * each supported claim name to a function that computes and returns the claim value. + */ + function setClaimResolvers(params) { + claimResolvers = params; + } + + // CLAIM RESOLVERS + + /** + * Claim resolvers are functions that return a claim value. + * @param {*} + * @returns {*} + */ + + /** + * Defines a claim resolver based on a user profile attribute. + * @param {string} attributeName - Name of the user profile attribute. + * @returns {function} A function that will determine the claim value + * based on the user profile attribute and the (requested) claim properties. + */ + function getUserProfileClaimResolver (attributeName) { + /** + * Resolves a claim with a user profile attribute value. + * Returns undefined if the identity attribute is not populated, + * OR if the claim has requested values that do not contain the identity attribute value. + * ATTENTION: the aforementioned comparison is case-sensitive. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {string|HashSet|undefined} + */ + function resolveClaim(claim) { + var userProfileValue; + + if (identity) { + userProfileValue = getClaimValueFromSet(claim, identity.getAttribute(attributeName)); + + if (userProfileValue && !userProfileValue.isEmpty()) { + if (!claim.getValues() || claim.getValues().isEmpty() || claim.getValues().contains(userProfileValue)) { + return userProfileValue; + } + } + } + } + + return resolveClaim; + } + + /** + * Returns an address claim resolver based on a claim value obtained with another claim resolver. + * @param {function} resolveClaim - A function that returns a claim value. + * @returns {function} A function that will accept a claim as an argument, + * run the claim resolver function for the claim and obtain the claim value, + * and apply additional formatting to the value before returning it. + */ + function getAddressClaimResolver (resolveClaim) { + /** + * Creates an address claim object from a value returned by a claim resolver, + * and returns the address claim object as the claim value. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim}. + * The claim value is obtained with a claim resolving function available from the closure. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {java.util.LinkedHashMap|undefined} The address claim object created from a claim value. + */ + function resolveAddressClaim(claim) { + var claimValue = resolveClaim(claim); + var addressObject; + + if (isClaimValueValid(claimValue)) { + addressObject = new frJava.LinkedHashMap(); + + addressObject.put('formatted', claimValue); + + return addressObject; + } + } + + return resolveAddressClaim; + } + + /** + * Returns an essential claim resolver based on a claim value obtained with another claim resolver. + * @param {function} resolveClaim - A function that returns a claim value. + * @returns {function} A function that will accept a claim as an argument, + * run the claim resolver function for the claim and obtain the claim value, + * and apply additional logic for essential claims. + */ + function getEssentialClaimResolver (resolveClaim) { + /** + * Returns a claim value or throws an error. + * The claim value is obtained with a claim resolving function available from the closure. + * Throws an exception if the claim is essential and no value is returned for the claim. + * + * Use of this resolver is optional. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#IndividualClaimsRequests} stating: + * "Note that even if the Claims are not available because the End-User did not authorize their release or they are not present, + * the Authorization Server MUST NOT generate an error when Claims are not returned, whether they are Essential or Voluntary, + * unless otherwise specified in the description of the specific claim." + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} + * @throws {org.forgerock.oauth2.core.exceptions.InvalidRequestException} + */ + function resolveEssentialClaim(claim) { + var claimValue = resolveClaim(claim); + + if (claim.isEssential() && !isClaimValueValid(claimValue)) { + throw new frJava.InvalidRequestException('Could not provide value for essential claim: ' + claim.getName()); + } + + return claimValue; + } + + return resolveEssentialClaim; + } + + /** + * Provides default resolution for a claim. + * Use it if a claim-specific resolver is not defined in the configuration. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} A single value associated with this claim. + */ + function resolveAnyClaim (claim) { + if (claim.getValues().size() === 1) { + return claim.getValues().toArray()[0]; + } + } + + // UTILITIES + + /** + * Returns claim value from a set. + * If the set contains a single value, returns the value. + * If the set contains multiple values, returns the set. + * Otherwise, returns undefined. + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @param {java.util.HashSet} set The set—for example, a user profile attribute value. + * @returns {string|java.util.HashSet|undefined} + */ + function getClaimValueFromSet (claim, set) { + if (set && set.size()) { + if (set.size() === 1) { + return set.toArray()[0]; + } else { + return set; + } + } else if (logger.warningEnabled()) { + logger.warning('OIDC Claims script. Got an empty set for claim: ' + claim.getName()); + } + } + + function isClaimValueValid (claimValue) { + if (typeof claimValue === 'undefined' || claimValue === null) { + return false; + } + + return true; + } + + // CLAIM PROCESSING + + /** + * Constructs and returns an object populated with the computed claim values + * and the requested scopes mapped to the claim names. + * @returns {org.forgerock.oauth2.core.UserInfoClaims} The object to be returned to the authorization server. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html}. + * @see RESULTS section for the use of this function. + */ + function getUserInfoClaims () { + return new frJava.UserInfoClaims(getComputedClaims(), getCompositeScopes()); + } + + /** + * Creates a map of (requested) claim names populated with the computed claim values. + * @returns {java.util.LinkedHashMap} + * A map of the requested claim names and the corresponding claim values. + */ + function getComputedClaims () { + /** + * Creates a complete list of claim objects from: + * the claims derived from the scopes, + * the claims provided by the authorization server, + * and the claims requested by the client. + * @returns {java.util.ArrayList} + * Returns a complete list of org.forgerock.openidconnect.Claim objects available to the script. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for the claim object details. + */ + function getClaims() { + /** + * Returns a list of claim objects for the requested scopes. + * Uses the scopeClaimsMap configuration option to derive the claim names; + * no other properties of a claim derived from a scope are populated. + * @returns {java.util.ArrayList} + * A list of org.forgerock.openidconnect.Claim objects derived from the requested scopes. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for the claim object details. + */ + function convertScopeToClaims() { + var claims = new frJava.ArrayList(); + + scopes.toArray().forEach(function (scope) { + if (String(scope) !== 'openid' && scopeClaimsMap[scope]) { + scopeClaimsMap[scope].forEach(function (claimName) { + claims.add(new frJava.Claim(claimName)); + }); + } + }); + + return claims; + } + + var claims = new frJava.ArrayList(); + + claims.addAll(convertScopeToClaims()); + claims.addAll(claimObjects); + claims.addAll(requestedTypedClaims); + + return claims; + } + + /** + * Computes and returns a claim value. + * To obtain the claim value, uses the resolver function specified for the claim in the claimResolvers configuration object. + * @see claimResolvers + * If no resolver function is found, uses the default claim resolver function. + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} Claim value. + * @throws {org.forgerock.oauth2.core.exceptions.InvalidRequestException} + * Rethrows this exception if a claim resolver throws it. + * You can throw org.forgerock.oauth2.core.exceptions.InvalidRequestException from your custom claim resolver + * if you want to terminate the claim processing. + */ + function computeClaim(claim) { + var resolveClaim; + var message; + + try { + resolveClaim = claimResolvers[claim.getName()] || resolveAnyClaim; + + return resolveClaim(claim); + } catch (e) { + message = 'OIDC Claims script exception. Unable to resolve OIDC Claim. ' + e; + + if (String(e).indexOf('org.forgerock.oauth2.core.exceptions.InvalidRequestException') !== -1) { + throw e; + } + + if (logger.warningEnabled()) { + logger.warning(message); + } + } + } + + var computedClaims = new frJava.LinkedHashMap(); + + getClaims().toArray().forEach(function (claim) { + var claimValue = computeClaim(claim); + + if (isClaimValueValid(claimValue)) { + computedClaims.put(claim.getName(), claimValue); + } else { + /** + * If a claim has been processed, but appears in the list again, + * and its value cannot be computed under the new conditions, + * the claim is removed from the final result. + * + * For example, a claim could be mapped to a scope and found in the user profile, + * but also requested by the client with required values that don't match the computed one. + * @see {link https://openid.net/specs/openid-connect-core-1_0.html#IndividualClaimsRequests}. + * for the relevant OIDC specification details. + */ + computedClaims.remove(claim.getName()); + } + }); + + return computedClaims; + } + + /** + * Creates a map of requested scopes and the corresponding claim names. + * @returns {java.util.LinkedHashMap} + */ + function getCompositeScopes () { + var compositeScopes = new frJava.LinkedHashMap(); + + scopes.toArray().forEach(function (scope) { + var scopeClaims = new frJava.ArrayList(); + + if (scopeClaimsMap[scope]) { + scopeClaimsMap[scope].forEach(function (claimName) { + scopeClaims.add(claimName); + }); + } + + if (scopeClaims.size()) { + compositeScopes.put(scope, scopeClaims); + } + }); + + return compositeScopes; + } + + // PUBLIC METHODS + + return { + setScopeClaimsMap: setScopeClaimsMap, + setClaimResolvers: setClaimResolvers, + getUserProfileClaimResolver: getUserProfileClaimResolver, + getAddressClaimResolver: getAddressClaimResolver, + getEssentialClaimResolver: getEssentialClaimResolver, + getUserInfoClaims: getUserInfoClaims + }; + } + + // RESULTS + + /** + * This script returns an instance of the org.forgerock.oauth2.core.UserInfoClaims class + * populated with the computed claim values and + * the requested scopes mapped to the claim names. + * @see {@link https://backstage.pingidentity.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html}. + * + * Assigning it to a variable gives you an opportunity + * to log the content of the returned value during development. + */ + var userInfoClaims = utils.getUserInfoClaims(); + + /* + logger.error(scriptName + ' results:') + logger.error('Values: ' + userInfoClaims.getValues()) + logger.error('Scopes: ' + userInfoClaims.getCompositeScopes()) + */ + + return userInfoClaims; +}()); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OIDC-Claims-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OIDC-Claims-Script.script.json new file mode 100644 index 000000000..57b924d46 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-OIDC-Claims-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "cf3515f0-8278-4ee3-a530-1bad7424c416": { + "_id": "cf3515f0-8278-4ee3-a530-1bad7424c416", + "context": "OIDC_CLAIMS", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Default alpha realm script for OIDC claims", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "lastModifiedDate": 1761154811397, + "name": "Alpha OIDC Claims Script", + "script": "file://Alpha-OIDC-Claims-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.js new file mode 100644 index 000000000..8848fbbc9 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.js @@ -0,0 +1,12 @@ +(function () { + if (scopes.contains('fr:autoaccess:*') || scopes.contains('fr:iga:*') || scopes.contains('fr:idc:analytics:*')) { + var fr = JavaImporter( + com.sun.identity.idm.IdType + ); + var groups = []; + identity.getMemberships(fr.IdType.GROUP).toArray().forEach(function (group) { + groups.push(group.getAttribute('cn').toArray()[0]); + }); + accessToken.setField('groups', groups); + } +}()); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.json new file mode 100644 index 000000000..bc45d57e4 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "e232cff3-2460-47cd-80b2-36c86c0d0f06": { + "_id": "e232cff3-2460-47cd-80b2-36c86c0d0f06", + "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Used by endUserUIClient", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "lastModifiedDate": 1761154811531, + "name": "Alpha endUserUIClient OAuth2 Access Token Modification Script", + "script": "file://Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OIDC-Claims-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OIDC-Claims-Script.script.js new file mode 100644 index 000000000..b2f53ad69 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OIDC-Claims-Script.script.js @@ -0,0 +1,621 @@ +/* + * Copyright 2014-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script computes claim values returned in ID tokens and/or at the UserInfo Endpoint. + * The claim values are computed for: + * the claims derived from the requested scopes, + * the claims provided by the authorization server, + * and the claims requested by the client via the claims parameter. + * + * In the CONFIGURATION AND CUSTOMIZATION section, you can + * define the scope-to-claims mapping, and + * assign to each claim a resolver function that will compute the claim value. + * + * Defined variables (class references are provided below): + * scopes - Set (6). + * Always present, the requested scopes. + * claims - Map (5). + * Always present, default server provided claims. + * claimObjects - List (7, 2). + * Always present, the default server provided claims. + * requestedClaims - Map> (5). + * Always present, not empty if the request contains the claims parameter and the server has enabled + * claims_parameter_supported. A map of the requested claims to possible values, otherwise empty; + * requested claims with no requested values will have a key but no value in the map. A key with + * a single value in its Set (6) indicates that this is the only value that should be returned. + * requestedTypedClaims - List (7, 2). + * Always present, the requested claims. + * Requested claims with no requested values will have a claim with no values. + * A claim with a single value indicates this is the only value that should be returned. + * claimsLocales - List (7). + * The values from the 'claims_locales' parameter. + * See https://openid.net/specs/openid-connect-core-1_0.html#ClaimsLanguagesAndScripts for the OIDC specification details. + * requestProperties - Unmodifiable Map (5). + * Always present, contains a map of request properties: + * requestUri - The request URI. + * realm - The realm that the request relates to. + * requestParams - A map of the request params and/or posted data. + * Each value is a list of one or more properties. + * Please note that these should be handled in accordance with OWASP best practices: + * https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection. + * clientProperties - Unmodifiable Map (5). + * Present if the client specified in the request was identified, contains a map of client properties: + * clientId - The client's URI for the request locale. + * allowedGrantTypes - List of the allowed grant types (org.forgerock.oauth2.core.GrantType) for the client. + * allowedResponseTypes - List of the allowed response types for the client. + * allowedScopes - List of the allowed scopes for the client. + * customProperties - A map of the custom properties of the client. + * Lists or maps will be included as sub-maps; for example: + * customMap[Key1]=Value1 will be returned as customMap -> Key1 -> Value1. + * To add custom properties to a client, update the Custom Properties field + * in AM Console > Realm Name > Applications > OAuth 2.0 > Clients > Client ID > Advanced. + * identity - AMIdentity (3). + * Always present, the identity of the resource owner. + * session - SSOToken (4). + * Present if the request contains the session cookie, the user's session object. + * scriptName - String (primitive). + * Always present, the display name of the script. + * logger - Always present, the "OAuth2Provider" debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding files will be prefixed with: scripts.OIDC_CLAIMS. + * httpClient - HTTP Client (8). + * Always present, the HTTP Client instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * In order to use the client, you may need to add + * org.forgerock.http.Client, + * org.forgerock.http.protocol.*, + * and org.forgerock.util.promise.PromiseImpl + * to the allowed Java classes in the scripting engine configuration, as described in: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/script-engine-security.html + * + * Return - a new UserInfoClaims(Map values, Map> compositeScopes) (1) object. + * The result of the last statement in the script is returned to the server. + * Currently, the Immediately Invoked Function Expression (also known as Self-Executing Anonymous Function) + * is the last (and only) statement in this script, and its return value will become the script result. + * Do not use "return variable" statement outside of a function definition. + * See RESULTS section for additional details. + * + * Class reference: + * (1) UserInfoClaims - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html. + * (2) Claim - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html). + * An instance of org.forgerock.openidconnect.Claim has methods to access + * the claim name, requested values, locale, and whether the claim is essential. + * (3) AMIdentity - https://backstage.forgerock.com/docs/am/7/apidocs/com/sun/identity/idm/AMIdentity.html. + * (4) SSOToken - https://backstage.forgerock.com/docs/am/7/apidocs/com/iplanet/sso/SSOToken.html. + * (5) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html, + * or https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/LinkedHashMap.html. + * (6) Set - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashSet.html. + * (7) List - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayList.html. + * (8) Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. +*/ + +(function () { + // SETUP + + /** + * Claim processing utilities. + * An object that contains reusable functions for processing claims. + * @see CLAIM PROCESSING UTILITIES section for details. + */ + var utils = getUtils(); + + // CONFIGURATION AND CUSTOMIZATION + + /** + * OAuth 2.0 scope values (scopes) can be used by the Client to request OIDC claims. + * + * Call this configuration method, and pass in as the first argument + * an object that maps a scope value to an array of claim names + * to specify which claims need to be processed and returned for the requested scopes. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims} + * for the scope values that could be used to request claims as defined in the OIDC specification. + * + * Below, find a default configuration that is expected to work in the current environment. + * + * CUSTOMIZATION + * You can choose the claim names returned for a scope. + */ + utils.setScopeClaimsMap({ + profile: [ + 'name', + 'family_name', + 'given_name', + 'zoneinfo', + 'locale' + ], + email: ['email'], + address: ['address'], + phone: ['phone_number'] + }); + + /** + * In this script, each claim + * derived from the requested scopes, + * provided by the authorization server, and + * requested by the client via the claims parameter + * will be processed by a function associated with the claim name. + * + * Call this configuration method, and pass in as the first argument + * an object that maps a claim name to a resolver function, + * which will be automatically executed for each claim processed by the script. + * + * The claim resolver function will receive the requested claim information + * in an instance of org.forgerock.openidconnect.Claim as the first argument. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} + * for details on the Claim class. + * + * If the claim resolver function returns a value, + * other than undefined or null, + * the claim will be included in the script's results. + * + * The Claim instance provides methods to check + * what the name of the claim is, + * which values the claim request contains, + * whether the claim is essential, and + * which locale the claim is associated with. + * The resolver function can consider this information when computing and returning the claim value. + * + * Below, find a default configuration that is expected to work in the current environment. + * A reusable function, utils.getUserProfileClaimResolver(String attribute-name), + * is called to return a claim resolver function based on a user profile attribute. + * @see CLAIM RESOLVERS section for the implementation details and examples. + * For the address claim, an example of a claim resolver that uses another claim resolver is provided. + * + * CUSTOMIZATION + * You can reuse the predefined utils methods with your custom arguments. + * You can also specify a custom resolver function for a claim name, + * that will compute and return the claim value—as shown in the commented out example below. + */ + utils.setClaimResolvers({ + /* + // An example of a simple claim resolver function that is defined for a claim + // directly in the configuration object: + custom-claim-name: function (requestedClaim) { + // In this case, initially, the claim value comes straight from a user profile attribute value: + var claimValue = identity.getAttribute('custom-attribute-name').toArray()[0] + + // Optionally, provide additional logic for processing (filtering, formatting, etc.) the claim value. + // You can use: + // requestedClaim.getName() + // requestedClaim.getValues() + // requestedClaim.getLocale() + // requestedClaim.isEssential() + + return claimValue + }, + */ + /** + * The use of utils.getUserProfileClaimResolver shows how + * an argument passed to a function that returns a claim resolver + * becomes available to the resolver function (via its lexical context). + */ + name: utils.getUserProfileClaimResolver('cn'), + family_name: utils.getUserProfileClaimResolver('sn'), + given_name: utils.getUserProfileClaimResolver('givenname'), + zoneinfo: utils.getUserProfileClaimResolver('preferredtimezone'), + locale: utils.getUserProfileClaimResolver('preferredlocale'), + email: utils.getUserProfileClaimResolver('mail'), + address: utils.getAddressClaimResolver( + /** + * The passed in user profile claim resolver function + * can be used by the address claim resolver function + * to obtain the claim value to be formatted as per the OIDC specification: + * @see https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim. + */ + utils.getUserProfileClaimResolver('postaladdress') + ), + phone_number: utils.getUserProfileClaimResolver('telephonenumber') + }); + + // CLAIM PROCESSING UTILITIES + + /** + * @returns {object} An object that contains reusable claim processing utilities. + * @see PUBLIC METHODS section and the return statement for the list of exported functions. + */ + function getUtils () { + // IMPORT JAVA + + /** + * Provides Java scripting functionality. + * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Scripting_Java#javaimporter_constructor}. + */ + var frJava = JavaImporter( + org.forgerock.oauth2.core.exceptions.InvalidRequestException, + org.forgerock.oauth2.core.UserInfoClaims, + org.forgerock.openidconnect.Claim, + + java.util.LinkedHashMap, + java.util.ArrayList + ); + + // SET UP CONFIGURATION + + /** + * Placeholder for a configuration option that contains + * an object that maps the supported scope values (scopes) + * and the corresponding claim names for each scope value. + */ + var scopeClaimsMap; + + /** + * Placeholder for a configuration option that contains + * an object that maps the supported claim names + * and the resolver functions returning the claim value. + */ + var claimResolvers; + + /** + * A (public) method that accepts an object that maps the supported scopes and the corresponding claim names, + * and assigns it to a (private) variable that serves as a configuration option. + * @param {object} params - An object that maps each supported scope value to an array of claim names, + * in order to specify which claims need to be processed for the requested scopes. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims} for details. + * @param {string[]} [params.profile] - An array of claim names to be returned if the profile scope is requested. + * @param {string[]} [params.email] - An array of claim names to be returned if the email scope is requested. + * @param {string[]} [params.address] - An array of claim names to be returned if the address scope is requested. + * @param {string[]} [params.phone] - An array of claim names to be returned if the phone scope is requested. + * @returns {undefined} + */ + function setScopeClaimsMap(params) { + scopeClaimsMap = params; + } + + /** + * A (public) method that accepts an object that maps the supported claim names + * and the resolver functions returning the claim value, + * and assigns it to a (private) variable that serves as a configuration option. + * @param {object} params - An object that maps + * each supported claim name to a function that computes and returns the claim value. + */ + function setClaimResolvers(params) { + claimResolvers = params; + } + + // CLAIM RESOLVERS + + /** + * Claim resolvers are functions that return a claim value. + * @param {*} + * @returns {*} + */ + + /** + * Defines a claim resolver based on a user profile attribute. + * @param {string} attributeName - Name of the user profile attribute. + * @returns {function} A function that will determine the claim value + * based on the user profile attribute and the (requested) claim properties. + */ + function getUserProfileClaimResolver (attributeName) { + /** + * Resolves a claim with a user profile attribute value. + * Returns undefined if the identity attribute is not populated, + * OR if the claim has requested values that do not contain the identity attribute value. + * ATTENTION: the aforementioned comparison is case-sensitive. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {string|HashSet|undefined} + */ + function resolveClaim(claim) { + var userProfileValue; + + if (identity) { + userProfileValue = getClaimValueFromSet(claim, identity.getAttribute(attributeName)); + + if (userProfileValue && !userProfileValue.isEmpty()) { + if (!claim.getValues() || claim.getValues().isEmpty() || claim.getValues().contains(userProfileValue)) { + return userProfileValue; + } + } + } + } + + return resolveClaim; + } + + /** + * Returns an address claim resolver based on a claim value obtained with another claim resolver. + * @param {function} resolveClaim - A function that returns a claim value. + * @returns {function} A function that will accept a claim as an argument, + * run the claim resolver function for the claim and obtain the claim value, + * and apply additional formatting to the value before returning it. + */ + function getAddressClaimResolver (resolveClaim) { + /** + * Creates an address claim object from a value returned by a claim resolver, + * and returns the address claim object as the claim value. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim}. + * The claim value is obtained with a claim resolving function available from the closure. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {java.util.LinkedHashMap|undefined} The address claim object created from a claim value. + */ + function resolveAddressClaim(claim) { + var claimValue = resolveClaim(claim); + var addressObject; + + if (isClaimValueValid(claimValue)) { + addressObject = new frJava.LinkedHashMap(); + + addressObject.put('formatted', claimValue); + + return addressObject; + } + } + + return resolveAddressClaim; + } + + /** + * Returns an essential claim resolver based on a claim value obtained with another claim resolver. + * @param {function} resolveClaim - A function that returns a claim value. + * @returns {function} A function that will accept a claim as an argument, + * run the claim resolver function for the claim and obtain the claim value, + * and apply additional logic for essential claims. + */ + function getEssentialClaimResolver (resolveClaim) { + /** + * Returns a claim value or throws an error. + * The claim value is obtained with a claim resolving function available from the closure. + * Throws an exception if the claim is essential and no value is returned for the claim. + * + * Use of this resolver is optional. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#IndividualClaimsRequests} stating: + * "Note that even if the Claims are not available because the End-User did not authorize their release or they are not present, + * the Authorization Server MUST NOT generate an error when Claims are not returned, whether they are Essential or Voluntary, + * unless otherwise specified in the description of the specific claim." + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} + * @throws {org.forgerock.oauth2.core.exceptions.InvalidRequestException} + */ + function resolveEssentialClaim(claim) { + var claimValue = resolveClaim(claim); + + if (claim.isEssential() && !isClaimValueValid(claimValue)) { + throw new frJava.InvalidRequestException('Could not provide value for essential claim: ' + claim.getName()); + } + + return claimValue; + } + + return resolveEssentialClaim; + } + + /** + * Provides default resolution for a claim. + * Use it if a claim-specific resolver is not defined in the configuration. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} A single value associated with this claim. + */ + function resolveAnyClaim (claim) { + if (claim.getValues().size() === 1) { + return claim.getValues().toArray()[0]; + } + } + + // UTILITIES + + /** + * Returns claim value from a set. + * If the set contains a single value, returns the value. + * If the set contains multiple values, returns the set. + * Otherwise, returns undefined. + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @param {java.util.HashSet} set The set—for example, a user profile attribute value. + * @returns {string|java.util.HashSet|undefined} + */ + function getClaimValueFromSet (claim, set) { + if (set && set.size()) { + if (set.size() === 1) { + return set.toArray()[0]; + } else { + return set; + } + } else if (logger.warningEnabled()) { + logger.warning('OIDC Claims script. Got an empty set for claim: ' + claim.getName()); + } + } + + function isClaimValueValid (claimValue) { + if (typeof claimValue === 'undefined' || claimValue === null) { + return false; + } + + return true; + } + + // CLAIM PROCESSING + + /** + * Constructs and returns an object populated with the computed claim values + * and the requested scopes mapped to the claim names. + * @returns {org.forgerock.oauth2.core.UserInfoClaims} The object to be returned to the authorization server. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html}. + * @see RESULTS section for the use of this function. + */ + function getUserInfoClaims () { + return new frJava.UserInfoClaims(getComputedClaims(), getCompositeScopes()); + } + + /** + * Creates a map of (requested) claim names populated with the computed claim values. + * @returns {java.util.LinkedHashMap} + * A map of the requested claim names and the corresponding claim values. + */ + function getComputedClaims () { + /** + * Creates a complete list of claim objects from: + * the claims derived from the scopes, + * the claims provided by the authorization server, + * and the claims requested by the client. + * @returns {java.util.ArrayList} + * Returns a complete list of org.forgerock.openidconnect.Claim objects available to the script. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for the claim object details. + */ + function getClaims() { + /** + * Returns a list of claim objects for the requested scopes. + * Uses the scopeClaimsMap configuration option to derive the claim names; + * no other properties of a claim derived from a scope are populated. + * @returns {java.util.ArrayList} + * A list of org.forgerock.openidconnect.Claim objects derived from the requested scopes. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for the claim object details. + */ + function convertScopeToClaims() { + var claims = new frJava.ArrayList(); + + scopes.toArray().forEach(function (scope) { + if (String(scope) !== 'openid' && scopeClaimsMap[scope]) { + scopeClaimsMap[scope].forEach(function (claimName) { + claims.add(new frJava.Claim(claimName)); + }); + } + }); + + return claims; + } + + var claims = new frJava.ArrayList(); + + claims.addAll(convertScopeToClaims()); + claims.addAll(claimObjects); + claims.addAll(requestedTypedClaims); + + return claims; + } + + /** + * Computes and returns a claim value. + * To obtain the claim value, uses the resolver function specified for the claim in the claimResolvers configuration object. + * @see claimResolvers + * If no resolver function is found, uses the default claim resolver function. + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} Claim value. + * @throws {org.forgerock.oauth2.core.exceptions.InvalidRequestException} + * Rethrows this exception if a claim resolver throws it. + * You can throw org.forgerock.oauth2.core.exceptions.InvalidRequestException from your custom claim resolver + * if you want to terminate the claim processing. + */ + function computeClaim(claim) { + var resolveClaim; + var message; + + try { + resolveClaim = claimResolvers[claim.getName()] || resolveAnyClaim; + + return resolveClaim(claim); + } catch (e) { + message = 'OIDC Claims script exception. Unable to resolve OIDC Claim. ' + e; + + if (String(e).indexOf('org.forgerock.oauth2.core.exceptions.InvalidRequestException') !== -1) { + throw e; + } + + if (logger.warningEnabled()) { + logger.warning(message); + } + } + } + + var computedClaims = new frJava.LinkedHashMap(); + + getClaims().toArray().forEach(function (claim) { + var claimValue = computeClaim(claim); + + if (isClaimValueValid(claimValue)) { + computedClaims.put(claim.getName(), claimValue); + } else { + /** + * If a claim has been processed, but appears in the list again, + * and its value cannot be computed under the new conditions, + * the claim is removed from the final result. + * + * For example, a claim could be mapped to a scope and found in the user profile, + * but also requested by the client with required values that don't match the computed one. + * @see {link https://openid.net/specs/openid-connect-core-1_0.html#IndividualClaimsRequests}. + * for the relevant OIDC specification details. + */ + computedClaims.remove(claim.getName()); + } + }); + + return computedClaims; + } + + /** + * Creates a map of requested scopes and the corresponding claim names. + * @returns {java.util.LinkedHashMap} + */ + function getCompositeScopes () { + var compositeScopes = new frJava.LinkedHashMap(); + + scopes.toArray().forEach(function (scope) { + var scopeClaims = new frJava.ArrayList(); + + if (scopeClaimsMap[scope]) { + scopeClaimsMap[scope].forEach(function (claimName) { + scopeClaims.add(claimName); + }); + } + + if (scopeClaims.size()) { + compositeScopes.put(scope, scopeClaims); + } + }); + + return compositeScopes; + } + + // PUBLIC METHODS + + return { + setScopeClaimsMap: setScopeClaimsMap, + setClaimResolvers: setClaimResolvers, + getUserProfileClaimResolver: getUserProfileClaimResolver, + getAddressClaimResolver: getAddressClaimResolver, + getEssentialClaimResolver: getEssentialClaimResolver, + getUserInfoClaims: getUserInfoClaims + }; + } + + // RESULTS + + /** + * This script returns an instance of the org.forgerock.oauth2.core.UserInfoClaims class + * populated with the computed claim values and + * the requested scopes mapped to the claim names. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html}. + * + * Assigning it to a variable gives you an opportunity + * to log the content of the returned value during development. + */ + var userInfoClaims = utils.getUserInfoClaims(); + + /* + logger.error(scriptName + ' results:') + logger.error('Values: ' + userInfoClaims.getValues()) + logger.error('Scopes: ' + userInfoClaims.getCompositeScopes()) + */ + + return userInfoClaims; +}()); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OIDC-Claims-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OIDC-Claims-Script.script.json new file mode 100644 index 000000000..da3e08fea --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Alpha-endUserUIClient-OIDC-Claims-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "e1db8a0a-0329-4962-a5bf-ecffaca376ae": { + "_id": "e1db8a0a-0329-4962-a5bf-ecffaca376ae", + "context": "OIDC_CLAIMS", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Used by endUserUIClient", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "lastModifiedDate": 1761154811644, + "name": "Alpha endUserUIClient OIDC Claims Script", + "script": "file://Alpha-endUserUIClient-OIDC-Claims-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Amazon-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Amazon-Profile-Normalization.script.groovy new file mode 100644 index 000000000..05a04f5b1 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Amazon-Profile-Normalization.script.groovy @@ -0,0 +1,18 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +return json(object( + field("id", rawProfile.user_id), + field("displayName", rawProfile.name), + field("email", rawProfile.email), + field("username", rawProfile.email))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Amazon-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Amazon-Profile-Normalization.script.json new file mode 100644 index 000000000..8bc58e517 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Amazon-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30": { + "_id": "6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from Amazon", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Amazon Profile Normalization", + "script": "file://Amazon-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Apple-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Apple-Profile-Normalization.script.groovy new file mode 100644 index 000000000..6d7fc7e3b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Apple-Profile-Normalization.script.groovy @@ -0,0 +1,53 @@ +/* + * Copyright 2021-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + * + * In some common default configurations, the following keys are required to be not empty: + * username, givenName, familyName, email. + * + * From RFC4517: A value of the Directory String syntax is a string of one or more + * arbitrary characters from the Universal Character Set (UCS). + * A zero-length character string is not permitted. + */ + + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.fieldIfNotNull +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +String email = null +String firstName = null +String lastName = null +String username = null +String name + +if (rawProfile.isDefined("email") && rawProfile.email.isNotNull()){ // User can elect to not share their email + email = rawProfile.email.asString() + username = email +} else { + throw new Exception("Email is required") +} +if (rawProfile.isDefined("name") && rawProfile.name.isNotNull()) { + if (rawProfile.name.isDefined("firstName") && rawProfile.name.firstName.isNotNull()) { + firstName = rawProfile.name.firstName.asString() + } + if (rawProfile.name.isDefined("lastName") && rawProfile.name.lastName.isNotNull()) { + lastName = rawProfile.name.lastName.asString() + } +} + +name = (firstName?.trim() ? firstName : "") + (lastName?.trim() ? ((firstName?.trim() ? " " : "") + lastName) : "") +name = (!name?.trim()) ? " " : name + +return json(object( + field("id", rawProfile.get('sub')), + field("displayName", name), + field("email", email), + fieldIfNotNull("givenName", firstName), + fieldIfNotNull("familyName", lastName), + field("username", username))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Apple-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Apple-Profile-Normalization.script.json new file mode 100644 index 000000000..39283d7e8 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Apple-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "484e6246-dbc6-4288-97e6-54e55431402e": { + "_id": "484e6246-dbc6-4288-97e6-54e55431402e", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from Apple", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Apple Profile Normalization", + "script": "file://Apple-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Authentication-Tree-Decision-Node-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Authentication-Tree-Decision-Node-Script.script.js new file mode 100644 index 000000000..d78155005 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Authentication-Tree-Decision-Node-Script.script.js @@ -0,0 +1,6 @@ +/* + - Data made available by nodes that have already executed are available in the sharedState variable. + - The script should set outcome to either "true" or "false". + */ + +outcome = "true"; diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Authentication-Tree-Decision-Node-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Authentication-Tree-Decision-Node-Script.script.json new file mode 100644 index 000000000..bac191479 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Authentication-Tree-Decision-Node-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "01e1a3c0-038b-4c16-956a-6c9d89328cff": { + "_id": "01e1a3c0-038b-4c16-956a-6c9d89328cff", + "context": "AUTHENTICATION_TREE_DECISION_NODE", + "createdBy": "null", + "creationDate": 0, + "default": true, + "description": "Default global script for a scripted decision node", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "null", + "lastModifiedDate": 0, + "name": "Authentication Tree Decision Node Script", + "script": "file://Authentication-Tree-Decision-Node-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Config-Provider-Node-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Config-Provider-Node-Script.script.js new file mode 100644 index 000000000..ad6916155 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Config-Provider-Node-Script.script.js @@ -0,0 +1,67 @@ +/* + * Copyright 2021-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/** + * The following script is a simplified template for understanding how to build + * up a config Map object with custom values. The Config Provider Node will then + * provide this config Map to the desired node type. It is important that the Map + * you build here is named 'config'. + * + * Defined variables: + * + * nodeState - Node State (1) + * Always present, this represents the current values stored in the node state. + * + * idRepository - Profile Data (2) + * Always present, a repository to retrieve user information. + * + * secrets - Credentials and Secrets (3) + * Always present, an interface to access the Secrets API from a scripting context. + * + * requestHeaders (4) - Map (5) + * Always present, an object that provides methods for accessing headers in the login request. + * + * logger - Debug Logging (6) + * Always present, the debug logger instance. + * + * httpClient - HTTP Client (7) + * Always present, the HTTP client that can be used to make external HTTP requests. + * + * realm - String (primitive). + * Always present, the name of the realm the user is authenticating to. + * + * existingSession - Map (5) + * Present if the request contains the session cookie, the user's session object. The returned map from + * SSOToken.getProperties() (8) + * + * requestParameters - Map (5) + * Always present, the object that contains the authentication request parameters. + * + * + * Outputs: + * + * config - Map (5) + * Define and fill a Map object named 'config' with custom values, this will define the configuration for the + * associated node selected in the ConfigProviderNode. + * + * Reference: + * (1) Node State - https://backstage.forgerock.com/docs/idcloud-am/latest/authentication-guide/scripting-api-node.html#scripting-api-node-nodeState + * (2) Profile Data - https://backstage.forgerock.com/docs/am/7.1/authentication-guide/scripting-api-node.html#scripting-api-node-id-repo + * (3) Credentials and Secrets - https://backstage.forgerock.com/docs/am/7.1/authentication-guide/scripting-api-node.html#scripting-api-authn-secrets + * (4) Request Headers - https://backstage.forgerock.com/docs/am/7/authentication-guide/scripting-api-node.html#scripting-api-node-requestHeaders. + * (5) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html + * (6) Debug Logging - https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * (7) HTTP Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. + * (8) SSOToken - https://backstage.forgerock.com/docs/am/7/apidocs/com/iplanet/sso/SSOToken.html. + */ + +config = { + "key0": {"subKey": "value0"}, + "key1": "value1" +}; diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Config-Provider-Node-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Config-Provider-Node-Script.script.json new file mode 100644 index 000000000..c70626852 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Config-Provider-Node-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "5e854779-6ec1-4c39-aeba-0477e0986646": { + "_id": "5e854779-6ec1-4c39-aeba-0477e0986646", + "context": "CONFIG_PROVIDER_NODE", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Script to provide values for a config provider node", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Config Provider Node Script", + "script": "file://Config-Provider-Node-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Client-Side.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Client-Side.script.js new file mode 100644 index 000000000..f92f5db65 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Client-Side.script.js @@ -0,0 +1,254 @@ +/* + * Copyright 2023-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +var fontDetector = (function () { + /** + * JavaScript code to detect available availability of a + * particular font in a browser using JavaScript and CSS. + * + * Author : Lalit Patel + * Website: http://www.lalit.org/lab/javascript-css-font-detect/ + * License: Apache Software License 2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * Version: 0.15 (21 Sep 2009) + * Changed comparision font to default from sans-default-default, + * as in FF3.0 font of child element didn't fallback + * to parent element if the font is missing. + * Version: 0.2 (04 Mar 2012) + * Comparing font against all the 3 generic font families ie, + * 'monospace', 'sans-serif' and 'sans'. If it doesn't match all 3 + * then that font is 100% not available in the system + * Version: 0.3 (24 Mar 2012) + * Replaced sans with serif in the list of baseFonts + */ + /* + * Portions Copyrighted 2013-2025 Ping Identity Corporation + */ + var detector = {}, baseFonts, testString, testSize, h, s, defaultWidth = {}, defaultHeight = {}, index; + + // a font will be compared against all the three default fonts. + // and if it doesn't match all 3 then that font is not available. + baseFonts = ['monospace', 'sans-serif', 'serif']; + + //we use m or w because these two characters take up the maximum width. + // And we use a LLi so that the same matching fonts can get separated + testString = "mmmmmmmmmmlli"; + + //we test using 72px font size, we may use any size. I guess larger the better. + testSize = '72px'; + + h = document.getElementsByTagName("body")[0]; + + // create a SPAN in the document to get the width of the text we use to test + s = document.createElement("span"); + s.style.fontSize = testSize; + s.innerHTML = testString; + for (index in baseFonts) { + //get the default width for the three base fonts + s.style.fontFamily = baseFonts[index]; + h.appendChild(s); + defaultWidth[baseFonts[index]] = s.offsetWidth; //width for the default font + defaultHeight[baseFonts[index]] = s.offsetHeight; //height for the defualt font + h.removeChild(s); + } + + detector.detect = function(font) { + var detected = false, index, matched; + for (index in baseFonts) { + s.style.fontFamily = font + ',' + baseFonts[index]; // name of the font along with the base font for fallback. + h.appendChild(s); + matched = (s.offsetWidth !== defaultWidth[baseFonts[index]] || s.offsetHeight !== defaultHeight[baseFonts[index]]); + h.removeChild(s); + detected = detected || matched; + } + return detected; + }; + + return detector; +}()); +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 2009 Sun Microsystems Inc. All Rights Reserved + * + * The contents of this file are subject to the terms + * of the Common Development and Distribution License + * (the License). You may not use this file except in + * compliance with the License. + * + * You can obtain a copy of the License at + * https://opensso.dev.java.net/public/CDDLv1.0.html or + * opensso/legal/CDDLv1.0.txt + * See the License for the specific language governing + * permission and limitations under the License. + * + * When distributing Covered Code, include this CDDL + * Header Notice in each file and include the License file + * at opensso/legal/CDDLv1.0.txt. + * If applicable, add the following below the CDDL Header, + * with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + */ +/* + * Portions Copyrighted 2013 Syntegrity. + * Portions Copyrighted 2013-2025 Ping Identity Corporation + */ + +var collectScreenInfo = function () { + var screenInfo = {}; + if (screen) { + if (screen.width) { + screenInfo.screenWidth = screen.width; + } + + if (screen.height) { + screenInfo.screenHeight = screen.height; + } + + if (screen.pixelDepth) { + screenInfo.screenColourDepth = screen.pixelDepth; + } + } else { + console.warn("Cannot collect screen information. screen is not defined."); + } + return screenInfo; + }, + collectTimezoneInfo = function () { + var timezoneInfo = {}, offset = new Date().getTimezoneOffset(); + + if (offset) { + timezoneInfo.timezone = offset; + } else { + console.warn("Cannot collect timezone information. timezone is not defined."); + } + + return timezoneInfo; + }, + collectBrowserPluginsInfo = function () { + + if (navigator && navigator.plugins) { + var pluginsInfo = {}, i, plugins = navigator.plugins; + pluginsInfo.installedPlugins = ""; + + for (i = 0; i < plugins.length; i++) { + pluginsInfo.installedPlugins = pluginsInfo.installedPlugins + plugins[i].filename + ";"; + } + + return pluginsInfo; + } else { + console.warn("Cannot collect browser plugin information. navigator.plugins is not defined."); + return {}; + } + + }, +// Getting geolocation takes some time and is done asynchronously, hence need a callback which is called once geolocation is retrieved. + collectGeolocationInfo = function (callback) { + var geolocationInfo = {}, + successCallback = function(position) { + geolocationInfo.longitude = position.coords.longitude; + geolocationInfo.latitude = position.coords.latitude; + callback(geolocationInfo); + }, errorCallback = function(error) { + console.warn("Cannot collect geolocation information. " + error.code + ": " + error.message); + callback(geolocationInfo); + }; + if (navigator && navigator.geolocation) { + // NB: If user chooses 'Not now' on Firefox neither callback gets called + // https://bugzilla.mozilla.org/show_bug.cgi?id=675533 + navigator.geolocation.getCurrentPosition(successCallback, errorCallback); + } else { + console.warn("Cannot collect geolocation information. navigator.geolocation is not defined."); + callback(geolocationInfo); + } + }, + collectBrowserFontsInfo = function () { + var fontsInfo = {}, i, fontsList = ["cursive","monospace","serif","sans-serif","fantasy","default","Arial","Arial Black", + "Arial Narrow","Arial Rounded MT Bold","Bookman Old Style","Bradley Hand ITC","Century","Century Gothic", + "Comic Sans MS","Courier","Courier New","Georgia","Gentium","Impact","King","Lucida Console","Lalit", + "Modena","Monotype Corsiva","Papyrus","Tahoma","TeX","Times","Times New Roman","Trebuchet MS","Verdana", + "Verona"]; + fontsInfo.installedFonts = ""; + + for (i = 0; i < fontsList.length; i++) { + if (fontDetector.detect(fontsList[i])) { + fontsInfo.installedFonts = fontsInfo.installedFonts + fontsList[i] + ";"; + } + } + return fontsInfo; + }, + devicePrint = {}; + +devicePrint.screen = collectScreenInfo(); +devicePrint.timezone = collectTimezoneInfo(); +devicePrint.plugins = collectBrowserPluginsInfo(); +devicePrint.fonts = collectBrowserFontsInfo(); + +if (navigator.userAgent) { + devicePrint.userAgent = navigator.userAgent; +} +if (navigator.appName) { + devicePrint.appName = navigator.appName; +} +if (navigator.appCodeName) { + devicePrint.appCodeName = navigator.appCodeName; +} +if (navigator.appVersion) { + devicePrint.appVersion = navigator.appVersion; +} +if (navigator.appMinorVersion) { + devicePrint.appMinorVersion = navigator.appMinorVersion; +} +if (navigator.buildID) { + devicePrint.buildID = navigator.buildID; +} +if (navigator.platform) { + devicePrint.platform = navigator.platform; +} +if (navigator.cpuClass) { + devicePrint.cpuClass = navigator.cpuClass; +} +if (navigator.oscpu) { + devicePrint.oscpu = navigator.oscpu; +} +if (navigator.product) { + devicePrint.product = navigator.product; +} +if (navigator.productSub) { + devicePrint.productSub = navigator.productSub; +} +if (navigator.vendor) { + devicePrint.vendor = navigator.vendor; +} +if (navigator.vendorSub) { + devicePrint.vendorSub = navigator.vendorSub; +} +if (navigator.language) { + devicePrint.language = navigator.language; +} +if (navigator.userLanguage) { + devicePrint.userLanguage = navigator.userLanguage; +} +if (navigator.browserLanguage) { + devicePrint.browserLanguage = navigator.browserLanguage; +} +if (navigator.systemLanguage) { + devicePrint.systemLanguage = navigator.systemLanguage; +} + +// Attempt to collect geo-location information and return this with the data collected so far. +// Otherwise, if geo-location fails or takes longer than 30 seconds, auto-submit the data collected so far. +autoSubmitDelay = 30000; +output.value = JSON.stringify(devicePrint); +collectGeolocationInfo(function(geolocationInfo) { + devicePrint.geolocation = geolocationInfo; + output.value = JSON.stringify(devicePrint); + submit(); +}); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Client-Side.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Client-Side.script.json new file mode 100644 index 000000000..d532e222d --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Client-Side.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "157298c0-7d31-4059-a95b-eeb08473b7e5": { + "_id": "157298c0-7d31-4059-a95b-eeb08473b7e5", + "context": "AUTHENTICATION_CLIENT_SIDE", + "createdBy": "null", + "creationDate": 0, + "default": true, + "description": "Default global script for client side Device Id (Match) Authentication Module", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "null", + "lastModifiedDate": 0, + "name": "Device Id (Match) - Client Side", + "script": "file://Device-Id-(Match)-Client-Side.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Server-Side.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Server-Side.script.js new file mode 100644 index 000000000..4083cc9d5 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Server-Side.script.js @@ -0,0 +1,831 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 2009 Sun Microsystems Inc. All Rights Reserved + * + * The contents of this file are subject to the terms + * of the Common Development and Distribution License + * (the License). You may not use this file except in + * compliance with the License. + * + * You can obtain a copy of the License at + * https://opensso.dev.java.net/public/CDDLv1.0.html or + * opensso/legal/CDDLv1.0.txt + * See the License for the specific language governing + * permission and limitations under the License. + * + * When distributing Covered Code, include this CDDL + * Header Notice in each file and include the License file + * at opensso/legal/CDDLv1.0.txt. + * If applicable, add the following below the CDDL Header, + * with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + */ +/* + * Portions Copyrighted 2013 Syntegrity. + * Portions Copyrighted 2013-2025 Ping Identity Corporation + */ + +var ScalarComparator = {}, ScreenComparator = {}, MultiValueComparator = {}, UserAgentComparator = {}, GeolocationComparator = {}; + +var config = { + profileExpiration: 30, //in days + maxProfilesAllowed: 5, + maxPenaltyPoints: 0, + attributes: { + screen: { + required: true, + comparator: ScreenComparator, + args: { + penaltyPoints: 50 + } + }, + plugins: { + installedPlugins: { + required: false, + comparator: MultiValueComparator, + args: { + maxPercentageDifference: 10, + maxDifferences: 5, + penaltyPoints: 100 + } + } + }, + fonts: { + installedFonts: { + required: false, + comparator: MultiValueComparator, + args: { + maxPercentageDifference: 10, + maxDifferences: 5, + penaltyPoints: 100 + } + } + }, + timezone: { + timezone: { + required: false, + comparator: ScalarComparator, + args: { + penaltyPoints: 100 + } + } + }, + userAgent: { + required: true, + comparator: UserAgentComparator, + args: { + ignoreVersion: true, + penaltyPoints: 100 + } + }, + geolocation: { + required: false, + comparator: GeolocationComparator, + args: { + allowedRange: 100, //in miles + penaltyPoints: 100 + } + } + } +}; + +//---------------------------------------------------------------------------// +// Comparator functions // +//---------------------------------------------------------------------------// + +var all, any, calculateDistance, calculateIntersection, calculatePercentage, nullOrUndefined, splitAndTrim, + undefinedLocation; + +// ComparisonResult + +/** + * Constructs an instance of a ComparisonResult with the given penalty points. + * + * @param penaltyPoints (Number) The penalty points for the comparison (defaults to 0). + * @param additionalInfoInCurrentValue (boolean) Whether the current value contains more information + * than the stored value (defaults to false). + */ +function ComparisonResult() { + + var penaltyPoints = 0, + additionalInfoInCurrentValue = false; + + if (arguments[0] !== undefined && arguments[1] !== undefined) { + penaltyPoints = arguments[0]; + additionalInfoInCurrentValue = arguments[1]; + } + + if (arguments[0] !== undefined && arguments[1] === undefined) { + if (typeof(arguments[0]) === "boolean") { + additionalInfoInCurrentValue = arguments[0]; + } else { + penaltyPoints = arguments[0]; + } + } + + this.penaltyPoints = penaltyPoints; + this.additionalInfoInCurrentValue = additionalInfoInCurrentValue; + +} + +ComparisonResult.ZERO_PENALTY_POINTS = new ComparisonResult(0); + +/** + * Static method for functional programming. + * + * @return boolean true if comparisonResult.isSuccessful(). + */ +ComparisonResult.isSuccessful = function(comparisonResult) { + return comparisonResult.isSuccessful(); +}; + + +/** + * Static method for functional programming. + * + * @return boolean true if comparisonResult.additionalInfoInCurrentValue. + */ +ComparisonResult.additionalInfoInCurrentValue = function(comparisonResult) { + return comparisonResult.additionalInfoInCurrentValue; +}; + +/** + * Comparison function that can be provided as an argument to array.sort + */ +ComparisonResult.compare = function(first, second) { + if (nullOrUndefined(first) && nullOrUndefined(second)) { + return 0; + } else if (nullOrUndefined(first)) { + return -1; + } else if (nullOrUndefined(second)) { + return 1; + } else { + if (first.penaltyPoints !== second.penaltyPoints) { + return first.penaltyPoints - second.penaltyPoints; + } else { + return (first.additionalInfoInCurrentValue ? 1 : 0) - (second.additionalInfoInCurrentValue ? 1 : 0); + } + } +}; + +/** + * Amalgamates the given ComparisonResult into this ComparisonResult. + * + * @param comparisonResult The ComparisonResult to include. + */ +ComparisonResult.prototype.addComparisonResult = function(comparisonResult) { + this.penaltyPoints += comparisonResult.penaltyPoints; + if (comparisonResult.additionalInfoInCurrentValue) { + this.additionalInfoInCurrentValue = comparisonResult.additionalInfoInCurrentValue; + } +}; + +/** + * Returns true if no penalty points have been assigned for the comparison. + * + * @return boolean true if the comparison was successful. + */ +ComparisonResult.prototype.isSuccessful = function() { + return nullOrUndefined(this.penaltyPoints) || this.penaltyPoints === 0; +}; + +/** + * Compares two simple objects (String|Number) and if they are equal then returns a ComparisonResult with zero + * penalty points assigned, otherwise returns a ComparisonResult with the given number of penalty points assigned. + * + * @param currentValue (String|Number) The current value. + * @param storedValue (String|Number) The stored value. + * @param config: { + * "penaltyPoints": (Number) The number of penalty points. + * } + * @return ComparisonResult. + */ +ScalarComparator.compare = function (currentValue, storedValue, config) { + if (logger.messageEnabled()) { + logger.message("StringComparator.compare:currentValue: " + JSON.stringify(currentValue)); + logger.message("StringComparator.compare:storedValue: " + JSON.stringify(storedValue)); + logger.message("StringComparator.compare:config: " + JSON.stringify(config)); + } + if (config.penaltyPoints === 0) { + return ComparisonResult.ZERO_PENALTY_POINTS; + } + + if (!nullOrUndefined(storedValue)) { + if (nullOrUndefined(currentValue) || currentValue !== storedValue) { + return new ComparisonResult(config.penaltyPoints); + } + } else if (!nullOrUndefined(currentValue)) { + return new ComparisonResult(true); + } + + return ComparisonResult.ZERO_PENALTY_POINTS; +}; + +/** + * Compares two screens and if they are equal then returns a ComparisonResult with zero penalty points assigned, + * otherwise returns a ComparisonResult with the given number of penalty points assigned. + * + * @param currentValue: { + * "screenWidth": (Number) The current client screen width. + * "screenHeight": (Number) The current client screen height. + * "screenColourDepth": (Number) The current client screen colour depth. + * } + * @param storedValue: { + * "screenWidth": (Number) The stored client screen width. + * "screenHeight": (Number) The stored client screen height. + * "screenColourDepth": (Number) The stored client screen colour depth. + * } + * @param config: { + * "penaltyPoints": (Number) The number of penalty points. + * } + * @return ComparisonResult + */ +ScreenComparator.compare = function (currentValue, storedValue, config) { + if (logger.messageEnabled()) { + logger.message("ScreenComparator.compare:currentValue: " + JSON.stringify(currentValue)); + logger.message("ScreenComparator.compare:storedValue: " + JSON.stringify(storedValue)); + logger.message("ScreenComparator.compare:config: " + JSON.stringify(config)); + } + + if (nullOrUndefined(currentValue)) { + currentValue = {screenWidth: null, screenHeight: null, screenColourDepth: null}; + } + if (nullOrUndefined(storedValue)) { + storedValue = {screenWidth: null, screenHeight: null, screenColourDepth: null}; + } + + var comparisonResults = [ + ScalarComparator.compare(currentValue.screenWidth, storedValue.screenWidth, config), + ScalarComparator.compare(currentValue.screenHeight, storedValue.screenHeight, config), + ScalarComparator.compare(currentValue.screenColourDepth, storedValue.screenColourDepth, config)]; + + if (all(comparisonResults, ComparisonResult.isSuccessful)) { + return new ComparisonResult(any(comparisonResults, ComparisonResult.additionalInfoInCurrentValue)); + } else { + return new ComparisonResult(config.penaltyPoints); + } +}; + +/** + * Splits both values using delimiter, trims every value and compares collections of values. + * Returns zero-result for same multi-value attributes. + * + * If collections are not same checks if number of differences is less or equal maxDifferences or + * percentage of difference is less or equal maxPercentageDifference. + * + * If yes then returns zero-result with additional info, else returns penaltyPoints-result. + * + * @param currentValue: (String) The current value. + * @param storedValue: (String) The stored value. + * @param config: { + * "maxPercentageDifference": (Number) The max difference percentage in the values, + * before the penalty is assigned. + * "maxDifferences": (Number) The max number of differences in the values, + * before the penalty points are assigned. + * "penaltyPoints": (Number) The number of penalty points. + * } + * @return ComparisonResult + */ +MultiValueComparator.compare = function (currentValue, storedValue, config) { + if (logger.messageEnabled()) { + logger.message("MultiValueComparator.compare:currentValue: " + JSON.stringify(currentValue)); + logger.message("MultiValueComparator.compare:storedValue: " + JSON.stringify(storedValue)); + logger.message("MultiValueComparator.compare:config: " + JSON.stringify(config)); + } + + var delimiter = ";", + currentValues = splitAndTrim(currentValue, delimiter), + storedValues = splitAndTrim(storedValue, delimiter), + maxNumberOfElements = Math.max(currentValues.length, storedValues.length), + numberOfTheSameElements = calculateIntersection(currentValues, storedValues).length, + numberOfDifferences = maxNumberOfElements - numberOfTheSameElements, + percentageOfDifferences = calculatePercentage(numberOfDifferences, maxNumberOfElements); + + if (nullOrUndefined(storedValue) && !nullOrUndefined(currentValue)) { + return new ComparisonResult(true); + } + + if (logger.messageEnabled()) { + logger.message(numberOfTheSameElements + " of " + maxNumberOfElements + " are same"); + } + + if (maxNumberOfElements === 0) { + logger.message("Ignored because no attributes found in both profiles"); + return ComparisonResult.ZERO_PENALTY_POINTS; + } + + if (numberOfTheSameElements === maxNumberOfElements) { + logger.message("Ignored because all attributes are same"); + return ComparisonResult.ZERO_PENALTY_POINTS; + } + + if (numberOfDifferences > config.maxDifferences) { + if (logger.messageEnabled()) { + logger.message("Would be ignored if not more than " + config.maxDifferences + " differences"); + } + return new ComparisonResult(config.penaltyPoints); + } + + if (percentageOfDifferences > config.maxPercentageDifference) { + if (logger.messageEnabled()) { + logger.message(percentageOfDifferences + " percents are different"); + logger.message("Would be ignored if not more than " + config.maxPercentageDifference + " percent"); + } + return new ComparisonResult(config.penaltyPoints); + } + + if (logger.messageEnabled()) { + logger.message("Ignored because number of differences(" + numberOfDifferences + ") not more than " + + config.maxDifferences); + logger.message(percentageOfDifferences + " percents are different"); + logger.message("Ignored because not more than " + config.maxPercentageDifference + " percent"); + } + return new ComparisonResult(true); +}; + +/** + * Compares two User Agent Strings and if they are equal then returns a ComparisonResult with zero penalty + * points assigned, otherwise returns a ComparisonResult with the given number of penalty points assigned. + * + * @param currentValue (String) The current value. + * @param storedValue (String) The stored value. + * @param config: { + * "ignoreVersion": (boolean) If the version numbers in the User Agent Strings should be ignore + * in the comparison. + * "penaltyPoints": (Number) The number of penalty points. + * } + * @return A ComparisonResult. + */ +UserAgentComparator.compare = function (currentValue, storedValue, config) { + if (logger.messageEnabled()) { + logger.message("UserAgentComparator.compare:currentValue: " + JSON.stringify(currentValue)); + logger.message("UserAgentComparator.compare:storedValue: " + JSON.stringify(storedValue)); + logger.message("UserAgentComparator.compare:config: " + JSON.stringify(config)); + } + + if (config.ignoreVersion) { + // remove version number + currentValue = nullOrUndefined(currentValue) ? null : currentValue.replace(/[\d\.]+/g, "").trim(); + storedValue = nullOrUndefined(storedValue) ? null : storedValue.replace(/[\d\.]+/g, "").trim(); + } + + return ScalarComparator.compare(currentValue, storedValue, config); +}; + +/** + * Compares two locations, taking into account a degree of difference. + * + * @param currentValue: { + * "latitude": (Number) The current latitude. + * "longitude": (Number) The current longitude. + * } + * @param storedValue: { + * "latitude": (Number) The stored latitude. + * "longitude": (Number) The stored longitude. + * } + * @param config: { + * "allowedRange": (Number) The max difference allowed in the two locations, before the penalty is assigned. + * "penaltyPoints": (Number) The number of penalty points. +* } + * @return ComparisonResult + */ +GeolocationComparator.compare = function (currentValue, storedValue, config) { + if (logger.messageEnabled()) { + logger.message("GeolocationComparator.compare:currentValue: " + JSON.stringify(currentValue)); + logger.message("GeolocationComparator.compare:storedValue: " + JSON.stringify(storedValue)); + logger.message("GeolocationComparator.compare:config: " + JSON.stringify(config)); + } + + // Check for undefined stored or current locations + + if (undefinedLocation(currentValue) && undefinedLocation(storedValue)) { + return ComparisonResult.ZERO_PENALTY_POINTS; + } + if (undefinedLocation(currentValue) && !undefinedLocation(storedValue)) { + return new ComparisonResult(config.penaltyPoints); + } + if (!undefinedLocation(currentValue) && undefinedLocation(storedValue)) { + return new ComparisonResult(true); + } + + // Both locations defined, therefore perform comparison + + var distance = calculateDistance(currentValue, storedValue); + + if (logger.messageEnabled()) { + logger.message("Distance between (" + currentValue.latitude + "," + currentValue.longitude + ") and (" + + storedValue.latitude + "," + storedValue.longitude + ") is " + distance + " miles"); + } + + if (parseFloat(distance.toPrecision(5)) === 0) { + logger.message("Location is the same"); + return ComparisonResult.ZERO_PENALTY_POINTS; + } + + if (distance <= config.allowedRange) { + if (logger.messageEnabled()) { + logger.message("Tolerated because distance not more then " + config.allowedRange); + } + return new ComparisonResult(true); + } else { + if (logger.messageEnabled()) { + logger.message("Would be ignored if distance not more then " + config.allowedRange); + } + return new ComparisonResult(config.penaltyPoints); + } +}; + + +//---------------------------------------------------------------------------// +// Device Print Logic - DO NOT MODIFY // +//---------------------------------------------------------------------------// + +// Utility functions + +/** + * Returns true if evaluating function f on each element of the Array a returns true. + * + * @param a: (Array) The array of elements to evaluate + * @param f: (Function) A single argument function for mapping elements of the array to boolean. + * @return boolean. + */ +all = function(a, f) { + var i; + for (i = 0; i < a.length; i++) { + if (f(a[i]) === false) { + return false; + } + } + return true; +}; + +/** + * Returns true if evaluating function f on any element of the Array a returns true. + * + * @param a: (Array) The array of elements to evaluate + * @param f: (Function) A single argument function for mapping elements of the array to boolean. + * @return boolean. + */ +any = function(a, f) { + var i; + for (i = 0; i < a.length; i++) { + if (f(a[i]) === true) { + return true; + } + } + return false; +}; + +/** + * Returns true if the provided location is null or has undefined longitude or latitude values. + * + * @param location: { + * "latitude": (Number) The latitude. + * "longitude": (Number) The longitude. + * } + * @return boolean + */ +undefinedLocation = function(location) { + return nullOrUndefined(location) || nullOrUndefined(location.latitude) || nullOrUndefined(location.longitude); +}; + +/** + * Returns true if the provided value is null or undefined. + * + * @param value: a value of any type + * @return boolean + */ +nullOrUndefined = function(value) { + return value === null || value === undefined; +}; + +/** + * Calculates the distances between the two locations. + * + * @param first: { + * "latitude": (Number) The first latitude. + * "longitude": (Number) The first longitude. + * } + * @param second: { + * "latitude": (Number) The second latitude. + * "longitude": (Number) The second longitude. + * } + * @return Number The distance between the two locations. + */ +calculateDistance = function(first, second) { + var factor = (Math.PI / 180), + theta, + dist; + function degreesToRadians(degrees) { + return degrees * factor; + } + function radiansToDegrees(radians) { + return radians / factor; + } + theta = first.longitude - second.longitude; + dist = Math.sin(degreesToRadians(first.latitude)) * Math.sin(degreesToRadians(second.latitude)) + + Math.cos(degreesToRadians(first.latitude)) * Math.cos(degreesToRadians(second.latitude)) + * Math.cos(degreesToRadians(theta)); + dist = Math.acos(dist); + dist = radiansToDegrees(dist); + dist = dist * 60 * 1.1515; + return dist; +}; + +/** + * Converts a String holding a delimited sequence of values into an array. + * + * @param text (String) The String representation of a delimited sequence of values. + * @param delimiter (String) The character delimiting values within the text String. + * @return (Array) The comma separated values. + */ +splitAndTrim = function(text, delimiter) { + + var results = [], + i, + values, + value; + if (text === null) { + return results; + } + + values = text.split(delimiter); + for (i = 0; i < values.length; i++) { + value = values[i].trim(); + if (value !== "") { + results.push(value); + } + } + + return results; +}; + +/** + * Converts value to a percentage of range. + * + * @param value (Number) The actual number to be converted to a percentage. + * @param range (Number) The total number of values (i.e. represents 100%). + * @return (Number) The percentage. + */ +calculatePercentage = function(value, range) { + if (range === 0) { + return 0; + } + return parseFloat((value / range).toPrecision(2)) * 100; +}; + +/** + * Creates a new array containing only those elements found in both arrays received as arguments. + * + * @param first (Array) The first array. + * @param second (Array) The second array. + * @return (Array) The elements that found in first and second. + */ +calculateIntersection = function(first, second) { + return first.filter(function(element) { + return second.indexOf(element) !== -1; + }); +}; + +function getValue(obj, attributePath) { + var value = obj, + i; + for (i = 0; i < attributePath.length; i++) { + if (value === undefined) { + return null; + } + value = value[attributePath[i]]; + } + return value; +} + + +function isLeafNode(attributeConfig) { + return attributeConfig.comparator !== undefined; +} + +function getAttributePaths(attributeConfig, attributePath) { + + var attributePaths = [], + attributeName, + attrPaths, + attrPath, + i; + + for (attributeName in attributeConfig) { + if (attributeConfig.hasOwnProperty(attributeName)) { + + if (isLeafNode(attributeConfig[attributeName])) { + attrPath = attributePath.slice(); + attrPath.push(attributeName); + attributePaths.push(attrPath); + } else { + attrPath = attributePath.slice(); + attrPath.push(attributeName); + attrPaths = getAttributePaths(attributeConfig[attributeName], attrPath); + for (i = 0; i < attrPaths.length; i++) { + attributePaths.push(attrPaths[i]); + } + } + } + } + + return attributePaths; +} + +function getDevicePrintAttributePaths(attributeConfig) { + return getAttributePaths(attributeConfig, []); +} + +function hasRequiredAttributes(devicePrint, attributeConfig) { + + var attributePaths = getDevicePrintAttributePaths(attributeConfig), + i, + attrValue, + attrConfig; + + for (i = 0; i < attributePaths.length; i++) { + + attrValue = getValue(devicePrint, attributePaths[i]); + attrConfig = getValue(attributeConfig, attributePaths[i]); + + if (attrConfig.required && attrValue === undefined) { + logger.warning("Device Print profile missing required attribute, " + attributePaths[i]); + return false; + } + } + + logger.message("device print has required attributes"); + return true; +} + +function compareDevicePrintProfiles(attributeConfig, devicePrint, devicePrintProfiles, maxPenaltyPoints) { + + var attributePaths = getDevicePrintAttributePaths(attributeConfig), + dao = sharedState.get('_DeviceIdDao'), + results, + j, + aggregatedComparisonResult, + i, + currentValue, + storedValue, + attrConfig, + comparisonResult, + selectedComparisonResult, + selectedProfile, + curDevicePrintProfile, + vals; + + results = []; + for (j = 0; j < devicePrintProfiles.length; j++) { + curDevicePrintProfile = JSON.parse(org.forgerock.json.JsonValue.json(devicePrintProfiles[j])); + aggregatedComparisonResult = new ComparisonResult(); + for (i = 0; i < attributePaths.length; i++) { + + currentValue = getValue(devicePrint, attributePaths[i]); + storedValue = getValue(curDevicePrintProfile.devicePrint, attributePaths[i]); + attrConfig = getValue(attributeConfig, attributePaths[i]); + + if (storedValue === null) { + comparisonResult = new ComparisonResult(attrConfig.penaltyPoints); + } else { + comparisonResult = attrConfig.comparator.compare(currentValue, storedValue, attrConfig.args); + } + + if (logger.messageEnabled()) { + logger.message("Comparing attribute path: " + attributePaths[i] + + ", Comparison result: successful=" + comparisonResult.isSuccessful() + ", penaltyPoints=" + + comparisonResult.penaltyPoints + ", additionalInfoInCurrentValue=" + + comparisonResult.additionalInfoInCurrentValue); + } + aggregatedComparisonResult.addComparisonResult(comparisonResult); + } + if (logger.messageEnabled()) { + logger.message("Aggregated comparison result: successful=" + + aggregatedComparisonResult.isSuccessful() + ", penaltyPoints=" + + aggregatedComparisonResult.penaltyPoints + ", additionalInfoInCurrentValue=" + + aggregatedComparisonResult.additionalInfoInCurrentValue); + } + + results.push({ + key: aggregatedComparisonResult, + value: devicePrintProfiles[j] + }); + } + + if (results.length === 0) { + return null; + } + + results.sort(function(a, b) { + return ComparisonResult.compare(a.key, b.key); + }); + selectedComparisonResult = results[0].key; + if (logger.messageEnabled()) { + logger.message("Selected comparison result: successful=" + selectedComparisonResult.isSuccessful() + + ", penaltyPoints=" + selectedComparisonResult.penaltyPoints + ", additionalInfoInCurrentValue=" + + selectedComparisonResult.additionalInfoInCurrentValue); + } + + selectedProfile = null; + if (selectedComparisonResult.penaltyPoints <= maxPenaltyPoints) { + selectedProfile = results[0].value; + if (logger.messageEnabled()) { + logger.message("Selected profile: " + selectedProfile + + " with " + selectedComparisonResult.penaltyPoints + " penalty points"); + } + } + + if (selectedProfile === null) { + return false; + } + + /* update profile */ + selectedProfile.put("selectionCounter", + java.lang.Integer.valueOf(parseInt(selectedProfile.get("selectionCounter"), 10) + 1)); + selectedProfile.put("lastSelectedDate", java.lang.Long.valueOf(new Date().getTime())); + selectedProfile.put("devicePrint", devicePrint); + + vals = []; + for (i = 0; i < devicePrintProfiles.length; i++) { + vals.push(org.forgerock.json.JsonValue.json(devicePrintProfiles[i])); + } + + dao.saveDeviceProfiles(username, realm, vals); + + return true; +} + +function matchDevicePrint() { + + if (!username) { + logger.error("Username not set. Cannot compare user's device print profiles."); + authState = FAILED; + } else { + + if (logger.messageEnabled()) { + logger.message("client devicePrint: " + clientScriptOutputData); + } + + var getProfiles = function () { + + function isExpiredProfile(devicePrintProfile) { + var expirationDate = new Date(), + lastSelectedDate; + expirationDate.setDate(expirationDate.getDate() - config.profileExpiration); + + lastSelectedDate = new Date(devicePrintProfile.lastSelectedDate); + + return lastSelectedDate < expirationDate; + } + + function getNotExpiredProfiles() { + var profile, + dao = sharedState.get('_DeviceIdDao'), + results = [], + profiles, + iter; + + profiles = dao.getDeviceProfiles(username, realm); + + if (profiles) { + iter = profiles.iterator(); + + while (iter.hasNext()) { + profile = iter.next().getObject(); + if (!isExpiredProfile(profile)) { + results.push(profile); + } + } + } + if (logger.messageEnabled()) { + logger.message("stored non-expired profiles: " + results); + } + return results; + } + + return getNotExpiredProfiles(); + }, + devicePrint = JSON.parse(clientScriptOutputData), + devicePrintProfiles = getProfiles(); + + if (!hasRequiredAttributes(devicePrint, config.attributes)) { + logger.message("devicePrint.hasRequiredAttributes: false"); + // Will fail this module but fall-through to next module. Which should be OTP. + authState = FAILED; + } else if (compareDevicePrintProfiles(config.attributes, devicePrint, devicePrintProfiles, config.maxPenaltyPoints)) { + logger.message("devicePrint.hasValidProfile: true"); + authState = SUCCESS; + } else { + logger.message("devicePrint.hasValidProfile: false"); + sharedState.put('devicePrintProfile', JSON.stringify(devicePrint)); + // Will fail this module but fall-through to next module. Which should be OTP. + authState = FAILED; + } + } +} + +matchDevicePrint(); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Server-Side.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Server-Side.script.json new file mode 100644 index 000000000..3485db70b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Id-(Match)-Server-Side.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "703dab1a-1921-4981-98dd-b8e5349d8548": { + "_id": "703dab1a-1921-4981-98dd-b8e5349d8548", + "context": "AUTHENTICATION_SERVER_SIDE", + "createdBy": "null", + "creationDate": 0, + "default": true, + "description": "Default global script for server side Device Id (Match) Authentication Module", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "null", + "lastModifiedDate": 0, + "name": "Device Id (Match) - Server Side", + "script": "file://Device-Id-(Match)-Server-Side.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Profile-Match-Template-Decision-Node-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Profile-Match-Template-Decision-Node-Script.script.js new file mode 100644 index 000000000..45eb79b6e --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Profile-Match-Template-Decision-Node-Script.script.js @@ -0,0 +1,82 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/** ****************************************************************** + * + * The following script is a simplified template for understanding + * the basics of device matching. _This is not functionally complete._ + * For a functionally complete script as well as a development toolkit, + * visit https://github.com/ForgeRock/forgerock-device-match-script. + * + * Global node variables accessible within this scope: + * 1. `sharedState` provides access to incoming request + * 2. `deviceProfilesDao` provides access to stored profiles + * 3. `outcome` variable maps to auth tree node outcomes; values are + * 'true', 'false', or 'unknownDevice' (notice _all_ are strings). + * ******************************************************************/ + +/** + * Get the incoming request's device profile. + * Returns serialized JSON (type string); parsing this will result a + * native JS object. + */ +var incomingJson = sharedState.get('forgeRock.device.profile').toString(); +var incoming = JSON.parse(incomingJson); + +/** + * Get the incoming user's username and realm. + * Notice the use of `.asString()`. + */ +var username = sharedState.get("username").asString(); +var realm = sharedState.get("realm").asString(); + +/** + * Get the user's stored profiles for appropriate realm. + * Returns a _special_ object with methods for profile data + */ +var storedProfiles = deviceProfilesDao.getDeviceProfiles(username, realm); + +// Default to `outcome` of 'unknownDevice' +outcome = 'unknownDevice'; + +if (storedProfiles) { + var i = 0; + // NOTE: `.size()` method returns the number of stored profiles + var len = storedProfiles.size(); + + for (i; i < len; i++) { + /** + * Get the stored profile. + * Returns serialized JSON (type string); parsing this will result + * a native JS object. + */ + var storedJson = storedProfiles.get(i); + var stored = JSON.parse(storedJson); + + /** + * Find a stored profile with the same identifier. + */ + if (incoming.identifier === stored.identifier) { + + /** + * Now that you've found the appropriate profile, you will perform + * the logic here to match the values of the `incoming` profile + * with that of the `stored` profile. + * + * The result of the matching logic is assigned to `outcome`. Since + * we have profiles of the same identifier, the value (type string) + * should now be either 'true' or 'false' (properties matched or not). + * + * For more information about this topic, visit this Github repo: + * https://github.com/ForgeRock/forgerock-device-match-script + */ + outcome = 'false'; + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Profile-Match-Template-Decision-Node-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Profile-Match-Template-Decision-Node-Script.script.json new file mode 100644 index 000000000..88cecca87 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Device-Profile-Match-Template-Decision-Node-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "13e3f263-9cd3-4844-8d1c-040fd0dd02eb": { + "_id": "13e3f263-9cd3-4844-8d1c-040fd0dd02eb", + "context": "AUTHENTICATION_TREE_DECISION_NODE", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script template for Device Profile Match decision node script for Authentication Tree", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Device Profile Match Template - Decision Node Script", + "script": "file://Device-Profile-Match-Template-Decision-Node-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Facebook-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Facebook-Profile-Normalization.script.groovy new file mode 100644 index 000000000..a2e75ed7c --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Facebook-Profile-Normalization.script.groovy @@ -0,0 +1,21 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +return json(object( + field("id", rawProfile.id), + field("displayName", rawProfile.name), + field("givenName", rawProfile.first_name), + field("familyName", rawProfile.last_name), + field("photoUrl", rawProfile.picture.data.url), + field("email", rawProfile.email), + field("username", rawProfile.email))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Facebook-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Facebook-Profile-Normalization.script.json new file mode 100644 index 000000000..de5ee7d89 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Facebook-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "bae1d54a-e97d-4997-aa5d-c027f21af82c": { + "_id": "bae1d54a-e97d-4997-aa5d-c027f21af82c", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from Facebook", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Facebook Profile Normalization", + "script": "file://Facebook-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.js new file mode 100644 index 000000000..b537060bd --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.js @@ -0,0 +1,9 @@ +/* + * Copyright 2023-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ +// Script is intentionally empty diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.json new file mode 100644 index 000000000..d736f2593 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "c234ba0b-58a1-4cfd-9567-09edde980745": { + "_id": "c234ba0b-58a1-4cfd-9567-09edde980745", + "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "createdBy": "null", + "creationDate": 1433147666269, + "default": true, + "description": "Internal token modification script", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "null", + "lastModifiedDate": 0, + "name": "ForgeRock Internal: OAuth2 Access Token Modification Script", + "script": "file://ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OIDC-Claims-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OIDC-Claims-Script.script.js new file mode 100644 index 000000000..b2f53ad69 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OIDC-Claims-Script.script.js @@ -0,0 +1,621 @@ +/* + * Copyright 2014-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script computes claim values returned in ID tokens and/or at the UserInfo Endpoint. + * The claim values are computed for: + * the claims derived from the requested scopes, + * the claims provided by the authorization server, + * and the claims requested by the client via the claims parameter. + * + * In the CONFIGURATION AND CUSTOMIZATION section, you can + * define the scope-to-claims mapping, and + * assign to each claim a resolver function that will compute the claim value. + * + * Defined variables (class references are provided below): + * scopes - Set (6). + * Always present, the requested scopes. + * claims - Map (5). + * Always present, default server provided claims. + * claimObjects - List (7, 2). + * Always present, the default server provided claims. + * requestedClaims - Map> (5). + * Always present, not empty if the request contains the claims parameter and the server has enabled + * claims_parameter_supported. A map of the requested claims to possible values, otherwise empty; + * requested claims with no requested values will have a key but no value in the map. A key with + * a single value in its Set (6) indicates that this is the only value that should be returned. + * requestedTypedClaims - List (7, 2). + * Always present, the requested claims. + * Requested claims with no requested values will have a claim with no values. + * A claim with a single value indicates this is the only value that should be returned. + * claimsLocales - List (7). + * The values from the 'claims_locales' parameter. + * See https://openid.net/specs/openid-connect-core-1_0.html#ClaimsLanguagesAndScripts for the OIDC specification details. + * requestProperties - Unmodifiable Map (5). + * Always present, contains a map of request properties: + * requestUri - The request URI. + * realm - The realm that the request relates to. + * requestParams - A map of the request params and/or posted data. + * Each value is a list of one or more properties. + * Please note that these should be handled in accordance with OWASP best practices: + * https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection. + * clientProperties - Unmodifiable Map (5). + * Present if the client specified in the request was identified, contains a map of client properties: + * clientId - The client's URI for the request locale. + * allowedGrantTypes - List of the allowed grant types (org.forgerock.oauth2.core.GrantType) for the client. + * allowedResponseTypes - List of the allowed response types for the client. + * allowedScopes - List of the allowed scopes for the client. + * customProperties - A map of the custom properties of the client. + * Lists or maps will be included as sub-maps; for example: + * customMap[Key1]=Value1 will be returned as customMap -> Key1 -> Value1. + * To add custom properties to a client, update the Custom Properties field + * in AM Console > Realm Name > Applications > OAuth 2.0 > Clients > Client ID > Advanced. + * identity - AMIdentity (3). + * Always present, the identity of the resource owner. + * session - SSOToken (4). + * Present if the request contains the session cookie, the user's session object. + * scriptName - String (primitive). + * Always present, the display name of the script. + * logger - Always present, the "OAuth2Provider" debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding files will be prefixed with: scripts.OIDC_CLAIMS. + * httpClient - HTTP Client (8). + * Always present, the HTTP Client instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * In order to use the client, you may need to add + * org.forgerock.http.Client, + * org.forgerock.http.protocol.*, + * and org.forgerock.util.promise.PromiseImpl + * to the allowed Java classes in the scripting engine configuration, as described in: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/script-engine-security.html + * + * Return - a new UserInfoClaims(Map values, Map> compositeScopes) (1) object. + * The result of the last statement in the script is returned to the server. + * Currently, the Immediately Invoked Function Expression (also known as Self-Executing Anonymous Function) + * is the last (and only) statement in this script, and its return value will become the script result. + * Do not use "return variable" statement outside of a function definition. + * See RESULTS section for additional details. + * + * Class reference: + * (1) UserInfoClaims - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html. + * (2) Claim - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html). + * An instance of org.forgerock.openidconnect.Claim has methods to access + * the claim name, requested values, locale, and whether the claim is essential. + * (3) AMIdentity - https://backstage.forgerock.com/docs/am/7/apidocs/com/sun/identity/idm/AMIdentity.html. + * (4) SSOToken - https://backstage.forgerock.com/docs/am/7/apidocs/com/iplanet/sso/SSOToken.html. + * (5) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html, + * or https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/LinkedHashMap.html. + * (6) Set - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashSet.html. + * (7) List - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayList.html. + * (8) Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. +*/ + +(function () { + // SETUP + + /** + * Claim processing utilities. + * An object that contains reusable functions for processing claims. + * @see CLAIM PROCESSING UTILITIES section for details. + */ + var utils = getUtils(); + + // CONFIGURATION AND CUSTOMIZATION + + /** + * OAuth 2.0 scope values (scopes) can be used by the Client to request OIDC claims. + * + * Call this configuration method, and pass in as the first argument + * an object that maps a scope value to an array of claim names + * to specify which claims need to be processed and returned for the requested scopes. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims} + * for the scope values that could be used to request claims as defined in the OIDC specification. + * + * Below, find a default configuration that is expected to work in the current environment. + * + * CUSTOMIZATION + * You can choose the claim names returned for a scope. + */ + utils.setScopeClaimsMap({ + profile: [ + 'name', + 'family_name', + 'given_name', + 'zoneinfo', + 'locale' + ], + email: ['email'], + address: ['address'], + phone: ['phone_number'] + }); + + /** + * In this script, each claim + * derived from the requested scopes, + * provided by the authorization server, and + * requested by the client via the claims parameter + * will be processed by a function associated with the claim name. + * + * Call this configuration method, and pass in as the first argument + * an object that maps a claim name to a resolver function, + * which will be automatically executed for each claim processed by the script. + * + * The claim resolver function will receive the requested claim information + * in an instance of org.forgerock.openidconnect.Claim as the first argument. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} + * for details on the Claim class. + * + * If the claim resolver function returns a value, + * other than undefined or null, + * the claim will be included in the script's results. + * + * The Claim instance provides methods to check + * what the name of the claim is, + * which values the claim request contains, + * whether the claim is essential, and + * which locale the claim is associated with. + * The resolver function can consider this information when computing and returning the claim value. + * + * Below, find a default configuration that is expected to work in the current environment. + * A reusable function, utils.getUserProfileClaimResolver(String attribute-name), + * is called to return a claim resolver function based on a user profile attribute. + * @see CLAIM RESOLVERS section for the implementation details and examples. + * For the address claim, an example of a claim resolver that uses another claim resolver is provided. + * + * CUSTOMIZATION + * You can reuse the predefined utils methods with your custom arguments. + * You can also specify a custom resolver function for a claim name, + * that will compute and return the claim value—as shown in the commented out example below. + */ + utils.setClaimResolvers({ + /* + // An example of a simple claim resolver function that is defined for a claim + // directly in the configuration object: + custom-claim-name: function (requestedClaim) { + // In this case, initially, the claim value comes straight from a user profile attribute value: + var claimValue = identity.getAttribute('custom-attribute-name').toArray()[0] + + // Optionally, provide additional logic for processing (filtering, formatting, etc.) the claim value. + // You can use: + // requestedClaim.getName() + // requestedClaim.getValues() + // requestedClaim.getLocale() + // requestedClaim.isEssential() + + return claimValue + }, + */ + /** + * The use of utils.getUserProfileClaimResolver shows how + * an argument passed to a function that returns a claim resolver + * becomes available to the resolver function (via its lexical context). + */ + name: utils.getUserProfileClaimResolver('cn'), + family_name: utils.getUserProfileClaimResolver('sn'), + given_name: utils.getUserProfileClaimResolver('givenname'), + zoneinfo: utils.getUserProfileClaimResolver('preferredtimezone'), + locale: utils.getUserProfileClaimResolver('preferredlocale'), + email: utils.getUserProfileClaimResolver('mail'), + address: utils.getAddressClaimResolver( + /** + * The passed in user profile claim resolver function + * can be used by the address claim resolver function + * to obtain the claim value to be formatted as per the OIDC specification: + * @see https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim. + */ + utils.getUserProfileClaimResolver('postaladdress') + ), + phone_number: utils.getUserProfileClaimResolver('telephonenumber') + }); + + // CLAIM PROCESSING UTILITIES + + /** + * @returns {object} An object that contains reusable claim processing utilities. + * @see PUBLIC METHODS section and the return statement for the list of exported functions. + */ + function getUtils () { + // IMPORT JAVA + + /** + * Provides Java scripting functionality. + * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Scripting_Java#javaimporter_constructor}. + */ + var frJava = JavaImporter( + org.forgerock.oauth2.core.exceptions.InvalidRequestException, + org.forgerock.oauth2.core.UserInfoClaims, + org.forgerock.openidconnect.Claim, + + java.util.LinkedHashMap, + java.util.ArrayList + ); + + // SET UP CONFIGURATION + + /** + * Placeholder for a configuration option that contains + * an object that maps the supported scope values (scopes) + * and the corresponding claim names for each scope value. + */ + var scopeClaimsMap; + + /** + * Placeholder for a configuration option that contains + * an object that maps the supported claim names + * and the resolver functions returning the claim value. + */ + var claimResolvers; + + /** + * A (public) method that accepts an object that maps the supported scopes and the corresponding claim names, + * and assigns it to a (private) variable that serves as a configuration option. + * @param {object} params - An object that maps each supported scope value to an array of claim names, + * in order to specify which claims need to be processed for the requested scopes. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims} for details. + * @param {string[]} [params.profile] - An array of claim names to be returned if the profile scope is requested. + * @param {string[]} [params.email] - An array of claim names to be returned if the email scope is requested. + * @param {string[]} [params.address] - An array of claim names to be returned if the address scope is requested. + * @param {string[]} [params.phone] - An array of claim names to be returned if the phone scope is requested. + * @returns {undefined} + */ + function setScopeClaimsMap(params) { + scopeClaimsMap = params; + } + + /** + * A (public) method that accepts an object that maps the supported claim names + * and the resolver functions returning the claim value, + * and assigns it to a (private) variable that serves as a configuration option. + * @param {object} params - An object that maps + * each supported claim name to a function that computes and returns the claim value. + */ + function setClaimResolvers(params) { + claimResolvers = params; + } + + // CLAIM RESOLVERS + + /** + * Claim resolvers are functions that return a claim value. + * @param {*} + * @returns {*} + */ + + /** + * Defines a claim resolver based on a user profile attribute. + * @param {string} attributeName - Name of the user profile attribute. + * @returns {function} A function that will determine the claim value + * based on the user profile attribute and the (requested) claim properties. + */ + function getUserProfileClaimResolver (attributeName) { + /** + * Resolves a claim with a user profile attribute value. + * Returns undefined if the identity attribute is not populated, + * OR if the claim has requested values that do not contain the identity attribute value. + * ATTENTION: the aforementioned comparison is case-sensitive. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {string|HashSet|undefined} + */ + function resolveClaim(claim) { + var userProfileValue; + + if (identity) { + userProfileValue = getClaimValueFromSet(claim, identity.getAttribute(attributeName)); + + if (userProfileValue && !userProfileValue.isEmpty()) { + if (!claim.getValues() || claim.getValues().isEmpty() || claim.getValues().contains(userProfileValue)) { + return userProfileValue; + } + } + } + } + + return resolveClaim; + } + + /** + * Returns an address claim resolver based on a claim value obtained with another claim resolver. + * @param {function} resolveClaim - A function that returns a claim value. + * @returns {function} A function that will accept a claim as an argument, + * run the claim resolver function for the claim and obtain the claim value, + * and apply additional formatting to the value before returning it. + */ + function getAddressClaimResolver (resolveClaim) { + /** + * Creates an address claim object from a value returned by a claim resolver, + * and returns the address claim object as the claim value. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim}. + * The claim value is obtained with a claim resolving function available from the closure. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {java.util.LinkedHashMap|undefined} The address claim object created from a claim value. + */ + function resolveAddressClaim(claim) { + var claimValue = resolveClaim(claim); + var addressObject; + + if (isClaimValueValid(claimValue)) { + addressObject = new frJava.LinkedHashMap(); + + addressObject.put('formatted', claimValue); + + return addressObject; + } + } + + return resolveAddressClaim; + } + + /** + * Returns an essential claim resolver based on a claim value obtained with another claim resolver. + * @param {function} resolveClaim - A function that returns a claim value. + * @returns {function} A function that will accept a claim as an argument, + * run the claim resolver function for the claim and obtain the claim value, + * and apply additional logic for essential claims. + */ + function getEssentialClaimResolver (resolveClaim) { + /** + * Returns a claim value or throws an error. + * The claim value is obtained with a claim resolving function available from the closure. + * Throws an exception if the claim is essential and no value is returned for the claim. + * + * Use of this resolver is optional. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#IndividualClaimsRequests} stating: + * "Note that even if the Claims are not available because the End-User did not authorize their release or they are not present, + * the Authorization Server MUST NOT generate an error when Claims are not returned, whether they are Essential or Voluntary, + * unless otherwise specified in the description of the specific claim." + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} + * @throws {org.forgerock.oauth2.core.exceptions.InvalidRequestException} + */ + function resolveEssentialClaim(claim) { + var claimValue = resolveClaim(claim); + + if (claim.isEssential() && !isClaimValueValid(claimValue)) { + throw new frJava.InvalidRequestException('Could not provide value for essential claim: ' + claim.getName()); + } + + return claimValue; + } + + return resolveEssentialClaim; + } + + /** + * Provides default resolution for a claim. + * Use it if a claim-specific resolver is not defined in the configuration. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} A single value associated with this claim. + */ + function resolveAnyClaim (claim) { + if (claim.getValues().size() === 1) { + return claim.getValues().toArray()[0]; + } + } + + // UTILITIES + + /** + * Returns claim value from a set. + * If the set contains a single value, returns the value. + * If the set contains multiple values, returns the set. + * Otherwise, returns undefined. + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @param {java.util.HashSet} set The set—for example, a user profile attribute value. + * @returns {string|java.util.HashSet|undefined} + */ + function getClaimValueFromSet (claim, set) { + if (set && set.size()) { + if (set.size() === 1) { + return set.toArray()[0]; + } else { + return set; + } + } else if (logger.warningEnabled()) { + logger.warning('OIDC Claims script. Got an empty set for claim: ' + claim.getName()); + } + } + + function isClaimValueValid (claimValue) { + if (typeof claimValue === 'undefined' || claimValue === null) { + return false; + } + + return true; + } + + // CLAIM PROCESSING + + /** + * Constructs and returns an object populated with the computed claim values + * and the requested scopes mapped to the claim names. + * @returns {org.forgerock.oauth2.core.UserInfoClaims} The object to be returned to the authorization server. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html}. + * @see RESULTS section for the use of this function. + */ + function getUserInfoClaims () { + return new frJava.UserInfoClaims(getComputedClaims(), getCompositeScopes()); + } + + /** + * Creates a map of (requested) claim names populated with the computed claim values. + * @returns {java.util.LinkedHashMap} + * A map of the requested claim names and the corresponding claim values. + */ + function getComputedClaims () { + /** + * Creates a complete list of claim objects from: + * the claims derived from the scopes, + * the claims provided by the authorization server, + * and the claims requested by the client. + * @returns {java.util.ArrayList} + * Returns a complete list of org.forgerock.openidconnect.Claim objects available to the script. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for the claim object details. + */ + function getClaims() { + /** + * Returns a list of claim objects for the requested scopes. + * Uses the scopeClaimsMap configuration option to derive the claim names; + * no other properties of a claim derived from a scope are populated. + * @returns {java.util.ArrayList} + * A list of org.forgerock.openidconnect.Claim objects derived from the requested scopes. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for the claim object details. + */ + function convertScopeToClaims() { + var claims = new frJava.ArrayList(); + + scopes.toArray().forEach(function (scope) { + if (String(scope) !== 'openid' && scopeClaimsMap[scope]) { + scopeClaimsMap[scope].forEach(function (claimName) { + claims.add(new frJava.Claim(claimName)); + }); + } + }); + + return claims; + } + + var claims = new frJava.ArrayList(); + + claims.addAll(convertScopeToClaims()); + claims.addAll(claimObjects); + claims.addAll(requestedTypedClaims); + + return claims; + } + + /** + * Computes and returns a claim value. + * To obtain the claim value, uses the resolver function specified for the claim in the claimResolvers configuration object. + * @see claimResolvers + * If no resolver function is found, uses the default claim resolver function. + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} Claim value. + * @throws {org.forgerock.oauth2.core.exceptions.InvalidRequestException} + * Rethrows this exception if a claim resolver throws it. + * You can throw org.forgerock.oauth2.core.exceptions.InvalidRequestException from your custom claim resolver + * if you want to terminate the claim processing. + */ + function computeClaim(claim) { + var resolveClaim; + var message; + + try { + resolveClaim = claimResolvers[claim.getName()] || resolveAnyClaim; + + return resolveClaim(claim); + } catch (e) { + message = 'OIDC Claims script exception. Unable to resolve OIDC Claim. ' + e; + + if (String(e).indexOf('org.forgerock.oauth2.core.exceptions.InvalidRequestException') !== -1) { + throw e; + } + + if (logger.warningEnabled()) { + logger.warning(message); + } + } + } + + var computedClaims = new frJava.LinkedHashMap(); + + getClaims().toArray().forEach(function (claim) { + var claimValue = computeClaim(claim); + + if (isClaimValueValid(claimValue)) { + computedClaims.put(claim.getName(), claimValue); + } else { + /** + * If a claim has been processed, but appears in the list again, + * and its value cannot be computed under the new conditions, + * the claim is removed from the final result. + * + * For example, a claim could be mapped to a scope and found in the user profile, + * but also requested by the client with required values that don't match the computed one. + * @see {link https://openid.net/specs/openid-connect-core-1_0.html#IndividualClaimsRequests}. + * for the relevant OIDC specification details. + */ + computedClaims.remove(claim.getName()); + } + }); + + return computedClaims; + } + + /** + * Creates a map of requested scopes and the corresponding claim names. + * @returns {java.util.LinkedHashMap} + */ + function getCompositeScopes () { + var compositeScopes = new frJava.LinkedHashMap(); + + scopes.toArray().forEach(function (scope) { + var scopeClaims = new frJava.ArrayList(); + + if (scopeClaimsMap[scope]) { + scopeClaimsMap[scope].forEach(function (claimName) { + scopeClaims.add(claimName); + }); + } + + if (scopeClaims.size()) { + compositeScopes.put(scope, scopeClaims); + } + }); + + return compositeScopes; + } + + // PUBLIC METHODS + + return { + setScopeClaimsMap: setScopeClaimsMap, + setClaimResolvers: setClaimResolvers, + getUserProfileClaimResolver: getUserProfileClaimResolver, + getAddressClaimResolver: getAddressClaimResolver, + getEssentialClaimResolver: getEssentialClaimResolver, + getUserInfoClaims: getUserInfoClaims + }; + } + + // RESULTS + + /** + * This script returns an instance of the org.forgerock.oauth2.core.UserInfoClaims class + * populated with the computed claim values and + * the requested scopes mapped to the claim names. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html}. + * + * Assigning it to a variable gives you an opportunity + * to log the content of the returned value during development. + */ + var userInfoClaims = utils.getUserInfoClaims(); + + /* + logger.error(scriptName + ' results:') + logger.error('Values: ' + userInfoClaims.getValues()) + logger.error('Scopes: ' + userInfoClaims.getCompositeScopes()) + */ + + return userInfoClaims; +}()); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OIDC-Claims-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OIDC-Claims-Script.script.json new file mode 100644 index 000000000..e9e2d5149 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/ForgeRock-Internal-OIDC-Claims-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "1f389a3d-21cf-417c-a6d3-42ea620071f0": { + "_id": "1f389a3d-21cf-417c-a6d3-42ea620071f0", + "context": "OIDC_CLAIMS", + "createdBy": "null", + "creationDate": 0, + "default": true, + "description": "Internal OIDC Claims script", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "null", + "lastModifiedDate": 0, + "name": "ForgeRock Internal: OIDC Claims Script", + "script": "file://ForgeRock-Internal-OIDC-Claims-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/GitHub-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/GitHub-Profile-Normalization.script.groovy new file mode 100644 index 000000000..d8d00c7d3 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/GitHub-Profile-Normalization.script.groovy @@ -0,0 +1,17 @@ +/* + * Copyright 2022-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +return json(object( + field("id", rawProfile.id), + field("displayName", rawProfile.name), + field("username", rawProfile.login))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/GitHub-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/GitHub-Profile-Normalization.script.json new file mode 100644 index 000000000..22fba543d --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/GitHub-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "a7a78773-445b-4eca-bb93-409e86bced81": { + "_id": "a7a78773-445b-4eca-bb93-409e86bced81", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from GitHub", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "GitHub Profile Normalization", + "script": "file://GitHub-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Google-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Google-Profile-Normalization.script.groovy new file mode 100644 index 000000000..f3f02676f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Google-Profile-Normalization.script.groovy @@ -0,0 +1,22 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +return json(object( + field("id", rawProfile.sub), + field("displayName", rawProfile.name), + field("givenName", rawProfile.given_name), + field("familyName", rawProfile.family_name), + field("photoUrl", rawProfile.picture), + field("email", rawProfile.email), + field("username", rawProfile.email), + field("locale", rawProfile.locale))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Google-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Google-Profile-Normalization.script.json new file mode 100644 index 000000000..5bab3003b --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Google-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "58d29080-4563-480b-89bb-1e7719776a21": { + "_id": "58d29080-4563-480b-89bb-1e7719776a21", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from Google", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Google Profile Normalization", + "script": "file://Google-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Instagram-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Instagram-Profile-Normalization.script.groovy new file mode 100644 index 000000000..083831a69 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Instagram-Profile-Normalization.script.groovy @@ -0,0 +1,16 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +return json(object( + field("id", rawProfile.id), + field("username", rawProfile.username))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Instagram-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Instagram-Profile-Normalization.script.json new file mode 100644 index 000000000..de7f5b2d8 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Instagram-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "1244e639-4a31-401d-ab61-d75133d8dc9e": { + "_id": "1244e639-4a31-401d-ab61-d75133d8dc9e", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from Instagram", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Instagram Profile Normalization", + "script": "file://Instagram-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Itsme-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Itsme-Profile-Normalization.script.groovy new file mode 100644 index 000000000..da0ae20ff --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Itsme-Profile-Normalization.script.groovy @@ -0,0 +1,23 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +import org.forgerock.json.JsonValue + +JsonValue managedUser = json(object( + field("id", rawProfile.sub), + field("displayName", rawProfile.name), + field("givenName", rawProfile.given_name), + field("familyName", rawProfile.family_name), + field("username", rawProfile.email), + field("email", rawProfile.email))) +return managedUser diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Itsme-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Itsme-Profile-Normalization.script.json new file mode 100644 index 000000000..139e65ee6 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Itsme-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "3d97c436-42c0-4dd0-a571-ea6f34f752b3": { + "_id": "3d97c436-42c0-4dd0-a571-ea6f34f752b3", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from Itsme", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Itsme Profile Normalization", + "script": "file://Itsme-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LINE-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LINE-Profile-Normalization.script.groovy new file mode 100644 index 000000000..145d8d7a1 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LINE-Profile-Normalization.script.groovy @@ -0,0 +1,44 @@ +/* + * Copyright 2024-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.fieldIfNotNull +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +// LINE does not return the email from the userInfo endpoint but should return it from the token endpoint and therefore +// it should be set in the shared state +var email = null +var username = null +var firstName = null +var lastName = null + +if (sharedState.get("claims_set") != null && sharedState.get("claims_set").email != null) { + email = sharedState.get("claims_set").email + username = email +} else { + // Ensure that your LINE provider is configured to provide users' email addresses + throw new Exception("Email is required") +} + +if (rawProfile.isDefined("name") && rawProfile.name.isNotNull()) { + var splitName = rawProfile.name.asString().split(" ") + firstName = splitName[0] + lastName = splitName[-1] +} + +return json(object( + field("id", rawProfile.sub), + field("displayName", rawProfile.name), + field("photoUrl", rawProfile.picture), + field("email", email), + fieldIfNotNull("givenName", firstName), + fieldIfNotNull("familyName", lastName), + field("username", username))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LINE-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LINE-Profile-Normalization.script.json new file mode 100644 index 000000000..a0d5e698a --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LINE-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "60609c1a-4cef-4729-a417-354aafdebf3f": { + "_id": "60609c1a-4cef-4729-a417-354aafdebf3f", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from LINE", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "LINE Profile Normalization", + "script": "file://LINE-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Library-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Library-Script.script.js new file mode 100644 index 000000000..2f301acc5 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Library-Script.script.js @@ -0,0 +1,34 @@ +/* + * Copyright 2022-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This is an example library script with methods that can be used in other scripts. + * To reference it, use the following: + * + * var library = require("Library Script"); + * + * library.logError(logger, "Error message"); + * library.logDebug(logger, "Debug message"); + */ + +function logError(log, errorMessage) { + log.error(errorMessage); +} + +function logWarning(log, warningMessage) { + log.warn(warningMessage); +} + +exports.logError = logError; +exports.logWarning = logWarning; + +// Alternatively, exports can be declared using an inline arrow function + +exports.logInfo = (log, infoMessage) => log.info(infoMessage); +exports.logDebug = (log, debugMessage) => log.debug(debugMessage); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Library-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Library-Script.script.json new file mode 100644 index 000000000..e2c95f312 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Library-Script.script.json @@ -0,0 +1,40 @@ +{ + "script": { + "6c49bebe-3a62-11ed-a261-0242ac120002": { + "_id": "6c49bebe-3a62-11ed-a261-0242ac120002", + "context": "LIBRARY", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global library script to be referenced from other scripts", + "evaluatorVersion": "2.0", + "exports": [ + { + "arity": 2, + "id": "logError", + "type": "Function" + }, + { + "arity": 2, + "id": "logWarning", + "type": "Function" + }, + { + "arity": 2, + "id": "logInfo", + "type": "Function" + }, + { + "arity": 2, + "id": "logDebug", + "type": "Function" + } + ], + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Library Script", + "script": "file://Library-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization-(Legacy).script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization-(Legacy).script.groovy new file mode 100644 index 000000000..211a7785f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization-(Legacy).script.groovy @@ -0,0 +1,20 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +return json(object( + field("id", rawProfile.id), + field("givenName", rawProfile.firstName.localized.get(0)), + field("familyName", rawProfile.lastName.localized.get(0)), + field("photoUrl", rawProfile.profilePicture.displayImage), + field("email", rawProfile.elements.get(0).get("handle~").emailAddress), + field("username", rawProfile.elements.get(0).get("handle~").emailAddress))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization-(Legacy).script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization-(Legacy).script.json new file mode 100644 index 000000000..f1796fb6a --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization-(Legacy).script.json @@ -0,0 +1,18 @@ +{ + "script": { + "8862ca8f-7770-4af5-a888-ac0df0947f36": { + "_id": "8862ca8f-7770-4af5-a888-ac0df0947f36", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from LinkedIn (Legacy)", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "LinkedIn Profile Normalization (Legacy)", + "script": "file://LinkedIn-Profile-Normalization-(Legacy).script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization.script.groovy new file mode 100644 index 000000000..e481a4eac --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization.script.groovy @@ -0,0 +1,23 @@ +/* + * Copyright 2024-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +return json(object( + field("id", rawProfile.sub), + field("displayName", rawProfile.name), + field("givenName", rawProfile.given_name), + field("familyName", rawProfile.family_name), + field("photoUrl", rawProfile.picture), + field("email", rawProfile.email), + field("emailVerified", rawProfile.email_verified), + field("username", rawProfile.email))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization.script.json new file mode 100644 index 000000000..4b4775605 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/LinkedIn-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "b4f3facb-c754-4e7f-b1c0-f4d46f592126": { + "_id": "b4f3facb-c754-4e7f-b1c0-f4d46f592126", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from LinkedIn", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "LinkedIn Profile Normalization", + "script": "file://LinkedIn-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Microsoft-Profile-Normalization.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Microsoft-Profile-Normalization.script.groovy new file mode 100644 index 000000000..5a9545cad --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Microsoft-Profile-Normalization.script.groovy @@ -0,0 +1,20 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +return json(object( + field("id", rawProfile.id), + field("displayName", rawProfile.displayName), + field("givenName", rawProfile.givenName), + field("familyName", rawProfile.surname), + field("email", rawProfile.userPrincipalName), + field("username", rawProfile.userPrincipalName))) diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Microsoft-Profile-Normalization.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Microsoft-Profile-Normalization.script.json new file mode 100644 index 000000000..1cae125cc --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Microsoft-Profile-Normalization.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "73cecbfc-dad0-4395-be6a-6858ee3a80e5": { + "_id": "73cecbfc-dad0-4395-be6a-6858ee3a80e5", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Normalizes raw profile data from Microsoft", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Microsoft Profile Normalization", + "script": "file://Microsoft-Profile-Normalization.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Device-Match-Node-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Device-Match-Node-Script.script.js new file mode 100644 index 000000000..bc57aca00 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Device-Match-Node-Script.script.js @@ -0,0 +1,14 @@ +/* + * Copyright 2024-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ +/* + - Data made available by nodes that have already executed is available in the nodeState variable. + - Use the action object to set the outcome of the node. + */ + +action.goTo("true"); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Device-Match-Node-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Device-Match-Node-Script.script.json new file mode 100644 index 000000000..843987f0d --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Device-Match-Node-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "11e1a3c0-038b-4c16-956a-6c9d89328d00": { + "_id": "11e1a3c0-038b-4c16-956a-6c9d89328d00", + "context": "DEVICE_MATCH_NODE", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script for a device match node", + "evaluatorVersion": "2.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Next Generation Device Match Node Script", + "script": "file://Next-Generation-Device-Match-Node-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Scripted-Decision-Node-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Scripted-Decision-Node-Script.script.js new file mode 100644 index 000000000..bc57aca00 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Scripted-Decision-Node-Script.script.js @@ -0,0 +1,14 @@ +/* + * Copyright 2024-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ +/* + - Data made available by nodes that have already executed is available in the nodeState variable. + - Use the action object to set the outcome of the node. + */ + +action.goTo("true"); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Scripted-Decision-Node-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Scripted-Decision-Node-Script.script.json new file mode 100644 index 000000000..777eccc98 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Next-Generation-Scripted-Decision-Node-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "11e1a3c0-038b-4c16-956a-6c9d89328cff": { + "_id": "11e1a3c0-038b-4c16-956a-6c9d89328cff", + "context": "AUTHENTICATION_TREE_DECISION_NODE", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script for a scripted decision node", + "evaluatorVersion": "2.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Next Generation Scripted Decision Node Script", + "script": "file://Next-Generation-Scripted-Decision-Node-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Identity.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Identity.script.groovy new file mode 100644 index 000000000..b5a202af5 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Identity.script.groovy @@ -0,0 +1,24 @@ +/* + * Copyright 2021-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +import org.forgerock.json.JsonValue + +JsonValue identity = json(object( + field("givenName", normalizedProfile.givenName), + field("sn", normalizedProfile.familyName), + field("mail", normalizedProfile.email), + field("cn", normalizedProfile.displayName), + field("userName", normalizedProfile.username), + field("iplanet-am-user-alias-list", selectedIdp + '-' + normalizedProfile.id.asString()))) + +return identity diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Identity.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Identity.script.json new file mode 100644 index 000000000..bb9466b62 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Identity.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "ed685f9f-5909-4726-86e8-22bd38b47663": { + "_id": "ed685f9f-5909-4726-86e8-22bd38b47663", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Converts a normalized social profile into an Identity", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Normalized Profile to Identity", + "script": "file://Normalized-Profile-to-Identity.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Managed-User.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Managed-User.script.groovy new file mode 100644 index 000000000..c5d7f7483 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Managed-User.script.groovy @@ -0,0 +1,39 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +import org.forgerock.json.JsonValue + +JsonValue managedUser = json(object( + field("givenName", normalizedProfile.givenName), + field("sn", normalizedProfile.familyName), + field("mail", normalizedProfile.email), + field("userName", normalizedProfile.username))) + +if (normalizedProfile.postalAddress.isNotNull()) managedUser.put("postalAddress", normalizedProfile.postalAddress) +if (normalizedProfile.addressLocality.isNotNull()) managedUser.put("city", normalizedProfile.addressLocality) +if (normalizedProfile.addressRegion.isNotNull()) managedUser.put("stateProvince", normalizedProfile.addressRegion) +if (normalizedProfile.postalCode.isNotNull()) managedUser.put("postalCode", normalizedProfile.postalCode) +if (normalizedProfile.country.isNotNull()) managedUser.put("country", normalizedProfile.country) +if (normalizedProfile.phone.isNotNull()) managedUser.put("telephoneNumber", normalizedProfile.phone) + +// if the givenName and familyName is null or empty +// then add a boolean flag to the shared state to indicate names are not present +// this could be used elsewhere +// for eg. this could be used in a scripted decision node to by-pass patching +// the user object with blank values when givenName and familyName is not present +boolean noGivenName = normalizedProfile.givenName.isNull() || (!normalizedProfile.givenName.asString()?.trim()) +boolean noFamilyName = normalizedProfile.familyName.isNull() || (!normalizedProfile.familyName.asString()?.trim()) +sharedState.put("nameEmptyOrNull", noGivenName && noFamilyName) + + +return managedUser diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Managed-User.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Managed-User.script.json new file mode 100644 index 000000000..ec53960c4 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/Normalized-Profile-to-Managed-User.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "58c824ae-84ed-4724-82cd-db128fc3f6c": { + "_id": "58c824ae-84ed-4724-82cd-db128fc3f6c", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Converts a normalized social profile into a managed user", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "Normalized Profile to Managed User", + "script": "file://Normalized-Profile-to-Managed-User.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Access-Token-Modification-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Access-Token-Modification-Script.script.js new file mode 100644 index 000000000..a89688384 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Access-Token-Modification-Script.script.js @@ -0,0 +1,136 @@ +/* + * Copyright 2019-2025 Ping Identity Corporation. All Rights Reserved. + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script lets you modify information associated with an OAuth2 access token + * with methods provided by the AccessToken (1) interface. + * The changes made to OAuth2 access tokens will directly impact the size of the CTS tokens, + * and, similarly, the size of the JWTs if client-based OAuth2 tokens are utilized. + * When adding/updating fields make sure that the token size remains within client/user-agent limits. + * + * Defined variables: + * accessToken - AccessToken (1). + * The access token to be updated. + * Mutable object, all changes to the access token will be reflected. + * scopes - Set (6). + * Always present, the requested scopes. + * requestProperties - Unmodifiable Map (5). + * Always present, contains a map of request properties: + * requestUri - The request URI. + * realm - The realm that the request relates to. + * requestParams - A map of the request params and/or posted data. + * Each value is a list of one or more properties. + * Please note that these should be handled in accordance with OWASP best practices: + * https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection. + * clientProperties - Unmodifiable Map (5). + * Present if the client specified in the request was identified, contains a map of client properties: + * clientId - The client's URI for the request locale. + * allowedGrantTypes - List of the allowed grant types (org.forgerock.oauth2.core.GrantType) for the client. + * allowedResponseTypes - List of the allowed response types for the client. + * allowedScopes - List of the allowed scopes for the client. + * customProperties - A map of the custom properties of the client. + * Lists or maps will be included as sub-maps; for example: + * customMap[Key1]=Value1 will be returned as customMap -> Key1 -> Value1. + * To add custom properties to a client, update the Custom Properties field + * in AM Console > Realm Name > Applications > OAuth 2.0 > Clients > Client ID > Advanced. + * identity - AMIdentity (3). + * Always present, the identity of the resource owner. + * session - SSOToken (4). + * Present if the request contains the session cookie, the user's session object. + * scriptName - String (primitive). + * Always present, the display name of the script. + * logger - Always present, the "OAuth2Provider" debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding log files will be prefixed with: scripts.OAUTH2_ACCESS_TOKEN_MODIFICATION. + * httpClient - HTTP Client (8). + * Always present, the HTTP Client instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * + * Return - no value is expected, changes shall be made to the accessToken parameter directly. + * + * Class reference: + * (1) AccessToken - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/AccessToken.html. + * (3) AMIdentity - https://backstage.forgerock.com/docs/am/7/apidocs/com/sun/identity/idm/AMIdentity.html. + * (4) SSOToken - https://backstage.forgerock.com/docs/am/7/apidocs/com/iplanet/sso/SSOToken.html. + * (5) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html, + * or https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/LinkedHashMap.html. + * (6) Set - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashSet.html. + * (8) Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. + */ + +/* EXAMPLE +(function () { + var frJava = JavaImporter( + org.forgerock.http.protocol.Request, + org.forgerock.http.protocol.Response + ); + + // Always includes this field in the token. + accessToken.setField('key1', 'value1'); + + // Receives and adds to the access token additional values by performing a REST call to an external service. + // WARNING: Below, you will find a reference to a third-party site, which is provided only as an example. + var uri = 'https://jsonplaceholder.typicode.com/posts'; + + try { + var request = new frJava.Request(); + + // You can chain methods that return the request object. + request.setUri(uri) + .setMethod('POST') + .setEntity(JSON.stringify({ + updatedFields: { + key2: 'value2', + key3: 'value3' + } + })); + + // You can call a method when chaining is not possible. + request.getHeaders().add('Content-Type', 'application/json; charset=UTF-8'); + + // Sends the request and receives the response. + var response = httpClient.send(request).getOrThrow(); + + // Checks if the response status is as expected. + if (response.getStatus() === org.forgerock.http.protocol.Status.CREATED) { + var result = JSON.parse(response.getEntity().getString()); + + // Set multiple token fields at once. + accessToken.setFields(result.updatedFields); + } else { + logger.error('Unable to obtain access token modifications. Status: ' + response.getStatus() + '. Content: ' + response.getEntity().getString()); + } + } catch (e) { + logger.error('The request processing was interrupted. ' + e); + + // The access token request fails with the HTTP 500 error in this case. + throw ('Unable to obtain response from: ' + uri); + } + + // Adds new fields containing identity attribute values to the access token. + accessToken.setField('mail', identity.getAttribute('mail')); + accessToken.setField('phone', identity.getAttribute('telephoneNumber').toArray()[0]); + + // Adds new fields containing the session property values. + // NOTE: session may not be available for non-interactive authorization grants. + if (session) { + try { + accessToken.setField('ipAddress', session.getProperty('Host')); + } catch (e) { + logger.error('Unable to retrieve session property value. ' + e); + } + } + + // Removes a native field from the token entry, that was set by AM. + // WARNING: removing native fields from the token may result in loss of functionality. + // accessToken.removeTokenName() + + // No return value is expected. Let it be undefined. +}()); +*/ diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Access-Token-Modification-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Access-Token-Modification-Script.script.json new file mode 100644 index 000000000..37afee124 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Access-Token-Modification-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "d22f9a0c-426a-4466-b95e-d0f125b0d5fa": { + "_id": "d22f9a0c-426a-4466-b95e-d0f125b0d5fa", + "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script for OAuth2 Access Token Modification", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "OAuth2 Access Token Modification Script", + "script": "file://OAuth2-Access-Token-Modification-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Authorize-Endpoint-Data-Provider-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Authorize-Endpoint-Data-Provider-Script.script.js new file mode 100644 index 000000000..94fc0e7d3 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Authorize-Endpoint-Data-Provider-Script.script.js @@ -0,0 +1,91 @@ +/* + * Copyright 2021-2025 Ping Identity Corporation. All Rights Reserved + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script lets you return additional data when authorize request is called. + * + * Defined variables: + * + * session - SSOToken (1) + * Present if the request contains the session cookie, the user's session object. + * + * httpClient - HTTP Client (2). + * Always present, the HTTP client that can be used to make external HTTP requests + * + * logger - Debug (3) + * Always present, the "ScriptedAuthorizeEndpointDataProvider" debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding log files will be prefixed with: scripts.OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER. + * + * scriptName - String (primitive). + * Always present, the display name of the script + * + * Return - a Map of additional data (4). + * + * Class reference: + * (1) SSOToken - https://backstage.forgerock.com/docs/am/7/apidocs/com/iplanet/sso/SSOToken.html. + * (2) Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. + * (3) Debug - https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * (4) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html. + */ + +/** + * Default authorize endpoint data provider script to use as a template for new scripts. + */ + +/* EXAMPLE +var map = new java.util.HashMap(); + +function addAdditionalData() { + + //If constant data needs to be returned + map.put("hello", "world"); + + //If some data needs to be returned from third party service + addAdditionalDataFromExternalService(); + + //If there is a need to return some user session data + addAdditionalDataFromSessionProperties() + + return map; +}; + +function addAdditionalDataFromExternalService() { + var frJava = JavaImporter( + org.forgerock.oauth2.core.exceptions.ServerException + ); + try { + //Obtain additional data by performing a REST call to an external service + var request = new org.forgerock.http.protocol.Request(); + request.setUri("https://third.party.app/hello.jsp"); + request.setMethod("POST"); + //request.setEntity("foo=bar&hello=world"); + request.setEntity(json(object( + field("foo", "bar")))); + var response = httpClient.send(request).getOrThrow(); + logResponse(response); + var result = JSON.parse(response.getEntity().getString()); + map.put("someKey",result.get("someKey")); + } catch (err) { + throw new frJava.ServerException(err); + } +}; + +function addAdditionalDataFromSessionProperties() { + //Add additional data from session property values + if (session != null) { // session is not available for resource owner password credentials grant + map.put("ipAddress", session.getProperty("Host")) + } +}; + +function logResponse(response) { + logger.message("User REST Call. Status: " + response.getStatus() + ", Body: " + response.getEntity().getString()); +}; + +addAdditionalData(); +*/ diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Authorize-Endpoint-Data-Provider-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Authorize-Endpoint-Data-Provider-Script.script.json new file mode 100644 index 000000000..6cc4fc032 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Authorize-Endpoint-Data-Provider-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "3f93ef6e-e54a-4393-aba1-f322656db28a": { + "_id": "3f93ef6e-e54a-4393-aba1-f322656db28a", + "context": "OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script for OAuth2 Authorize Endpoint Data Provider", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "OAuth2 Authorize Endpoint Data Provider Script", + "script": "file://OAuth2-Authorize-Endpoint-Data-Provider-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Dynamic-Client-Registration-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Dynamic-Client-Registration-Script.script.js new file mode 100644 index 000000000..de215145f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Dynamic-Client-Registration-Script.script.js @@ -0,0 +1,71 @@ +/* + * Copyright 2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script is run after the following Dynamic Client Registration operations: CREATE, UPDATE, DELETE. + * + * Defined variables: + * Common script bindings for next-generation scripts (1) + * requestProperties - An unmodifiable map of the following request properties: + * requestUri - The request URI. + * realm - The realm that the request relates to. + * requestParams - A map of the request params and/or posted data. + * Each value is a list of one or more properties. + * Please note that these should be handled in accordance with OWASP best practices: + * https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection. + * requestHeaders - A map of the request headers. + * Case-sensitive. + * requestBody - A map representing the body of the request. + * operation - A string to denote the dynamic client registration request operation. + * Possible values: CREATE, UPDATE, DELETE + * clientIdentity - The AMIdentity that represents the created or updated OAuth2Client. + * Null if the operation is DELETE. + * softwareStatement - A map representing the decoded data of the software statement from the request. + * Empty map if no software statement is provided. + * + * Return - no value is expected, any changes shall be made via the bindings directly. + * + * Reference: + * (1) Script Bindings - https://docs.pingidentity.com/pingoneaic/latest/am-scripting/script-bindings.html + */ + +// logger.info("Executing: {}", scriptName); + +/* +// Example: Update the OAuth2Client identity on CREATE +// NOTE: setAttribute() overwrites the whole attribute if it exists already +if (operation === "CREATE") { + // Read a property from the request body + var requestBody = requestProperties.get("requestBody"); + var grantType = requestBody.get("grant_type"); + + if (grantType != null) { + var grantTypes = ["[0]=authorization_code"]; + grantTypes.push("[1]=".concat(grantType)); + clientIdentity.setAttribute( "com.forgerock.openam.oauth2provider.grantTypes", grantTypes); + clientIdentity.store(); + }; +}; + +// Example: Update the OAuth2Client identity on UPDATE +// NOTE: addAttribute() adds the provided value to the set if it exists already. +// Otherwise, it sets the attribute with the single value. +if (operation === "UPDATE") { + // Example: Read a property from the software statement + var redirectUris = softwareStatement.get("redirect_uris"); + if (redirectUris != null) { + var firstUri = redirectUris[0]; + }; + + if (firstUri != null) { + clientIdentity.addAttribute("com.forgerock.openam.oauth2provider.redirectionURIs", "[0]=".concat(firstUri)); + clientIdentity.store(); + }; +}; +*/ diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Dynamic-Client-Registration-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Dynamic-Client-Registration-Script.script.json new file mode 100644 index 000000000..81ec69d28 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Dynamic-Client-Registration-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "4b6b7e8e-cf03-46c8-949f-c5742dbd6bc5": { + "_id": "4b6b7e8e-cf03-46c8-949f-c5742dbd6bc5", + "context": "OAUTH2_DYNAMIC_CLIENT_REGISTRATION", + "createdBy": "null", + "creationDate": 0, + "default": true, + "description": "Default global script for Dynamic Client Registration", + "evaluatorVersion": "2.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "null", + "lastModifiedDate": 0, + "name": "OAuth2 Dynamic Client Registration Script", + "script": "file://OAuth2-Dynamic-Client-Registration-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Evaluate-Scope-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Evaluate-Scope-Script.script.js new file mode 100644 index 000000000..630e2dad4 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Evaluate-Scope-Script.script.js @@ -0,0 +1,53 @@ +/* + * Copyright 2021-2025 Ping Identity Corporation. All Rights Reserved + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script lets you populate the scopes with profile attribute values when the tokeninfo endpoint is called. + * For example, if one of the scopes is mail, AM sets mail to the resource owner's email address in the token information returned. + * + * Defined variables: + * accessToken - AccessToken (1). + * The access token to be updated. + * Mutable object, all changes to the access token will be reflected. + * identity - AMIdentity (2). + * The client's identity if present or the resource owner's identity. Can be null. + * scriptName - String (primitive). + * Always present, the display name of the script. + * logger - Always present, the debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding log files will be prefixed with: scripts.OAUTH2_EVALUATE_SCOPE + * httpClient - HTTP Client (3). + * Always present, the HTTP Client instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * + * Return - a Map of the access token's information (4). + * + * Class reference: + * (1) AccessToken - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/AccessToken.html. + * (2) AMIdentity - https://backstage.forgerock.com/docs/am/7/apidocs/com/sun/identity/idm/AMIdentity.html. + * (3) Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. + * (4) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html. + */ + +/** + * Default evaluate scope script to use as a template for new scripts. + */ + +(function () { + var map = new java.util.HashMap(); + if (identity !== null) { + var scopes = accessToken.getScope().toArray(); + scopes.forEach(function (scope) { + var attributes = identity.getAttribute(scope).toArray(); + map.put(scope, attributes.join(",")); + }); + } else { + logger.error('identity is null'); + } + return map; +}()); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Evaluate-Scope-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Evaluate-Scope-Script.script.json new file mode 100644 index 000000000..99752517f --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Evaluate-Scope-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "da56fe60-8b38-4c46-a405-d6b306d4b336": { + "_id": "da56fe60-8b38-4c46-a405-d6b306d4b336", + "context": "OAUTH2_EVALUATE_SCOPE", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script for OAuth2 Scope Evaluation", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "OAuth2 Evaluate Scope Script", + "script": "file://OAuth2-Evaluate-Scope-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-JWT-Issuer-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-JWT-Issuer-Script.script.js new file mode 100644 index 000000000..5b25559ff --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-JWT-Issuer-Script.script.js @@ -0,0 +1,76 @@ +/* + * Copyright 2022-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script lets you to derive the configuration for a dynamic JWT issuer from the issuer string. + * A JWT issuer is made up of the following: + * - issuer - the identifier of the entity that issues JWTs + * - resource owner subject claim - the name of the claim in the JWT that identifies the resource owner + * - consented scope claim - the name of the claim in the JWT that represents scope that the resource owner + * has already consented to externally + * - authorized subjects - the set of principal identifiers that are authorized to be used as resource owners + * by the issuer + * - JWKs - either a set of JWKs or connection details for obtaining that set, that are the public keys that + * can verify the signature on the issued JWTs. + * + * Defined variables: + * issuer - String + * The issuer from the bearer JWT. + * realm - String + * The path of the realm that is handling the request. + * scriptName - String. + * Always present, the display name of the script. + * logger - Always present, the script debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding log files will be prefixed with: scripts.OAUTH2_SCRIPTED_JWT_ISSUER. + * httpClient - HTTP Client (1). + * Always present, the HTTP Client instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * idRepository - Identity Repository (2). Always present. + * secrets - Secrets accessor (3). Always present. + * + * Return - org.forgerock.oauth2.core.TrustedJwtIssuerConfig (4) - the configuration of the trusted JWT issuer. + * + * Class reference: + * (1) Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. + * (2) ScriptedIdentityRepository - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openam/scripting/api/identity/ScriptedIdentityRepository.html. + * (3) ScriptedSecrets - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openam/scripting/api/secrets/ScriptedSecrets.html. + * (4) TrustedJwtIssuerConfig - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/TrustedJwtIssuerConfig.html. + */ + +/* EXAMPLE +(function () { + var frJava = JavaImporter( + org.forgerock.oauth2.core.TrustedJwtIssuerConfig, + java.util.Collections + ); + + var iss = idRepository.getIdentity(issuer); + if (iss == null) { + logger.message('No issuer found for: '+issuer); + return null; + } + logger.message('Found issuer: '+iss); + // in this example either a JWK set or a URI to a JWK set are in the postalAddress attribute + var jwksAttrs = iss.getAttributeValues('postalAddress'); + var jwkSet = jwksAttrs.length === 0 ? null : jwksAttrs[0]; + var config = new frJava.TrustedJwtIssuerConfig( + issuer, + 'sub', + 'scope', + // in this example, valid subjects are stored in the mail attribute + iss.getAttributeValues('mail'), + jwkSet.startsWith('{') ? jwkSet : null, + jwkSet.startsWith('http') ? jwkSet : null, + '5 minutes', + '1 minute' + ); + return config; +}()); +*/ diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-JWT-Issuer-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-JWT-Issuer-Script.script.json new file mode 100644 index 000000000..c953826aa --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-JWT-Issuer-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "400e48ba-3f13-4144-ac7b-f824ea8e98c5": { + "_id": "400e48ba-3f13-4144-ac7b-f824ea8e98c5", + "context": "OAUTH2_SCRIPTED_JWT_ISSUER", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script for scripted JWT Issuers", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "OAuth2 JWT Issuer Script", + "script": "file://OAuth2-JWT-Issuer-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-May-Act-Script.script.groovy b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-May-Act-Script.script.groovy new file mode 100644 index 000000000..10c25d485 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-May-Act-Script.script.groovy @@ -0,0 +1,43 @@ +/* + * Copyright 2020-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/** + * Defined variables: + * token - The access token to be updated. Mutable object, all changes to the access token will be reflected. + * logger - always present, corresponding log files will be prefixed with: scripts.OAUTH2_ACCESS_TOKEN_MODIFICATION. + * scriptName - always present, the display name of the script + * session - present if the request contains the session cookie, the user's session object + * requestProperties - always present, contains a map of request properties: + * requestUri - the request URI + * realm - the realm that the request relates to + * requestParams - a map of the request params and/or posted data. Each value is a list of one or + * more properties. Please note that these should be handled in accordance with OWASP best + * practices. + * clientProperties - present if the client specified in the request was identified, contains a map of client + * properties: + * clientId - the client's Uri for the request locale + * allowedGrantTypes - list of the allowed grant types (org.forgerock.oauth2.core.GrantType) + * for the client + * allowedResponseTypes - list of the allowed response types for the client + * allowedScopes - list of the allowed scopes for the client + * customProperties - A map of the custom properties of the client. + * Lists or maps will be included as sub-maps, e.g: + * testMap[Key1]=Value1 will be returned as testmap -> Key1 -> Value1 + * + * identity - always present, the identity of the resource owner + * scopes - always present, the requested scopes + */ +/* +import org.forgerock.json.JsonValue + +token.setMayAct( + JsonValue.json(JsonValue.object( + JsonValue.field("client_id", "myClient"), + JsonValue.field("sub", "(usr!myActor)")))) +*/ diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-May-Act-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-May-Act-Script.script.json new file mode 100644 index 000000000..39f2be4f4 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-May-Act-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "c735de08-f8f2-4e69-aa4a-2d8d3d438323": { + "_id": "c735de08-f8f2-4e69-aa4a-2d8d3d438323", + "context": "OAUTH2_MAY_ACT", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script for OAuth2 May Act", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "OAuth2 May Act Script", + "script": "file://OAuth2-May-Act-Script.script.groovy" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Validate-Scope-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Validate-Scope-Script.script.js new file mode 100644 index 000000000..55acfe9b7 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Validate-Scope-Script.script.js @@ -0,0 +1,86 @@ +/* + * Copyright 2021-2025 Ping Identity Corporation. All Rights Reserved + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script validates the requested scopes against the allowed scopes. + * If no scopes are requested, default scopes are assumed. + * The script has four top level functions that could be executed during the different OAuth2 flows: + * - validateAuthorizationScope + * - validateAccessTokenScope + * - validateRefreshTokenScope + * - validateBackChannelAuthorizationScope + * + * Defined variables: + * requestedScopes - Set (1). + * The set of requested scopes. + * defaultScopes - Set (1). + * The set of default scopes. + * allowedScopes - Set (1). + * The set of allowed scopes. + * scriptName - String (primitive). + * Always present, the display name of the script. + * logger - Always present, the debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding log files will be prefixed with: scripts.OAUTH2_VALIDATE_SCOPE + * httpClient - HTTP Client (2). + * Always present, the HTTP Client instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * + * Throws InvalidScopeException: + * - if there are no scopes requested and default scopes are empty + * - if a requested scope is not allowed + * + * Return - a Set of validated scopes (1). + * + * Class reference: + * (1) Set - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashSet.html. + * (2) Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. + */ + +/** + * Default validate scope script. + */ +function validateScopes () { + var frJava = JavaImporter( + org.forgerock.oauth2.core.exceptions.InvalidScopeException + ); + + var scopes; + if (requestedScopes == null || requestedScopes.isEmpty()) { + scopes = defaultScopes; + } else { + scopes = new java.util.HashSet(allowedScopes); + scopes.retainAll(requestedScopes); + if (requestedScopes.size() > scopes.size()) { + var invalidScopes = new java.util.HashSet(requestedScopes); + invalidScopes.removeAll(allowedScopes); + throw new frJava.InvalidScopeException('Unknown/invalid scope(s)'); + } + } + + if (scopes == null || scopes.isEmpty()) { + throw new frJava.InvalidScopeException('No scope requested and no default scope configured'); + } + return scopes; +} + +function validateAuthorizationScope () { + return validateScopes(); +} + +function validateAccessTokenScope () { + return validateScopes(); +} + +function validateRefreshTokenScope () { + return validateScopes(); +} + +function validateBackChannelAuthorizationScope () { + return validateScopes(); +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Validate-Scope-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Validate-Scope-Script.script.json new file mode 100644 index 000000000..4091198e2 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OAuth2-Validate-Scope-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "25e6c06d-cf70-473b-bd28-26931edc476b": { + "_id": "25e6c06d-cf70-473b-bd28-26931edc476b", + "context": "OAUTH2_VALIDATE_SCOPE", + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1433147666269, + "default": true, + "description": "Default global script for OAuth2 Scope Validation", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "lastModifiedDate": 1433147666269, + "name": "OAuth2 Validate Scope Script", + "script": "file://OAuth2-Validate-Scope-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OIDC-Claims-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OIDC-Claims-Script.script.js new file mode 100644 index 000000000..b2f53ad69 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OIDC-Claims-Script.script.js @@ -0,0 +1,621 @@ +/* + * Copyright 2014-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * This script computes claim values returned in ID tokens and/or at the UserInfo Endpoint. + * The claim values are computed for: + * the claims derived from the requested scopes, + * the claims provided by the authorization server, + * and the claims requested by the client via the claims parameter. + * + * In the CONFIGURATION AND CUSTOMIZATION section, you can + * define the scope-to-claims mapping, and + * assign to each claim a resolver function that will compute the claim value. + * + * Defined variables (class references are provided below): + * scopes - Set (6). + * Always present, the requested scopes. + * claims - Map (5). + * Always present, default server provided claims. + * claimObjects - List (7, 2). + * Always present, the default server provided claims. + * requestedClaims - Map> (5). + * Always present, not empty if the request contains the claims parameter and the server has enabled + * claims_parameter_supported. A map of the requested claims to possible values, otherwise empty; + * requested claims with no requested values will have a key but no value in the map. A key with + * a single value in its Set (6) indicates that this is the only value that should be returned. + * requestedTypedClaims - List (7, 2). + * Always present, the requested claims. + * Requested claims with no requested values will have a claim with no values. + * A claim with a single value indicates this is the only value that should be returned. + * claimsLocales - List (7). + * The values from the 'claims_locales' parameter. + * See https://openid.net/specs/openid-connect-core-1_0.html#ClaimsLanguagesAndScripts for the OIDC specification details. + * requestProperties - Unmodifiable Map (5). + * Always present, contains a map of request properties: + * requestUri - The request URI. + * realm - The realm that the request relates to. + * requestParams - A map of the request params and/or posted data. + * Each value is a list of one or more properties. + * Please note that these should be handled in accordance with OWASP best practices: + * https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection. + * clientProperties - Unmodifiable Map (5). + * Present if the client specified in the request was identified, contains a map of client properties: + * clientId - The client's URI for the request locale. + * allowedGrantTypes - List of the allowed grant types (org.forgerock.oauth2.core.GrantType) for the client. + * allowedResponseTypes - List of the allowed response types for the client. + * allowedScopes - List of the allowed scopes for the client. + * customProperties - A map of the custom properties of the client. + * Lists or maps will be included as sub-maps; for example: + * customMap[Key1]=Value1 will be returned as customMap -> Key1 -> Value1. + * To add custom properties to a client, update the Custom Properties field + * in AM Console > Realm Name > Applications > OAuth 2.0 > Clients > Client ID > Advanced. + * identity - AMIdentity (3). + * Always present, the identity of the resource owner. + * session - SSOToken (4). + * Present if the request contains the session cookie, the user's session object. + * scriptName - String (primitive). + * Always present, the display name of the script. + * logger - Always present, the "OAuth2Provider" debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * Corresponding files will be prefixed with: scripts.OIDC_CLAIMS. + * httpClient - HTTP Client (8). + * Always present, the HTTP Client instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client. + * In order to use the client, you may need to add + * org.forgerock.http.Client, + * org.forgerock.http.protocol.*, + * and org.forgerock.util.promise.PromiseImpl + * to the allowed Java classes in the scripting engine configuration, as described in: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/script-engine-security.html + * + * Return - a new UserInfoClaims(Map values, Map> compositeScopes) (1) object. + * The result of the last statement in the script is returned to the server. + * Currently, the Immediately Invoked Function Expression (also known as Self-Executing Anonymous Function) + * is the last (and only) statement in this script, and its return value will become the script result. + * Do not use "return variable" statement outside of a function definition. + * See RESULTS section for additional details. + * + * Class reference: + * (1) UserInfoClaims - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html. + * (2) Claim - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html). + * An instance of org.forgerock.openidconnect.Claim has methods to access + * the claim name, requested values, locale, and whether the claim is essential. + * (3) AMIdentity - https://backstage.forgerock.com/docs/am/7/apidocs/com/sun/identity/idm/AMIdentity.html. + * (4) SSOToken - https://backstage.forgerock.com/docs/am/7/apidocs/com/iplanet/sso/SSOToken.html. + * (5) Map - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html, + * or https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/LinkedHashMap.html. + * (6) Set - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashSet.html. + * (7) List - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayList.html. + * (8) Client - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/http/Client.html. +*/ + +(function () { + // SETUP + + /** + * Claim processing utilities. + * An object that contains reusable functions for processing claims. + * @see CLAIM PROCESSING UTILITIES section for details. + */ + var utils = getUtils(); + + // CONFIGURATION AND CUSTOMIZATION + + /** + * OAuth 2.0 scope values (scopes) can be used by the Client to request OIDC claims. + * + * Call this configuration method, and pass in as the first argument + * an object that maps a scope value to an array of claim names + * to specify which claims need to be processed and returned for the requested scopes. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims} + * for the scope values that could be used to request claims as defined in the OIDC specification. + * + * Below, find a default configuration that is expected to work in the current environment. + * + * CUSTOMIZATION + * You can choose the claim names returned for a scope. + */ + utils.setScopeClaimsMap({ + profile: [ + 'name', + 'family_name', + 'given_name', + 'zoneinfo', + 'locale' + ], + email: ['email'], + address: ['address'], + phone: ['phone_number'] + }); + + /** + * In this script, each claim + * derived from the requested scopes, + * provided by the authorization server, and + * requested by the client via the claims parameter + * will be processed by a function associated with the claim name. + * + * Call this configuration method, and pass in as the first argument + * an object that maps a claim name to a resolver function, + * which will be automatically executed for each claim processed by the script. + * + * The claim resolver function will receive the requested claim information + * in an instance of org.forgerock.openidconnect.Claim as the first argument. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} + * for details on the Claim class. + * + * If the claim resolver function returns a value, + * other than undefined or null, + * the claim will be included in the script's results. + * + * The Claim instance provides methods to check + * what the name of the claim is, + * which values the claim request contains, + * whether the claim is essential, and + * which locale the claim is associated with. + * The resolver function can consider this information when computing and returning the claim value. + * + * Below, find a default configuration that is expected to work in the current environment. + * A reusable function, utils.getUserProfileClaimResolver(String attribute-name), + * is called to return a claim resolver function based on a user profile attribute. + * @see CLAIM RESOLVERS section for the implementation details and examples. + * For the address claim, an example of a claim resolver that uses another claim resolver is provided. + * + * CUSTOMIZATION + * You can reuse the predefined utils methods with your custom arguments. + * You can also specify a custom resolver function for a claim name, + * that will compute and return the claim value—as shown in the commented out example below. + */ + utils.setClaimResolvers({ + /* + // An example of a simple claim resolver function that is defined for a claim + // directly in the configuration object: + custom-claim-name: function (requestedClaim) { + // In this case, initially, the claim value comes straight from a user profile attribute value: + var claimValue = identity.getAttribute('custom-attribute-name').toArray()[0] + + // Optionally, provide additional logic for processing (filtering, formatting, etc.) the claim value. + // You can use: + // requestedClaim.getName() + // requestedClaim.getValues() + // requestedClaim.getLocale() + // requestedClaim.isEssential() + + return claimValue + }, + */ + /** + * The use of utils.getUserProfileClaimResolver shows how + * an argument passed to a function that returns a claim resolver + * becomes available to the resolver function (via its lexical context). + */ + name: utils.getUserProfileClaimResolver('cn'), + family_name: utils.getUserProfileClaimResolver('sn'), + given_name: utils.getUserProfileClaimResolver('givenname'), + zoneinfo: utils.getUserProfileClaimResolver('preferredtimezone'), + locale: utils.getUserProfileClaimResolver('preferredlocale'), + email: utils.getUserProfileClaimResolver('mail'), + address: utils.getAddressClaimResolver( + /** + * The passed in user profile claim resolver function + * can be used by the address claim resolver function + * to obtain the claim value to be formatted as per the OIDC specification: + * @see https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim. + */ + utils.getUserProfileClaimResolver('postaladdress') + ), + phone_number: utils.getUserProfileClaimResolver('telephonenumber') + }); + + // CLAIM PROCESSING UTILITIES + + /** + * @returns {object} An object that contains reusable claim processing utilities. + * @see PUBLIC METHODS section and the return statement for the list of exported functions. + */ + function getUtils () { + // IMPORT JAVA + + /** + * Provides Java scripting functionality. + * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Scripting_Java#javaimporter_constructor}. + */ + var frJava = JavaImporter( + org.forgerock.oauth2.core.exceptions.InvalidRequestException, + org.forgerock.oauth2.core.UserInfoClaims, + org.forgerock.openidconnect.Claim, + + java.util.LinkedHashMap, + java.util.ArrayList + ); + + // SET UP CONFIGURATION + + /** + * Placeholder for a configuration option that contains + * an object that maps the supported scope values (scopes) + * and the corresponding claim names for each scope value. + */ + var scopeClaimsMap; + + /** + * Placeholder for a configuration option that contains + * an object that maps the supported claim names + * and the resolver functions returning the claim value. + */ + var claimResolvers; + + /** + * A (public) method that accepts an object that maps the supported scopes and the corresponding claim names, + * and assigns it to a (private) variable that serves as a configuration option. + * @param {object} params - An object that maps each supported scope value to an array of claim names, + * in order to specify which claims need to be processed for the requested scopes. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims} for details. + * @param {string[]} [params.profile] - An array of claim names to be returned if the profile scope is requested. + * @param {string[]} [params.email] - An array of claim names to be returned if the email scope is requested. + * @param {string[]} [params.address] - An array of claim names to be returned if the address scope is requested. + * @param {string[]} [params.phone] - An array of claim names to be returned if the phone scope is requested. + * @returns {undefined} + */ + function setScopeClaimsMap(params) { + scopeClaimsMap = params; + } + + /** + * A (public) method that accepts an object that maps the supported claim names + * and the resolver functions returning the claim value, + * and assigns it to a (private) variable that serves as a configuration option. + * @param {object} params - An object that maps + * each supported claim name to a function that computes and returns the claim value. + */ + function setClaimResolvers(params) { + claimResolvers = params; + } + + // CLAIM RESOLVERS + + /** + * Claim resolvers are functions that return a claim value. + * @param {*} + * @returns {*} + */ + + /** + * Defines a claim resolver based on a user profile attribute. + * @param {string} attributeName - Name of the user profile attribute. + * @returns {function} A function that will determine the claim value + * based on the user profile attribute and the (requested) claim properties. + */ + function getUserProfileClaimResolver (attributeName) { + /** + * Resolves a claim with a user profile attribute value. + * Returns undefined if the identity attribute is not populated, + * OR if the claim has requested values that do not contain the identity attribute value. + * ATTENTION: the aforementioned comparison is case-sensitive. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {string|HashSet|undefined} + */ + function resolveClaim(claim) { + var userProfileValue; + + if (identity) { + userProfileValue = getClaimValueFromSet(claim, identity.getAttribute(attributeName)); + + if (userProfileValue && !userProfileValue.isEmpty()) { + if (!claim.getValues() || claim.getValues().isEmpty() || claim.getValues().contains(userProfileValue)) { + return userProfileValue; + } + } + } + } + + return resolveClaim; + } + + /** + * Returns an address claim resolver based on a claim value obtained with another claim resolver. + * @param {function} resolveClaim - A function that returns a claim value. + * @returns {function} A function that will accept a claim as an argument, + * run the claim resolver function for the claim and obtain the claim value, + * and apply additional formatting to the value before returning it. + */ + function getAddressClaimResolver (resolveClaim) { + /** + * Creates an address claim object from a value returned by a claim resolver, + * and returns the address claim object as the claim value. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim}. + * The claim value is obtained with a claim resolving function available from the closure. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {java.util.LinkedHashMap|undefined} The address claim object created from a claim value. + */ + function resolveAddressClaim(claim) { + var claimValue = resolveClaim(claim); + var addressObject; + + if (isClaimValueValid(claimValue)) { + addressObject = new frJava.LinkedHashMap(); + + addressObject.put('formatted', claimValue); + + return addressObject; + } + } + + return resolveAddressClaim; + } + + /** + * Returns an essential claim resolver based on a claim value obtained with another claim resolver. + * @param {function} resolveClaim - A function that returns a claim value. + * @returns {function} A function that will accept a claim as an argument, + * run the claim resolver function for the claim and obtain the claim value, + * and apply additional logic for essential claims. + */ + function getEssentialClaimResolver (resolveClaim) { + /** + * Returns a claim value or throws an error. + * The claim value is obtained with a claim resolving function available from the closure. + * Throws an exception if the claim is essential and no value is returned for the claim. + * + * Use of this resolver is optional. + * @see {@link https://openid.net/specs/openid-connect-core-1_0.html#IndividualClaimsRequests} stating: + * "Note that even if the Claims are not available because the End-User did not authorize their release or they are not present, + * the Authorization Server MUST NOT generate an error when Claims are not returned, whether they are Essential or Voluntary, + * unless otherwise specified in the description of the specific claim." + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} + * @throws {org.forgerock.oauth2.core.exceptions.InvalidRequestException} + */ + function resolveEssentialClaim(claim) { + var claimValue = resolveClaim(claim); + + if (claim.isEssential() && !isClaimValueValid(claimValue)) { + throw new frJava.InvalidRequestException('Could not provide value for essential claim: ' + claim.getName()); + } + + return claimValue; + } + + return resolveEssentialClaim; + } + + /** + * Provides default resolution for a claim. + * Use it if a claim-specific resolver is not defined in the configuration. + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} A single value associated with this claim. + */ + function resolveAnyClaim (claim) { + if (claim.getValues().size() === 1) { + return claim.getValues().toArray()[0]; + } + } + + // UTILITIES + + /** + * Returns claim value from a set. + * If the set contains a single value, returns the value. + * If the set contains multiple values, returns the set. + * Otherwise, returns undefined. + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @param {java.util.HashSet} set The set—for example, a user profile attribute value. + * @returns {string|java.util.HashSet|undefined} + */ + function getClaimValueFromSet (claim, set) { + if (set && set.size()) { + if (set.size() === 1) { + return set.toArray()[0]; + } else { + return set; + } + } else if (logger.warningEnabled()) { + logger.warning('OIDC Claims script. Got an empty set for claim: ' + claim.getName()); + } + } + + function isClaimValueValid (claimValue) { + if (typeof claimValue === 'undefined' || claimValue === null) { + return false; + } + + return true; + } + + // CLAIM PROCESSING + + /** + * Constructs and returns an object populated with the computed claim values + * and the requested scopes mapped to the claim names. + * @returns {org.forgerock.oauth2.core.UserInfoClaims} The object to be returned to the authorization server. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html}. + * @see RESULTS section for the use of this function. + */ + function getUserInfoClaims () { + return new frJava.UserInfoClaims(getComputedClaims(), getCompositeScopes()); + } + + /** + * Creates a map of (requested) claim names populated with the computed claim values. + * @returns {java.util.LinkedHashMap} + * A map of the requested claim names and the corresponding claim values. + */ + function getComputedClaims () { + /** + * Creates a complete list of claim objects from: + * the claims derived from the scopes, + * the claims provided by the authorization server, + * and the claims requested by the client. + * @returns {java.util.ArrayList} + * Returns a complete list of org.forgerock.openidconnect.Claim objects available to the script. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for the claim object details. + */ + function getClaims() { + /** + * Returns a list of claim objects for the requested scopes. + * Uses the scopeClaimsMap configuration option to derive the claim names; + * no other properties of a claim derived from a scope are populated. + * @returns {java.util.ArrayList} + * A list of org.forgerock.openidconnect.Claim objects derived from the requested scopes. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for the claim object details. + */ + function convertScopeToClaims() { + var claims = new frJava.ArrayList(); + + scopes.toArray().forEach(function (scope) { + if (String(scope) !== 'openid' && scopeClaimsMap[scope]) { + scopeClaimsMap[scope].forEach(function (claimName) { + claims.add(new frJava.Claim(claimName)); + }); + } + }); + + return claims; + } + + var claims = new frJava.ArrayList(); + + claims.addAll(convertScopeToClaims()); + claims.addAll(claimObjects); + claims.addAll(requestedTypedClaims); + + return claims; + } + + /** + * Computes and returns a claim value. + * To obtain the claim value, uses the resolver function specified for the claim in the claimResolvers configuration object. + * @see claimResolvers + * If no resolver function is found, uses the default claim resolver function. + * + * @param {org.forgerock.openidconnect.Claim} claim + * An object that provides methods to obtain information/requirements associated with a claim. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/openidconnect/Claim.html} for details. + * @returns {*} Claim value. + * @throws {org.forgerock.oauth2.core.exceptions.InvalidRequestException} + * Rethrows this exception if a claim resolver throws it. + * You can throw org.forgerock.oauth2.core.exceptions.InvalidRequestException from your custom claim resolver + * if you want to terminate the claim processing. + */ + function computeClaim(claim) { + var resolveClaim; + var message; + + try { + resolveClaim = claimResolvers[claim.getName()] || resolveAnyClaim; + + return resolveClaim(claim); + } catch (e) { + message = 'OIDC Claims script exception. Unable to resolve OIDC Claim. ' + e; + + if (String(e).indexOf('org.forgerock.oauth2.core.exceptions.InvalidRequestException') !== -1) { + throw e; + } + + if (logger.warningEnabled()) { + logger.warning(message); + } + } + } + + var computedClaims = new frJava.LinkedHashMap(); + + getClaims().toArray().forEach(function (claim) { + var claimValue = computeClaim(claim); + + if (isClaimValueValid(claimValue)) { + computedClaims.put(claim.getName(), claimValue); + } else { + /** + * If a claim has been processed, but appears in the list again, + * and its value cannot be computed under the new conditions, + * the claim is removed from the final result. + * + * For example, a claim could be mapped to a scope and found in the user profile, + * but also requested by the client with required values that don't match the computed one. + * @see {link https://openid.net/specs/openid-connect-core-1_0.html#IndividualClaimsRequests}. + * for the relevant OIDC specification details. + */ + computedClaims.remove(claim.getName()); + } + }); + + return computedClaims; + } + + /** + * Creates a map of requested scopes and the corresponding claim names. + * @returns {java.util.LinkedHashMap} + */ + function getCompositeScopes () { + var compositeScopes = new frJava.LinkedHashMap(); + + scopes.toArray().forEach(function (scope) { + var scopeClaims = new frJava.ArrayList(); + + if (scopeClaimsMap[scope]) { + scopeClaimsMap[scope].forEach(function (claimName) { + scopeClaims.add(claimName); + }); + } + + if (scopeClaims.size()) { + compositeScopes.put(scope, scopeClaims); + } + }); + + return compositeScopes; + } + + // PUBLIC METHODS + + return { + setScopeClaimsMap: setScopeClaimsMap, + setClaimResolvers: setClaimResolvers, + getUserProfileClaimResolver: getUserProfileClaimResolver, + getAddressClaimResolver: getAddressClaimResolver, + getEssentialClaimResolver: getEssentialClaimResolver, + getUserInfoClaims: getUserInfoClaims + }; + } + + // RESULTS + + /** + * This script returns an instance of the org.forgerock.oauth2.core.UserInfoClaims class + * populated with the computed claim values and + * the requested scopes mapped to the claim names. + * @see {@link https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/oauth2/core/UserInfoClaims.html}. + * + * Assigning it to a variable gives you an opportunity + * to log the content of the returned value during development. + */ + var userInfoClaims = utils.getUserInfoClaims(); + + /* + logger.error(scriptName + ' results:') + logger.error('Values: ' + userInfoClaims.getValues()) + logger.error('Scopes: ' + userInfoClaims.getCompositeScopes()) + */ + + return userInfoClaims; +}()); diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OIDC-Claims-Script.script.json b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OIDC-Claims-Script.script.json new file mode 100644 index 000000000..8d7726755 --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/OIDC-Claims-Script.script.json @@ -0,0 +1,18 @@ +{ + "script": { + "36863ffb-40ec-48b9-94b1-9a99f71cc3b5": { + "_id": "36863ffb-40ec-48b9-94b1-9a99f71cc3b5", + "context": "OIDC_CLAIMS", + "createdBy": "null", + "creationDate": 0, + "default": true, + "description": "Default global script for OIDC claims", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "lastModifiedBy": "null", + "lastModifiedDate": 0, + "name": "OIDC Claims Script", + "script": "file://OIDC-Claims-Script.script.js" + } + } +} diff --git a/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/SAML2-IDP-Adapter-Script.script.js b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/SAML2-IDP-Adapter-Script.script.js new file mode 100644 index 000000000..4c50d97de --- /dev/null +++ b/test/e2e/exports/all-separate-extracted-script/cloud/realm/root-alpha/script/SAML2-IDP-Adapter-Script.script.js @@ -0,0 +1,151 @@ +/* + * Copyright 2021-2025 Ping Identity Corporation. All Rights Reserved + * + * This code is to be used exclusively in connection with Ping Identity + * Corporation software or services. Ping Identity Corporation only offers + * such software or services to legal entities who have entered into a + * binding license agreement with Ping Identity Corporation. + */ + +/* + * The script has these top level functions that could be executed during a SAML2 flow. + * - preSingleSignOn + * - preAuthentication + * - preSendResponse + * - preSignResponse + * - preSendFailureResponse + * + * Please see the javadoc for the interface definition and more information about these methods. + * https://backstage.forgerock.com/docs/am/7.3/_attachments/apidocs/com/sun/identity/saml2/plugins/SAML2IdentityProviderAdapter.html + * Note that the initialize method is not supported in the scripts. + * + * Defined variables. Check the documentation on the respective functions for the variables available to it. + * + * hostedEntityId - String + * Entity ID for the hosted IDP + * realm - String + * Realm of the hosted IDP + * idpAdapterScriptHelper - IdpAdapterScriptHelper (1) + * An instance of IdpAdapterScriptHelper containing helper methods. See Javadoc for more details. + * request - HttpServletRequest (2) + * Servlet request object + * response - HttpServletResponse (3) + * Servlet response object + * authnRequest - AuthnRequest (4) + * The original authentication request sent from SP + * reqId - String + * The id to use for continuation of processing if the adapter redirects + * res - Response (5) + * The SAML Response + * session - SSOToken (6) + * The single sign-on session. The reference type of this is Object and would need to be casted to SSOToken. + * relayState - String + * The relayState that will be used in the redirect + * faultCode - String + * the fault code that will be returned in the SAML response + * faultDetail - String + * the fault detail that will be returned in the SAML response + * logger - Logger instance + * https://backstage.forgerock.com/docs/am/7.3/scripting-guide/scripting-api-global-logger.html. + * Corresponding log files will be prefixed with: scripts.