diff --git a/src/cli/config/config-export.ts b/src/cli/config/config-export.ts index 822a40f94..05fd81eb0 100644 --- a/src/cli/config/config-export.ts +++ b/src/cli/config/config-export.ts @@ -87,18 +87,6 @@ export default function setup() { 'Export only the global config. If -r, --realm-only is also active, then the corresponding active realm config will also be exported.' ) ) - .addOption( - new Option( - '-s, --separate-mappings', - 'Export sync.idm.json mappings separately in their own directory. Ignored with -a.' - ) - ) - .addOption( - new Option( - '-o, --separate-objects', - 'Export managed.idm.json objects separately in their own directory. Ignored with -a.' - ) - ) .addOption( new Option( '--include-active-values', @@ -188,8 +176,6 @@ export default function setup() { verboseMessage('Exporting everything to separate files...'); const outcome = await exportEverythingToFiles( options.extract, - options.separateMappings, - options.separateObjects, options.metadata, options.modifiedProperties, { diff --git a/src/cli/idm/idm-export.ts b/src/cli/idm/idm-export.ts index 1ed3ced81..247710441 100644 --- a/src/cli/idm/idm-export.ts +++ b/src/cli/idm/idm-export.ts @@ -51,20 +51,14 @@ export default function setup() { ) .addOption( new Option( - '-s, --separate-mappings', - 'Export sync.idm.json mappings separately in their own directory. Ignored with -a.' - ) - ) - .addOption( - new Option( - '-o, --separate-objects', - 'Export managed.idm.json objects separately in their own directory. Ignored with -a.' + '-N, --no-metadata', + 'Does not include metadata in the export file.' ) ) .addOption( new Option( - '-N, --no-metadata', - 'Does not include metadata in the export file.' + '-x, --extract', + 'Extract idm scripts and save the extracted scripts to separate files. Ignored with -a.' ) ) .action( @@ -100,9 +94,8 @@ export default function setup() { options.entityId, options.file, options.envFile, - options.separateMappings, - options.separateObjects, - options.metadata + options.metadata, + options.extract ); if (!outcome) process.exitCode = 1; // --all -a @@ -142,9 +135,8 @@ export default function setup() { const outcome = await exportAllConfigEntitiesToFiles( options.entitiesFile, 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-schema-object-export.ts b/src/cli/idm/idm-schema-object-export.ts index e766b1156..4d799b4a5 100644 --- a/src/cli/idm/idm-schema-object-export.ts +++ b/src/cli/idm/idm-schema-object-export.ts @@ -47,6 +47,12 @@ export default function setup() { 'Does not include metadata in the export file.' ) ) + .addOption( + new Option( + '-x, --extract', + 'Extract idm scripts and save the extracted scripts to separate files. Ignored with -a.' + ) + ) .action( // implement command logic inside action handler async (host, realm, user, password, options, command) => { @@ -76,7 +82,8 @@ export default function setup() { const outcome = await exportManagedObjectToFile( options.individualObject, options.file, - options.envFile + options.envFile, + options.extract ); if (!outcome) process.exitCode = 1; } // -a, --all @@ -91,9 +98,8 @@ export default function setup() { 'managed', options.file, options.envFile, - false, - false, - options.metadata + options.metadata, + false ); if (!outcome) process.exitCode = 1; } // -A, --all-separate @@ -108,9 +114,9 @@ export default function setup() { 'managed', options.file, options.envFile, - false, - true, - options.metadata + options.metadata, + options.extract, + true ); if (!outcome) process.exitCode = 1; await warnAboutOfflineConnectorServers(); diff --git a/src/cli/mapping/mapping-export.ts b/src/cli/mapping/mapping-export.ts index 72f4fca51..edd8de89b 100644 --- a/src/cli/mapping/mapping-export.ts +++ b/src/cli/mapping/mapping-export.ts @@ -57,6 +57,12 @@ 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 idm scripts and save the extracted scripts to separate files. Ignored with -a.' + ) + ) .action( // implement command logic inside action handler async (host, realm, user, password, options, command) => { @@ -78,6 +84,7 @@ export default function setup() { options.mappingId, options.file, options.metadata, + options.extract, { deps: options.deps, useStringArrays: options.useStringArrays, @@ -109,12 +116,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/ops/ConfigOps.ts b/src/ops/ConfigOps.ts index 9aae603dd..8650875a1 100644 --- a/src/ops/ConfigOps.ts +++ b/src/ops/ConfigOps.ts @@ -6,7 +6,7 @@ import { FullImportOptions, FullRealmExportInterface, } from '@rockcarver/frodo-lib/types/ops/ConfigOps'; -import { SyncSkeleton } from '@rockcarver/frodo-lib/types/ops/MappingOps'; +import { MappingSkeleton, SyncSkeleton } from '@rockcarver/frodo-lib/types/ops/MappingOps'; import { CustomNodeExportInterface } from '@rockcarver/frodo-lib/types/ops/NodeOps'; import { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps'; import fs from 'fs'; @@ -18,8 +18,16 @@ 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 { + extractIdmScriptToSameLevel, + findScriptsFromIdm, + ManagedSkeleton, + writeManagedJsonToDirectory, +} from './IdmOps'; +import { + writeMappingJsonToDirectory, + writeSyncJsonToDirectory, +} from './MappingOps'; import { extractCustomNodeScriptsToFiles } from './NodeOps'; import { extractScriptsToFiles } from './ScriptOps'; import { errorHandler } from './utils/OpsUtils'; @@ -82,8 +90,6 @@ export async function exportEverythingToFile( /** * Export everything to separate files * @param {boolean} extract Extracts the scripts from the exports into separate files if true - * @param {boolean} separateMappings separate sync.idm.json mappings if true, otherwise keep them in a single file - * @param {boolean} separateObjects separate managed.idm.json objects if true, otherwise keep them in a single file * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true * @param {boolean} keepModifiedProperties true to keep modified properties, otherwise delete them. Default: false * @param {FullExportOptions} options export options @@ -91,8 +97,6 @@ export async function exportEverythingToFile( */ export async function exportEverythingToFiles( extract: boolean = false, - separateMappings: boolean = false, - separateObjects: boolean = false, includeMeta: boolean = true, keepModifiedProperties: boolean = false, options: FullExportOptions = { @@ -124,9 +128,7 @@ export async function exportEverythingToFiles( `${baseDirectory}/global`, includeMeta, keepModifiedProperties, - extract, - separateMappings, - separateObjects + extract ) ); Object.entries(exportData.realm).forEach(([realm, data]: [string, any]) => @@ -138,9 +140,7 @@ export async function exportEverythingToFiles( `${baseDirectory}/realm/${realm}`, includeMeta, keepModifiedProperties, - extract, - separateMappings, - separateObjects + extract ) ) ); @@ -163,8 +163,6 @@ export async function exportEverythingToFiles( * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true * @param {boolean} keepModifiedProperties true to keep modified properties, otherwise delete them. Default: false * @param {boolean} extract Extracts the scripts from the exports into separate files if true - * @param {boolean} separateMappings separate sync.idm.json mappings if true, otherwise keep them in a single file - * @param {boolean} separateObjects separate managed.idm.json objects if true, otherwise keep them in a single file */ export function exportItem( exportData, @@ -173,9 +171,7 @@ export function exportItem( baseDirectory, includeMeta, keepModifiedProperties, - extract, - separateMappings = false, - separateObjects = false + extract ) { if (!obj || !Object.keys(obj).length) { return; @@ -264,7 +260,8 @@ export function exportItem( writeSyncJsonToDirectory( obj as SyncSkeleton, `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}`, - includeMeta + includeMeta, + extract ); } else if (type === 'server') { saveServersToFiles( @@ -274,24 +271,40 @@ export function exportItem( extract, includeMeta ); + } else if (type === 'mapping') { + for (const [id, mapping] of Object.entries(obj)){ + writeMappingJsonToDirectory( + mapping as MappingSkeleton, + `${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') { - writeSyncJsonToDirectory( - value as SyncSkeleton, - `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}/sync`, - includeMeta - ); - } else if (separateObjects && id === 'managed') { + if (extract && id === 'managed') { writeManagedJsonToDirectory( value as ManagedSkeleton, `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}/managed`, - includeMeta + includeMeta, + extract ); - } else { + } + else { + if (extract) { + const result = findScriptsFromIdm(value); + if (result.length !== 0) { + extractIdmScriptToSameLevel( + id, + 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 0ed5af716..6014345e6 100644 --- a/src/ops/IdmOps.ts +++ b/src/ops/IdmOps.ts @@ -1,12 +1,16 @@ import { frodo, FrodoError } from '@rockcarver/frodo-lib'; import { type IdObjectSkeletonInterface } from '@rockcarver/frodo-lib/types/api/ApiTypes'; import { type ConfigEntityExportInterface } from '@rockcarver/frodo-lib/types/ops/IdmConfigOps'; -import { SyncSkeleton } from '@rockcarver/frodo-lib/types/ops/MappingOps'; +import { MappingExportInterface, MappingSkeleton, SyncSkeleton } from '@rockcarver/frodo-lib/types/ops/MappingOps'; 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,7 +18,9 @@ import { stopProgressIndicator, } from '../utils/Console'; import { + extractMappingScripts, getLegacyMappingsFromFiles, + writeMappingJsonToDirectory, writeSyncJsonToDirectory, } from './MappingOps'; import { errorHandler } from './utils/OpsUtils'; @@ -95,18 +101,17 @@ export type ManagedSkeleton = IdObjectSkeletonInterface & { * @param {string} id the desired configuration object * @param {string} file optional export file name (or directory name if exporting mappings separately) * @param {string} envFile File that defines environment specific variables for replacement during configuration export/import - * @param {boolean} separateMappings separate sync.idm.json mappings if true (and id is "sync"), otherwise keep them in a single file - * @param {boolean} separateObjects separate managed.idm.json objects if true (and id is "managed"), otherwise keep them in a single file * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true + * @param {boolean} extract true to extract idm script, false otherwise. Default: false * @return {Promise} a promise that resolves to true if successful, false otherwise */ export async function exportConfigEntityToFile( id: string, file?: string, envFile?: string, - separateMappings: boolean = false, - separateObjects: boolean = false, - includeMeta: boolean = true + includeMeta: boolean = true, + extract: boolean = false, + schemaExport?:boolean ): Promise { try { const options = getIdmImportExportOptions(undefined, envFile); @@ -114,21 +119,40 @@ export async function exportConfigEntityToFile( envReplaceParams: options.envReplaceParams, entitiesToExport: undefined, }); - if (separateMappings && id === 'sync') { - writeSyncJsonToDirectory( - exportData.idm[id] as SyncSkeleton, - file, - includeMeta - ); - return true; - } - if (separateObjects && id === 'managed') { + if(schemaExport && !extract){ writeManagedJsonToDirectory( - exportData.idm[id] as ManagedSkeleton, - file, - includeMeta - ); - return true; + exportData.idm[id] as ManagedSkeleton, + 'managed', + includeMeta, + false + ); + return true; + } + if (extract) { + if (id === 'sync') { + writeSyncJsonToDirectory( + exportData.idm[id] as SyncSkeleton, + 'sync', + includeMeta, + extract + ); + return true; + } + if (id === 'managed') { + writeManagedJsonToDirectory( + exportData.idm[id] as ManagedSkeleton, + 'managed', + includeMeta, + extract + ); + return true; + } + else { + const result = findScriptsFromIdm(exportData.idm[id]); + if (result.length !== 0) { + extractIdmScriptToSameLevel(id, exportData.idm[id], result, '', true); + } + } } let fileName = file; if (!fileName) { @@ -152,14 +176,21 @@ export async function exportConfigEntityToFile( export async function exportManagedObjectToFile( name: string, file?: string, - envFile?: string + envFile?: string, + extract?: boolean ): Promise { try { const options = getIdmImportExportOptions(undefined, envFile); const exportData = await readSubConfigEntity('managed', name, { envReplaceParams: options.envReplaceParams, entitiesToExport: undefined, - }); + }) as ObjectSkeleton; + if (extract) { + const result = findScriptsFromIdm(exportData); + if (result.length !== 0) { + extractIdmScriptsForManaged(exportData.name, exportData, result); + } + } let fileName = file; if (!fileName) { @@ -212,16 +243,13 @@ export async function exportAllConfigEntitiesToFile( * Export all IDM configuration objects to separate files * @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} separateMappings separate sync.idm.json mappings if true, otherwise keep them in a single file - * @param {boolean} separateObjects separate managed.idm.json objects if true, otherwise keep them in a single file * @return {Promise} a promise that resolves to true if successful, false otherwise */ export async function exportAllConfigEntitiesToFiles( entitiesFile?: string, envFile?: string, - separateMappings: boolean = false, - separateObjects: boolean = false, - includeMeta: boolean = true + includeMeta: boolean = true, + extract: boolean = false ): Promise { const errors: Error[] = []; try { @@ -234,28 +262,54 @@ 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', - includeMeta + if (obj) { + try { + if (extract && id === 'sync') { + writeSyncJsonToDirectory( + obj as SyncSkeleton, + 'sync', + includeMeta, + extract + ); + continue; + } + else if (extract && id === 'managed') { + writeManagedJsonToDirectory( + obj as ManagedSkeleton, + 'managed', + includeMeta, + extract + ); + continue; + } + else if (extract && id.includes('mapping/')) { + writeMappingJsonToDirectory( + obj as MappingSkeleton, + 'mapping', + includeMeta, + extract + ); + } + else { + if (extract) { + const result = findScriptsFromIdm(obj); + if (result.length !== 0) { + extractIdmScriptToSameLevel(id, obj, result); + } + } + saveToFile( + 'idm', + obj, + '_id', + getFilePath(`${id}.idm.json`, true), + includeMeta + ); + } + } catch (error) { + errors.push( + new FrodoError(`Error saving config entity ${id}`, error) ); - continue; } - 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 +366,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 +436,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') + .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`, }, ]); } @@ -451,7 +523,9 @@ export async function importAllConfigEntitiesFromFile( let filePath; try { filePath = getFilePath(file); + const baseDir = path.dirname(filePath); const importData = JSON.parse(fs.readFileSync(filePath, 'utf8')); + resolveAllExtractedScriptsForImport(importData, baseDir); indicatorId = createProgressIndicator( 'indeterminate', 0, @@ -497,7 +571,10 @@ 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, @@ -526,7 +603,6 @@ export async function importManagedObjectFromFile( } return false; } - /** * Import all IDM configuration objects from working directory * @param {string} entitiesFile JSON file that specifies the config entities to export/import @@ -597,12 +673,16 @@ 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 +690,45 @@ 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,12 +773,22 @@ export 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) { const fileName = getTypedFilename(object.name, 'managed'); - objectPaths.push(extractDataToFile(object, fileName, directory)); + if (extract) { + const result = findScriptsFromIdm(object); + if (result.length !== 0) { + extractIdmScriptsForManaged(object.name, object, result, `${directory}/`); + } + objectPaths.push(extractDataToFile(object, `${object.name}/${fileName}`, directory)); + } + else { + objectPaths.push(extractDataToFile(object, fileName, directory)); + } } managed.objects = objectPaths; saveToFile( @@ -681,6 +800,65 @@ export function writeManagedJsonToDirectory( ); } +export function extractIdmScriptsForManaged( + id: string, + object: any, + foundResults, + directory?: string +): boolean { + directory = directory ? `${directory}/${id}` : ''; + for (const result of foundResults) { + const managedObjectPath = result.path.replace('schema.', '').replaceAll('properties.', ''); + const sourceObj = getObjectByPath(object, result.path); + const objectFileName = `${managedObjectPath}.${result.type}`; + sourceObj.source = extractDataToFile( + result.source, + objectFileName, + directory + ); + } + return false; +} + +export function extractIdmScriptToSameLevel( + id: string, + object: any, + foundResults: any, + directory?: string, + noSubDirectory?: boolean +): boolean { + const idmId = id.split("/"); + var objectFileName = ""; + var sourceObject = object; + if (idmId.length > 1) { + id = idmId[1]; + if (noSubDirectory) { + directory = ''; + } + else { + directory = directory ? `${directory}${idmId[0]}` : idmId[0]; + } + } + for (const result of foundResults) { + // const sourceObject = getObjectByPath(object, result.path); + if (!result.path) { + objectFileName = `${id}.${result.type}`; + sourceObject = object; + } + else { + objectFileName = `${id}.${result.path}.${result.type}`; + sourceObject = getObjectByPath(object, result.path); + } + sourceObject.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 +876,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}/${resolvedObject.name}`); + 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 0beeb3ea0..2344d2515 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,52 @@ const { createMappingExportTemplate, } = frodo.idm.mapping; +export function extractMappingScripts( + id: string, + mapping: any, + foundResult, + directory?: string +): boolean { + directory = directory ? `${directory}/${id}` : ''; + for (const behavior of foundResult) { + if (getTopString(behavior.path) === 'policies') { + const situation = getObjectByPathExcludeLast( + mapping, + behavior.path + ).situation; + const fileName = `${situation}.${getLastString(behavior.path)}`; + const objectSource = getObjectByPath(mapping, behavior.path); + objectSource.source = extractDataToFile( + behavior.source, + `${fileName}.${behavior.type}`, + 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 = `${source}.${target}.${getLastString(behavior.path)}`; + const objectSource = getObjectByPath(mapping, behavior.path); + + objectSource.source = extractDataToFile( + behavior.source, + `${fileName}.${behavior.type}`, + directory + ); + } else { + const objectSource = getObjectByPath(mapping, behavior.path); + objectSource.source = extractDataToFile( + behavior.source, + `${behavior.path}.${behavior.type}`, + directory + ); + } + } + return false; +} + /** * List mappings * @param {boolean} [long=false] detailed list @@ -96,6 +151,7 @@ export async function exportMappingToFile( mappingId: string, file: string, includeMeta: boolean = true, + extract:boolean= false, options: MappingExportOptions = { deps: true, useStringArrays: true, @@ -103,9 +159,25 @@ export async function exportMappingToFile( ): Promise { try { const exportData = await exportMapping(mappingId, options); + const mappingName= getMappingNameFromId(mappingId); + const mappingType= getMappingTypeFromId(mappingId) + if(extract){ + if(mappingType === 'sync'){ + const result = findScriptsFromIdm(exportData.sync.mappings[0]); + if (result.length !== 0) { + extractMappingScripts(mappingName, exportData.sync.mappings[0], result); + } + } + else{ + const result = findScriptsFromIdm(exportData.mapping[mappingId]); + if (result.length !== 0) { + extractMappingScripts(mappingName, exportData.mapping[mappingId], result); + } + } + } let fileName = getTypedFilename( - getMappingNameFromId(mappingId), - getMappingTypeFromId(mappingId) + mappingName, + mappingType ); if (file) { fileName = file; @@ -155,6 +227,7 @@ export async function exportMappingsToFile( */ export async function exportMappingsToFiles( includeMeta: boolean = true, + extract: boolean, options: MappingExportOptions = { deps: true, useStringArrays: true, @@ -162,20 +235,15 @@ 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), + for (const mapping of Object.values(exportData.mapping)){ + writeMappingJsonToDirectory( mapping, - '_id', - getFilePath('mapping/' + fileName, true), - includeMeta - ); + 'mapping', + includeMeta, + extract + ); } - writeSyncJsonToDirectory(exportData.sync, 'sync', includeMeta); + writeSyncJsonToDirectory(exportData.sync, 'sync', includeMeta, extract); return true; } catch (error) { printError(error, `Error exporting mappings to files`); @@ -255,18 +323,22 @@ 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 +346,7 @@ export async function importMappingsFromFiles( } as MappingExportInterface, options ); + return true; } catch (error) { printError(error, `Error importing mappings from files`); @@ -281,6 +354,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,12 +556,25 @@ 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) { const fileName = getTypedFilename(mapping.name, 'sync'); - mappingPaths.push(extractDataToFile(mapping, fileName, directory)); + + if (extract) { + const result = findScriptsFromIdm(mapping); + if (result.length !== 0) { + //getFilePath(`${directory}/${dirName}`, true); + extractMappingScripts(mapping.name, mapping, result, `${directory}/`); + } + const extractFileName = `${mapping.name}/${fileName}` + mappingPaths.push(extractDataToFile(mapping, extractFileName, directory)); + } + else{ + mappingPaths.push(extractDataToFile(mapping, fileName, directory)); + } } sync.mappings = mappingPaths; saveToFile( @@ -479,6 +586,32 @@ export function writeSyncJsonToDirectory( ); } +export function writeMappingJsonToDirectory( + mapping:MappingSkeleton, + directory: string = 'mapping', + includeMeta: boolean, + extract: boolean +) { + if (extract) { + const result = findScriptsFromIdm(mapping); + if (result.length !== 0) { + extractMappingScripts(mapping.name, mapping, result,`${directory}/`); + } + directory = `${directory}/${mapping.name}` + } + const fileName = getTypedFilename( + mapping.name, //mappingTest + 'mapping' + ); + 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 * @@ -497,25 +630,47 @@ export function getLegacyMappingsFromFiles( 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}/${resolvedMapping.name}`); + 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,34 +694,38 @@ 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 = {}; diff --git a/src/utils/Config.ts b/src/utils/Config.ts index 030d9c893..2caa60982 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 { getCustomNodeExportFromFile } from '../ops/NodeOps'; import { getScriptExportByScriptFile } from '../ops/ScriptOps'; import { errorHandler } from '../ops/utils/OpsUtils'; @@ -157,6 +165,9 @@ 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 customNodefiles = jsonFiles.filter((f) => f.path.endsWith('.nodeTypes.json') ); @@ -165,6 +176,16 @@ export async function getConfig( 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') && @@ -174,7 +195,8 @@ 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) { @@ -193,11 +215,30 @@ 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; 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 d482c52a7..a26daa14a 100644 --- a/test/client_cli/en/__snapshots__/config-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-export.test.js.snap @@ -45,7 +45,6 @@ Options: --no-cache Disable token cache for this operation. --no-coords Do not include the x and y coordinate positions of the journey/tree nodes. --no-decode Do not include decoded variable value in variable export - -o, --separate-objects Export managed.idm.json objects separately in their own directory. Ignored with -a. --passphrase The passphrase for the Amster private key if it is encrypted. --private-key File containing the private key for authenticating with Amster. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. -r, --realm-only Export only the config for the active realm. If -g, --global-only is also active, then the global config will also be exported. @@ -55,7 +54,6 @@ Options: network: Retry only network-related failed operations. nothing: Do not retry failed operations. The selected retry strategy controls how the CLI handles failures. (choices: "nothing", "everything", "network", default: Do not retry failed operations.) - -s, --separate-mappings Export sync.idm.json mappings separately in their own directory. Ignored with -a. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) associated with the the service account. --target Host URL of the environment to perform secret value encryption. The URL must resolve to an existing connection profile. Use this option to generate an export that can be imported into the target environment without requiring admin access to the source environment. 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 ff5e800d5..c95597eac 100644 --- a/test/client_cli/en/__snapshots__/idm-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-export.test.js.snap @@ -34,7 +34,6 @@ Options: 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") -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. - -o, --separate-objects Export managed.idm.json objects separately in their own directory. Ignored with -a. --passphrase The passphrase for the Amster private key if it is encrypted. --private-key File containing the private key for authenticating with Amster. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. --retry Retry failed operations. Valid values for strategy: @@ -42,11 +41,11 @@ Options: network: Retry only network-related failed operations. nothing: Do not retry failed operations. The selected retry strategy controls how the CLI handles failures. (choices: "nothing", "everything", "network", default: Do not retry failed operations.) - -s, --separate-mappings Export sync.idm.json mappings separately in their own directory. Ignored with -a. --sa-id Service account id. --sa-jwk-file File containing the JSON Web Key (JWK) associated with the the service account. --use-realm-prefix-on-managed-objects Set to true if you want to use the realm name as a prefix on managed object configuration, e.g. managed/alpha_user, managed/alpha_application or managed/bravo_organization. When false, the default behaviour of using managed/user etc. is retained. This option is ignored when the deployment type is "cloud". --verbose Verbose output during command execution. If specified, may or may not produce additional output. + -x, --extract Extract idm scripts and save the extracted scripts to separate files. Ignored with -a. Environment Variables: FRODO_HOST: AM base URL. Overridden by 'host' argument. 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 2aa6ea5a4..1eadae162 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 @@ -1,9 +1,9 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`CLI help interface for 'idm' should be expected english 1`] = ` -"Usage: frodo idm schema object import [options] [host] [realm] [username] [password] +exports[`CLI help interface for 'idm schema object export' should be expected english 1`] = ` +"Usage: frodo idm schema object export [options] [host] [realm] [username] [password] -Import IDM configuration managed objects. +Export IDM configuration managed objects. Arguments: host AM base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring or alias. @@ -12,14 +12,16 @@ Arguments: password Password. Options: + -a, --all Export all IDM configuration managed objects into a single file in directory -D. + -A, --all-separate Export all IDM configuration managed objects into separate JSON files in directory -D. --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. -e, --env-file [envfile] Name of the env file. - -f, --file [file] Import file. + -f, --file [file] Export file. Ignored with -A. --flush-cache Flush token cache. -h, --help Help - -i, --individual-object Import an individual object. Requires the use of the -f to specify the file. + -i, --individual-object Export an individual managed object by specifying an objects name. E.g. "alpha_user", "bravo_role", etc. If specified, -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"). @@ -29,6 +31,7 @@ Options: 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") + -N, --no-metadata Does not include metadata in the export file. --no-cache Disable token cache for this operation. --passphrase The passphrase for the Amster private key if it is encrypted. --private-key File containing the private key for authenticating with Amster. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. @@ -41,6 +44,7 @@ Options: --sa-jwk-file File containing the JSON Web Key (JWK) associated with the the service account. --use-realm-prefix-on-managed-objects Set to true if you want to use the realm name as a prefix on managed object configuration, e.g. managed/alpha_user, managed/alpha_application or managed/bravo_organization. When false, the default behaviour of using managed/user etc. is retained. This option is ignored when the deployment type is "cloud". --verbose Verbose output during command execution. If specified, may or may not produce additional output. + -x, --extract Extract idm scripts and save the extracted scripts to separate files. Ignored with -a. Environment Variables: FRODO_HOST: AM base URL. Overridden by 'host' argument. 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 2aa6ea5a4..2dde785cb 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 @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`CLI help interface for 'idm' should be expected english 1`] = ` +exports[`CLI help interface for 'idm schema object import' should be expected english 1`] = ` "Usage: frodo idm schema object import [options] [host] [realm] [username] [password] Import IDM configuration managed objects. diff --git a/test/client_cli/en/__snapshots__/idm-schema-object.test.js.snap b/test/client_cli/en/__snapshots__/idm-schema-object.test.js.snap index c4d7c54cd..3575772df 100644 --- a/test/client_cli/en/__snapshots__/idm-schema-object.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-schema-object.test.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`CLI help interface for 'idm' should be expected english 1`] = ` +exports[`CLI help interface for 'idm schema object' should be expected english 1`] = ` "Usage: frodo idm schema object [options] [command] Manage IDM configuration objects. diff --git a/test/client_cli/en/__snapshots__/idm-schema.test.js.snap b/test/client_cli/en/__snapshots__/idm-schema.test.js.snap index 478be1341..0ab1f45da 100644 --- a/test/client_cli/en/__snapshots__/idm-schema.test.js.snap +++ b/test/client_cli/en/__snapshots__/idm-schema.test.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`CLI help interface for 'idm' should be expected english 1`] = ` +exports[`CLI help interface for 'idm schema' should be expected english 1`] = ` "Usage: frodo idm schema [options] [command] Manage IDM schema. 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 7b94cc4d9..ff39b215d 100644 --- a/test/client_cli/en/__snapshots__/mapping-export.test.js.snap +++ b/test/client_cli/en/__snapshots__/mapping-export.test.js.snap @@ -47,6 +47,7 @@ Options: --use-realm-prefix-on-managed-objects Set to true if you want to use the realm name as a prefix on managed object configuration, e.g. managed/alpha_user, managed/alpha_application or managed/bravo_organization. When false, the default behaviour of using managed/user etc. is retained. This option is ignored when the deployment type is "cloud". --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 idm scripts and save the extracted scripts to separate files. Ignored with -a. Environment Variables: FRODO_HOST: AM base URL. Overridden by 'host' argument. diff --git a/test/client_cli/en/idm-schema-object-export.test.js b/test/client_cli/en/idm-schema-object-export.test.js index 2e77b691a..cb6b399bc 100644 --- a/test/client_cli/en/idm-schema-object-export.test.js +++ b/test/client_cli/en/idm-schema-object-export.test.js @@ -2,9 +2,9 @@ import cp from 'child_process'; import { promisify } from 'util'; const exec = promisify(cp.exec); -const CMD = 'frodo idm schema object import --help'; +const CMD = 'frodo idm schema object export --help'; const { stdout } = await exec(CMD); -test("CLI help interface for 'idm' should be expected english", async () => { +test("CLI help interface for 'idm schema object export' should be expected english", async () => { expect(stdout).toMatchSnapshot(); }); diff --git a/test/client_cli/en/idm-schema-object-import.test.js b/test/client_cli/en/idm-schema-object-import.test.js index 2e77b691a..212f2bd1f 100644 --- a/test/client_cli/en/idm-schema-object-import.test.js +++ b/test/client_cli/en/idm-schema-object-import.test.js @@ -5,6 +5,6 @@ const exec = promisify(cp.exec); const CMD = 'frodo idm schema object import --help'; const { stdout } = await exec(CMD); -test("CLI help interface for 'idm' should be expected english", async () => { +test("CLI help interface for 'idm schema object import' should be expected english", async () => { expect(stdout).toMatchSnapshot(); }); diff --git a/test/client_cli/en/idm-schema-object.test.js b/test/client_cli/en/idm-schema-object.test.js index c16713ffa..f50b7632b 100644 --- a/test/client_cli/en/idm-schema-object.test.js +++ b/test/client_cli/en/idm-schema-object.test.js @@ -5,6 +5,6 @@ const exec = promisify(cp.exec); const CMD = 'frodo idm schema object --help'; const { stdout } = await exec(CMD); -test("CLI help interface for 'idm' should be expected english", async () => { +test("CLI help interface for 'idm schema object' should be expected english", async () => { expect(stdout).toMatchSnapshot(); }); diff --git a/test/client_cli/en/idm-schema.test.js b/test/client_cli/en/idm-schema.test.js index aa01281b5..288e1efb4 100644 --- a/test/client_cli/en/idm-schema.test.js +++ b/test/client_cli/en/idm-schema.test.js @@ -5,6 +5,6 @@ const exec = promisify(cp.exec); const CMD = 'frodo idm schema --help'; const { stdout } = await exec(CMD); -test("CLI help interface for 'idm' should be expected english", async () => { +test("CLI help interface for 'idm schema' should be expected english", async () => { expect(stdout).toMatchSnapshot(); }); diff --git a/test/e2e/__snapshots__/config-export.e2e.test.js.snap b/test/e2e/__snapshots__/config-export.e2e.test.js.snap index 5c88340cb..f50c7ee47 100644 --- a/test/e2e/__snapshots__/config-export.e2e.test.js.snap +++ b/test/e2e/__snapshots__/config-export.e2e.test.js.snap @@ -12,10 +12,6 @@ exports[`frodo config export "frodo config export --all-separate --no-metadata - exports[`frodo config export "frodo config export --all-separate --no-metadata --default --directory exportAllTestDir8 --include-active-values --use-string-arrays --no-decode --no-coords --type classic": should export everything, including default scripts, into separate files in the directory exportAllTestDir8 with scripts extracted, no decoding variables, no journey coordinates, separate mappings, and using string arrays 2`] = `""`; -exports[`frodo config export "frodo config export --all-separate --read-only --no-metadata --default --directory exportAllTestDir3 --use-string-arrays --no-decode --no-coords --extract --separate-mappings": should export everything, including default scripts, into separate files in the directory exportAllTestDir3 with scripts extracted, no decoding variables, no journey coordinates, separate mappings, and using string arrays 1`] = `0`; - -exports[`frodo config export "frodo config export --all-separate --read-only --no-metadata --default --directory exportAllTestDir3 --use-string-arrays --no-decode --no-coords --extract --separate-mappings": should export everything, including default scripts, into separate files in the directory exportAllTestDir3 with scripts extracted, no decoding variables, no journey coordinates, separate mappings, and using string arrays 2`] = `""`; - exports[`frodo config export "frodo config export --global-only -af testExportAllGlobal.json -m classic": should export all global config to a single file named testExportAllGlobal.json. 1`] = `0`; exports[`frodo config export "frodo config export --global-only -af testExportAllGlobal.json -m classic": should export all global config to a single file named testExportAllGlobal.json. 2`] = `""`; @@ -28,17 +24,35470 @@ exports[`frodo config export "frodo config export -AD exportAllTestDir1": should exports[`frodo config export "frodo config export -AD exportAllTestDir1": should export everything into separate files in the directory exportAllTestDir1 2`] = `""`; -exports[`frodo config export "frodo config export -MAsxD exportAllTestDir2": should export everything into separate files in the directory exportAllTestDir2 with scripts extracted and mappings separate 1`] = `0`; +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts. 1`] = `0`; -exports[`frodo config export "frodo config export -MAsxD exportAllTestDir2": should export everything into separate files in the directory exportAllTestDir2 with scripts extracted and mappings separate 2`] = `""`; +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts. 2`] = `""`; -exports[`frodo config export "frodo config export -RAD exportAllTestDir5 --include-active-values": should export everything including secret values into separate files in the directory exportAllTestDir5 1`] = `0`; +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/emailTemplate/forgottenUsername.emailTemplate.json 1`] = ` +{ + "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", + }, + }, + }, +} +`; -exports[`frodo config export "frodo config export -RAD exportAllTestDir5 --include-active-values": should export everything including secret values into separate files in the directory exportAllTestDir5 2`] = `""`; +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/emailTemplate/registration.emailTemplate.json 1`] = ` +{ + "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", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/emailTemplate/resetPassword.emailTemplate.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", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/emailTemplate/testTemplate.emailTemplate.json 1`] = ` +{ + "emailTemplate": { + "testTemplate": { + "_id": "emailTemplate/testTemplate", + "advancedEditor": true, + "defaultLocale": "en", + "description": "Test description", + "displayName": "TestTemplate", + "enabled": false, + "from": ""Test From" ", + "html": { + "en": "", + "es": "", + }, + "message": { + "en": " + + +
+

+ alt text +

+

Email Title

+

Message text lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor.

+
+ + ", + "es": " + + +
+

+ alt text +

+

Email Title

+

Message text lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor.

+
+ + ", + }, + "mimeType": "text/html", + "styles": "body { + background-color: #324054; + color: #455469; + 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": "", + "es": "", + }, + "templateId": "testTemplate", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/emailTemplate/updatePassword.emailTemplate.json 1`] = ` +{ + "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", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/emailTemplate/welcome.emailTemplate.json 1`] = ` +{ + "emailTemplate": { + "welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "displayName": "Welcome", + "enabled": true, + "from": "saas@forgerock.com", + "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", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/FrodoTestEmailTemplate2.idm.json 1`] = ` +{ + "idm": { + "FrodoTestEmailTemplate2": { + "_id": "FrodoTestEmailTemplate2", + "defaultLocale": "en", + "displayName": "Frodo Test Email Template Two", + "enabled": true, + "from": "", + "message": { + "en": "

This is your one-time password:

{{object.description}}

", + }, + "mimeType": "text/html", + "subject": { + "en": "One-Time Password for login", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + ], + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/authentication.idm.json 1`] = ` +{ + "idm": { + "authentication": { + "_id": "authentication", + "rsFilter": { + "augmentSecurityContext": { + "source": "file://authentication.rsFilter.augmentSecurityContext.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/*", + }, + ], + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/authentication.rsFilter.augmentSecurityContext.js 1`] = ` +"require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, security.authorization.component.includes('/alpha_') ? 'alphaOrgPrivileges' : 'bravoOrgPrivileges', 'privilegeAssignments'); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + ], + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/endpoint/extractscripttest.idm.json 1`] = ` +{ + "idm": { + "endpoint/extractscripttest": { + "_id": "endpoint/extractscripttest", + "description": "", + "globalsObject": "" {\\n \\"request\\": {\\n \\"method\\": \\"create\\"\\n }\\n }"", + "source": "file://extractscripttest.js", + "type": "text/javascript", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/endpoint/extractscripttest.js 1`] = ` +"//extract idm script test + +//test +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + }, + ], + }, + }, + }, + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/alpha_application/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/alpha_assignment/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/alpha_group/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/alpha_organization/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/alpha_role/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/alpha_user/alpha_user.managed.json 1`] = ` +{ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "alpha_user", + "notifications": {}, + "onCreate": { + "globals": {}, + "source": "file://onCreate.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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/alpha_user/onCreate.js 1`] = ` +"//extract script test UPDATED + + +//test UPDATED + +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/bravo_application/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/bravo_assignment/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/bravo_group/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/bravo_organization/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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/bravo_role/bravo_role.managed.json 1`] = ` +{ + "name": "bravo_role", + "onValidate": { + "globals": {}, + "source": "file://onValidate.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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/bravo_role/onValidate.js 1`] = ` +"//extract script test UPDATED ONVALIDATE + +//test UPDATED +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/bravo_user/bravo_user.managed.json 1`] = ` +{ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "bravo_user", + "notifications": {}, + "postUpdate": { + "globals": {}, + "source": "file://postUpdate.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 config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/bravo_user/postUpdate.js 1`] = ` +"//extract feature test UPDATED POSTUPDATE SCRIPT + + +//test UPDATED +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/managed.idm.json 1`] = ` +{ + "idm": { + "managed": { + "_id": "managed", + "objects": [ + "file://alpha_user/alpha_user.managed.json", + "file://bravo_user/bravo_user.managed.json", + "file://alpha_role/alpha_role.managed.json", + "file://bravo_role/bravo_role.managed.json", + "file://alpha_assignment/alpha_assignment.managed.json", + "file://bravo_assignment/bravo_assignment.managed.json", + "file://alpha_organization/alpha_organization.managed.json", + "file://bravo_organization/bravo_organization.managed.json", + "file://alpha_group/alpha_group.managed.json", + "file://bravo_group/bravo_group.managed.json", + "file://alpha_application/alpha_application.managed.json", + "file://bravo_application/bravo_application.managed.json", + "file://test/test.managed.json", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/test/obj1.obj2.obj3.onValidate.js 1`] = ` +"//test obj1 obj2 obj3 +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/test/obj1.obj2.onValidate.js 1`] = ` +"//test obj1 obj2 +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/test/obj1.onValidate.js 1`] = ` +"//test obj1 +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/test/onValidate.js 1`] = ` +"//test +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/managed/test/test.managed.json 1`] = ` +{ + "name": "test", + "onValidate": { + "globals": {}, + "source": "file://onValidate.js", + "type": "text/javascript", + }, + "schema": { + "$schema": "http://forgerock.org/json-schema#", + "description": "test", + "icon": "fa-database", + "mat-icon": null, + "order": [ + "obj1", + ], + "properties": { + "obj1": { + "description": null, + "isVirtual": false, + "nullable": false, + "onValidate": { + "globals": {}, + "source": "file://obj1.onValidate.js", + "type": "text/javascript", + }, + "order": [ + "obj2", + ], + "properties": { + "obj2": { + "description": null, + "isVirtual": false, + "nullable": false, + "onValidate": { + "globals": {}, + "source": "file://obj1.obj2.onValidate.js", + "type": "text/javascript", + }, + "order": [ + "obj3", + ], + "properties": { + "obj3": { + "description": null, + "isVirtual": false, + "onValidate": { + "globals": {}, + "source": "file://obj1.obj2.obj3.onValidate.js", + "type": "text/javascript", + }, + "order": [], + "properties": {}, + "required": [], + "searchable": false, + "title": null, + "type": "object", + "userEditable": true, + "viewable": true, + }, + }, + "required": [], + "searchable": false, + "title": null, + "type": "object", + "userEditable": true, + "viewable": true, + }, + }, + "required": [], + "searchable": false, + "title": null, + "type": "object", + "userEditable": true, + "viewable": true, + }, + }, + "required": [], + "title": "test", + "type": "object", + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/policy.idm.json 1`] = ` +{ + "idm": { + "policy": { + "_id": "policy", + "additionalFiles": [], + "resources": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/privileges.idm.json 1`] = ` +{ + "idm": { + "privileges": { + "_id": "privileges", + "privileges": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/provisioner.openicf.connectorinfoprovider.idm.json 1`] = ` +{ + "idm": { + "provisioner.openicf.connectorinfoprovider": { + "_id": "provisioner.openicf.connectorinfoprovider", + "connectorsLocation": "connectors", + "remoteConnectorClients": [], + "remoteConnectorClientsGroups": [], + "remoteConnectorServers": [], + "remoteConnectorServersGroups": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/provisioner.openicf/phhappsaasrest.idm.json 1`] = ` +{ + "idm": { + "provisioner.openicf/phhappsaasrest": { + "_id": "provisioner.openicf/phhappsaasrest", + "configurationProperties": { + "acceptSelfSignedCertificates": false, + "authToken": null, + "authenticationMethod": "OAUTH", + "authorizationTokenPrefix": "Bearer", + "clientCertAlias": null, + "clientCertPassword": null, + "clientId": "service-account", + "clientSecret": { + "$crypto": { + "type": "x-simple-encryption", + "value": { + "cipher": "AES/CBC/PKCS5Padding", + "data": "uY0/iYn11R1J8tvC3BWq7Q==", + "iv": "se8ylRzTl4TBUlGUic6QoQ==", + "keySize": 16, + "mac": "c1gHRPiC4gClvW/qGafxOQ==", + "purpose": "idm.config.encryption", + "salt": "PRwTkYcjw0s5jP0l40gZ/A==", + "stableId": "openidm-sym-default", + }, + }, + }, + "connectionTimeout": 30, + "defaultHeaders": null, + "disableHostNameVerifier": false, + "disableHttpCompression": false, + "grantType": "jwt_bearer", + "httpProxyHost": null, + "httpProxyPassword": null, + "httpProxyPort": null, + "httpProxyUsername": null, + "jwtAlgorithm": "RS256", + "jwtCert": null, + "jwtClaims": { + "aud": "https://openam-trivir-demo1.forgeblocks.com/am/oauth2/access_token", + "iss": "98038e00-1fb2-4d6a-82ab-1fb941e2e9be", + "sub": "98038e00-1fb2-4d6a-82ab-1fb941e2e9be", + }, + "jwtExpiration": 900, + "jwtKey": "{ + "d": "TeY13yCYiiC53glTLZLJtvxEWIgd1qIOGwfpp8PoseG4tDv7o8b3nyDcDShPLr5elzq3qWLF_TwxK2syXtuKfb_xDqcepf3LgcDo2jQxKF4TNKcDndfZ0TD_xAbCuK8lXDbq-mMuxnd6V0suINbeyVDPupzED6v-DhK7fRcwiecCXmkdEElOSZtqX70bYII2_MQOSl-BxuK5pI8I5I8P5pwNWlJg9DSbWQXFDXX4x_qGmMGam9jTUxCGfx8Y5GZUskXLVBPd4AMpe5yIbD0n9D_5WK1SpuHSwysVDv8lTSIVlhcIzNrRiLlxVsGsmmH4xpanGQgkAn7UyZm8DuCgHWVsNm7ZptnenMGJx-ya625CG8Gqzk_7xmO3r4BB7UrQlA9do4Gx6TQUe6ChDiZp3KXeR5Nm_hOHsldwBxCKeFR8t2NZQWnSsquL0iSRy35QyrcWZ015qh9G8H4Mqsu2FtvBcqgtm5depxqIMkU5f7z6QDOLcNWVxHOJhPdF1L-OgFHtbHmqnczRGa2kp2H3wFvkfdCtlimREWPi5c8Z0Hqk3dUK7bgg2cp4Xweix5HZ4fs86U1Mu-KaPZShkx7KFop2WSBuWIiNQTqtx-Au6YVmkeQqaBSKTWcpQbam1pGtmelCar58zGvec8XCUVtfaJqZ-ikVLABfuGtxNdgj4V8", + "dp": "Ng-zzUuywTEtDxmJAs_oPGTTLoQZzNGzuBd2IJ8nofTV9Tk1OWug1zZJ2HPIb8jgXS6LgKBFHhNLPHodYIfaeHU7o6OXneFAn4PpYGymOQIQ4ZbDLjZL9ECXlyR4swK6IvLBS_98QE2V7jfoeWZP_EPSgONl9br8HnM4kTTxMAIU8IheIeFyG0cngU0shU4Mq6QbVVoJlvaenbwuMResub8vZqLudBcuCQHe_b6xTyQK4cJeP8xGxrUHK4JWW39qs9FLCDslXVKMvr5F8WTVbhGSfMw7UQ8ihHwy24uwyhFD9MA8Z6RalwqqM8TS6tTNQtxWLPlVBmsfgJ0Tamo1Bw", + "dq": "hPWKx92UQ1HWrzNOc_DnJdVrOZN3URi_34A2eVeFMYTx4GjypBtlYo2ZxW1JMpYoZAMQI0CflQ6gDhvhSyeKCfwuWwNOl_PPldaNdx36xbZpNDQ49cTXZtM-SNAqW7ReNGJEpA40CnwVROWkBoaBP6oGbtprb57fS-plDG8dneuvvSuBtzBCmVnMg77IvlQ_r8PvCqVzuYIUv8GtmZJEkag-Hgw75HVpjwQe-raIirmyY1Nj6MBS8YTEsAM_sLhJ9WJnm7TqBVlUFr9abvlf0Ct4uQ9CrKGbxuA2HsC1EO1Y38OjcLtXpEGp6y83myWrEbUkO74L725Qu_gYcz0fAw", + "e": "AQAB", + "kty": "RSA", + "n": "qAigTj8zLCIGFN05UPw7WaOJdEtDZqF9GIyMwqsb0yTdMkmQxIOXN13PscbmiHzIMjIZeO2STaEei3ogokyLOUDhzWdo0KEMaWlbvxQrolB44lalVPVGcfNLGsChgMazNIRL9ktyaH3jycRQgFFsvfeOwEIMQ2yt4KMSPIMamwY93dQfNFlaZYVtoGMMJrA05_UBMiUiXCQ4D1dCHES-DUmJaJe6QVskuJ72tl7V6HGaVd681AqgYtn3SwZoc6FriEFUwmD5K3cgGLjDdCkAh7Cs1m2SvjgBBPuMf5Y09YrgqUxozOotDKjjq2mXnKnXno7byXpdkzQR_AkqHRVjnQQxJSW9bM8leC0-_OQ0QPLtLEE6O28OA3zWwH8ku_wnXTjMsKRdTdvtwyJUL6SnZHnAU036cMRtGBFgoj9dMDn9tqfhqIR-NGFvhNKUMbf71m_HB0HHj7Pc455p7nM39rKxGyJiBOoFd6ANr3W05aavvatjHe83NGMf0MQdW3DjaeyLqNCRlbvgjhtIqf_Vi3CMlq2jz-c-QQO2vHSKPWCCoPunCi-wZzo9wQ4J2mOQ8wasvDhXX_Ajrhcn07zwhtHIUxCxv9u_FC9k80ZGODxb-LmDI0YmK_LEJMM21tCQ2vPfP1zZ3uTlXgeXlycHodz3V3YmdSGVAe3F8q92QTU", + "p": "4LYCIH9LZneRuf-Dw64nIny4sfCUnGGfStpZ6zSorqWT7mLa0ACvqNQhS_bbaYq-KYPeBRg0UcX-A_N-3aW925fUHF5rSCcSs1s_PxQ5kaEcyBeWepvv__Gk-WSMuqUUC_bpXMWBD1-OJZnZ_tf_6XXwET3TbtyNq4b9dTPyYHcPnPqao9Gg5g7zQwTRwAmk4EU3Lcr0X-2lX7oNXfVH7y125YYU_nvrJ8tDlgksqeuK3fj0GfRRr258rBDZ7EC4wh9ykqaDr2ahtBhNBTEpPS3P4ZWnNSYyjdprDxexxNXVlzaOliJszoxFRY6uRsD85LMzxE6NSRUnoP5koA1_6w", + "q": "v25QVIrYvmV1GoorSh2LIwvmmKPSVgllx4YmVLKiH74miD2zk09vvlQDdXx4BBc10TdejvpuaLhzqBW6Vdxt22ZryRirnluioMIGYxS5UjaJI8KMFUqb-Y75fko-ZGd4ZdHsKQbBR3Q1NXNCIkO5JkR0yD4aJASbCUt2hQ3aLbsMK2nJinUuVYstT2m00CO2cBWt9cF8RKsSsu-2_vV0q4PMOhNeahZzgjYUojSUmATMRTU_5TVdWjDc2T6WjhLyDmNnlAtNgZRaXgTxzRn7VzrwbhiHzvAGQbMlzfNpk-iXePVzUp2e-7o6tVYRo5T53FVn9w8zLmqfBsr5MmIbXw", + "qi": "I0IROwrZQ-JnX_u19QrdENguWN9H8Pc74PgW9wUx_FgENFl8RDmMloFYgrJ0z3sAJ7p0crKVZ1N9klIECfUB_9E5EmOwuItx5PNjeFKwo8u4HLc39SAyon9igmfwB6sd8196LdfHuBEM2eYShefkIkWTkHQfU2TijxdXHlqYMXBOl6UvhtCUwabQKTJLtQ6Sh0TZ0PnKcpl1FGdtZvHqKOnJUQ7jS2wtrS6V9IyB3Sinc8vYeZ7HbcuS7LU6nT3JNoIjmcGadvbgrzEQZC7carVW2UQQneTg05hY6ZbFmge80zGgfh-91RRLNqzg64_bOEqusRlLYPi8zlQ2r_Ewew" +}", + "jwtPem": null, + "keyAlgorithm": null, + "login": null, + "maximumConnections": 10, + "objectTypes": { + "__ACCOUNT__": { + "exceptions": {}, + "operations": { + "CREATE": { + "idPath": "_id", + "method": "post", + "path": "/managed/alpha_user", + "requestMapping": { + "accountStatus": "accountStatus", + "adminOfOrg": "adminOfOrg", + "city": "city", + "cn": "cn", + "country": "country", + "description": "description", + "givenName": "givenName", + "groups": "groups", + "mail": "mail", + "managedGroups": "groups", + "managedRoles": "roles", + "memberOfOrg": "memberOfOrg", + "ownerOfOrg": "ownerOfOrg", + "password": "password", + "postalAddress": "postalAddress", + "postalCode": "postalCode", + "roles": "roles", + "sn": "sn", + "stateProvince": "stateProvince", + "telephoneNumber": "telephoneNumber", + "userName": "userName", + }, + "unflattenAttributes": [ + { + "attributeName": "managedRoles", + "attributeValue": "_ref", + }, + ], + }, + "DELETE": { + "method": "delete", + "path": "/managed/alpha_user/{uid}", + }, + "GET": { + "idPath": "_id", + "method": "get", + "namePath": "userName", + "path": "/managed/alpha_user/{uid}", + "responseMapping": { + "accountStatus": "accountStatus", + "adminOfOrg": "adminOfOrg", + "city": "city", + "cn": "cn", + "country": "country", + "description": "description", + "givenName": "givenName", + "groups": "groups", + "mail": "mail", + "managedGroups": "effectiveGroups[*]._ref", + "managedRoles": "effectiveRoles[*]._ref", + "memberOfOrg": "memberOfOrg", + "ownerOfOrg": "ownerOfOrg", + "password": "password", + "postalAddress": "postalAddress", + "postalCode": "postalCode", + "roles": "roles", + "sn": "sn", + "stateProvince": "stateProvince", + "telephoneNumber": "telephoneNumber", + "userName": "userName", + }, + }, + "QUERY": { + "idPath": "_id", + "method": "get", + "namePath": "userName", + "pagination": { + "cookiePagination": { + "param": "_pageSize={_pageSize}&_pagedResultsCookie={_pagedResultsCookie}", + "type": "param", + }, + "offSetPagination": { + "param": "_pageSize={_pageSize}&_pagedResultsOffSet={_pagedResultsOffSet}", + "type": "param", + }, + "pageSizePagination": { + "param": "_pageSize={_pageSize}", + "type": "param", + }, + "pagedResultsCookie": { + "path": "pagedResultCookie", + "type": "body", + }, + }, + "path": "/managed/alpha_user", + "queryParams": { + "_queryFilter": "true", + }, + "responseMapping": { + "accountStatus": "accountStatus", + "adminOfOrg": "adminOfOrg", + "city": "city", + "cn": "cn", + "country": "country", + "description": "description", + "givenName": "givenName", + "groups": "groups", + "mail": "mail", + "managedGroups": "effectiveGroups[*]._ref", + "managedRoles": "effectiveRoles[*]._ref", + "memberOfOrg": "memberOfOrg", + "ownerOfOrg": "ownerOfOrg", + "password": "password", + "postalAddress": "postalAddress", + "postalCode": "postalCode", + "roles": "roles", + "sn": "sn", + "stateProvince": "stateProvince", + "telephoneNumber": "telephoneNumber", + "userName": "userName", + }, + }, + "UPDATE": { + "idPath": "_id", + "method": "put", + "path": "/managed/alpha_user/{uid}", + "requestMapping": { + "__UID__": "_id", + "accountStatus": "accountStatus", + "adminOfOrg": "adminOfOrg", + "city": "city", + "cn": "cn", + "country": "country", + "description": "description", + "givenName": "givenName", + "groups": "groups", + "mail": "mail", + "managedGroups": "groups", + "managedRoles": "roles", + "memberOfOrg": "memberOfOrg", + "ownerOfOrg": "ownerOfOrg", + "password": "password", + "postalAddress": "postalAddress", + "postalCode": "postalCode", + "roles": "roles", + "sn": "sn", + "stateProvince": "stateProvince", + "telephoneNumber": "telephoneNumber", + "userName": "userName", + }, + "unflattenAttributes": [ + { + "attributeName": "managedRoles", + "attributeValue": "_ref", + }, + ], + }, + }, + "schema": [ + { + "fieldName": "userName", + "flags": [ + "REQUIRED", + ], + "type": "string", + }, + { + "fieldName": "givenName", + "flags": [ + "REQUIRED", + ], + "type": "string", + }, + { + "fieldName": "sn", + "flags": [ + "REQUIRED", + ], + "type": "string", + }, + { + "fieldName": "mail", + "flags": [ + "REQUIRED", + ], + "type": "string", + }, + { + "fieldName": "password", + "type": "string", + }, + { + "fieldName": "accountStatus", + "type": "string", + }, + { + "fieldName": "groups", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + { + "fieldName": "roles", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + { + "fieldName": "ownerOfOrg", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + { + "fieldName": "description", + "type": "string", + }, + { + "fieldName": "telephoneNumber", + "type": "string", + }, + { + "fieldName": "cn", + "type": "string", + }, + { + "fieldName": "postalAddress", + "type": "string", + }, + { + "fieldName": "city", + "type": "string", + }, + { + "fieldName": "stateProvince", + "type": "string", + }, + { + "fieldName": "postalCode", + "type": "string", + }, + { + "fieldName": "country", + "type": "string", + }, + { + "fieldName": "managedGroups", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + { + "fieldName": "managedRoles", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + { + "fieldName": "managedOrgs", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + ], + }, + "__GROUP__": { + "exceptions": {}, + "operations": {}, + "schema": [ + { + "fieldName": "name", + "flags": [ + "REQUIRED", + ], + "type": "string", + }, + { + "fieldName": "description", + "type": "string", + }, + { + "fieldName": "members", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + ], + }, + "__ORGANIZATION__": { + "exceptions": {}, + "operations": {}, + "schema": [ + { + "fieldName": "name", + "flags": [ + "REQUIRED", + ], + "type": "string", + }, + { + "fieldName": "description", + "type": "string", + }, + { + "fieldName": "members", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + { + "fieldName": "admins", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + { + "fieldName": "owners", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + ], + }, + "__ROLE__": { + "exceptions": {}, + "operations": { + "GET": { + "idPath": "_id", + "method": "get", + "namePath": "name", + "path": "/managed/alpha_group/{uid}", + "responseMapping": { + "/*": "/*", + }, + }, + }, + "schema": [ + { + "fieldName": "name", + "flags": [ + "REQUIRED", + ], + "type": "string", + }, + { + "fieldName": "description", + "type": "string", + }, + { + "fieldName": "members", + "flags": [ + "MULTIVALUED", + ], + "type": "string", + }, + ], + }, + }, + "password": null, + "refreshToken": null, + "scope": "fr:am:* fr:idm:*", + "serviceUri": "https://openam-trivir-demo1.forgeblocks.com/openidm", + "tokenEndpoint": "https://openam-trivir-demo1.forgeblocks.com/am/oauth2/access_token", + "useBasicAuthForOauthTokenNeg": false, + }, + "connectorRef": { + "bundleName": "org.forgerock.openicf.connectors.rest-connector", + "bundleVersion": "[1.5.20.29, 1.6.0.0)", + "connectorName": "org.forgerock.openicf.connectors.rest.RestConnector", + "displayName": "Rest 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", + }, + "accountStatus": { + "nativeName": "accountStatus", + "nativeType": "string", + "type": "string", + }, + "city": { + "nativeName": "city", + "nativeType": "string", + "type": "string", + }, + "cn": { + "nativeName": "cn", + "nativeType": "string", + "type": "string", + }, + "country": { + "nativeName": "country", + "nativeType": "string", + "type": "string", + }, + "description": { + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "givenName": { + "nativeName": "givenName", + "nativeType": "string", + "required": true, + "type": "string", + }, + "groups": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "groups", + "nativeType": "string", + "type": "array", + }, + "mail": { + "nativeName": "mail", + "nativeType": "string", + "required": true, + "type": "string", + }, + "managedGroups": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "managedGroups", + "nativeType": "string", + "type": "array", + }, + "managedOrgs": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "managedOrgs", + "nativeType": "string", + "type": "array", + }, + "managedRoles": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "managedRoles", + "nativeType": "string", + "type": "array", + }, + "ownerOfOrg": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "ownerOfOrg", + "nativeType": "string", + "type": "array", + }, + "password": { + "nativeName": "password", + "nativeType": "string", + "type": "string", + }, + "postalAddress": { + "nativeName": "postalAddress", + "nativeType": "string", + "type": "string", + }, + "postalCode": { + "nativeName": "postalCode", + "nativeType": "string", + "type": "string", + }, + "roles": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "roles", + "nativeType": "string", + "type": "array", + }, + "sn": { + "nativeName": "sn", + "nativeType": "string", + "required": true, + "type": "string", + }, + "stateProvince": { + "nativeName": "stateProvince", + "nativeType": "string", + "type": "string", + }, + "telephoneNumber": { + "nativeName": "telephoneNumber", + "nativeType": "string", + "type": "string", + }, + "userName": { + "nativeName": "userName", + "nativeType": "string", + "required": true, + "type": "string", + }, + }, + "type": "object", + }, + "__GROUP__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__GROUP__", + "nativeType": "__GROUP__", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "description": { + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "members": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "members", + "nativeType": "string", + "type": "array", + }, + "name": { + "nativeName": "name", + "nativeType": "string", + "required": true, + "type": "string", + }, + }, + "type": "object", + }, + "__ORGANIZATION__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ORGANIZATION__", + "nativeType": "__ORGANIZATION__", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "admins": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "admins", + "nativeType": "string", + "type": "array", + }, + "description": { + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "members": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "members", + "nativeType": "string", + "type": "array", + }, + "name": { + "nativeName": "name", + "nativeType": "string", + "required": true, + "type": "string", + }, + "owners": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "owners", + "nativeType": "string", + "type": "array", + }, + }, + "type": "object", + }, + "__ROLE__": { + "$schema": "http://json-schema.org/draft-03/schema", + "id": "__ROLE__", + "nativeType": "__ROLE__", + "properties": { + "__NAME__": { + "nativeName": "__NAME__", + "nativeType": "string", + "type": "string", + }, + "description": { + "nativeName": "description", + "nativeType": "string", + "type": "string", + }, + "members": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "members", + "nativeType": "string", + "type": "array", + }, + "name": { + "nativeName": "name", + "nativeType": "string", + "required": true, + "type": "string", + }, + }, + "type": "object", + }, + }, + "operationTimeout": { + "AUTHENTICATE": 10000, + "CREATE": 15000, + "DELETE": 15000, + "GET": 15000, + "RESOLVEUSERNAME": 10000, + "SCHEMA": 10000, + "SCRIPT_ON_CONNECTOR": 15000, + "SCRIPT_ON_RESOURCE": 15000, + "SEARCH": 15000, + "SYNC": 15000, + "TEST": 5000, + "UPDATE": 15000, + "VALIDATE": 5000, + }, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + }, + }, + }, + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/router.idm.json 1`] = ` +{ + "idm": { + "router": { + "_id": "router", + "filters": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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?", + }, + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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": [ + "/*", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/servletfilter/payload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/payload": { + "_id": "servletfilter/payload", + "initParams": { + "maxRequestSizeInMegabytes": 5, + }, + "urlPatterns": [ + "&{openidm.servlet.alias}/*", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/servletfilter/upload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/upload": { + "_id": "servletfilter/upload", + "initParams": { + "maxRequestSizeInMegabytes": 50, + }, + "urlPatterns": [ + "&{openidm.servlet.upload.alias}/*", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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": "/", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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, + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + ], + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/idm/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", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/internalRole/openidm-admin.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-admin": { + "_id": "openidm-admin", + "condition": null, + "description": "Administrative access", + "name": "openidm-admin", + "privileges": [], + "temporalConstraints": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/internalRole/openidm-authorized.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-authorized": { + "_id": "openidm-authorized", + "condition": null, + "description": "Basic minimum user", + "name": "openidm-authorized", + "privileges": [], + "temporalConstraints": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/internalRole/openidm-cert.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-cert": { + "_id": "openidm-cert", + "condition": null, + "description": "Authenticated via certificate", + "name": "openidm-cert", + "privileges": [], + "temporalConstraints": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/internalRole/openidm-reg.internalRole.json 1`] = ` +{ + "internalRole": { + "openidm-reg": { + "_id": "openidm-reg", + "condition": null, + "description": "Anonymous access", + "name": "openidm-reg", + "privileges": [], + "temporalConstraints": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/internalRole/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": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/internalRole/platform-provisioning.internalRole.json 1`] = ` +{ + "internalRole": { + "platform-provisioning": { + "_id": "platform-provisioning", + "condition": null, + "description": "Platform provisioning access", + "name": "platform-provisioning", + "privileges": [], + "temporalConstraints": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/mapping/mappingTest/_id.name.transform.js 1`] = ` +"//mapping test extract script +source; +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/mapping/mappingTest/mappingTest.mapping.json 1`] = ` +{ + "mapping": { + "mapping/mappingTest": { + "_id": "mapping/mappingTest", + "consentRequired": false, + "displayName": "mappingTest", + "icon": null, + "name": "mappingTest", + "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": "_id", + "target": "name", + "transform": { + "globals": {}, + "source": "file://_id.name.transform.js", + "type": "text/javascript", + }, + }, + ], + "source": "managed/alpha_assignment", + "target": "managed/alpha_group", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/mapping/testMapping2/SOURCE.name.transform.js 1`] = ` +"//test extract +'atestuser'; +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/mapping/testMapping2/testMapping2.mapping.json 1`] = ` +{ + "mapping": { + "mapping/testMapping2": { + "_id": "mapping/testMapping2", + "consentRequired": false, + "displayName": "testMapping2", + "icon": null, + "name": "testMapping2", + "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://SOURCE.name.transform.js", + "type": "text/javascript", + }, + }, + ], + "source": "managed/bravo_organization", + "target": "managed/bravo_role", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/ALU.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + MULTIPLY: "MULTIPLY", + DIVIDE: "DIVIDE" +} + +function main() { + var a = Number(properties.a); + var b = Number(properties.b); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("z", a + b); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("z", a - b); + break; + case OPERATORS.MULTIPLY: + nodeState.putShared("z", a * b); + break; + case OPERATORS.DIVIDE: + if (b == 0) throw new Error("Cannot divide by 0"); + nodeState.putShared("z", a / b); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/ALU.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an "x" and "y" value on the shared state, and will produce a new "z" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y", + ], + "outcomes": [ + "Success", + ], + "outputs": [ + "z", + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": "file://ALU.nodeTypes.js", + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities", + ], + "version": 1, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Display-Callback.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + OUTCOME: 'outcome' +}; + +var CALLBACKS = { + BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK", + CHOICE_CALLBACK: "CHOICE_CALLBACK", + CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK", + CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK", + DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK", + HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK", + HTTP_CALLBACK: "HTTP_CALLBACK", + IDP_CALLBACK: "IDP_CALLBACK", + KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK", + LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK", + METADATA_CALLBACK: "METADATA_CALLBACK", + NAME_CALLBACK: "NAME_CALLBACK", + NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK", + PASSWORD_CALLBACK: "PASSWORD_CALLBACK", + POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK", + REDIRECT_CALLBACK: "REDIRECT_CALLBACK", + SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK", + SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK", + STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK", + SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK", + TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK", + TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK", + TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK", + VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK", + VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK", + X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK" +} + +function isStringPresent(value) { + return value; +} + +function getString(value) { + return value || ''; +} + +function isArrayPresent(value) { + return value; +} + +function getArray(value) { + return value ? JSON.parse(value) : []; +} + +function isObjectPresent(value) { + return value; +} + +function getObject(value) { + return value ? JSON.parse(value) : {}; +} + +function isIntPresent(value) { + return value; +} + +function getInt(value) { + return value ? parseInt(value) : 0; +} + +function isDoublePresent(value) { + return value; +} + +function getDouble(value) { + return value ? parseFloat(value) : 0.0; +} + +function isBooleanPresent(value) { + return value; +} + +function getBoolean(value) { + return value ? value.toLowerCase() === 'true' : false; +} + +function setProperty(value) { + if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value); + if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value); + if (properties.objectSharedProperty) { + var attributes = {}; + attributes[properties.objectSharedProperty] = value; + nodeState.mergeShared({ + objectAttributes: attributes + }); + } + if (properties.objectTransientProperty) { + var attributes = {}; + attributes[properties.objectTransientProperty] = value; + nodeState.mergeTransient({ + objectAttributes: attributes + }); + } +} + +function booleanAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getBoolean(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required); + } +} + +function choiceCallback() { + var prompt = getString(properties.options.prompt); + var choices = getArray(properties.options.choices); + var defaultChoice = getInt(properties.options.defaultChoice); + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed); +} + +function confirmationCallback() { + var prompt = getString(properties.options.prompt); + var messageType = getInt(properties.options.messageType); + var options = getArray(properties.options.options); + var optionType = getInt(properties.options.optionType); + var defaultOption = getInt(properties.options.defaultOption); + if (isStringPresent(properties.options.prompt)) { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption); + } + } else { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(messageType, options, defaultOption); + } + } +} + +function consentMappingCallback() { + var config = getObject(properties.options.config); + var message = getString(properties.options.message); + var isRequired = getBoolean(properties.options.isRequired); + var name = getString(properties.options.name); + var displayName = getString(properties.options.displayName); + var icon = getString(properties.options.icon); + var accessLevel = getString(properties.options.accessLevel); + var titles = getArray(properties.options.titles); + if (isObjectPresent(properties.options.prompt)) { + callbacksBuilder.consentMappingCallback(config, message, isRequired); + } else { + callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired); + } +} + +function deviceProfileCallback() { + var metadata = getBoolean(properties.options.metadata); + var location = getBoolean(properties.options.location); + var message = getString(properties.options.message); + callbacksBuilder.deviceProfileCallback(metadata, location, message); +} + +function hiddenValueCallback() { + var id = getString(properties.options.id); + var value = getString(properties.options.value); + callbacksBuilder.hiddenValueCallback(id, value); +} + +function httpCallback() { + var authorizationHeader = getString(properties.options.authorizationHeader); + var negotiationHeader = getString(properties.options.negotiationHeader); + var authRHeader = getString(properties.options.authRHeader); + var negoName = getString(properties.options.negoName); + var negoValue = getString(properties.options.negoValue); + if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) { + var errorCode = getString(properties.options.errorCode); + callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode); + } else { + var errorCode = getInt(properties.options.errorCode); + callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode); + } +} + +function idPCallback() { + var provider = getString(properties.options.provider); + var clientId = getString(properties.options.clientId); + var redirectUri = getString(properties.options.redirectUri); + var scope = getArray(properties.options.scope); + var nonce = getString(properties.options.nonce); + var request = getString(properties.options.request); + var requestUri = getString(properties.options.requestUri); + var acrValues = getArray(properties.options.acrValues); + var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo); + var token = getString(properties.options.token); + var tokenType = getString(properties.options.tokenType); + if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType); + } else { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo); + } +} + +function kbaCreateCallback() { + var prompt = getString(properties.options.prompt); + var predefinedQuestions = getArray(properties.options.predefinedQuestions); + var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions); + callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions); +} + +function languageCallback() { + var language = getString(properties.options.language); + var country = getString(properties.options.country); + callbacksBuilder.languageCallback(language, country); +} + +function metadataCallback() { + var outputValue = getObject(properties.options.outputValue); + callbacksBuilder.metadataCallback(outputValue); +} + +function nameCallback() { + var prompt = getString(properties.options.prompt); + var defaultName = getString(properties.options.defaultName); + if (isStringPresent(properties.options.defaultName)) { + callbacksBuilder.nameCallback(prompt, defaultName); + } else { + callbacksBuilder.nameCallback(prompt); + } +} + +function numberAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getDouble(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required); + } +} + +function passwordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + callbacksBuilder.passwordCallback(prompt, echoOn); +} + +function pollingWaitCallback() { + var waitTime = getString(properties.options.waitTime); + var message = getString(properties.options.message); + callbacksBuilder.pollingWaitCallback(waitTime, message); +} + +function redirectCallback() { + throw new Error('Not Implemented'); +} + +function scriptTextOutputCallback() { + var message = getString(properties.options.message); + callbacksBuilder.scriptTextOutputCallback(message); +} + +function selectIdPCallback() { + var providers = getObject(properties.options.providers); + callbacksBuilder.selectIdPCallback(providers); +} + +function stringAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getString(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required); + } +} + +function suspendedTextOutputCallback() { + var messageType = getInt(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.suspendedTextOutputCallback(messageType, message); +} + +function termsAndConditionsCallback() { + var version = getString(properties.options.version); + var terms = getString(properties.options.terms); + var createDate = getString(properties.options.createDate); + callbacksBuilder.termsAndConditionsCallback(version, terms, createDate); +} + +function textInputCallback() { + var prompt = getString(properties.options.prompt); + var defaultText = getString(properties.options.defaultText); + if (isStringPresent(properties.options.defaultText)) { + callbacksBuilder.textInputCallback(prompt, defaultText); + } else { + callbacksBuilder.textInputCallback(prompt); + } +} + +function textOutputCallback() { + var messageType = getString(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.textOutputCallback(messageType, message); +} + +function validatedPasswordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly); + } +} + +function validatedUsernameCallback() { + var prompt = getString(properties.options.prompt); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly); + } +} + +function x509CertificateCallback() { + throw new Error('Not Implemented'); +} + +function getBooleanAttributeInputCallback() { + setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0)); +} + +function getChoiceCallback() { + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + var selections = callbacks.getChoiceCallbacks().get(0); + setProperty(multipleSelectionsAllowed ? selections : selections[0]); +} + +function getConfirmationCallback() { + setProperty(callbacks.getConfirmationCallbacks().get(0)); +} + +function getConsentMappingCallback() { + setProperty(callbacks.getConsentMappingCallbacks().get(0)); +} + +function getDeviceProfileCallback() { + setProperty(callbacks.getDeviceProfileCallbacks().get(0)); +} + +function getHiddenValueCallback() { + var id = getString(properties.options.id); + setProperty(callbacks.getHiddenValueCallbacks().get(id)); +} + +function getHttpCallback() { + setProperty(callbacks.getHttpCallbacks().get(0)); +} + +function getIdPCallback() { + setProperty(callbacks.getIdpCallbacks().get(0)); +} + +function getKbaCreateCallback() { + setProperty(callbacks.getKbaCreateCallbacks().get(0)); +} + +function getLanguageCallback() { + setProperty(callbacks.getLanguageCallbacks().get(0)); +} + +function getNameCallback() { + setProperty(callbacks.getNameCallbacks().get(0)); +} + +function getNumberAttributeInputCallback() { + setProperty(callbacks.getNumberAttributeInputCallbacks().get(0)); +} + +function getPasswordCallback() { + setProperty(callbacks.getPasswordCallbacks().get(0)); +} + +function getSelectIdPCallback() { + setProperty(callbacks.getSelectIdPCallbacks().get(0)); +} + +function getStringAttributeInputCallback() { + setProperty(callbacks.getStringAttributeInputCallbacks().get(0)); +} + +function getTermsAndConditionsCallback() { + setProperty(callbacks.getTermsAndConditionsCallbacks().get(0)); +} + +function getTextInputCallback() { + setProperty(callbacks.getTextInputCallbacks().get(0)); +} + +function getValidatedPasswordCallback() { + setProperty(callbacks.getValidatedPasswordCallbacks().get(0)); +} + +function getValidatedUsernameCallback() { + setProperty(callbacks.getValidatedUsernameCallbacks().get(0)); +} + +function getX509CertificateCallback() { + setProperty(callbacks.getX509CertificateCallbacks().get(0)); +} + +function main() { + if (!callbacks.isEmpty()) { + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break; + case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break; + case CALLBACKS.NAME_CALLBACK: getNameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break; + default: break; + } + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: httpCallback(); break; + case CALLBACKS.IDP_CALLBACK: idPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break; + case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break; + case CALLBACKS.NAME_CALLBACK: nameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break; + case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break; + case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break; + case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break; + case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break; + case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break; + default: throw new Error('Unknown Callback'); // Should never reach this case + } +} + +main(); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Display-Callback.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback", + }, + "required": true, + "title": "Callback", + "type": "STRING", + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING", + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING", + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). + +For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. + +Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT", + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING", + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING", + }, + }, + "script": "file://Display-Callback.nodeTypes.js", + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities", + ], + "version": 1, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Display-State.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + OUTCOME: "outcome" +}; + +function main() { + if (!callbacks.isEmpty()) { + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + var keySet = nodeState.keys(); // Java Set + var keys = Array.from(keySet); // Make it into JavaScript array + debugState = {}; + for (var i in keys) { + var k = new String(keys[i]); + var item = nodeState.get(k); + if (typeof item === "object") { + debugState[k] = nodeState.getObject(k); + } else { + debugState[k] = nodeState.get(k); + } + } + if (properties.displayFormat === "JSON") { + callbacksBuilder.textOutputCallback(0, \`
\${JSON.stringify(debugState, null, 2)}
\`); + return; + } + callbacksBuilder.textOutputCallback(0, \`\${Array.from(Object.keys(debugState).map(k => \`\`))}
KeyValue
\${k}
\${debugState[k]}
\`); +} + +main(); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Display-State.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table", + }, + "required": true, + "title": "Display Format", + "type": "STRING", + }, + }, + "script": "file://Display-State.nodeTypes.js", + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing", + ], + "version": 1, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Generate-JWT.nodeTypes.js 1`] = ` +"var aud = properties.audience; +var iss = properties.issuer; +var validity = properties.validity; +var esv = properties.signingkey; + +var signingkey = systemEnv.getProperty(esv); + +var username = nodeState.get("username"); + +var data = { + jwtType:"SIGNED", + jwsAlgorithm: "HS256", + issuer: iss, + subject: username, + audience: aud, + type: "JWT", + validityMinutes: validity, + signingKey: signingkey +}; + +var jwt = jwtAssertion.generateJwt(data); + +if (jwt !== null && jwt.length > 0) { + nodeState.putShared("assertionJwt" , jwt); + action.goTo("True"); +} else { + action.goTo("False"); +} +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Generate-JWT.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING", + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING", + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING", + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER", + }, + }, + "script": "file://Generate-JWT.nodeTypes.js", + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities", + ], + "version": 1, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Has-Session.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Has-Session.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session.nodeTypes.js", + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities", + ], + "version": 1, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Has-Session-AM.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Has-Session-AM.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session-AM.nodeTypes.js", + "serviceName": "session", + "tags": [ + "utilities", + ], + "version": 1, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Vector-ALU.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + DOT: "DOT", + CROSS: "CROSS" +} + +function add(a, b) { + return a.map((v, i) => v + b[i]); +} + +function subtract(a, b) { + return a.map((v, i) => v - b[i]); +} + +function dot(a, b) { + return a.reduce((sum, v, i) => sum + v * b[i], 0); +} + +function cross(a, b) { + return [ + a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0] + ]; +} + +function main() { + if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension."); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("c", add(properties.a, properties.b)); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("c", subtract(properties.a, properties.b)); + break; + case OPERATORS.DOT: + nodeState.putShared("c", dot(properties.a, properties.b)); + break; + case OPERATORS.CROSS: + if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product"); + nodeState.putShared("c", cross(properties.a, properties.b)); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/nodeTypes/Vector-ALU.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key "c".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success", + ], + "outputs": [ + "c", + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3, + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER", + }, + "b": { + "defaultValue": [ + 4, + 5, + 6, + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER", + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": "file://Vector-ALU.nodeTypes.js", + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities", + ], + "version": 1, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/secret/esv-osaic-fradmin-serviceclient-secret.secret.json 1`] = ` +{ + "secret": { + "esv-osaic-fradmin-serviceclient-secret": { + "_id": "esv-osaic-fradmin-serviceclient-secret", + "activeVersion": "1", + "description": "Used in OSUserLogin journey. Not sure what this is used for. + +1/12/2026 Dylan Berry", + "encoding": "generic", + "loaded": true, + "loadedVersion": "1", + "useInPlaceholders": true, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/secret/esv-push-aws-sns-access-key-id.secret.json 1`] = ` +{ + "secret": { + "esv-push-aws-sns-access-key-id": { + "_id": "esv-push-aws-sns-access-key-id", + "activeVersion": "1", + "description": "", + "encoding": "generic", + "loaded": true, + "loadedVersion": "1", + "useInPlaceholders": true, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/secret/esv-push-aws-sns-access-key-secret.secret.json 1`] = ` +{ + "secret": { + "esv-push-aws-sns-access-key-secret": { + "_id": "esv-push-aws-sns-access-key-secret", + "activeVersion": "1", + "description": "", + "encoding": "generic", + "loaded": true, + "loadedVersion": "1", + "useInPlaceholders": true, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/secret/esv-sns-access-key-id.secret.json 1`] = ` +{ + "secret": { + "esv-sns-access-key-id": { + "_id": "esv-sns-access-key-id", + "activeVersion": "1", + "description": "", + "encoding": "generic", + "loaded": true, + "loadedVersion": "1", + "useInPlaceholders": true, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/secret/esv-sns-access-key-secret.secret.json 1`] = ` +{ + "secret": { + "esv-sns-access-key-secret": { + "_id": "esv-sns-access-key-secret", + "activeVersion": "1", + "description": "", + "encoding": "generic", + "loaded": true, + "loadedVersion": "1", + "useInPlaceholders": true, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/service/CorsService.service.json 1`] = ` +{ + "service": { + "CorsService": { + "_id": "", + "_type": { + "_id": "CorsService", + "collection": false, + "name": "CORS Service", + }, + "enabled": true, + "location": "global", + "nextDescendents": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/service/dashboard.service.json 1`] = ` +{ + "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": "0d86aa45-b73e-4924-9165-8c7f47eb19b5", + "_type": { + "_id": "instances", + "collection": true, + "name": "instance", + }, + "className": "BookmarkApplicationClass", + "displayName": "test", + "icon": "app-bookmark.svg", + "login": "https://google.com", + "name": "test", + }, + { + "_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", + }, + { + "_id": "325bd28a-7c57-43fd-9241-30ee086b4301", + "_type": { + "_id": "instances", + "collection": true, + "name": "instance", + }, + "className": "BookmarkApplicationClass", + "displayName": "test2", + "icon": "app-bookmark.svg", + "login": "https://google.com", + "name": "test2", + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/sync/extract_script_test/_id.name.transform.groovy 1`] = ` +"//groovy EXTRACT SCRIPT test UPDATED +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/sync/extract_script_test/correlationScript.js 1`] = ` +"//extract script test UPDATED CORRELATION QUERY +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/sync/extract_script_test/extract_script_test.sync.json 1`] = ` +{ + "_id": "sync/extract_script_test", + "consentRequired": false, + "correlationScript": { + "globals": {}, + "source": "file://correlationScript.js", + "type": "text/javascript", + }, + "displayName": "extract_script_test", + "icon": null, + "name": "extract_script_test", + "onCreate": { + "globals": {}, + "source": "file://onCreate.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": "_id", + "target": "name", + "transform": { + "globals": {}, + "source": "file://_id.name.transform.groovy", + "type": "groovy", + }, + }, + ], + "result": { + "globals": {}, + "source": "file://result.js", + "type": "text/javascript", + }, + "source": "managed/alpha_user", + "syncAfter": [], + "target": "managed/alpha_group", + "validSource": { + "globals": {}, + "source": "file://validSource.js", + "type": "text/javascript", + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/sync/extract_script_test/onCreate.js 1`] = ` +"//test UPDATED ONCREATED +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/sync/extract_script_test/result.js 1`] = ` +"//tests UPDATED RESULT SCRIPT +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/sync/extract_script_test/validSource.js 1`] = ` +"//extract script test UPDATED VALIDSOURCE +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/sync/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + "file://extract_script_test/extract_script_test.sync.json", + "file://synctest/synctest.sync.json", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/sync/synctest/synctest.sync.json 1`] = ` +{ + "_id": "sync/synctest", + "consentRequired": false, + "displayName": "synctest", + "icon": null, + "name": "synctest", + "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_group", + "syncAfter": [ + "extract_script_test", + ], + "target": "managed/alpha_assignment", +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-frodo-test-variable-1.variable.json 1`] = ` +{ + "variable": { + "esv-frodo-test-variable-1": { + "_id": "esv-frodo-test-variable-1", + "description": "description1", + "expressionType": "string", + "loaded": true, + "value": "value1", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-frodo-test-variable-2.variable.json 1`] = ` +{ + "variable": { + "esv-frodo-test-variable-2": { + "_id": "esv-frodo-test-variable-2", + "description": "description2", + "expressionType": "int", + "loaded": true, + "value": "42", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-osaic-fradmin-serviceclient-name.variable.json 1`] = ` +{ + "variable": { + "esv-osaic-fradmin-serviceclient-name": { + "_id": "esv-osaic-fradmin-serviceclient-name", + "description": "Used in OSUserLogin journey. Not sure what this is used for. + +1/12/2026 Dylan Berry", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_OSAIC_FRADMIN_SERVICECLIENT_NAME}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-osaic-onehub-fqdn.variable.json 1`] = ` +{ + "variable": { + "esv-osaic-onehub-fqdn": { + "_id": "esv-osaic-onehub-fqdn", + "description": "Used in OSUserLogin journey. Not sure what this is used for. + +1/12/2026 Dylan Berry", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_OSAIC_ONEHUB_FQDN}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-osaic-tenant-birth-fqdn.variable.json 1`] = ` +{ + "variable": { + "esv-osaic-tenant-birth-fqdn": { + "_id": "esv-osaic-tenant-birth-fqdn", + "description": "Used in OSUserLogin journey. Not sure what this is used for. + +1/12/2026 Dylan Berry", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_OSAIC_TENANT_BIRTH_FQDN}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-otel-datadog-service.variable.json 1`] = ` +{ + "variable": { + "esv-otel-datadog-service": { + "_id": "esv-otel-datadog-service", + "description": "", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_OTEL_DATADOG_SERVICE}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-password-words.variable.json 1`] = ` +{ + "variable": { + "esv-password-words": { + "_id": "esv-password-words", + "description": "", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_PASSWORD_WORDS}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-push-apns-endpoint.variable.json 1`] = ` +{ + "variable": { + "esv-push-apns-endpoint": { + "_id": "esv-push-apns-endpoint", + "description": "", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_PUSH_APNS_ENDPOINT}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-push-aws-sns-region.variable.json 1`] = ` +{ + "variable": { + "esv-push-aws-sns-region": { + "_id": "esv-push-aws-sns-region", + "description": "", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_PUSH_AWS_SNS_REGION}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-push-gcm-endpoint.variable.json 1`] = ` +{ + "variable": { + "esv-push-gcm-endpoint": { + "_id": "esv-push-gcm-endpoint", + "description": "", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_PUSH_GCM_ENDPOINT}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-sns-apns-endpoint.variable.json 1`] = ` +{ + "variable": { + "esv-sns-apns-endpoint": { + "_id": "esv-sns-apns-endpoint", + "description": "", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_SNS_APNS_ENDPOINT}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-sns-gcm-endpoint.variable.json 1`] = ` +{ + "variable": { + "esv-sns-gcm-endpoint": { + "_id": "esv-sns-gcm-endpoint", + "description": "", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_SNS_GCM_ENDPOINT}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-test-variable.variable.json 1`] = ` +{ + "variable": { + "esv-test-variable": { + "_id": "esv-test-variable", + "description": "test", + "expressionType": "string", + "loaded": true, + "value": "test", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/global/variable/esv-welcomehub-api-host.variable.json 1`] = ` +{ + "variable": { + "esv-welcomehub-api-host": { + "_id": "esv-welcomehub-api-host", + "description": "", + "expressionType": "string", + "loaded": true, + "value": "\${ESV_WELCOMEHUB_API_HOST}", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/0863ceb9-5634-4e64-905f-55d62e229743.policy.json 1`] = ` +{ + "policy": { + "0863ceb9-5634-4e64-905f-55d62e229743": { + "_id": "0863ceb9-5634-4e64-905f-55d62e229743", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "0863ceb9-5634-4e64-905f-55d62e229743", + "resourceTypeUuid": "", + "resources": [ + "sms://*ou=am-config/*", + ], + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/1ef6e9ec-a58f-422b-9604-427ebb08b245.policy.json 1`] = ` +{ + "policy": { + "1ef6e9ec-a58f-422b-9604-427ebb08b245": { + "_id": "1ef6e9ec-a58f-422b-9604-427ebb08b245", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "1ef6e9ec-a58f-422b-9604-427ebb08b245", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/contexts/read", + ], + "subject": { + "subjectValues": [ + "id=helix-journey-ai-explain-client,ou=agent,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/7f58eaea-6503-4dc1-b263-1260de0b8813.policy.json 1`] = ` +{ + "policy": { + "7f58eaea-6503-4dc1-b263-1260de0b8813": { + "_id": "7f58eaea-6503-4dc1-b263-1260de0b8813", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "7f58eaea-6503-4dc1-b263-1260de0b8813", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/trees/read", + ], + "subject": { + "subjectValues": [ + "id=helix-client,ou=agent,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/28bb8baa-066a-44d6-84dd-69319b32cb8c.policy.json 1`] = ` +{ + "policy": { + "28bb8baa-066a-44d6-84dd-69319b32cb8c": { + "_id": "28bb8baa-066a-44d6-84dd-69319b32cb8c", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "28bb8baa-066a-44d6-84dd-69319b32cb8c", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/contexts/read", + ], + "subject": { + "subjectValues": [ + "id=helix-client,ou=agent,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/52ddb50d-c0d0-425e-970f-bed6596f9f8d.policy.json 1`] = ` +{ + "policy": { + "52ddb50d-c0d0-425e-970f-bed6596f9f8d": { + "_id": "52ddb50d-c0d0-425e-970f-bed6596f9f8d", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "platformUIPolicySet", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2025-12-17T15:53:35.526Z", + "description": "Tenant auditor policy for Platform UI", + "name": "52ddb50d-c0d0-425e-970f-bed6596f9f8d", + "resourceTypeUuid": "", + "resources": [ + "menuItem:/*", + "route:/*", + ], + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/71d81019-a9d6-4e0c-b7a8-6951b244d363.policy.json 1`] = ` +{ + "policy": { + "71d81019-a9d6-4e0c-b7a8-6951b244d363": { + "_id": "71d81019-a9d6-4e0c-b7a8-6951b244d363", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "71d81019-a9d6-4e0c-b7a8-6951b244d363", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/scripts/read", + ], + "subject": { + "subjectValues": [ + "id=helix-client,ou=agent,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/269a6fc5-9fcb-466b-a2cd-99ba58b8f2b3.policy.json 1`] = ` +{ + "policy": { + "269a6fc5-9fcb-466b-a2cd-99ba58b8f2b3": { + "_id": "269a6fc5-9fcb-466b-a2cd-99ba58b8f2b3", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "269a6fc5-9fcb-466b-a2cd-99ba58b8f2b3", + "resourceTypeUuid": "", + "resources": [ + "sms://*ou=am-config/rest/1.0/trees/read", + ], + "subject": { + "subjectValues": [ + "id=helix-client,ou=agent,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/318d1240-b819-42c2-9a9b-9b7c7e8c4c99.policy.json 1`] = ` +{ + "policy": { + "318d1240-b819-42c2-9a9b-9b7c7e8c4c99": { + "_id": "318d1240-b819-42c2-9a9b-9b7c7e8c4c99", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "condition": { + "conditions": [ + { + "expression": "/application eq "platformUIPolicySet"", + "type": "Json", + }, + { + "expression": "! (/subject pr)", + "type": "Json", + }, + ], + "type": "AND", + }, + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "318d1240-b819-42c2-9a9b-9b7c7e8c4c99", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/policies/evaluate", + ], + "subject": { + "type": "AuthenticatedUsers", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/8986f448-8893-4982-97ea-7fcdc6a023f0.policy.json 1`] = ` +{ + "policy": { + "8986f448-8893-4982-97ea-7fcdc6a023f0": { + "_id": "8986f448-8893-4982-97ea-7fcdc6a023f0", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "8986f448-8893-4982-97ea-7fcdc6a023f0", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/realms/read", + ], + "subject": { + "subjectValues": [ + "id=brand-admin,ou=group,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/abe31d8b-4210-4205-a646-1044c57cd136.policy.json 1`] = ` +{ + "policy": { + "abe31d8b-4210-4205-a646-1044c57cd136": { + "_id": "abe31d8b-4210-4205-a646-1044c57cd136", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "abe31d8b-4210-4205-a646-1044c57cd136", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/scripts/read", + ], + "subject": { + "subjectValues": [ + "id=helix-journey-ai-explain-client,ou=agent,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_config_api_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_config_api_admin": { + "_id": "analytics_introspect_config_api_admin", + "actionValues": { + "DELETE": true, + "PUT": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.29Z", + "description": "Admin policy for manafe /reports/config/*", + "name": "analytics_introspect_config_api_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports/config/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_create_entities_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_create_entities_admin": { + "_id": "analytics_introspect_create_entities_admin", + "actionValues": { + "CREATE": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.810Z", + "description": "Admin policy for CREATE /reports/entities", + "name": "analytics_introspect_create_entities_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports/entities", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_create_update_templates_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_create_update_templates_admin": { + "_id": "analytics_introspect_create_update_templates_admin", + "actionValues": { + "CREATE": true, + "UPDATE": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.851Z", + "description": "Admin policy for CREATE/UPDATE /reports/templates", + "name": "analytics_introspect_create_update_templates_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports/templates", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_custom_reports_api_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_custom_reports_api_admin": { + "_id": "analytics_introspect_custom_reports_api_admin", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.956Z", + "description": "Admin policy for GET custom reports API", + "name": "analytics_introspect_custom_reports_api_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports/config", + "/reports/aggregates", + "/reports/parameters/types", + "/reports/helix/templates", + "/reports/helix/entities", + "/reports/entities", + "/reports/operators", + "/reports/entities/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_fieldoptions_api_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_fieldoptions_api_admin": { + "_id": "analytics_introspect_fieldoptions_api_admin", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.994Z", + "description": "Admin policy for POST in fieldoptions API", + "name": "analytics_introspect_fieldoptions_api_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports/fieldoptions", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_get_metrics_auditor.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_get_metrics_auditor": { + "_id": "analytics_introspect_get_metrics_auditor", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.553Z", + "description": "Admin policy for GET /users/metrics", + "name": "analytics_introspect_get_metrics_auditor", + "resourceTypeUuid": "", + "resources": [ + "/users/metrics", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_get_runs_auditor.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_get_runs_auditor": { + "_id": "analytics_introspect_get_runs_auditor", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.722Z", + "description": "Admin policy for GET /reports/runs", + "name": "analytics_introspect_get_runs_auditor", + "resourceTypeUuid": "", + "resources": [ + "/reports/runs", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_get_templates_auditor.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_get_templates_auditor": { + "_id": "analytics_introspect_get_templates_auditor", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.642Z", + "description": "Admin policy for GET /reports/templates", + "name": "analytics_introspect_get_templates_auditor", + "resourceTypeUuid": "", + "resources": [ + "/reports/templates", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_import_templates_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_import_templates_admin": { + "_id": "analytics_introspect_import_templates_admin", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.921Z", + "description": "Admin policy for manage /reports/templates/import", + "name": "analytics_introspect_import_templates_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports/templates/import", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_manage_templates_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_manage_templates_admin": { + "_id": "analytics_introspect_manage_templates_admin", + "actionValues": { + "DELETE": true, + "DUPLICATE": true, + "EDIT": true, + "EXPORT": true, + "PUBLISH": true, + "SEED": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.885Z", + "description": "Admin policy for manage /reports/templates/*", + "name": "analytics_introspect_manage_templates_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports/templates/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_run_adhoc_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_run_adhoc_admin": { + "_id": "analytics_introspect_run_adhoc_admin", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.100Z", + "description": "Admin policy for run Ad hoc reports /reports", + "name": "analytics_introspect_run_adhoc_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_run_templates_auditor.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_run_templates_auditor": { + "_id": "analytics_introspect_run_templates_auditor", + "actionValues": { + "RUN": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.681Z", + "description": "Admin policy for RUN /reports/templates/*", + "name": "analytics_introspect_run_templates_auditor", + "resourceTypeUuid": "", + "resources": [ + "/reports/templates/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_seed_reports_admin.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_seed_reports_admin": { + "_id": "analytics_introspect_seed_reports_admin", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.64Z", + "description": "Admin policy for POST /reports/seed", + "name": "analytics_introspect_seed_reports_admin", + "resourceTypeUuid": "", + "resources": [ + "/reports/seed", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/analytics_introspect_view_runs_auditor.policy.json 1`] = ` +{ + "policy": { + "analytics_introspect_view_runs_auditor": { + "_id": "analytics_introspect_view_runs_auditor", + "actionValues": { + "CHARTVIEW": true, + "DOWNLOAD": true, + "DOWNLOADREPORT": true, + "EXPORT": true, + "VIEW": true, + }, + "active": true, + "applicationName": "auto-analytics-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:45.764Z", + "description": "Admin policy for VIEW /reports/runs/*", + "name": "analytics_introspect_view_runs_auditor", + "resourceTypeUuid": "", + "resources": [ + "/reports/runs/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/b4f63641-4f21-4382-b418-a3b74a98bfdb.policy.json 1`] = ` +{ + "policy": { + "b4f63641-4f21-4382-b418-a3b74a98bfdb": { + "_id": "b4f63641-4f21-4382-b418-a3b74a98bfdb", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "b4f63641-4f21-4382-b418-a3b74a98bfdb", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/trees/read", + ], + "subject": { + "subjectValues": [ + "id=brand-admin,ou=group,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/bb762edd-4f8b-452b-b7ca-6e234aceb9ec.policy.json 1`] = ` +{ + "policy": { + "bb762edd-4f8b-452b-b7ca-6e234aceb9ec": { + "_id": "bb762edd-4f8b-452b-b7ca-6e234aceb9ec", + "actionValues": { + "MODIFY": true, + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "bb762edd-4f8b-452b-b7ca-6e234aceb9ec", + "resourceTypeUuid": "", + "resources": [ + "sms://*ou=am-config/*", + ], + "subject": { + "subjectValues": [ + "id=org-engine-client,ou=agent,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/f1642677-c7b4-4883-868a-6bfa212b180a.policy.json 1`] = ` +{ + "policy": { + "f1642677-c7b4-4883-868a-6bfa212b180a": { + "_id": "f1642677-c7b4-4883-868a-6bfa212b180a", + "actionValues": { + "READ": true, + "WRITE": true, + }, + "active": true, + "applicationName": "platformUIPolicySet", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2025-12-17T15:53:35.376Z", + "description": "Brand Admin policy for Platform UI", + "name": "f1642677-c7b4-4883-868a-6bfa212b180a", + "resourceTypeUuid": "", + "resources": [ + "route:/HostedPagesEdit", + "menuItem:/sideMenu.hostedPages", + "route:/HostedPages", + ], + "subject": { + "subjectValues": [ + "id=brand-admin,ou=group,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/fb6caaef-64c5-4c47-aeab-38e03be2c1e2.policy.json 1`] = ` +{ + "policy": { + "fb6caaef-64c5-4c47-aeab-38e03be2c1e2": { + "_id": "fb6caaef-64c5-4c47-aeab-38e03be2c1e2", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "fb6caaef-64c5-4c47-aeab-38e03be2c1e2", + "resourceTypeUuid": "", + "resources": [ + "sms://*ou=am-config/sunAMRealmService/*", + ], + "subject": { + "subjectValues": [ + "id=brand-admin,ou=group,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/fcb4313f-f174-4706-b61b-f359b54a47bf.policy.json 1`] = ` +{ + "policy": { + "fcb4313f-f174-4706-b61b-f359b54a47bf": { + "_id": "fcb4313f-f174-4706-b61b-f359b54a47bf", + "actionValues": { + "READ": true, + }, + "active": true, + "applicationName": "sunAMDelegationService", + "createdBy": "", + "creationDate": "1970-01-01T00:00:00.0Z", + "description": "", + "name": "fcb4313f-f174-4706-b61b-f359b54a47bf", + "resourceTypeUuid": "", + "resources": [ + "sms://ou=am-config/rest/1.0/trees/read", + ], + "subject": { + "subjectValues": [ + "id=helix-journey-ai-explain-client,ou=agent,ou=am-config", + ], + "type": "Identity", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_auto.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_auto": { + "_id": "idmadminclient_scope_auto", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.141Z", + "description": "Policy for Auto scopes", + "name": "idmadminclient_scope_auto", + "resourceTypeUuid": "", + "resources": [ + "fr:helix:*", + "fr:autoaccess:*", + "fr:iga:*", + "fr:idc:analytics:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_ccc_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_ccc_admin": { + "_id": "idmadminclient_scope_fr_idc_ccc_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-02-06T00:29:44.940Z", + "description": "Policy for fr:idc:ccc:*", + "name": "idmadminclient_scope_fr_idc_ccc_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:ccc:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_ccc_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_ccc_read": { + "_id": "idmadminclient_scope_fr_idc_ccc_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-02-06T00:29:44.987Z", + "description": "Policy for fr:idc:ccc:read", + "name": "idmadminclient_scope_fr_idc_ccc_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:ccc:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_certificate_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_certificate_admin": { + "_id": "idmadminclient_scope_fr_idc_certificate_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.675Z", + "description": "Policy for fr:idc:certificate:*", + "name": "idmadminclient_scope_fr_idc_certificate_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:certificate:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_certificate_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_certificate_read": { + "_id": "idmadminclient_scope_fr_idc_certificate_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.700Z", + "description": "Policy for fr:idc:certificate:read", + "name": "idmadminclient_scope_fr_idc_certificate_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:certificate:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_content_security_policy_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_content_security_policy_admin": { + "_id": "idmadminclient_scope_fr_idc_content_security_policy_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.727Z", + "description": "Policy for fr:idc:content-security-policy:*", + "name": "idmadminclient_scope_fr_idc_content_security_policy_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:content-security-policy:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_content_security_policy_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_content_security_policy_read": { + "_id": "idmadminclient_scope_fr_idc_content_security_policy_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.754Z", + "description": "Policy for fr:idc:content-security-policy:read", + "name": "idmadminclient_scope_fr_idc_content_security_policy_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:content-security-policy:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_cookie_domain_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_cookie_domain_admin": { + "_id": "idmadminclient_scope_fr_idc_cookie_domain_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.785Z", + "description": "Policy for fr:idc:cookie-domain:*", + "name": "idmadminclient_scope_fr_idc_cookie_domain_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:cookie-domain:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_cookie_domain_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_cookie_domain_read": { + "_id": "idmadminclient_scope_fr_idc_cookie_domain_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.816Z", + "description": "Policy for fr:idc:cookie-domain:read", + "name": "idmadminclient_scope_fr_idc_cookie_domain_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:cookie-domain:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_custom_domain_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_custom_domain_admin": { + "_id": "idmadminclient_scope_fr_idc_custom_domain_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.843Z", + "description": "Policy for fr:idc:custom-domain:*", + "name": "idmadminclient_scope_fr_idc_custom_domain_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:custom-domain:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_custom_domain_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_custom_domain_read": { + "_id": "idmadminclient_scope_fr_idc_custom_domain_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.869Z", + "description": "Policy for fr:idc:custom-domain:read", + "name": "idmadminclient_scope_fr_idc_custom_domain_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:custom-domain:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_custom_domain_verify.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_custom_domain_verify": { + "_id": "idmadminclient_scope_fr_idc_custom_domain_verify", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.895Z", + "description": "Policy for fr:idc:custom-domain:verify", + "name": "idmadminclient_scope_fr_idc_custom_domain_verify", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:custom-domain:verify", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_dataset_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_dataset_admin": { + "_id": "idmadminclient_scope_fr_idc_dataset_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.917Z", + "description": "Policy for fr:idc:dataset:*", + "name": "idmadminclient_scope_fr_idc_dataset_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:dataset:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; -exports[`frodo config export "frodo config export -RMAsxD exportAllTestDir7 -m classic": should export everything into separate files in the directory exportAllTestDir7 with scripts extracted and mappings separate 1`] = `0`; +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_dataset_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_dataset_read": { + "_id": "idmadminclient_scope_fr_idc_dataset_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.944Z", + "description": "Policy for fr:idc:dataset:read", + "name": "idmadminclient_scope_fr_idc_dataset_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:dataset:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; -exports[`frodo config export "frodo config export -RMAsxD exportAllTestDir7 -m classic": should export everything into separate files in the directory exportAllTestDir7 with scripts extracted and mappings separate 2`] = `""`; +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_direct_configuration_session_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_direct_configuration_session_admin": { + "_id": "idmadminclient_scope_fr_idc_direct_configuration_session_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-03-16T13:45:42.570Z", + "description": "Policy for fr:idc:direct-configuration:session:*", + "name": "idmadminclient_scope_fr_idc_direct_configuration_session_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:direct-configuration:session:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_direct_configuration_session_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_direct_configuration_session_read": { + "_id": "idmadminclient_scope_fr_idc_direct_configuration_session_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-03-16T13:45:42.608Z", + "description": "Policy for fr:idc:direct-configuration:session:read", + "name": "idmadminclient_scope_fr_idc_direct_configuration_session_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:direct-configuration:session:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_esv_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_esv_admin": { + "_id": "idmadminclient_scope_fr_idc_esv_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.961Z", + "description": "Policy for fr:idc:esv:*", + "name": "idmadminclient_scope_fr_idc_esv_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:esv:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_esv_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_esv_read": { + "_id": "idmadminclient_scope_fr_idc_esv_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.990Z", + "description": "Policy for fr:idc:esv:read", + "name": "idmadminclient_scope_fr_idc_esv_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:esv:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_esv_restart.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_esv_restart": { + "_id": "idmadminclient_scope_fr_idc_esv_restart", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.19Z", + "description": "Policy for fr:idc:esv:restart", + "name": "idmadminclient_scope_fr_idc_esv_restart", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:esv:restart", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_esv_update.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_esv_update": { + "_id": "idmadminclient_scope_fr_idc_esv_update", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.49Z", + "description": "Policy for fr:idc:esv:update", + "name": "idmadminclient_scope_fr_idc_esv_update", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:esv:update", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_federation_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_federation_admin": { + "_id": "idmadminclient_scope_fr_idc_federation_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.973Z", + "description": "Policy for fr:idc:federation:*", + "name": "idmadminclient_scope_fr_idc_federation_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:federation:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_monitoring_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_monitoring_admin": { + "_id": "idmadminclient_scope_fr_idc_monitoring_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.436Z", + "description": "Policy for fr:idc:monitoring:*", + "name": "idmadminclient_scope_fr_idc_monitoring_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:monitoring:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_monitoring_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_monitoring_read": { + "_id": "idmadminclient_scope_fr_idc_monitoring_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.463Z", + "description": "Policy for fr:idc:monitoring:read", + "name": "idmadminclient_scope_fr_idc_monitoring_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:monitoring:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_mtls_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_mtls_admin": { + "_id": "idmadminclient_scope_fr_idc_mtls_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.1Z", + "description": "Policy for fr:idc:mtls:*", + "name": "idmadminclient_scope_fr_idc_mtls_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:mtls:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_mtls_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_mtls_read": { + "_id": "idmadminclient_scope_fr_idc_mtls_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.29Z", + "description": "Policy for fr:idc:mtls:read", + "name": "idmadminclient_scope_fr_idc_mtls_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:mtls:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_p1connect_configure.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_p1connect_configure": { + "_id": "idmadminclient_scope_fr_idc_p1connect_configure", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.57Z", + "description": "Policy for fr:idc:p1connect:configure", + "name": "idmadminclient_scope_fr_idc_p1connect_configure", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:p1connect:configure", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_p1connect_delete.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_p1connect_delete": { + "_id": "idmadminclient_scope_fr_idc_p1connect_delete", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.88Z", + "description": "Policy for fr:idc:p1connect:delete", + "name": "idmadminclient_scope_fr_idc_p1connect_delete", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:p1connect:delete", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_p1connect_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_p1connect_read": { + "_id": "idmadminclient_scope_fr_idc_p1connect_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.114Z", + "description": "Policy for fr:idc:p1connect:read", + "name": "idmadminclient_scope_fr_idc_p1connect_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:p1connect:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_p1connect_reset.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_p1connect_reset": { + "_id": "idmadminclient_scope_fr_idc_p1connect_reset", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.142Z", + "description": "Policy for fr:idc:p1connect:reset", + "name": "idmadminclient_scope_fr_idc_p1connect_reset", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:p1connect:reset", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_promotion_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_promotion_admin": { + "_id": "idmadminclient_scope_fr_idc_promotion_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.779Z", + "description": "Policy for fr:idc:promotion:*", + "name": "idmadminclient_scope_fr_idc_promotion_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:promotion:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_promotion_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_promotion_read": { + "_id": "idmadminclient_scope_fr_idc_promotion_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.804Z", + "description": "Policy for fr:idc:promotion:read", + "name": "idmadminclient_scope_fr_idc_promotion_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:promotion:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_proxy_connect_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_proxy_connect_admin": { + "_id": "idmadminclient_scope_fr_idc_proxy_connect_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.173Z", + "description": "Policy for fr:idc:proxy-connect:*", + "name": "idmadminclient_scope_fr_idc_proxy_connect_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:proxy-connect:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_proxy_connect_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_proxy_connect_read": { + "_id": "idmadminclient_scope_fr_idc_proxy_connect_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.200Z", + "description": "Policy for fr:idc:proxy-connect:read", + "name": "idmadminclient_scope_fr_idc_proxy_connect_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:proxy-connect:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_proxy_connect_write.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_proxy_connect_write": { + "_id": "idmadminclient_scope_fr_idc_proxy_connect_write", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.228Z", + "description": "Policy for fr:idc:proxy-connect:write", + "name": "idmadminclient_scope_fr_idc_proxy_connect_write", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:proxy-connect:write", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_release_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_release_admin": { + "_id": "idmadminclient_scope_fr_idc_release_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.256Z", + "description": "Policy for fr:idc:release:*", + "name": "idmadminclient_scope_fr_idc_release_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:release:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_release_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_release_read": { + "_id": "idmadminclient_scope_fr_idc_release_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.286Z", + "description": "Policy for fr:idc:release:read", + "name": "idmadminclient_scope_fr_idc_release_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:release:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_sso_cookie_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_sso_cookie_admin": { + "_id": "idmadminclient_scope_fr_idc_sso_cookie_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.315Z", + "description": "Policy for fr:idc:sso-cookie:*", + "name": "idmadminclient_scope_fr_idc_sso_cookie_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:sso-cookie:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_sso_cookie_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_sso_cookie_read": { + "_id": "idmadminclient_scope_fr_idc_sso_cookie_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.345Z", + "description": "Policy for fr:idc:sso-cookie:read", + "name": "idmadminclient_scope_fr_idc_sso_cookie_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:sso-cookie:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_telemetry_admin.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_telemetry_admin": { + "_id": "idmadminclient_scope_fr_idc_telemetry_admin", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.373Z", + "description": "Policy for fr:idc:telemetry:*", + "name": "idmadminclient_scope_fr_idc_telemetry_admin", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:telemetry:*", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_fr_idc_telemetry_read.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_fr_idc_telemetry_read": { + "_id": "idmadminclient_scope_fr_idc_telemetry_read", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.407Z", + "description": "Policy for fr:idc:telemetry:read", + "name": "idmadminclient_scope_fr_idc_telemetry_read", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:telemetry:read", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/idmadminclient_scope_pingfederate.policy.json 1`] = ` +{ + "policy": { + "idmadminclient_scope_pingfederate": { + "_id": "idmadminclient_scope_pingfederate", + "actionValues": { + "GRANT": false, + }, + "active": true, + "applicationName": "idmAdminClient-scope", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.858Z", + "description": "Policy for PingFederate scopes", + "name": "idmadminclient_scope_pingfederate", + "resourceTypeUuid": "", + "resources": [ + "fr:idc:ws:admin", + ], + "subject": { + "subject": { + "subjectValues": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=amadmin,ou=user,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "Identity", + }, + "type": "NOT", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_ccc_abort_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_ccc_abort_put": { + "_id": "org_environment_introspect_admins__environment_ccc_abort_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-02-06T00:29:44.684Z", + "description": "Admin policy for PUT /environment/ccc/abort", + "name": "org_environment_introspect_admins__environment_ccc_abort_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/ccc/abort", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_ccc_apply_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_ccc_apply_put": { + "_id": "org_environment_introspect_admins__environment_ccc_apply_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-02-27T16:56:16.627Z", + "description": "Admin policy for PUT /environment/ccc/apply", + "name": "org_environment_introspect_admins__environment_ccc_apply_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/ccc/apply", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_ccc_init_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_ccc_init_put": { + "_id": "org_environment_introspect_admins__environment_ccc_init_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-02-06T00:29:44.813Z", + "description": "Admin policy for PUT /environment/ccc/init", + "name": "org_environment_introspect_admins__environment_ccc_init_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/ccc/init", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_ccc_state_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_ccc_state_get": { + "_id": "org_environment_introspect_admins__environment_ccc_state_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-02-06T00:29:44.881Z", + "description": "Admin policy for GET /environment/ccc/state", + "name": "org_environment_introspect_admins__environment_ccc_state_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/ccc/state", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_certificates___delete.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_certificates___delete": { + "_id": "org_environment_introspect_admins__environment_certificates___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.183Z", + "description": "Admin policy for DELETE /environment/certificates/*", + "name": "org_environment_introspect_admins__environment_certificates___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/certificates/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_certificates___get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_certificates___get": { + "_id": "org_environment_introspect_admins__environment_certificates___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.223Z", + "description": "Admin policy for GET /environment/certificates/*", + "name": "org_environment_introspect_admins__environment_certificates___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/certificates/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_certificates___patch.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_certificates___patch": { + "_id": "org_environment_introspect_admins__environment_certificates___patch", + "actionValues": { + "PATCH": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.261Z", + "description": "Admin policy for PATCH /environment/certificates/*", + "name": "org_environment_introspect_admins__environment_certificates___patch", + "resourceTypeUuid": "", + "resources": [ + "/environment/certificates/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_certificates_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_certificates_get": { + "_id": "org_environment_introspect_admins__environment_certificates_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.302Z", + "description": "Admin policy for GET /environment/certificates", + "name": "org_environment_introspect_admins__environment_certificates_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/certificates", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_certificates_post.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_certificates_post": { + "_id": "org_environment_introspect_admins__environment_certificates_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.338Z", + "description": "Admin policy for POST /environment/certificates", + "name": "org_environment_introspect_admins__environment_certificates_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/certificates", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_content_security_policy_enforced_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_content_security_policy_enforced_get": { + "_id": "org_environment_introspect_admins__environment_content_security_policy_enforced_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.367Z", + "description": "Admin policy for GET /environment/content-security-policy/enforced", + "name": "org_environment_introspect_admins__environment_content_security_policy_enforced_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/content-security-policy/enforced", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_content_security_policy_enforced_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_content_security_policy_enforced_put": { + "_id": "org_environment_introspect_admins__environment_content_security_policy_enforced_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.403Z", + "description": "Admin policy for PUT /environment/content-security-policy/enforced", + "name": "org_environment_introspect_admins__environment_content_security_policy_enforced_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/content-security-policy/enforced", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_content_security_policy_report_only_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_content_security_policy_report_only_get": { + "_id": "org_environment_introspect_admins__environment_content_security_policy_report_only_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.436Z", + "description": "Admin policy for GET /environment/content-security-policy/report-only", + "name": "org_environment_introspect_admins__environment_content_security_policy_report_only_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/content-security-policy/report-only", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_content_security_policy_report_only_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_content_security_policy_report_only_put": { + "_id": "org_environment_introspect_admins__environment_content_security_policy_report_only_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.471Z", + "description": "Admin policy for PUT /environment/content-security-policy/report-only", + "name": "org_environment_introspect_admins__environment_content_security_policy_report_only_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/content-security-policy/report-only", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_cookie_domains_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_cookie_domains_get": { + "_id": "org_environment_introspect_admins__environment_cookie_domains_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.503Z", + "description": "Admin policy for GET /environment/cookie-domains", + "name": "org_environment_introspect_admins__environment_cookie_domains_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/cookie-domains", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_cookie_domains_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_cookie_domains_put": { + "_id": "org_environment_introspect_admins__environment_cookie_domains_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.530Z", + "description": "Admin policy for PUT /environment/cookie-domains", + "name": "org_environment_introspect_admins__environment_cookie_domains_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/cookie-domains", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_csrs___delete.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_csrs___delete": { + "_id": "org_environment_introspect_admins__environment_csrs___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.561Z", + "description": "Admin policy for DELETE /environment/csrs/*", + "name": "org_environment_introspect_admins__environment_csrs___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/csrs/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_csrs___get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_csrs___get": { + "_id": "org_environment_introspect_admins__environment_csrs___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.591Z", + "description": "Admin policy for GET /environment/csrs/*", + "name": "org_environment_introspect_admins__environment_csrs___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/csrs/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_csrs___patch.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_csrs___patch": { + "_id": "org_environment_introspect_admins__environment_csrs___patch", + "actionValues": { + "PATCH": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.622Z", + "description": "Admin policy for PATCH /environment/csrs/*", + "name": "org_environment_introspect_admins__environment_csrs___patch", + "resourceTypeUuid": "", + "resources": [ + "/environment/csrs/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_csrs_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_csrs_get": { + "_id": "org_environment_introspect_admins__environment_csrs_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.654Z", + "description": "Admin policy for GET /environment/csrs", + "name": "org_environment_introspect_admins__environment_csrs_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/csrs", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_csrs_post.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_csrs_post": { + "_id": "org_environment_introspect_admins__environment_csrs_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.685Z", + "description": "Admin policy for POST /environment/csrs", + "name": "org_environment_introspect_admins__environment_csrs_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/csrs", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_custom_domains___get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_custom_domains___get": { + "_id": "org_environment_introspect_admins__environment_custom_domains___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.716Z", + "description": "Admin policy for GET /environment/custom-domains/*", + "name": "org_environment_introspect_admins__environment_custom_domains___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/custom-domains/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_custom_domains___put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_custom_domains___put": { + "_id": "org_environment_introspect_admins__environment_custom_domains___put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.746Z", + "description": "Admin policy for PUT /environment/custom-domains/*", + "name": "org_environment_introspect_admins__environment_custom_domains___put", + "resourceTypeUuid": "", + "resources": [ + "/environment/custom-domains/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_custom_domains_post.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_custom_domains_post": { + "_id": "org_environment_introspect_admins__environment_custom_domains_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.773Z", + "description": "Admin policy for POST /environment/custom-domains", + "name": "org_environment_introspect_admins__environment_custom_domains_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/custom-domains", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_datasets_delete.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_datasets_delete": { + "_id": "org_environment_introspect_admins__environment_datasets_delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.806Z", + "description": "Admin policy for DELETE /environment/datasets", + "name": "org_environment_introspect_admins__environment_datasets_delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/datasets", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_datasets_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_datasets_get": { + "_id": "org_environment_introspect_admins__environment_datasets_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.834Z", + "description": "Admin policy for GET /environment/datasets", + "name": "org_environment_introspect_admins__environment_datasets_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/datasets", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_direct_configuration_session_abort_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_direct_configuration_session_abort_put": { + "_id": "org_environment_introspect_admins__environment_direct_configuration_session_abort_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-03-16T13:45:42.105Z", + "description": "Admin policy for PUT /environment/direct-configuration/session/abort", + "name": "org_environment_introspect_admins__environment_direct_configuration_session_abort_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/direct-configuration/session/abort", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_direct_configuration_session_apply_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_direct_configuration_session_apply_put": { + "_id": "org_environment_introspect_admins__environment_direct_configuration_session_apply_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-03-16T13:45:42.480Z", + "description": "Admin policy for PUT /environment/direct-configuration/session/apply", + "name": "org_environment_introspect_admins__environment_direct_configuration_session_apply_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/direct-configuration/session/apply", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_direct_configuration_session_init_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_direct_configuration_session_init_put": { + "_id": "org_environment_introspect_admins__environment_direct_configuration_session_init_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-03-16T13:45:42.507Z", + "description": "Admin policy for PUT /environment/direct-configuration/session/init", + "name": "org_environment_introspect_admins__environment_direct_configuration_session_init_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/direct-configuration/session/init", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_direct_configuration_session_state_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_direct_configuration_session_state_get": { + "_id": "org_environment_introspect_admins__environment_direct_configuration_session_state_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2026-03-16T13:45:42.537Z", + "description": "Admin policy for GET /environment/direct-configuration/session/state", + "name": "org_environment_introspect_admins__environment_direct_configuration_session_state_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/direct-configuration/session/state", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_federation_enforcement_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_federation_enforcement_get": { + "_id": "org_environment_introspect_admins__environment_federation_enforcement_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.863Z", + "description": "Admin policy for GET /environment/federation/enforcement", + "name": "org_environment_introspect_admins__environment_federation_enforcement_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/federation/enforcement", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_federation_enforcement_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_federation_enforcement_put": { + "_id": "org_environment_introspect_admins__environment_federation_enforcement_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.894Z", + "description": "Admin policy for PUT /environment/federation/enforcement", + "name": "org_environment_introspect_admins__environment_federation_enforcement_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/federation/enforcement", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_mtls_config_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_mtls_config_get": { + "_id": "org_environment_introspect_admins__environment_mtls_config_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.926Z", + "description": "Admin policy for GET /environment/mtls/config", + "name": "org_environment_introspect_admins__environment_mtls_config_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/mtls/config", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_mtls_config_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_mtls_config_put": { + "_id": "org_environment_introspect_admins__environment_mtls_config_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.957Z", + "description": "Admin policy for PUT /environment/mtls/config", + "name": "org_environment_introspect_admins__environment_mtls_config_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/mtls/config", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_mtls_trusted_certificates___delete.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_mtls_trusted_certificates___delete": { + "_id": "org_environment_introspect_admins__environment_mtls_trusted_certificates___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:46.985Z", + "description": "Admin policy for DELETE /environment/mtls/trusted-certificates/*", + "name": "org_environment_introspect_admins__environment_mtls_trusted_certificates___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/mtls/trusted-certificates/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_mtls_trusted_certificates___get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_mtls_trusted_certificates___get": { + "_id": "org_environment_introspect_admins__environment_mtls_trusted_certificates___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.17Z", + "description": "Admin policy for GET /environment/mtls/trusted-certificates/*", + "name": "org_environment_introspect_admins__environment_mtls_trusted_certificates___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/mtls/trusted-certificates/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_mtls_trusted_certificates_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_mtls_trusted_certificates_get": { + "_id": "org_environment_introspect_admins__environment_mtls_trusted_certificates_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.45Z", + "description": "Admin policy for GET /environment/mtls/trusted-certificates", + "name": "org_environment_introspect_admins__environment_mtls_trusted_certificates_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/mtls/trusted-certificates", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_mtls_trusted_certificates_post.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_mtls_trusted_certificates_post": { + "_id": "org_environment_introspect_admins__environment_mtls_trusted_certificates_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.74Z", + "description": "Admin policy for POST /environment/mtls/trusted-certificates", + "name": "org_environment_introspect_admins__environment_mtls_trusted_certificates_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/mtls/trusted-certificates", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_p1connect___delete.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_p1connect___delete": { + "_id": "org_environment_introspect_admins__environment_p1connect___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.103Z", + "description": "Admin policy for DELETE /environment/p1connect/*", + "name": "org_environment_introspect_admins__environment_p1connect___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/p1connect/*", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_p1connect_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_p1connect_get": { + "_id": "org_environment_introspect_admins__environment_p1connect_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.130Z", + "description": "Admin policy for GET /environment/p1connect", + "name": "org_environment_introspect_admins__environment_p1connect_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/p1connect", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_p1connect_post.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_p1connect_post": { + "_id": "org_environment_introspect_admins__environment_p1connect_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.157Z", + "description": "Admin policy for POST /environment/p1connect", + "name": "org_environment_introspect_admins__environment_p1connect_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/p1connect", + ], + "subject": { + "groupUniversalIds": [ + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_proxy_connect_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_proxy_connect_get": { + "_id": "org_environment_introspect_admins__environment_proxy_connect_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.184Z", + "description": "Admin policy for GET /environment/proxy-connect", + "name": "org_environment_introspect_admins__environment_proxy_connect_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/proxy-connect", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_proxy_connect_header_rules_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_proxy_connect_header_rules_get": { + "_id": "org_environment_introspect_admins__environment_proxy_connect_header_rules_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.212Z", + "description": "Admin policy for GET /environment/proxy-connect/header-rules", + "name": "org_environment_introspect_admins__environment_proxy_connect_header_rules_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/proxy-connect/header-rules", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_proxy_connect_header_rules_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_proxy_connect_header_rules_put": { + "_id": "org_environment_introspect_admins__environment_proxy_connect_header_rules_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.243Z", + "description": "Admin policy for PUT /environment/proxy-connect/header-rules", + "name": "org_environment_introspect_admins__environment_proxy_connect_header_rules_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/proxy-connect/header-rules", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_proxy_connect_ip_rules_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_proxy_connect_ip_rules_get": { + "_id": "org_environment_introspect_admins__environment_proxy_connect_ip_rules_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.271Z", + "description": "Admin policy for GET /environment/proxy-connect/ip-rules", + "name": "org_environment_introspect_admins__environment_proxy_connect_ip_rules_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/proxy-connect/ip-rules", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_proxy_connect_ip_rules_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_proxy_connect_ip_rules_put": { + "_id": "org_environment_introspect_admins__environment_proxy_connect_ip_rules_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.301Z", + "description": "Admin policy for PUT /environment/proxy-connect/ip-rules", + "name": "org_environment_introspect_admins__environment_proxy_connect_ip_rules_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/proxy-connect/ip-rules", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_proxy_connect_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_proxy_connect_put": { + "_id": "org_environment_introspect_admins__environment_proxy_connect_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.329Z", + "description": "Admin policy for PUT /environment/proxy-connect", + "name": "org_environment_introspect_admins__environment_proxy_connect_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/proxy-connect", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_release_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_release_get": { + "_id": "org_environment_introspect_admins__environment_release_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.357Z", + "description": "Admin policy for GET /environment/release", + "name": "org_environment_introspect_admins__environment_release_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/release", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_sso_cookie_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_sso_cookie_get": { + "_id": "org_environment_introspect_admins__environment_sso_cookie_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.384Z", + "description": "Admin policy for GET /environment/sso-cookie", + "name": "org_environment_introspect_admins__environment_sso_cookie_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/sso-cookie", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_sso_cookie_post.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_sso_cookie_post": { + "_id": "org_environment_introspect_admins__environment_sso_cookie_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.414Z", + "description": "Admin policy for POST /environment/sso-cookie", + "name": "org_environment_introspect_admins__environment_sso_cookie_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/sso-cookie", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_sso_cookie_put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_sso_cookie_put": { + "_id": "org_environment_introspect_admins__environment_sso_cookie_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.442Z", + "description": "Admin policy for PUT /environment/sso-cookie", + "name": "org_environment_introspect_admins__environment_sso_cookie_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/sso-cookie", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_telemetry_get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_telemetry_get": { + "_id": "org_environment_introspect_admins__environment_telemetry_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.470Z", + "description": "Admin policy for GET /environment/telemetry", + "name": "org_environment_introspect_admins__environment_telemetry_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/telemetry", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_telemetry_otlp___delete.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_telemetry_otlp___delete": { + "_id": "org_environment_introspect_admins__environment_telemetry_otlp___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.498Z", + "description": "Admin policy for DELETE /environment/telemetry/otlp/*", + "name": "org_environment_introspect_admins__environment_telemetry_otlp___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/telemetry/otlp/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_telemetry_otlp___get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_telemetry_otlp___get": { + "_id": "org_environment_introspect_admins__environment_telemetry_otlp___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.529Z", + "description": "Admin policy for GET /environment/telemetry/otlp/*", + "name": "org_environment_introspect_admins__environment_telemetry_otlp___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/telemetry/otlp/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_telemetry_otlp___put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_telemetry_otlp___put": { + "_id": "org_environment_introspect_admins__environment_telemetry_otlp___put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.560Z", + "description": "Admin policy for PUT /environment/telemetry/otlp/*", + "name": "org_environment_introspect_admins__environment_telemetry_otlp___put", + "resourceTypeUuid": "", + "resources": [ + "/environment/telemetry/otlp/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_telemetry_splunk___delete.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_telemetry_splunk___delete": { + "_id": "org_environment_introspect_admins__environment_telemetry_splunk___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.589Z", + "description": "Admin policy for DELETE /environment/telemetry/splunk/*", + "name": "org_environment_introspect_admins__environment_telemetry_splunk___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/telemetry/splunk/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_telemetry_splunk___get.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_telemetry_splunk___get": { + "_id": "org_environment_introspect_admins__environment_telemetry_splunk___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.619Z", + "description": "Admin policy for GET /environment/telemetry/splunk/*", + "name": "org_environment_introspect_admins__environment_telemetry_splunk___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/telemetry/splunk/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_environment_introspect_admins__environment_telemetry_splunk___put.policy.json 1`] = ` +{ + "policy": { + "org_environment_introspect_admins__environment_telemetry_splunk___put": { + "_id": "org_environment_introspect_admins__environment_telemetry_splunk___put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-environment-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:47.648Z", + "description": "Admin policy for PUT /environment/telemetry/splunk/*", + "name": "org_environment_introspect_admins__environment_telemetry_splunk___put", + "resourceTypeUuid": "", + "resources": [ + "/environment/telemetry/splunk/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_count_get.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_count_get": { + "_id": "org_esv_introspect_admins__environment_count_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.440Z", + "description": "Admin policy for GET /environment/count", + "name": "org_esv_introspect_admins__environment_count_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/count", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___delete.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___delete": { + "_id": "org_esv_introspect_admins__environment_secrets___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.474Z", + "description": "Admin policy for DELETE /environment/secrets/*", + "name": "org_esv_introspect_admins__environment_secrets___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___get.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___get": { + "_id": "org_esv_introspect_admins__environment_secrets___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.499Z", + "description": "Admin policy for GET /environment/secrets/*", + "name": "org_esv_introspect_admins__environment_secrets___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___post.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___post": { + "_id": "org_esv_introspect_admins__environment_secrets___post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.522Z", + "description": "Admin policy for POST /environment/secrets/*", + "name": "org_esv_introspect_admins__environment_secrets___post", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___put.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___put": { + "_id": "org_esv_introspect_admins__environment_secrets___put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.547Z", + "description": "Admin policy for PUT /environment/secrets/*", + "name": "org_esv_introspect_admins__environment_secrets___put", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___versions___delete.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___versions___delete": { + "_id": "org_esv_introspect_admins__environment_secrets___versions___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.574Z", + "description": "Admin policy for DELETE /environment/secrets/*/versions/*", + "name": "org_esv_introspect_admins__environment_secrets___versions___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*/versions/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___versions___get.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___versions___get": { + "_id": "org_esv_introspect_admins__environment_secrets___versions___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.604Z", + "description": "Admin policy for GET /environment/secrets/*/versions/*", + "name": "org_esv_introspect_admins__environment_secrets___versions___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*/versions/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___versions___post.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___versions___post": { + "_id": "org_esv_introspect_admins__environment_secrets___versions___post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.635Z", + "description": "Admin policy for POST /environment/secrets/*/versions/*", + "name": "org_esv_introspect_admins__environment_secrets___versions___post", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*/versions/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___versions_get.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___versions_get": { + "_id": "org_esv_introspect_admins__environment_secrets___versions_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.667Z", + "description": "Admin policy for GET /environment/secrets/*/versions", + "name": "org_esv_introspect_admins__environment_secrets___versions_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*/versions", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets___versions_post.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets___versions_post": { + "_id": "org_esv_introspect_admins__environment_secrets___versions_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.696Z", + "description": "Admin policy for POST /environment/secrets/*/versions", + "name": "org_esv_introspect_admins__environment_secrets___versions_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets/*/versions", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_secrets_get.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_secrets_get": { + "_id": "org_esv_introspect_admins__environment_secrets_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.721Z", + "description": "Admin policy for GET /environment/secrets", + "name": "org_esv_introspect_admins__environment_secrets_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/secrets", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_startup_get.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_startup_get": { + "_id": "org_esv_introspect_admins__environment_startup_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.750Z", + "description": "Admin policy for GET /environment/startup", + "name": "org_esv_introspect_admins__environment_startup_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/startup", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_startup_post.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_startup_post": { + "_id": "org_esv_introspect_admins__environment_startup_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.779Z", + "description": "Admin policy for POST /environment/startup", + "name": "org_esv_introspect_admins__environment_startup_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/startup", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_variables___delete.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_variables___delete": { + "_id": "org_esv_introspect_admins__environment_variables___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.811Z", + "description": "Admin policy for DELETE /environment/variables/*", + "name": "org_esv_introspect_admins__environment_variables___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/variables/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_variables___get.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_variables___get": { + "_id": "org_esv_introspect_admins__environment_variables___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.842Z", + "description": "Admin policy for GET /environment/variables/*", + "name": "org_esv_introspect_admins__environment_variables___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/variables/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_variables___post.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_variables___post": { + "_id": "org_esv_introspect_admins__environment_variables___post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.870Z", + "description": "Admin policy for POST /environment/variables/*", + "name": "org_esv_introspect_admins__environment_variables___post", + "resourceTypeUuid": "", + "resources": [ + "/environment/variables/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_variables___put.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_variables___put": { + "_id": "org_esv_introspect_admins__environment_variables___put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.901Z", + "description": "Admin policy for PUT /environment/variables/*", + "name": "org_esv_introspect_admins__environment_variables___put", + "resourceTypeUuid": "", + "resources": [ + "/environment/variables/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_esv_introspect_admins__environment_variables_get.policy.json 1`] = ` +{ + "policy": { + "org_esv_introspect_admins__environment_variables_get": { + "_id": "org_esv_introspect_admins__environment_variables_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-esv-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:48.930Z", + "description": "Admin policy for GET /environment/variables", + "name": "org_esv_introspect_admins__environment_variables_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/variables", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__auth_head.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__auth_head": { + "_id": "org_log_spewer_introspect_admins__auth_head", + "actionValues": { + "HEAD": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.75Z", + "description": "Admin policy for HEAD /auth", + "name": "org_log_spewer_introspect_admins__auth_head", + "resourceTypeUuid": "", + "resources": [ + "/auth", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__keys___delete.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__keys___delete": { + "_id": "org_log_spewer_introspect_admins__keys___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.107Z", + "description": "Admin policy for DELETE /keys/*", + "name": "org_log_spewer_introspect_admins__keys___delete", + "resourceTypeUuid": "", + "resources": [ + "/keys/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__keys___get.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__keys___get": { + "_id": "org_log_spewer_introspect_admins__keys___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.137Z", + "description": "Admin policy for GET /keys/*", + "name": "org_log_spewer_introspect_admins__keys___get", + "resourceTypeUuid": "", + "resources": [ + "/keys/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__keys_get.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__keys_get": { + "_id": "org_log_spewer_introspect_admins__keys_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.164Z", + "description": "Admin policy for GET /keys", + "name": "org_log_spewer_introspect_admins__keys_get", + "resourceTypeUuid": "", + "resources": [ + "/keys", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__keys_post.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__keys_post": { + "_id": "org_log_spewer_introspect_admins__keys_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.194Z", + "description": "Admin policy for POST /keys", + "name": "org_log_spewer_introspect_admins__keys_post", + "resourceTypeUuid": "", + "resources": [ + "/keys", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__monitoring_logs_get.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__monitoring_logs_get": { + "_id": "org_log_spewer_introspect_admins__monitoring_logs_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.232Z", + "description": "Admin policy for GET /monitoring/logs", + "name": "org_log_spewer_introspect_admins__monitoring_logs_get", + "resourceTypeUuid": "", + "resources": [ + "/monitoring/logs", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__monitoring_logs_sources_get.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__monitoring_logs_sources_get": { + "_id": "org_log_spewer_introspect_admins__monitoring_logs_sources_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.265Z", + "description": "Admin policy for GET /monitoring/logs/sources", + "name": "org_log_spewer_introspect_admins__monitoring_logs_sources_get", + "resourceTypeUuid": "", + "resources": [ + "/monitoring/logs/sources", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__monitoring_logs_tail_get.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__monitoring_logs_tail_get": { + "_id": "org_log_spewer_introspect_admins__monitoring_logs_tail_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.312Z", + "description": "Admin policy for GET /monitoring/logs/tail", + "name": "org_log_spewer_introspect_admins__monitoring_logs_tail_get", + "resourceTypeUuid": "", + "resources": [ + "/monitoring/logs/tail", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__monitoring_prometheus_am_get.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__monitoring_prometheus_am_get": { + "_id": "org_log_spewer_introspect_admins__monitoring_prometheus_am_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.377Z", + "description": "Admin policy for GET /monitoring/prometheus/am", + "name": "org_log_spewer_introspect_admins__monitoring_prometheus_am_get", + "resourceTypeUuid": "", + "resources": [ + "/monitoring/prometheus/am", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_log_spewer_introspect_admins__monitoring_prometheus_idm_get.policy.json 1`] = ` +{ + "policy": { + "org_log_spewer_introspect_admins__monitoring_prometheus_idm_get": { + "_id": "org_log_spewer_introspect_admins__monitoring_prometheus_idm_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-log-spewer-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.408Z", + "description": "Admin policy for GET /monitoring/prometheus/idm", + "name": "org_log_spewer_introspect_admins__monitoring_prometheus_idm_get", + "resourceTypeUuid": "", + "resources": [ + "/monitoring/prometheus/idm", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_info_get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_info_get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_info_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2025-10-30T17:02:25.515Z", + "description": "Admin policy for GET /environment/promotion/info", + "name": "org_promo_external_introspect_admins__environment_promotion_info_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/info", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_ingress_put.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_ingress_put": { + "_id": "org_promo_external_introspect_admins__environment_promotion_ingress_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2025-10-15T09:17:02.182Z", + "description": "Admin policy for PUT /environment/promotion/ingress", + "name": "org_promo_external_introspect_admins__environment_promotion_ingress_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/ingress", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_lock___delete.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_lock___delete": { + "_id": "org_promo_external_introspect_admins__environment_promotion_lock___delete", + "actionValues": { + "DELETE": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.492Z", + "description": "Admin policy for DELETE /environment/promotion/lock/*", + "name": "org_promo_external_introspect_admins__environment_promotion_lock___delete", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/lock/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_lock_post.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_lock_post": { + "_id": "org_promo_external_introspect_admins__environment_promotion_lock_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.517Z", + "description": "Admin policy for POST /environment/promotion/lock", + "name": "org_promo_external_introspect_admins__environment_promotion_lock_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/lock", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_lock_state_get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_lock_state_get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_lock_state_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.543Z", + "description": "Admin policy for GET /environment/promotion/lock/state", + "name": "org_promo_external_introspect_admins__environment_promotion_lock_state_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/lock/state", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_promote_get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_promote_get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_promote_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.568Z", + "description": "Admin policy for GET /environment/promotion/promote", + "name": "org_promo_external_introspect_admins__environment_promotion_promote_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/promote", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_promote_post.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_promote_post": { + "_id": "org_promo_external_introspect_admins__environment_promotion_promote_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.592Z", + "description": "Admin policy for POST /environment/promotion/promote", + "name": "org_promo_external_introspect_admins__environment_promotion_promote_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/promote", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_report___get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_report___get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_report___get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.618Z", + "description": "Admin policy for GET /environment/promotion/report/*", + "name": "org_promo_external_introspect_admins__environment_promotion_report___get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/report/*", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_report_get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_report_get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_report_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.644Z", + "description": "Admin policy for GET /environment/promotion/report", + "name": "org_promo_external_introspect_admins__environment_promotion_report_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/report", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_report_provisional_get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_report_provisional_get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_report_provisional_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.670Z", + "description": "Admin policy for GET /environment/promotion/report/provisional", + "name": "org_promo_external_introspect_admins__environment_promotion_report_provisional_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/report/provisional", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_report_provisional_rollback_get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_report_provisional_rollback_get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_report_provisional_rollback_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.698Z", + "description": "Admin policy for GET /environment/promotion/report/provisional-rollback", + "name": "org_promo_external_introspect_admins__environment_promotion_report_provisional_rollback_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/report/provisional-rollback", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_reports_get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_reports_get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_reports_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.723Z", + "description": "Admin policy for GET /environment/promotion/reports", + "name": "org_promo_external_introspect_admins__environment_promotion_reports_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/reports", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_reset_put.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_reset_put": { + "_id": "org_promo_external_introspect_admins__environment_promotion_reset_put", + "actionValues": { + "PUT": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2025-12-20T16:08:16.248Z", + "description": "Admin policy for PUT /environment/promotion/reset", + "name": "org_promo_external_introspect_admins__environment_promotion_reset_put", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/reset", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_rollback_post.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_rollback_post": { + "_id": "org_promo_external_introspect_admins__environment_promotion_rollback_post", + "actionValues": { + "POST": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.752Z", + "description": "Admin policy for POST /environment/promotion/rollback", + "name": "org_promo_external_introspect_admins__environment_promotion_rollback_post", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/rollback", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_external_introspect_admins__environment_promotion_status_get.policy.json 1`] = ` +{ + "policy": { + "org_promo_external_introspect_admins__environment_promotion_status_get": { + "_id": "org_promo_external_introspect_admins__environment_promotion_status_get", + "actionValues": { + "GET": true, + }, + "active": true, + "applicationName": "org-promo-external-introspect", + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": "2025-12-20T16:08:16.354Z", + "description": "Admin policy for GET /environment/promotion/status", + "name": "org_promo_external_introspect_admins__environment_promotion_status_get", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/status", + ], + "subject": { + "groupUniversalIds": [ + "id=tenant-auditor,ou=group,ou=am-config", + "id=tenant-admins,ou=group,ou=am-config", + "id=super-admins,ou=group,ou=am-config", + ], + "type": "ResourceOwnerInGroup", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policy/org_promo_internal_introspect_clients__environment_promotion_internal__.policy.json 1`] = ` +{ + "policy": { + "org_promo_internal_introspect_clients__environment_promotion_internal__": { + "_id": "org_promo_internal_introspect_clients__environment_promotion_internal__", + "actionValues": { + "DELETE": true, + "GET": true, + "POST": true, + }, + "active": true, + "applicationName": "org-promo-internal-introspect", + "condition": { + "requiredScopes": [ + "fr:idc:promotion:*", + ], + "type": "OAuth2Scope", + }, + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": "2025-09-23T15:56:49.832Z", + "description": "Client policy for /environment/promotion/internal/*", + "name": "org_promo_internal_introspect_clients__environment_promotion_internal__", + "resourceTypeUuid": "", + "resources": [ + "/environment/promotion/*", + ], + "subject": { + "type": "ResourceOwnerPresent", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/auto-analytics-introspect.policyset.json 1`] = ` +{ + "policyset": { + "auto-analytics-introspect": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [ + "OAuth2Scope", + "OR", + "NOT", + ], + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1758643004791, + "description": "The set of policies used by analytics token introspection", + "displayName": "Policies for analytics token introspection", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "auto-analytics-introspect", + "resourceComparator": null, + "resourceTypeUuids": [], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "ResourceOwnerInGroup", + "OR", + "NOT", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/customerApplicationPolicySet.policyset.json 1`] = ` +{ + "policyset": { + "customerApplicationPolicySet": { + "applicationType": "authenticationApplicationType", + "attributeNames": [], + "conditions": [ + "Policy", + "LEAuthLevel", + "AuthenticateToService", + "Script", + "SimpleTime", + "OR", + "AMIdentityMembership", + "IPv6", + "IPv4", + "Expiration", + "SessionProperty", + "Json", + "IdmUser", + "AuthScheme", + "AuthLevel", + "NOT", + "Transaction", + "AuthenticateToRealm", + "ResourceEnvIP", + "AND", + "LDAPFilter", + "ClientId", + "OAuth2Scope", + "Session", + ], + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1774473249128, + "description": "Contains policies to be used by the customer application policy decision node.", + "displayName": "Customer Application Policy Set", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "customerApplicationPolicySet", + "resourceComparator": null, + "resourceTypeUuids": [ + "authenticationResourceType", + ], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "Policy", + "ResourceOwnerInGroup", + "NOT", + "OR", + "JwtClaim", + "AuthenticatedUsers", + "AND", + "Uma", + "NONE", + "Identity", + "ResourceOwnerPresent", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/iPlanetAMWebAgentService.policyset.json 1`] = ` +{ + "policyset": { + "iPlanetAMWebAgentService": { + "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": 1578580065033, + "description": "The built-in Application used by OpenAM Policy Agents.", + "displayName": "Default Policy Set", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "iPlanetAMWebAgentService", + "resourceComparator": null, + "resourceTypeUuids": [ + "76656a38-5f8e-401b-83aa-4ccb74ce88d2", + ], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "AuthenticatedUsers", + "NOT", + "Identity", + "OR", + "AND", + "NONE", + "JwtClaim", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/idmAdminClient-scope.policyset.json 1`] = ` +{ + "policyset": { + "idmAdminClient-scope": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [], + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1758643004899, + "description": "The set of policies used by idmAdminClient for issuing tokens", + "displayName": "Policies for idmAdminClient scopes", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "idmAdminClient-scope", + "resourceComparator": "org.forgerock.openam.entitlement.indexsimple.SimpleResourceMatcher", + "resourceTypeUuids": [], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "Identity", + "OR", + "NOT", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/oauth2Scopes.policyset.json 1`] = ` +{ + "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", + "name": "oauth2Scopes", + "resourceComparator": null, + "resourceTypeUuids": [ + "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b", + ], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "AuthenticatedUsers", + "NOT", + "Identity", + "OR", + "AND", + "NONE", + "JwtClaim", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/org-environment-introspect.policyset.json 1`] = ` +{ + "policyset": { + "org-environment-introspect": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [ + "OAuth2Scope", + "OR", + "NOT", + ], + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1758643004978, + "description": "The set of policies used by org-environment token introspection", + "displayName": "Policies for org-environment token introspection", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "org-environment-introspect", + "resourceComparator": null, + "resourceTypeUuids": [], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "ResourceOwnerInGroup", + "OR", + "NOT", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/org-esv-introspect.policyset.json 1`] = ` +{ + "policyset": { + "org-esv-introspect": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [ + "OAuth2Scope", + "OR", + "NOT", + ], + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1758643005054, + "description": "The set of policies used by org-esv token introspection", + "displayName": "Policies for org-esv token introspection", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "org-esv-introspect", + "resourceComparator": null, + "resourceTypeUuids": [], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "ResourceOwnerInGroup", + "OR", + "NOT", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/org-log-spewer-introspect.policyset.json 1`] = ` +{ + "policyset": { + "org-log-spewer-introspect": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [ + "OAuth2Scope", + "OR", + "NOT", + ], + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1758643005139, + "description": "The set of policies used by org-log-spewer token introspection", + "displayName": "Policies for org-log-spewer token introspection", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "org-log-spewer-introspect", + "resourceComparator": null, + "resourceTypeUuids": [], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "ResourceOwnerInGroup", + "OR", + "NOT", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/org-promo-external-introspect.policyset.json 1`] = ` +{ + "policyset": { + "org-promo-external-introspect": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [ + "OAuth2Scope", + "OR", + "NOT", + ], + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1758643005207, + "description": "The set of policies used by org-promo-external token introspection", + "displayName": "Policies for org-promo-external token introspection", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "org-promo-external-introspect", + "resourceComparator": null, + "resourceTypeUuids": [], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "ResourceOwnerInGroup", + "OR", + "NOT", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/org-promo-internal-introspect.policyset.json 1`] = ` +{ + "policyset": { + "org-promo-internal-introspect": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [ + "OAuth2Scope", + "OR", + "NOT", + ], + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1758643005283, + "description": "The set of policies used by org-promo-internal token introspection", + "displayName": "Policies for org-promo-internal token introspection", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "org-promo-internal-introspect", + "resourceComparator": null, + "resourceTypeUuids": [], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "ResourceOwnerInGroup", + "OR", + "NOT", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/policyset/platformUIPolicySet.policyset.json 1`] = ` +{ + "policyset": { + "platformUIPolicySet": { + "applicationType": "iPlanetAMWebAgentService", + "attributeNames": [], + "conditions": [], + "createdBy": "id=org-engine-client,ou=agent,ou=am-config", + "creationDate": 1765986814859, + "description": "The example Platform UI Policy Set to drive dynamic UI behavior", + "displayName": null, + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "platformUIPolicySet", + "resourceComparator": null, + "resourceTypeUuids": [], + "saveIndex": null, + "searchIndex": null, + "subjects": [], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/resourcetype/Authentication.resourcetype.json 1`] = ` +{ + "resourcetype": { + "authenticationResourceType": { + "actions": { + "Access": true, + }, + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1774473244108, + "description": "An immutable Authentication Resource Type available to OpenAM Policies.", + "name": "Authentication", + "patterns": [ + "*", + ], + "uuid": "authenticationResourceType", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/resourcetype/OAuth2-Scope.resourcetype.json 1`] = ` +{ + "resourcetype": { + "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b": { + "actions": { + "GRANT": true, + }, + "createdBy": "id=dsameuser,ou=user,ou=am-config", + "creationDate": 1517161800564, + "description": "The built-in OAuth2 Scope Resource Type for OAuth2policy-provided scope.", + "name": "OAuth2 Scope", + "patterns": [ + "*://*:*/*", + "*://*:*/*?*", + "*", + ], + "uuid": "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root/resourcetype/URL.resourcetype.json 1`] = ` +{ + "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": 1422892465848, + "description": "The built-in URL Resource Type available to OpenAMPolicies.", + "name": "URL", + "patterns": [ + "*://*:*/*", + "*://*:*/*?*", + ], + "uuid": "76656a38-5f8e-401b-83aa-4ccb74ce88d2", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/application/test.application.json 1`] = ` +{ + "managedApplication": { + "0d86aa45-b73e-4924-9165-8c7f47eb19b5": { + "_id": "0d86aa45-b73e-4924-9165-8c7f47eb19b5", + "description": "test", + "name": "test", + "ssoEntities": {}, + "templateName": "bookmark", + "templateVersion": "1.0", + "url": "https://google.com", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/application/test2.application.json 1`] = ` +{ + "managedApplication": { + "325bd28a-7c57-43fd-9241-30ee086b4301": { + "_id": "325bd28a-7c57-43fd-9241-30ee086b4301", + "description": "test2", + "name": "test2", + "ssoEntities": {}, + "templateName": "bookmark", + "templateVersion": "1.0", + "url": "https://google.com", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/authentication/root-alpha.authentication.settings.json 1`] = ` +{ + "authentication": { + "_id": "", + "_type": { + "_id": "EMPTY", + "collection": false, + "name": "Core", + }, + "accountlockout": { + "invalidAttemptsDataAttributeName": "fr-attr-str4", + "lockoutAttributeName": "fr-attr-str3", + "lockoutAttributeValue": "locked", + "lockoutDuration": -1, + "lockoutDurationMultiplier": 1, + "lockoutWarnUserCount": 1, + "loginFailureCount": 5, + "loginFailureDuration": 300, + "loginFailureLockoutMode": true, + "storeInvalidAttemptsInDataStore": false, + }, + "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", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/cot/2f04818d-561e-4f8a-82e8-af2426112138.cot.saml.json 1`] = ` +{ + "saml": { + "cot": { + "2f04818d-561e-4f8a-82e8-af2426112138": { + "_id": "2f04818d-561e-4f8a-82e8-af2426112138", + "_type": { + "_id": "circlesoftrust", + "collection": true, + "name": "Circle of Trust", + }, + "status": "active", + "trustedProviders": [ + "benefits-IDP|saml2", + "iSPAzure|saml2", + ], + }, + }, + "hosted": {}, + "metadata": {}, + "remote": {}, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/cot/AzureCOT.cot.saml.json 1`] = ` +{ + "saml": { + "cot": { + "AzureCOT": { + "_id": "AzureCOT", + "_type": { + "_id": "circlesoftrust", + "collection": true, + "name": "Circle of Trust", + }, + "status": "active", + "trustedProviders": [ + "iSPAzure|saml2", + "urn:federation:MicrosoftOnline|saml2", + "https://sts.windows.net/711ffa9c-5972-4713-ace3-688c9732614a/|saml2", + "SPAzure|saml2", + "https://idc.scheuber.io/am/saml2/IDPAzure|saml2", + ], + }, + }, + "hosted": {}, + "metadata": {}, + "remote": {}, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/idp/adfs.idp.json 1`] = ` +{ + "idp": { + "adfs": { + "_id": "adfs", + "_type": { + "_id": "oidcConfig", + "collection": true, + "name": "Client configuration for providers that implement the OpenID Connect specification.", + }, + "acrValues": [], + "authenticationIdKey": "sub", + "authorizationEndpoint": "https://adfs.mytestrun.com/adfs/oauth2/authorize", + "clientAuthenticationMethod": "CLIENT_SECRET_POST", + "clientId": "aa9a179e-cdba-4db8-8477-3d1069d5ec04", + "enableNativeNonce": true, + "enabled": true, + "encryptJwtRequestParameter": false, + "encryptedIdTokens": false, + "expClaimRequiredInRequestObject": false, + "issuer": "https://adfs.mytestrun.com/adfs", + "issuerComparisonCheckType": "EXACT", + "jwksUriEndpoint": "https://adfs.mytestrun.com/adfs/discovery/keys", + "jwtEncryptionAlgorithm": "NONE", + "jwtEncryptionMethod": "NONE", + "jwtRequestParameterOption": "NONE", + "jwtSigningAlgorithm": "RS256", + "pkceMethod": "S256", + "privateKeyJwtAudience": "", + "privateKeyJwtExpTime": 600, + "redirectURI": "https://idc.scheuber.io/login", + "responseMode": "DEFAULT", + "revocationCheckOptions": [], + "scopeDelimiter": " ", + "scopes": [ + "openid", + "profile", + "email", + ], + "tokenEndpoint": "https://adfs.mytestrun.com/adfs/oauth2/token", + "transform": "dbe0bf9a-72aa-49d5-8483-9db147985a47", + "uiConfig": { + "buttonClass": "", + "buttonCustomStyle": "background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;", + "buttonCustomStyleHover": "background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;", + "buttonDisplayName": "Microsoft ADFS", + "buttonImage": "/login/images/microsoft-logo.png", + "iconBackground": "#0078d7", + "iconClass": "fa-windows", + "iconFontColor": "white", + }, + "useCustomTrustStore": false, + "userInfoResponseType": "JSON", + "wellKnownEndpoint": "https://adfs.mytestrun.com/adfs/.well-known/openid-configuration", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/idp/github.idp.json 1`] = ` +{ + "idp": { + "github": { + "_id": "github", + "_type": { + "_id": "oauth2Config", + "collection": true, + "name": "Client configuration for providers that implement the OAuth2 specification.", + }, + "authenticationIdKey": "id", + "authorizationEndpoint": "https://github.com/login/oauth/authorize", + "clientAuthenticationMethod": "CLIENT_SECRET_POST", + "clientId": "bdae6d141d4dcf95a630", + "enabled": true, + "issuerComparisonCheckType": "EXACT", + "jwtEncryptionAlgorithm": "NONE", + "jwtEncryptionMethod": "NONE", + "jwtSigningAlgorithm": "NONE", + "pkceMethod": "S256", + "privateKeyJwtExpTime": 600, + "redirectURI": "https://idc.scheuber.io/login", + "responseMode": "DEFAULT", + "revocationCheckOptions": [], + "scopeDelimiter": " ", + "scopes": [ + "user", + ], + "tokenEndpoint": "https://ig.mytestrun.com/login/oauth/access_token", + "transform": "23143919-6b78-40c3-b25e-beca19b229e0", + "uiConfig": { + "buttonCustomStyle": "background-color: #fff; color: #757575; border-color: #ddd;", + "buttonCustomStyleHover": "color: #6d6d6d; background-color: #eee; border-color: #ccc;", + "buttonDisplayName": "GitHub", + "buttonImage": "https://cdn-icons-png.flaticon.com/512/25/25231.png", + "iconBackground": "#4184f3", + "iconFontColor": "white", + }, + "useCustomTrustStore": false, + "userInfoEndpoint": "https://ig.mytestrun.com/user", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/Agent.journey.json 1`] = ` +{ + "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", + }, + "autocompleteValues": [], + "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", + "nodeVersion": "1.0", + }, + { + "_id": "6072842f-5f7c-4b62-8ae2-4f18a5701ba4", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode", + "nodeVersion": "1.0", + }, + ], + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 762, + "y": 243, + }, + "cbd1f1af-eb0a-4274-a762-adacf04c7080": { + "connections": { + "outcome": "6736a00a-fc65-438e-b4ea-23f66b4a8739", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/ForgottenUsername.journey.json 1`] = ` +{ + "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", + "nodeVersion": "1.0", + }, + ], + "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", + "version": "1.0", + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 324, + "y": 152, + }, + "d9a79f01-2ce3-4be2-a28a-975f35c3c8ca": { + "connections": { + "outcome": "b93ce36e-1976-4610-b24f-8d6760b5463b", + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/Login.journey.json 1`] = ` +{ + "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", + }, + "autocompleteValues": [], + "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", + "nodeVersion": "1.0", + }, + { + "_id": "0c80c39b-4813-4e67-b4fb-5a0bba85f994", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode", + "nodeVersion": "1.0", + }, + ], + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 827, + "y": 13, + }, + "51e8c4c1-3509-4635-90e6-d2cc31c4a6a5": { + "connections": { + "outcome": "e301438c-0bd0-429c-ab0c-66126501069a", + }, + "displayName": "Account Lockout", + "nodeType": "AccountLockoutNode", + "version": "1.0", + "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", + "version": "1.0", + "x": 352, + "y": 40.015625, + }, + "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8": { + "connections": { + "outcome": "7f0c2aee-8c74-4d02-82a6-9d4ed9d11708", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 136, + "y": 59, + }, + "bba3e0d8-8525-4e82-bf48-ac17f7988917": { + "connections": { + "outcome": "33b24514-3e50-4180-8f08-ab6f4e51b07e", + }, + "displayName": "Increment Login Count", + "nodeType": "IncrementLoginCountNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/PrestonTestJourney.journey.json 1`] = ` +{ + "trees": { + "PrestonTestJourney": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "8919c0d5-b40f-43df-b8f3-0934ae79920f": { + "_id": "8919c0d5-b40f-43df-b8f3-0934ae79920f", + "_outcomes": [ + { + "displayName": "True", + "id": "True", + }, + { + "displayName": "False", + "id": "False", + }, + ], + "_type": { + "_id": "designer-c605506774a848f7877b4d17a453bd39", + "collection": true, + "name": "Has Session", + "version": "1.0", + }, + }, + }, + "nodes": { + "03a7b135-8297-43a6-9e91-168e1a171c8f": { + "_id": "03a7b135-8297-43a6-9e91-168e1a171c8f", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "SetStateNode", + "collection": true, + "name": "Set State", + "version": "1.0", + }, + "attributes": { + "x": "6", + }, + }, + "3f988d7d-5980-492b-a43b-8476752e9d74": { + "_id": "3f988d7d-5980-492b-a43b-8476752e9d74", + "_outcomes": [ + { + "displayName": "Success", + "id": "Success", + }, + { + "displayName": "Script Error", + "id": "Script Error", + }, + ], + "_type": { + "_id": "designer-c6063fb2f5dc42dd9772bedc93898bd8", + "collection": true, + "name": "ALU", + "version": "1.0", + }, + "operator": "DIVIDE", + }, + "4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22": { + "_id": "4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-8ab9f1aad4b4460a9c45d15fb148e221", + "collection": true, + "name": "Display State", + "version": "1.0", + }, + "displayFormat": "TABLE", + }, + "500c7716-aaf2-4cb8-95c8-12b9393c6783": { + "_id": "500c7716-aaf2-4cb8-95c8-12b9393c6783", + "_outcomes": [ + { + "displayName": "True", + "id": "True", + }, + { + "displayName": "False", + "id": "False", + }, + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0", + }, + "nodes": [ + { + "_id": "8919c0d5-b40f-43df-b8f3-0934ae79920f", + "displayName": "Has Session", + "nodeType": "designer-c605506774a848f7877b4d17a453bd39", + "nodeVersion": "1.0", + }, + ], + "pageDescription": {}, + "pageHeader": {}, + }, + "8322efbd-4e9f-494b-86da-d6a87419c269": { + "_id": "8322efbd-4e9f-494b-86da-d6a87419c269", + "_outcomes": [ + { + "displayName": "True", + "id": "true", + }, + { + "displayName": "False", + "id": "false", + }, + { + "displayName": "Unknown Device", + "id": "unknownDevice", + }, + ], + "_type": { + "_id": "DeviceMatchNode", + "collection": true, + "name": "Device Match", + "version": "1.0", + }, + "acceptableVariance": 0, + "expiration": 30, + "script": "ba90aa4d-26bf-44ec-9aa0-49d772c35a1d", + "useScript": true, + }, + "89d588b3-0616-48aa-9997-aad991b81e45": { + "_id": "89d588b3-0616-48aa-9997-aad991b81e45", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "ScriptedDecisionNode", + "collection": true, + "name": "Scripted Decision", + "version": "1.0", + }, + "inputs": [ + "*", + ], + "outcomes": [ + "outcome", + ], + "outputs": [ + "*", + ], + "script": "c5717943-efcf-442e-9be0-dbe10817ba26", + }, + "c4f83038-1763-4434-95fe-cf10faca394d": { + "_id": "c4f83038-1763-4434-95fe-cf10faca394d", + "_outcomes": [ + { + "displayName": "Success", + "id": "Success", + }, + { + "displayName": "Script Error", + "id": "Script Error", + }, + ], + "_type": { + "_id": "designer-c15e2efb3deb4d4ea338c74a6440b69f", + "collection": true, + "name": "Vector ALU", + "version": "1.0", + }, + "a": [ + 1, + 2, + 3, + ], + "b": [ + 4, + 5, + 6, + ], + "operator": "CROSS", + }, + "f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5": { + "_id": "f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5", + "_outcomes": [ + { + "displayName": "True", + "id": "True", + }, + { + "displayName": "False", + "id": "False", + }, + ], + "_type": { + "_id": "designer-c605506774a848f7877b4d17a453bd39", + "collection": true, + "name": "Has Session", + "version": "1.0", + }, + }, + "fabed91f-4e31-4f72-9859-52d0fdeaae62": { + "_id": "fabed91f-4e31-4f72-9859-52d0fdeaae62", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "SetStateNode", + "collection": true, + "name": "Set State", + "version": "1.0", + }, + "attributes": { + "y": "0", + }, + }, + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "PrestonTestJourney", + "enabled": true, + "entryNodeId": "f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "03a7b135-8297-43a6-9e91-168e1a171c8f": { + "connections": { + "outcome": "fabed91f-4e31-4f72-9859-52d0fdeaae62", + }, + "displayName": "Set X", + "nodeType": "SetStateNode", + "version": "1.0", + "x": 440, + "y": 80, + }, + "3f988d7d-5980-492b-a43b-8476752e9d74": { + "connections": { + "Script Error": "c4f83038-1763-4434-95fe-cf10faca394d", + "Success": "c4f83038-1763-4434-95fe-cf10faca394d", + }, + "displayName": "ALU", + "nodeType": "designer-c6063fb2f5dc42dd9772bedc93898bd8", + "version": "1.0", + "x": 900, + "y": 128.5, + }, + "4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22": { + "connections": { + "outcome": "e301438c-0bd0-429c-ab0c-66126501069a", + }, + "displayName": "Display State", + "nodeType": "designer-8ab9f1aad4b4460a9c45d15fb148e221", + "version": "1.0", + "x": 1635, + "y": 155, + }, + "500c7716-aaf2-4cb8-95c8-12b9393c6783": { + "connections": { + "False": "e301438c-0bd0-429c-ab0c-66126501069a", + "True": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 454, + "y": 370.6125030517578, + }, + "8322efbd-4e9f-494b-86da-d6a87419c269": { + "connections": {}, + "displayName": "Device Match", + "nodeType": "DeviceMatchNode", + "version": "1.0", + "x": 826, + "y": 398.6125030517578, + }, + "89d588b3-0616-48aa-9997-aad991b81e45": { + "connections": { + "outcome": "4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22", + }, + "displayName": "Preston Test Script", + "nodeType": "ScriptedDecisionNode", + "version": "1.0", + "x": 1360, + "y": 155, + }, + "c4f83038-1763-4434-95fe-cf10faca394d": { + "connections": { + "Script Error": "89d588b3-0616-48aa-9997-aad991b81e45", + "Success": "89d588b3-0616-48aa-9997-aad991b81e45", + }, + "displayName": "Vector ALU", + "nodeType": "designer-c15e2efb3deb4d4ea338c74a6440b69f", + "version": "1.0", + "x": 1130, + "y": 128.5, + }, + "f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5": { + "connections": { + "False": "03a7b135-8297-43a6-9e91-168e1a171c8f", + "True": "03a7b135-8297-43a6-9e91-168e1a171c8f", + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Has Session", + "nodeType": "designer-c605506774a848f7877b4d17a453bd39", + "version": "1.0", + "x": 210, + "y": 128.5, + }, + "fabed91f-4e31-4f72-9859-52d0fdeaae62": { + "connections": { + "outcome": "3f988d7d-5980-492b-a43b-8476752e9d74", + }, + "displayName": "Set Y", + "nodeType": "SetStateNode", + "version": "1.0", + "x": 670, + "y": 155, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 440, + "y": 231, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 1870, + "y": 155.5, + }, + "startNode": { + "x": 70, + "y": 155.5, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "annotations": "{"forNodes":{"c4f83038-1763-4434-95fe-cf10faca394d":[{"id":"ba5468f8-4e1e-4ce8-8aaa-3e5593bb4917","text":"Weird bug on this one, where if you try to change the values it won't let you save, so it needs to use default values to function","color":"blue","createdBy":"Preston Hales","createdAt":"2025-10-23T21:30:04.432Z"}]},"structural":[{"id":"12508814-8fae-4cd3-88fb-2b0b08296f4a","text":"This is my test journey!","color":"green","createdBy":"Preston Hales","x":198,"y":275,"w":200,"h":100}]}", + "categories": "[]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/ProgressiveProfile.journey.json 1`] = ` +{ + "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", + "nodeVersion": "1.0", + }, + ], + "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", + "version": "1.0", + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 357, + "y": 36, + }, + "a5aecad8-854a-4ed5-b719-ff6c90e858c0": { + "connections": { + "outcome": "423a959a-a1b9-498a-b0f7-596b6b6e775a", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/Registration.journey.json 1`] = ` +{ + "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", + }, + "autocompleteValues": [], + "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", + "nodeVersion": "1.0", + }, + { + "_id": "d3ce2036-1523-4ce8-b1a2-895a2a036667", + "displayName": "Attribute Collector", + "nodeType": "AttributeCollectorNode", + "nodeVersion": "1.0", + }, + { + "_id": "3d8709a1-f09f-4d1f-8094-2850e472c1db", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode", + "nodeVersion": "1.0", + }, + { + "_id": "120c69d3-90b4-4ad4-b7af-380e8b119340", + "displayName": "KBA Definition", + "nodeType": "KbaCreateNode", + "nodeVersion": "1.0", + }, + { + "_id": "b4a0e915-c15d-4b83-9c9d-18347d645976", + "displayName": "Accept Terms and Conditions", + "nodeType": "AcceptTermsAndConditionsNode", + "nodeVersion": "1.0", + }, + ], + "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", + "version": "1.0", + "x": 261, + "y": 168, + }, + "466f8b54-07fb-4e31-a11d-a6842618cc37": { + "connections": { + "outcome": "ad5dcbb3-7335-49b7-b3e7-7d850bb88237", + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "version": "1.0", + "x": 484, + "y": 267.015625, + }, + "97a15eb2-a015-4b6d-81a0-be78c3aa1a3b": { + "connections": { + "outcome": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Increment Login Count", + "nodeType": "IncrementLoginCountNode", + "version": "1.0", + "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", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/ResetPassword.journey.json 1`] = ` +{ + "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", + "nodeVersion": "1.0", + }, + ], + "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", + "nodeVersion": "1.0", + }, + ], + "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", + "version": "1.0", + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 819, + "y": 61, + }, + "cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b": { + "connections": { + "outcome": "21b8ddf3-0203-4ae1-ab05-51cf3a3a707a", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 103, + "y": 50, + }, + "e4c752f9-c625-48c9-9644-a58802fa9e9c": { + "connections": { + "outcome": "989f0bf8-a328-4217-b82b-5275d79ca8bd", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/TestLogin.journey.json 1`] = ` +{ + "trees": { + "TestLogin": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "49c2e06a-6e22-4f75-8591-9dcff462e362": { + "_id": "49c2e06a-6e22-4f75-8591-9dcff462e362", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "ValidatedUsernameNode", + "collection": true, + "name": "Platform Username", + "version": "1.0", + }, + "autocompleteValues": [], + "usernameAttribute": "userName", + "validateInput": false, + }, + "dfbd94f9-4a1c-49ec-b3b6-f8d0bf3cb79d": { + "_id": "dfbd94f9-4a1c-49ec-b3b6-f8d0bf3cb79d", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0", + }, + "passwordAttribute": "password", + "validateInput": false, + }, + }, + "nodes": { + "093076ce-d1d6-4fc2-9066-c7cf66e1f513": { + "_id": "093076ce-d1d6-4fc2-9066-c7cf66e1f513", + "_outcomes": [ + { + "displayName": "True", + "id": "true", + }, + { + "displayName": "False", + "id": "false", + }, + ], + "_type": { + "_id": "DataStoreDecisionNode", + "collection": true, + "name": "Data Store Decision", + "version": "1.0", + }, + }, + "48c6399d-808f-4c54-8f69-10a720a397c4": { + "_id": "48c6399d-808f-4c54-8f69-10a720a397c4", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0", + }, + "nodes": [ + { + "_id": "49c2e06a-6e22-4f75-8591-9dcff462e362", + "displayName": "Platform Username", + "nodeType": "ValidatedUsernameNode", + "nodeVersion": "1.0", + }, + { + "_id": "dfbd94f9-4a1c-49ec-b3b6-f8d0bf3cb79d", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode", + "nodeVersion": "1.0", + }, + ], + "pageDescription": {}, + "pageHeader": {}, + }, + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "TestLogin", + "description": "Delete me", + "enabled": true, + "entryNodeId": "48c6399d-808f-4c54-8f69-10a720a397c4", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "093076ce-d1d6-4fc2-9066-c7cf66e1f513": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Data Store Decision", + "nodeType": "DataStoreDecisionNode", + "version": "1.0", + "x": 508, + "y": 128, + }, + "48c6399d-808f-4c54-8f69-10a720a397c4": { + "connections": { + "outcome": "093076ce-d1d6-4fc2-9066-c7cf66e1f513", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 210, + "y": 81.5, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 788, + "y": 80, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 788, + "y": 230, + }, + "startNode": { + "x": 70, + "y": 155, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "annotations": "{"forNodes":{},"structural":[]}", + "categories": "["Authentication"]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/UpdatePassword.journey.json 1`] = ` +{ + "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", + "nodeVersion": "1.0", + }, + ], + "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", + "nodeVersion": "1.0", + }, + ], + "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", + "version": "1.0", + "x": 288, + "y": 133, + }, + "20237b34-26cb-4a0b-958f-abb422290d42": { + "connections": { + "outcome": "7d1deabe-cd98-49c8-943f-ca12305775f3", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 722, + "y": 45, + }, + "a3d97b53-e38a-4b24-aed0-a021050eb744": { + "connections": { + "outcome": "d018fcd1-4e22-4160-8c41-63bee51c9cb3", + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "version": "1.0", + "x": 659, + "y": 223, + }, + "d018fcd1-4e22-4160-8c41-63bee51c9cb3": { + "connections": { + "outcome": "3990ce1f-cce6-435b-ae1c-f138e89411c1", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 943, + "y": 30, + }, + "d1b79744-493a-44fe-bc26-7d324a8caa4e": { + "connections": { + "outcome": "0f0904e6-1da3-4cdb-9abf-0d2545016fab", + }, + "displayName": "Get Session Data", + "nodeType": "SessionDataNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/amsterService.journey.json 1`] = ` +{ + "trees": { + "amsterService": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": {}, + "nodes": { + "fb4dc0cc-6458-4e0f-ab2f-d5a27dfd0984": { + "_id": "fb4dc0cc-6458-4e0f-ab2f-d5a27dfd0984", + "_outcomes": [ + { + "displayName": "True", + "id": "true", + }, + { + "displayName": "False", + "id": "false", + }, + ], + "_type": { + "_id": "AmsterJwtDecisionNode", + "collection": true, + "name": "Amster Jwt Decision Node", + "version": "1.0", + }, + "authorizedKeys": "&{amster.secrets.keys.path|@BASE_DIR@/security/keys/amster/authorized_keys}", + }, + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "amsterService", + "description": "Amster login journey", + "enabled": true, + "entryNodeId": "fb4dc0cc-6458-4e0f-ab2f-d5a27dfd0984", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "fb4dc0cc-6458-4e0f-ab2f-d5a27dfd0984": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Amster Jwt Decision Node", + "nodeType": "AmsterJwtDecisionNode", + "version": "1.0", + "x": 210, + "y": 128, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 530, + "y": 80, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 530, + "y": 230, + }, + "startNode": { + "x": 70, + "y": 155, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "annotations": "{"forNodes":{},"structural":[]}", + "categories": "[]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/journey/devintest.journey.json 1`] = ` +{ + "trees": { + "devintest": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "3a93c033-c3c5-4da1-8ae8-caf592b3ace5": { + "_id": "3a93c033-c3c5-4da1-8ae8-caf592b3ace5", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0", + }, + "passwordAttribute": "password", + "validateInput": false, + }, + "5c5bc57b-c5e1-4cc8-8385-3c73cafd686c": { + "_id": "5c5bc57b-c5e1-4cc8-8385-3c73cafd686c", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "ValidatedUsernameNode", + "collection": true, + "name": "Platform Username", + "version": "1.0", + }, + "autocompleteValues": [], + "usernameAttribute": "userName", + "validateInput": false, + }, + }, + "nodes": { + "06b7a0c6-8772-4780-9a59-6c62a506b520": { + "_id": "06b7a0c6-8772-4780-9a59-6c62a506b520", + "_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, + }, + "351c0980-0279-4f7c-b958-3807e2199828": { + "_id": "351c0980-0279-4f7c-b958-3807e2199828", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0", + }, + "nodes": [ + { + "_id": "3a93c033-c3c5-4da1-8ae8-caf592b3ace5", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode", + "nodeVersion": "1.0", + }, + { + "_id": "5c5bc57b-c5e1-4cc8-8385-3c73cafd686c", + "displayName": "Platform Username", + "nodeType": "ValidatedUsernameNode", + "nodeVersion": "1.0", + }, + ], + "pageDescription": {}, + "pageHeader": {}, + }, + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "devintest", + "enabled": true, + "entryNodeId": "351c0980-0279-4f7c-b958-3807e2199828", + "identityResource": "managed/alpha_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "06b7a0c6-8772-4780-9a59-6c62a506b520": { + "connections": { + "FALSE": "e301438c-0bd0-429c-ab0c-66126501069a", + "TRUE": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Identity Store Decision", + "nodeType": "IdentityStoreDecisionNode", + "version": "1.0", + "x": 827, + "y": 266.015625, + }, + "351c0980-0279-4f7c-b958-3807e2199828": { + "connections": { + "outcome": "06b7a0c6-8772-4780-9a59-6c62a506b520", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 459, + "y": 278.015625, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1231, + "y": 202, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 1510, + "y": 422, + }, + "startNode": { + "x": 50, + "y": 250, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "annotations": "{"forNodes":{},"structural":[]}", + "categories": "[]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/oauth2.app/RCSClient.oauth2.app.json 1`] = ` +{ + "application": { + "RCSClient": { + "_id": "RCSClient", + "_provider": { + "_id": "", + "_type": { + "_id": "oauth-oidc", + "collection": false, + "name": "OAuth2 Provider", + }, + "advancedOAuth2Config": { + "acceptAudienceParametersInTokenExchangeRequests": false, + "allowClientCredentialsInTokenRequestQueryParameters": true, + "allowedAudienceValues": [], + "authenticationAttributes": [ + "uid", + ], + "codeVerifierEnforced": "false", + "defaultScopes": [ + "address", + "phone", + "openid", + "profile", + "email", + ], + "displayNameAttribute": "cn", + "enableApplicationContext": false, + "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": {}, + "minMaxAge": 60, + "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, + }, + "aiAgentsConfig": { + "aiAgentsEnabled": 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, + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/policyset/customerApplicationPolicySet.policyset.json 1`] = ` +{ + "policyset": { + "customerApplicationPolicySet": { + "applicationType": "authenticationApplicationType", + "attributeNames": [], + "conditions": [ + "Policy", + "LEAuthLevel", + "AuthenticateToService", + "Script", + "SimpleTime", + "OR", + "AMIdentityMembership", + "IPv6", + "IPv4", + "Expiration", + "SessionProperty", + "Json", + "IdmUser", + "AuthScheme", + "AuthLevel", + "NOT", + "Transaction", + "AuthenticateToRealm", + "ResourceEnvIP", + "AND", + "LDAPFilter", + "ClientId", + "OAuth2Scope", + "Session", + ], + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1774473249128, + "description": "Contains policies to be used by the customer application policy decision node.", + "displayName": "Customer Application Policy Set", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "customerApplicationPolicySet", + "resourceComparator": null, + "resourceTypeUuids": [ + "authenticationResourceType", + ], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "Policy", + "ResourceOwnerInGroup", + "NOT", + "OR", + "JwtClaim", + "AuthenticatedUsers", + "AND", + "Uma", + "NONE", + "Identity", + "ResourceOwnerPresent", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/policyset/oauth2Scopes.policyset.json 1`] = ` +{ + "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", + "name": "oauth2Scopes", + "resourceComparator": null, + "resourceTypeUuids": [ + "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b", + ], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "AuthenticatedUsers", + "NOT", + "Identity", + "OR", + "AND", + "NONE", + "JwtClaim", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/resourcetype/Authentication.resourcetype.json 1`] = ` +{ + "resourcetype": { + "authenticationResourceType": { + "actions": { + "Access": true, + }, + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1774473244108, + "description": "An immutable Authentication Resource Type available to OpenAM Policies.", + "name": "Authentication", + "patterns": [ + "*", + ], + "uuid": "authenticationResourceType", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/resourcetype/OAuth2-Scope.resourcetype.json 1`] = ` +{ + "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.", + "name": "OAuth2 Scope", + "patterns": [ + "*://*:*/*", + "*://*:*/*?*", + "*", + ], + "uuid": "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/resourcetype/URL.resourcetype.json 1`] = ` +{ + "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.", + "name": "URL", + "patterns": [ + "*://*:*/*", + "*://*:*/*?*", + ], + "uuid": "76656a38-5f8e-401b-83aa-4ccb74ce88d2", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/saml/iSPAzure.saml.json 1`] = ` +{ + "saml": { + "cot": {}, + "hosted": { + "aVNQQXp1cmU": { + "_id": "aVNQQXp1cmU", + "entityId": "iSPAzure", + "serviceProvider": { + "advanced": { + "ecpConfiguration": { + "ecpRequestIdpListFinderImpl": "com.sun.identity.saml2.plugins.ECPIDPFinder", + }, + "idpProxy": {}, + "relayStateUrlList": {}, + "saeConfiguration": { + "spUrl": "https://idc.scheuber.io/am/spsaehandler/metaAlias/alpha/iSPAzure", + }, + }, + "assertionContent": { + "assertionTimeSkew": 300, + "authenticationContext": { + "authContextItems": [ + { + "contextReference": "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport", + "defaultItem": true, + "level": 0, + }, + ], + "authenticationComparisonType": "Exact", + "authenticationContextMapper": "com.sun.identity.saml2.plugins.DefaultSPAuthnContextMapper", + "includeRequestedAuthenticationContext": true, + }, + "basicAuthentication": {}, + "clientAuthentication": {}, + "nameIdFormat": { + "nameIdFormatList": [ + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName", + "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos", + "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName", + ], + }, + "signingAndEncryption": { + "encryption": {}, + "requestResponseSigning": {}, + "secretIdAndAlgorithms": {}, + }, + }, + "assertionProcessing": { + "accountMapping": { + "spAccountMapper": "com.sun.identity.saml2.plugins.DefaultSPAccountMapper", + "useNameIDAsSPUserID": true, + }, + "adapter": {}, + "attributeMapper": { + "attributeMap": [ + { + "key": "http://schemas.microsoft.com/identity/claims/displayname", + "value": "cn", + }, + { + "key": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", + "value": "givenName", + }, + { + "key": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", + "value": "sn", + }, + { + "key": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", + "value": "mail", + }, + { + "key": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", + "value": "uid", + }, + ], + "attributeMapper": "com.sun.identity.saml2.plugins.DefaultSPAttributeMapper", + }, + "autoFederation": { + "autoFedEnabled": false, + }, + "redirectTreeConfiguration": {}, + "responseArtifactMessageEncoding": { + "encoding": "URI", + }, + "url": {}, + }, + "services": { + "metaAlias": "/alpha/iSPAzure", + "serviceAttributes": { + "assertionConsumerService": [ + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact", + "index": 0, + "isDefault": true, + "location": "https://idc.scheuber.io/am/AuthConsumer/metaAlias/alpha/iSPAzure", + }, + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + "index": 1, + "isDefault": false, + "location": "https://idc.scheuber.io/am/AuthConsumer/metaAlias/alpha/iSPAzure", + }, + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:PAOS", + "index": 2, + "isDefault": false, + "location": "https://idc.scheuber.io/am/Consumer/ECP/metaAlias/alpha/iSPAzure", + }, + ], + "nameIdService": [ + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", + "location": "https://idc.scheuber.io/am/SPMniRedirect/metaAlias/alpha/iSPAzure", + "responseLocation": "https://idc.scheuber.io/am/SPMniRedirect/metaAlias/alpha/iSPAzure", + }, + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + "location": "https://idc.scheuber.io/am/SPMniPOST/metaAlias/alpha/iSPAzure", + "responseLocation": "https://idc.scheuber.io/am/SPMniPOST/metaAlias/alpha/iSPAzure", + }, + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:SOAP", + "location": "https://idc.scheuber.io/am/SPMniSoap/metaAlias/alpha/iSPAzure", + "responseLocation": "https://idc.scheuber.io/am/SPMniSoap/metaAlias/alpha/iSPAzure", + }, + ], + "singleLogoutService": [ + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", + "location": "https://idc.scheuber.io/am/SPSloRedirect/metaAlias/alpha/iSPAzure", + "responseLocation": "https://idc.scheuber.io/am/SPSloRedirect/metaAlias/alpha/iSPAzure", + }, + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + "location": "https://idc.scheuber.io/am/SPSloPOST/metaAlias/alpha/iSPAzure", + "responseLocation": "https://idc.scheuber.io/am/SPSloPOST/metaAlias/alpha/iSPAzure", + }, + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:SOAP", + "location": "https://idc.scheuber.io/am/SPSloSoap/metaAlias/alpha/iSPAzure", + }, + ], + }, + }, + }, + }, + }, + "metadata": { + "aVNQQXp1cmU": [ + "", + "", + " ", + " ", + " ", + " ", + " PGNlcnRpZmljYXRlPg==", + " ", + " ", + " ", + " ", + " ", + " ", + " PGNlcnRpZmljYXRlPg==", + " ", + " ", + " ", + " ", + " ", + " ", + " 128", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " urn:oasis:names:tc:SAML:2.0:nameid-format:persistent", + " urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + " urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + " urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + " urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName", + " urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos", + " urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName", + " ", + " ", + " ", + " ", + "", + "", + ], + }, + "remote": {}, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/saml/urnfederationMicrosoftOnline.saml.json 1`] = ` +{ + "saml": { + "cot": {}, + "hosted": {}, + "metadata": { + "dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l": [ + "", + "", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " PGNlcnRpZmljYXRlPg==", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " PGNlcnRpZmljYXRlPg==", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " PGNlcnRpZmljYXRlPg==", + " ", + " ", + " ", + " ", + " urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + " urn:mace:shibboleth:1.0:nameIdentifier", + " urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + " urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + " urn:oasis:names:tc:SAML:2.0:nameid-format:persistent", + " ", + " ", + " ", + " ", + "", + "", + ], + }, + "remote": { + "dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l": { + "_id": "dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l", + "entityId": "urn:federation:MicrosoftOnline", + "serviceProvider": { + "advanced": { + "applicationContext": {}, + "idpProxy": {}, + "saeConfiguration": {}, + "treeConfiguration": {}, + }, + "assertionContent": { + "basicAuthentication": {}, + "nameIdFormat": { + "nameIdFormatList": [ + "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "urn:mace:shibboleth:1.0:nameIdentifier", + "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent", + ], + }, + "secrets": {}, + "signingAndEncryption": { + "encryption": {}, + "requestResponseSigning": { + "assertion": true, + }, + "secretIdAndAlgorithms": {}, + }, + }, + "assertionProcessing": { + "accountMapper": {}, + "attributeMapper": { + "attributeMap": [ + { + "binary": false, + "localAttribute": "mail", + "samlAttribute": "IDPEmail", + }, + { + "binary": false, + "localAttribute": "UOPClassID", + "samlAttribute": "UOPClassID", + }, + ], + }, + "responseArtifactMessageEncoding": { + "encoding": "URI", + }, + }, + "services": { + "serviceAttributes": { + "assertionConsumerService": [ + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + "index": 0, + "isDefault": true, + "location": "https://login.microsoftonline.com/login.srf", + }, + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign", + "index": 1, + "isDefault": false, + "location": "https://login.microsoftonline.com/login.srf", + }, + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:PAOS", + "index": 2, + "isDefault": false, + "location": "https://login.microsoftonline.com/login.srf", + }, + ], + "singleLogoutService": [ + { + "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + "location": "https://login.microsoftonline.com/login.srf", + }, + ], + }, + }, + }, + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/ADFS-Profile-Normalization-(JS).script.js 1`] = ` +"/* + * Copyright 2022 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 returns the social identity profile information for the authenticating user + * in a standard form expected by the Social Provider Handler Node. + * + * Defined variables: + * rawProfile - The social identity provider profile information for the authenticating user. + * JsonValue (1). + * logger - The debug logger instance: + * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger. + * realm - String (primitive). + * The name of the realm the user is authenticating to. + * requestHeaders - TreeMap (2). + * The object that provides methods for accessing headers in the login request: + * https://backstage.forgerock.com/docs/am/7/authentication-guide/scripting-api-node.html#scripting-api-node-requestHeaders. + * requestParameters - TreeMap (2). + * The object that contains the authentication request parameters. + * selectedIdp - String (primitive). + * The social identity provider name. For example: google. + * sharedState - LinkedHashMap (3). + * The object that holds the state of the authentication tree and allows data exchange between the stateless nodes: + * https://backstage.forgerock.com/docs/am/7/auth-nodes/core-action.html#accessing-tree-state. + * transientState - LinkedHashMap (3). + * The object for storing sensitive information that must not leave the server unencrypted, + * and that may not need to persist between authentication requests during the authentication session: + * https://backstage.forgerock.com/docs/am/7/auth-nodes/core-action.html#accessing-tree-state. + * + * Return - a JsonValue (1). + * 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. + * + * This script's last statement should result in a JsonValue (1) with the following keys: + * { + * {"displayName": "corresponding-social-identity-provider-value"}, + * {"email": "corresponding-social-identity-provider-value"}, + * {"familyName": "corresponding-social-identity-provider-value"}, + * {"givenName": "corresponding-social-identity-provider-value"}, + * {"id": "corresponding-social-identity-provider-value"}, + * {"locale": "corresponding-social-identity-provider-value"}, + * {"photoUrl": "corresponding-social-identity-provider-value"}, + * {"username": "corresponding-social-identity-provider-value"} + * } + * + * The consumer of this data defines which keys are required and which are optional. + * For example, the script associated with the Social Provider Handler Node and, + * ultimately, the managed object created/updated with this data + * will expect certain keys to be populated. + * 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. + * + * (1) JsonValue - https://backstage.forgerock.com/docs/am/7/apidocs/org/forgerock/json/JsonValue.html. + * (2) TreeMap - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/TreeMap.html. + * (3) LinkedHashMap - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/LinkedHashMap.html. + */ + +(function () { + var frJava = JavaImporter( + org.forgerock.json.JsonValue + ); + + var normalizedProfileData = frJava.JsonValue.json(frJava.JsonValue.object()); + + //logger.message('Seguin rawProfile: '+rawProfile); + + normalizedProfileData.put('id', rawProfile.get('sub').asString()); + normalizedProfileData.put('displayName', rawProfile.get('givenName').asString() + ' ' + rawProfile.get('sn').asString()); + normalizedProfileData.put('email', rawProfile.get('mail').asString()); + normalizedProfileData.put('givenName', rawProfile.get('givenName').asString()); + normalizedProfileData.put('familyName', rawProfile.get('sn').asString()); + normalizedProfileData.put('username', rawProfile.get('upn').asString()); + normalizedProfileData.put('roles', rawProfile.get('roles').asString()); + + //logger.message('Seguin normalizedProfileData: '+normalizedProfileData); + + return normalizedProfileData; +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/ADFS-Profile-Normalization-(JS).script.json 1`] = ` +{ + "script": { + "dbe0bf9a-72aa-49d5-8483-9db147985a47": { + "_id": "dbe0bf9a-72aa-49d5-8483-9db147985a47", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "creationDate": 1762989102970, + "default": false, + "description": "Normalizes raw profile data from ADFS", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "ADFS Profile Normalization (JS)", + "script": "file://ADFS-Profile-Normalization-(JS).script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Alpha-OAuth2-Access-Token-Modification-Script.script.js 1`] = ` +"/* + * 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. +}()); +*/ +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Alpha-OAuth2-Access-Token-Modification-Script.script.json 1`] = ` +{ + "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", + "name": "Alpha OAuth2 Access Token Modification Script", + "script": "file://Alpha-OAuth2-Access-Token-Modification-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Alpha-OIDC-Claims-Script.script.js 1`] = ` +"/* + * 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; +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Alpha-OIDC-Claims-Script.script.json 1`] = ` +{ + "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", + "name": "Alpha OIDC Claims Script", + "script": "file://Alpha-OIDC-Claims-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.js 1`] = ` +"(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); + } +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.json 1`] = ` +{ + "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", + "name": "Alpha endUserUIClient OAuth2 Access Token Modification Script", + "script": "file://Alpha-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Alpha-endUserUIClient-OIDC-Claims-Script.script.js 1`] = ` +"/* + * 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; +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Alpha-endUserUIClient-OIDC-Claims-Script.script.json 1`] = ` +{ + "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", + "name": "Alpha endUserUIClient OIDC Claims Script", + "script": "file://Alpha-endUserUIClient-OIDC-Claims-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Check-Username.script.js 1`] = ` +"/* Check Username + * + * Author: volker.scheuber@forgerock.com + * + * Check if username has already been collected. + * Return "known" if yes, "unknown" otherwise. + * + * This script does not need to be parametrized. It will work properly as is. + * + * The Scripted Decision Node needs the following outcomes defined: + * - known + * - unknown + */ +(function () { + if (null != sharedState.get("username")) { + outcome = "known"; + } + else { + outcome = "unknown"; + } +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Check-Username.script.json 1`] = ` +{ + "script": { + "739bdc48-fd24-4c52-b353-88706d75558a": { + "_id": "739bdc48-fd24-4c52-b353-88706d75558a", + "context": "AUTHENTICATION_TREE_DECISION_NODE", + "createdBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "creationDate": 1762989102825, + "default": false, + "description": "Check if username has already been collected.", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "Check Username", + "script": "file://Check-Username.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Custom-Device-Match-Script.script.js 1`] = ` +"/* + * Custom Device Match Script + */ + +outcome = "true"; +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Custom-Device-Match-Script.script.json 1`] = ` +{ + "script": { + "d58977ed-0542-4147-8197-973ef7300191": { + "_id": "d58977ed-0542-4147-8197-973ef7300191", + "context": "AUTHENTICATION_TREE_DECISION_NODE", + "createdBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "creationDate": 1762989102898, + "default": false, + "description": "Custom Device Match Script", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "Custom Device Match Script", + "script": "file://Custom-Device-Match-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.js 1`] = ` +"/* + * 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 +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.json 1`] = ` +{ + "script": { + "c234ba0b-58a1-4cfd-9567-09edde980745": { + "_id": "c234ba0b-58a1-4cfd-9567-09edde980745", + "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "createdBy": "null", + "creationDate": 1433147666269, + "default": false, + "description": "Internal token modification script", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "ForgeRock Internal: OAuth2 Access Token Modification Script", + "script": "file://ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/ForgeRock-Internal-OIDC-Claims-Script.script.js 1`] = ` +"/* + * 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; +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/ForgeRock-Internal-OIDC-Claims-Script.script.json 1`] = ` +{ + "script": { + "1f389a3d-21cf-417c-a6d3-42ea620071f0": { + "_id": "1f389a3d-21cf-417c-a6d3-42ea620071f0", + "context": "OIDC_CLAIMS", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Internal OIDC Claims script", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "ForgeRock Internal: OIDC Claims Script", + "script": "file://ForgeRock-Internal-OIDC-Claims-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/GitHub-Profile-Normalization-(VS).script.groovy 1`] = ` +"/* + * Copyright 2020 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. + */ + +import static org.forgerock.json.JsonValue.field +import static org.forgerock.json.JsonValue.json +import static org.forgerock.json.JsonValue.object + +logger.warning("GitHub rawProfile: "+rawProfile) + +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))) +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/GitHub-Profile-Normalization-(VS).script.json 1`] = ` +{ + "script": { + "23143919-6b78-40c3-b25e-beca19b229e0": { + "_id": "23143919-6b78-40c3-b25e-beca19b229e0", + "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION", + "createdBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "creationDate": 1762989102622, + "default": false, + "description": "Normalizes raw profile data from GitHub", + "evaluatorVersion": "1.0", + "language": "GROOVY", + "name": "GitHub Profile Normalization (VS)", + "script": "file://GitHub-Profile-Normalization-(VS).script.groovy", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Inactive-Device-Match-Script.script.js 1`] = ` +"/* + * Inactive Device Match Script + */ + +outcome = "true"; +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Inactive-Device-Match-Script.script.json 1`] = ` +{ + "script": { + "3bd13a46-61c4-4974-8efb-1700c80c64e3": { + "_id": "3bd13a46-61c4-4974-8efb-1700c80c64e3", + "context": "AUTHENTICATION_TREE_DECISION_NODE", + "createdBy": "id=ad62492c-d064-4952-95ed-0a74ed5b2fd1,ou=user,ou=am-config", + "creationDate": 1762990384564, + "default": false, + "description": "Inactive Device Match Script", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "Inactive Device Match Script", + "script": "file://Inactive-Device-Match-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/OAuth2-Client-Credentials-Default.script.js 1`] = ` +"/* + * 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. + */ + +/** + * Example cache loader script for performing an OAuth2 client credential flow + * to retrieve an access token. This script is called when a cache entry is + * requested that has not yet been loaded. The script returns the \`value\` + * in the key object. + * + * To utilise this cache loader in a scripted decision node, consider the following: + * + * var accessToken = cacheManager.named("oauth2_client_credentials").get({ + * url: "http://somewhere.com/.../access_token", + * clientId: "some-client", + * clientSecretLabel: "esv.secret.label", + * scope: "scope1 scope2" + * }).access_token; + * + * ... + * + * + * @param key {object} of string to string + * @returns json response {object} + */ +function load(key) { + var url = key.url; + var clientId = key.clientId; + var clientSecret = systemEnv.getProperty(key.clientSecretLabel); + var scope = key.scope; + + var options = { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + form: { + grant_type: "client_credentials", + client_id: clientId, + client_secret: clientSecret, + scope: scope + } + } + + var response = httpClient.send(url, options).get(); + if (!response || response.status != 200) { + logger.error("Bad response from " + url); + throw Error("Bad response from " + url); + } + return response.json(); +} +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/OAuth2-Client-Credentials-Default.script.json 1`] = ` +{ + "script": { + "24cb761e-0123-4078-a87c-3f1e2b25451b": { + "_id": "24cb761e-0123-4078-a87c-3f1e2b25451b", + "context": "CACHE_LOADER", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1756459006279, + "default": false, + "description": "Example cache loader script for performing an OAuth2 client credential flow to retrieve an access token. This script is called when a cache entry is requested that has not yet been loaded.", + "evaluatorVersion": "2.0", + "language": "JAVASCRIPT", + "name": "OAuth2 Client Credentials Default", + "script": "file://OAuth2-Client-Credentials-Default.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Preston-Test-Script.script.js 1`] = ` +"nodeState.putTransient('x', 'Transient X'); +nodeState.putTransient('y', 'Transient Y'); +nodeState.putTransient('c', 'Transient C'); +outcome="outcome"; +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/Preston-Test-Script.script.json 1`] = ` +{ + "script": { + "c5717943-efcf-442e-9be0-dbe10817ba26": { + "_id": "c5717943-efcf-442e-9be0-dbe10817ba26", + "context": "AUTHENTICATION_TREE_DECISION_NODE", + "createdBy": "id=0300848e-5223-42cd-bccb-765728cdeb54,ou=user,ou=am-config", + "creationDate": 1761255413726, + "default": false, + "description": null, + "evaluatorVersion": "2.0", + "language": "JAVASCRIPT", + "name": "Preston Test Script", + "script": "file://Preston-Test-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/deleteme.script.js 1`] = ` +"/* + * 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"); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/script/deleteme.script.json 1`] = ` +{ + "script": { + "ba90aa4d-26bf-44ec-9aa0-49d772c35a1d": { + "_id": "ba90aa4d-26bf-44ec-9aa0-49d772c35a1d", + "context": "DEVICE_MATCH_NODE", + "createdBy": "id=0300848e-5223-42cd-bccb-765728cdeb54,ou=user,ou=am-config", + "creationDate": 1762990073823, + "default": false, + "description": null, + "evaluatorVersion": "2.0", + "language": "JAVASCRIPT", + "name": "deleteme", + "script": "file://deleteme.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/secretstore/ESV.secretstore.json 1`] = ` +{ + "secretstore": { + "ESV": { + "_id": "ESV", + "_type": { + "_id": "GoogleSecretManagerSecretStoreProvider", + "collection": true, + "name": "Google Secret Manager", + }, + "expiryDurationSeconds": 600, + "mappings": [], + "project": "&{google.project.id}", + "secretFormat": "PEM", + "serviceAccount": "default", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/service/SocialIdentityProviders.service.json 1`] = ` +{ + "service": { + "SocialIdentityProviders": { + "_id": "", + "_type": { + "_id": "SocialIdentityProviders", + "collection": false, + "name": "Social Identity Provider Service", + }, + "enabled": true, + "location": "/alpha", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/service/baseurl.service.json 1`] = ` +{ + "service": { + "baseurl": { + "_id": "", + "_type": { + "_id": "baseurl", + "collection": false, + "name": "Base URL Source", + }, + "contextPath": "/am", + "fixedValue": "https://&{fqdn}", + "location": "/alpha", + "nextDescendents": [], + "source": "REQUEST_VALUES", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/service/httpclient.service.json 1`] = ` +{ + "service": { + "httpclient": { + "_id": "", + "_type": { + "_id": "httpclient", + "collection": false, + "name": "Http Client Service", + }, + "core": { + "enabled": false, + }, + "location": "/alpha", + "nextDescendents": [ + { + "_id": "Test Client", + "_type": { + "_id": "instances", + "collection": true, + "name": "Http Client Instance Configuration", + }, + "core": { + "enabled": false, + }, + "proxy": { + "useInstanceProxy": false, + }, + "timeouts": { + "connectionTimeout": 10, + "responseTimeout": 10, + "useInstanceTimeouts": false, + }, + "tls": { + "disableRevocationChecks": false, + "mtlsClientCertSecretPurpose": "testClientCert", + "mtlsServerTrustCertsSecretPurpose": "testServerCert", + "trustAllCertificates": false, + }, + }, + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/service/oauth-oidc.service.json 1`] = ` +{ + "service": { + "oauth-oidc": { + "_id": "", + "_type": { + "_id": "oauth-oidc", + "collection": false, + "name": "OAuth2 Provider", + }, + "advancedOAuth2Config": { + "acceptAudienceParametersInTokenExchangeRequests": false, + "allowClientCredentialsInTokenRequestQueryParameters": true, + "allowedAudienceValues": [], + "authenticationAttributes": [ + "uid", + ], + "codeVerifierEnforced": "false", + "defaultScopes": [ + "address", + "phone", + "openid", + "profile", + "email", + ], + "displayNameAttribute": "cn", + "enableApplicationContext": false, + "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": {}, + "minMaxAge": 60, + "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, + }, + "aiAgentsConfig": { + "aiAgentsEnabled": 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, + }, + "location": "/alpha", + "nextDescendents": [], + "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]", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/service/policyconfiguration.service.json 1`] = ` +{ + "service": { + "policyconfiguration": { + "_id": "", + "_type": { + "_id": "policyconfiguration", + "collection": false, + "name": "Policy Configuration", + }, + "bindDn": "&{am.stores.user.username}", + "bindPassword": { + "$string": "&{am.stores.user.password}", + }, + "checkIfResourceTypeExists": true, + "connectionPoolMaximumSize": 10, + "connectionPoolMinimumSize": 1, + "ldapServer": [ + "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", + ], + "location": "/alpha", + "maximumSearchResults": 100, + "mtlsEnabled": false, + "nextDescendents": [], + "policyHeartbeatInterval": 10, + "policyHeartbeatTimeUnit": "SECONDS", + "realmSearchFilter": "(objectclass=sunismanagedorganization)", + "searchTimeout": 5, + "sslEnabled": { + "$bool": "&{am.stores.ssl.enabled}", + }, + "subjectsResultTTL": 10, + "userAliasEnabled": false, + "usersBaseDn": "ou=identities", + "usersSearchAttribute": "uid", + "usersSearchFilter": "(objectclass=inetorgperson)", + "usersSearchScope": "SCOPE_SUB", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/service/selfServiceTrees.service.json 1`] = ` +{ + "service": { + "selfServiceTrees": { + "_id": "", + "_type": { + "_id": "selfServiceTrees", + "collection": false, + "name": "Self Service Trees", + }, + "enabled": true, + "location": "/alpha", + "nextDescendents": [], + "treeMapping": { + "forgottenUsername": "ForgottenUsername", + "registration": "Registration", + "resetPassword": "ResetPassword", + "updatePassword": "UpdatePassword", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/service/validation.service.json 1`] = ` +{ + "service": { + "validation": { + "_id": "", + "_type": { + "_id": "validation", + "collection": false, + "name": "Validation Service", + }, + "location": "/alpha", + "nextDescendents": [], + "validGotoDestinations": [ + "&{am.server.protocol|https}://&{fqdn}/*?*", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/theme/Contrast.theme.json 1`] = ` +{ + "theme": { + "abb4efed-ae70-4064-91a7-936be552d6fc": { + "_id": "abb4efed-ae70-4064-91a7-936be552d6fc", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#000000", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "accountCardInputSelectHoverColor": "#f6f8fa", + "accountCardInputTextColor": "#23282e", + "accountCardOuterBorderColor": "#e7eef4", + "accountCardShadow": 3, + "accountCardTabActiveBorderColor": "#109cf1", + "accountCardTabActiveColor": "#e4f4fd", + "accountCardTextColor": "#5e6d82", + "accountFooter": "", + "accountFooterEnabled": false, + "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, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#000000", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "0", + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "isDefault": false, + "journeyA11yAddFallbackErrorHeading": true, + "journeyCardBackgroundColor": "#ffffff", + "journeyCardBorderRadius": 4, + "journeyCardHeaderBackgroundColor": "#ffffff", + "journeyCardShadow": 3, + "journeyCardTextColor": "#5e6d82", + "journeyCardTitleColor": "#23282e", + "journeyFloatingLabels": true, + "journeyFocusElement": "header", + "journeyFocusFirstFocusableItemEnabled": false, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyFooterScriptTag": "", + "journeyFooterScriptTagEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#000000", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "card", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#000000", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#000000", + "linkColorOnDark": "#109cf1", + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/theme/Highlander.theme.json 1`] = ` +{ + "theme": { + "72ef4fcb-aae2-4c78-a050-d0e373c6a175": { + "_id": "72ef4fcb-aae2-4c78-a050-d0e373c6a175", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#EB0A1E", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "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, + }, + "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, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "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": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#EB0A1E", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "card", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#C60819", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#EB0A1E", + "linkColorOnDark": "#109cf1", + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/theme/Robroy.theme.json 1`] = ` +{ + "theme": { + "8e756273-9dbb-42dd-babe-52912336ea3d": { + "_id": "8e756273-9dbb-42dd-babe-52912336ea3d", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#5AA625", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "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, + }, + "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, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "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": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#5AA625", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": true, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "justified-right", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#49871E", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#5AA625", + "linkColorOnDark": "#109cf1", + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/theme/Starter-Theme.theme.json 1`] = ` +{ + "theme": { + "33b89c09-2a29-4e9b-9e2b-12fd7e1c7466": { + "_id": "33b89c09-2a29-4e9b-9e2b-12fd7e1c7466", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#324054", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "accountCardInputSelectHoverColor": "#f6f8fa", + "accountCardInputTextColor": "#23282e", + "accountCardOuterBorderColor": "#e7eef4", + "accountCardShadow": 3, + "accountCardTabActiveBorderColor": "#109cf1", + "accountCardTabActiveColor": "#e4f4fd", + "accountCardTextColor": "#5e6d82", + "accountFooter": "", + "accountFooterEnabled": false, + "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, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#324054", + "backgroundImage": "", + "bodyText": "#23282e", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": 5, + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "isDefault": true, + "journeyA11yAddFallbackErrorHeading": true, + "journeyCardBackgroundColor": "#ffffff", + "journeyCardBorderRadius": 4, + "journeyCardHeaderBackgroundColor": "#ffffff", + "journeyCardShadow": 3, + "journeyCardTextColor": "#5e6d82", + "journeyCardTitleColor": "#23282e", + "journeyFloatingLabels": true, + "journeyFocusElement": "header", + "journeyFocusFirstFocusableItemEnabled": false, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyFooterScriptTag": "", + "journeyFooterScriptTagEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#324054", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "card", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#0c85cf", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#109cf1", + "linkColorOnDark": "#109cf1", + "linkedTrees": [], + "logo": "img/placeholder.95d0bb8e.svg", + "logoAltText": "", + "logoEnabled": true, + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-alpha/theme/Zardoz.theme.json 1`] = ` +{ + "theme": { + "8ee2e08a-db04-4a16-b3d9-6f52c9aee5cb": { + "_id": "8ee2e08a-db04-4a16-b3d9-6f52c9aee5cb", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#009C80", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "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, + }, + "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, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "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", + "journeyInputFocusBorderColor": "#009C80", + "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, + "lightColor": "#f6f8fa", + "linkActiveColor": "#007661", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#009C80", + "linkColorOnDark": "#109cf1", + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/authentication/root-bravo.authentication.settings.json 1`] = ` +{ + "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=/bravo", + ], + "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", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/Agent.journey.json 1`] = ` +{ + "trees": { + "Agent": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "16ac997e-4d48-4c19-b6b9-98086845131a": { + "_id": "16ac997e-4d48-4c19-b6b9-98086845131a", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "ValidatedUsernameNode", + "collection": true, + "name": "Platform Username", + "version": "1.0", + }, + "autocompleteValues": [], + "usernameAttribute": "userName", + "validateInput": false, + }, + "52db314b-2eda-41a9-8dda-8d0b8b8e5876": { + "_id": "52db314b-2eda-41a9-8dda-8d0b8b8e5876", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "ValidatedPasswordNode", + "collection": true, + "name": "Platform Password", + "version": "1.0", + }, + "passwordAttribute": "password", + "validateInput": false, + }, + }, + "nodes": { + "0fde84fa-bf2f-4322-a040-fc700bd9b8f2": { + "_id": "0fde84fa-bf2f-4322-a040-fc700bd9b8f2", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0", + }, + "nodes": [ + { + "_id": "16ac997e-4d48-4c19-b6b9-98086845131a", + "displayName": "Platform Username", + "nodeType": "ValidatedUsernameNode", + "nodeVersion": "1.0", + }, + { + "_id": "52db314b-2eda-41a9-8dda-8d0b8b8e5876", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode", + "nodeVersion": "1.0", + }, + ], + "pageDescription": {}, + "pageHeader": {}, + }, + "53fc9e71-93b1-4329-a0ee-0493c6b4fcd6": { + "_id": "53fc9e71-93b1-4329-a0ee-0493c6b4fcd6", + "_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", + }, + "a02fa1ec-2752-42bc-a98f-e41e08f225e7": { + "_id": "a02fa1ec-2752-42bc-a98f-e41e08f225e7", + "_outcomes": [ + { + "displayName": "True", + "id": "true", + }, + { + "displayName": "False", + "id": "false", + }, + ], + "_type": { + "_id": "AgentDataStoreDecisionNode", + "collection": true, + "name": "Agent Data Store Decision", + "version": "1.0", + }, + }, + }, + "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": "53fc9e71-93b1-4329-a0ee-0493c6b4fcd6", + "identityResource": "managed/bravo_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "0fde84fa-bf2f-4322-a040-fc700bd9b8f2": { + "connections": { + "outcome": "a02fa1ec-2752-42bc-a98f-e41e08f225e7", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 469, + "y": 320, + }, + "53fc9e71-93b1-4329-a0ee-0493c6b4fcd6": { + "connections": { + "false": "0fde84fa-bf2f-4322-a040-fc700bd9b8f2", + "true": "a02fa1ec-2752-42bc-a98f-e41e08f225e7", + }, + "displayName": "Zero Page Login Collector", + "nodeType": "ZeroPageLoginNode", + "version": "1.0", + "x": 167, + "y": 222, + }, + "a02fa1ec-2752-42bc-a98f-e41e08f225e7": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Agent Data Store Decision", + "nodeType": "AgentDataStoreDecisionNode", + "version": "1.0", + "x": 749, + "y": 238, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1066, + "y": 226, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 1070, + "y": 374, + }, + "startNode": { + "x": 50, + "y": 250, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "["Authentication"]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/ForgottenUsername.journey.json 1`] = ` +{ + "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", + "nodeVersion": "1.0", + }, + ], + "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/bravo_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", + "version": "1.0", + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 324, + "y": 152, + }, + "d9a79f01-2ce3-4be2-a28a-975f35c3c8ca": { + "connections": { + "outcome": "b93ce36e-1976-4610-b24f-8d6760b5463b", + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/FrodoTestJourney12.journey.json 1`] = ` +{ + "trees": { + "FrodoTestJourney12": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "03416cc6-588b-409a-919f-038bb8194c81": { + "_id": "03416cc6-588b-409a-919f-038bb8194c81", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "TEXT_OUTPUT_CALLBACK", + "options": { + "message": "WARNING: You must enter your username and password to continue!", + "messageType": "1", + }, + }, + "0a3d5de0-9426-4a9a-aae0-163eda075d43": { + "_id": "0a3d5de0-9426-4a9a-aae0-163eda075d43", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "SCRIPT_TEXT_OUTPUT_CALLBACK", + "options": { + "message": "console.log("hello console!");", + }, + "sharedProperty": "out", + }, + "18edd91b-5e15-49df-b3c3-764114a8ebb3": { + "_id": "18edd91b-5e15-49df-b3c3-764114a8ebb3", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "HIDDEN_VALUE_CALLBACK", + "options": { + "id": "myId", + "value": "I am hidden", + }, + "sharedProperty": "hidden", + }, + "1a002d5d-5ad5-4d0e-965f-a0f26278d08d": { + "_id": "1a002d5d-5ad5-4d0e-965f-a0f26278d08d", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "NAME_CALLBACK", + "objectSharedProperty": "userName", + "options": { + "prompt": "Enter Your Username", + }, + "sharedProperty": "username", + }, + "65c2a8cd-e623-4c5d-b420-e55fc5105f43": { + "_id": "65c2a8cd-e623-4c5d-b420-e55fc5105f43", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "PASSWORD_CALLBACK", + "objectTransientProperty": "password", + "options": { + "prompt": "Enter Your Password", + }, + "transientProperty": "password", + }, + "d8bd62e2-a4e7-4e08-bb28-10570aa31fcf": { + "_id": "d8bd62e2-a4e7-4e08-bb28-10570aa31fcf", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK", + "objectSharedProperty": "frUnindexedString1", + "options": { + "name": "frUnindexedString1", + "prompt": "Are you old?", + "required": "true", + }, + "sharedProperty": "isOld", + }, + "eaf91b8a-bb71-4037-97ec-cd2e54885668": { + "_id": "eaf91b8a-bb71-4037-97ec-cd2e54885668", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "NUMBER_ATTRIBUTE_INPUT_CALLBACK", + "objectSharedProperty": "frUnindexedInteger1", + "options": { + "name": "frUnindexedInteger1", + "prompt": "Enter Your Age", + "required": "true", + }, + "sharedProperty": "age", + }, + "ee549716-666c-4b9d-baab-defe1a93eb6c": { + "_id": "ee549716-666c-4b9d-baab-defe1a93eb6c", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "STRING_ATTRIBUTE_INPUT_CALLBACK", + "objectSharedProperty": "mail", + "options": { + "name": "mail", + "prompt": "Enter Your Email", + "required": "true", + }, + "sharedProperty": "email", + }, + "f9155861-f7c8-4022-9bed-e4ef5b238824": { + "_id": "f9155861-f7c8-4022-9bed-e4ef5b238824", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-ef81b1a52c914710b3388caebfe7233a", + "collection": true, + "name": "Display Callback", + "version": "1.0", + }, + "callback": "TERMS_AND_CONDITIONS_CALLBACK", + "options": { + "createDate": "2025-11-12T22:30:59.417Z", + "terms": "This is the way", + "version": "6.7", + }, + "sharedProperty": "accepted", + }, + }, + "nodes": { + "0fc7e34a-e3b5-4f5d-baea-ffde4ee63a97": { + "_id": "0fc7e34a-e3b5-4f5d-baea-ffde4ee63a97", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0", + }, + "nodes": [ + { + "_id": "03416cc6-588b-409a-919f-038bb8194c81", + "displayName": "Welcome", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + { + "_id": "1a002d5d-5ad5-4d0e-965f-a0f26278d08d", + "displayName": "Username", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + { + "_id": "65c2a8cd-e623-4c5d-b420-e55fc5105f43", + "displayName": "Password", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + { + "_id": "ee549716-666c-4b9d-baab-defe1a93eb6c", + "displayName": "Email", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + { + "_id": "eaf91b8a-bb71-4037-97ec-cd2e54885668", + "displayName": "Age", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + { + "_id": "d8bd62e2-a4e7-4e08-bb28-10570aa31fcf", + "displayName": "Is old", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + { + "_id": "18edd91b-5e15-49df-b3c3-764114a8ebb3", + "displayName": "Hidden", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + { + "_id": "0a3d5de0-9426-4a9a-aae0-163eda075d43", + "displayName": "Script", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + { + "_id": "f9155861-f7c8-4022-9bed-e4ef5b238824", + "displayName": "Terms", + "nodeType": "designer-ef81b1a52c914710b3388caebfe7233a", + "nodeVersion": "1.0", + }, + ], + "pageDescription": {}, + "pageHeader": {}, + }, + "461a364c-5884-44f6-87d9-ae749cc08f24": { + "_id": "461a364c-5884-44f6-87d9-ae749cc08f24", + "_outcomes": [ + { + "displayName": "True", + "id": "true", + }, + { + "displayName": "False", + "id": "false", + }, + ], + "_type": { + "_id": "DataStoreDecisionNode", + "collection": true, + "name": "Data Store Decision", + "version": "1.0", + }, + }, + "8c4f5d43-d7f8-4ac2-8aae-d38f8f5cb9cb": { + "_id": "8c4f5d43-d7f8-4ac2-8aae-d38f8f5cb9cb", + "_outcomes": [ + { + "displayName": "True", + "id": "True", + }, + { + "displayName": "False", + "id": "False", + }, + ], + "_type": { + "_id": "designer-session", + "collection": true, + "name": "Has Session AM", + "version": "1.0", + }, + }, + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "FrodoTestJourney12", + "description": "Test journey for custom nodes", + "enabled": true, + "entryNodeId": "8c4f5d43-d7f8-4ac2-8aae-d38f8f5cb9cb", + "identityResource": "managed/bravo_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "0fc7e34a-e3b5-4f5d-baea-ffde4ee63a97": { + "connections": { + "outcome": "461a364c-5884-44f6-87d9-ae749cc08f24", + }, + "displayName": "Login Page", + "nodeType": "PageNode", + "version": "1.0", + "x": 463, + "y": 80, + }, + "461a364c-5884-44f6-87d9-ae749cc08f24": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Data Store Decision", + "nodeType": "DataStoreDecisionNode", + "version": "1.0", + "x": 734, + "y": 161, + }, + "8c4f5d43-d7f8-4ac2-8aae-d38f8f5cb9cb": { + "connections": { + "False": "0fc7e34a-e3b5-4f5d-baea-ffde4ee63a97", + "True": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Has Session AM", + "nodeType": "designer-session", + "version": "1.0", + "x": 210, + "y": 161, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1014, + "y": 102, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 1014, + "y": 241, + }, + "startNode": { + "x": 70, + "y": 188, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "annotations": "{"forNodes":{},"structural":[]}", + "categories": "[]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/Login.journey.json 1`] = ` +{ + "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", + }, + "autocompleteValues": [], + "usernameAttribute": "userName", + "validateInput": false, + }, + }, + "nodes": { + "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", + }, + "76b5e15c-493c-47dc-b813-01cbc74c5a85": { + "_id": "76b5e15c-493c-47dc-b813-01cbc74c5a85", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "AccountLockoutNode", + "collection": true, + "name": "Account Lockout", + "version": "1.0", + }, + "lockAction": "LOCK", + }, + "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", + "nodeVersion": "1.0", + }, + { + "_id": "0c80c39b-4813-4e67-b4fb-5a0bba85f994", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode", + "nodeVersion": "1.0", + }, + ], + "pageDescription": { + "en": "New here? Create an account
Forgot username? Forgot password?", + }, + "pageHeader": { + "en": "Sign In", + }, + }, + "a30b1258-4c35-4ebe-90f3-c11fced9b1e4": { + "_id": "a30b1258-4c35-4ebe-90f3-c11fced9b1e4", + "_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, + }, + "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", + }, + "feecdfb1-386c-423f-b4a0-05cf6b05f783": { + "_id": "feecdfb1-386c-423f-b4a0-05cf6b05f783", + "_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, + }, + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "Login", + "description": "Platform Login Tree", + "enabled": true, + "entryNodeId": "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8", + "identityResource": "managed/bravo_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "33b24514-3e50-4180-8f08-ab6f4e51b07e": { + "connections": { + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Inner Tree Evaluator", + "nodeType": "InnerTreeEvaluatorNode", + "version": "1.0", + "x": 987, + "y": 117, + }, + "76b5e15c-493c-47dc-b813-01cbc74c5a85": { + "connections": { + "outcome": "e301438c-0bd0-429c-ab0c-66126501069a", + }, + "displayName": "Account Lockout", + "nodeType": "AccountLockoutNode", + "version": "1.0", + "x": 1035, + "y": 278.015625, + }, + "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8": { + "connections": { + "outcome": "a30b1258-4c35-4ebe-90f3-c11fced9b1e4", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 136, + "y": 59, + }, + "a30b1258-4c35-4ebe-90f3-c11fced9b1e4": { + "connections": { + "CANCELLED": "e301438c-0bd0-429c-ab0c-66126501069a", + "EXPIRED": "e301438c-0bd0-429c-ab0c-66126501069a", + "FALSE": "feecdfb1-386c-423f-b4a0-05cf6b05f783", + "LOCKED": "e301438c-0bd0-429c-ab0c-66126501069a", + "TRUE": "bba3e0d8-8525-4e82-bf48-ac17f7988917", + }, + "displayName": "Identity Store Decision", + "nodeType": "IdentityStoreDecisionNode", + "version": "1.0", + "x": 409, + "y": 120.015625, + }, + "bba3e0d8-8525-4e82-bf48-ac17f7988917": { + "connections": { + "outcome": "33b24514-3e50-4180-8f08-ab6f4e51b07e", + }, + "displayName": "Increment Login Count", + "nodeType": "IncrementLoginCountNode", + "version": "1.0", + "x": 690, + "y": 99, + }, + "feecdfb1-386c-423f-b4a0-05cf6b05f783": { + "connections": { + "Reject": "76b5e15c-493c-47dc-b813-01cbc74c5a85", + "Retry": "a12bc72f-ad97-4f1e-a789-a1fa3dd566c8", + }, + "displayName": "Retry Limit Decision", + "nodeType": "RetryLimitDecisionNode", + "version": "1.0", + "x": 739, + "y": 219.015625, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1239, + "y": 178, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 1198, + "y": 351, + }, + "startNode": { + "x": 50, + "y": 25, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "["Authentication"]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/PrestonTestJourney.journey.json 1`] = ` +{ + "trees": { + "PrestonTestJourney": { + "circlesOfTrust": {}, + "emailTemplates": {}, + "innerNodes": { + "8919c0d5-b40f-43df-b8f3-0934ae79920f": { + "_id": "8919c0d5-b40f-43df-b8f3-0934ae79920f", + "_outcomes": [ + { + "displayName": "True", + "id": "True", + }, + { + "displayName": "False", + "id": "False", + }, + ], + "_type": { + "_id": "designer-c605506774a848f7877b4d17a453bd39", + "collection": true, + "name": "Has Session", + "version": "1.0", + }, + }, + }, + "nodes": { + "03a7b135-8297-43a6-9e91-168e1a171c8f": { + "_id": "03a7b135-8297-43a6-9e91-168e1a171c8f", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "SetStateNode", + "collection": true, + "name": "Set State", + "version": "1.0", + }, + "attributes": { + "x": "6", + }, + }, + "3f988d7d-5980-492b-a43b-8476752e9d74": { + "_id": "3f988d7d-5980-492b-a43b-8476752e9d74", + "_outcomes": [ + { + "displayName": "Success", + "id": "Success", + }, + { + "displayName": "Script Error", + "id": "Script Error", + }, + ], + "_type": { + "_id": "designer-c6063fb2f5dc42dd9772bedc93898bd8", + "collection": true, + "name": "ALU", + "version": "1.0", + }, + "operator": "DIVIDE", + }, + "4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22": { + "_id": "4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "designer-8ab9f1aad4b4460a9c45d15fb148e221", + "collection": true, + "name": "Display State", + "version": "1.0", + }, + "displayFormat": "TABLE", + }, + "500c7716-aaf2-4cb8-95c8-12b9393c6783": { + "_id": "500c7716-aaf2-4cb8-95c8-12b9393c6783", + "_outcomes": [ + { + "displayName": "True", + "id": "True", + }, + { + "displayName": "False", + "id": "False", + }, + ], + "_type": { + "_id": "PageNode", + "collection": true, + "name": "Page Node", + "version": "1.0", + }, + "nodes": [ + { + "_id": "8919c0d5-b40f-43df-b8f3-0934ae79920f", + "displayName": "Has Session", + "nodeType": "designer-c605506774a848f7877b4d17a453bd39", + "nodeVersion": "1.0", + }, + ], + "pageDescription": {}, + "pageHeader": {}, + }, + "8322efbd-4e9f-494b-86da-d6a87419c269": { + "_id": "8322efbd-4e9f-494b-86da-d6a87419c269", + "_outcomes": [ + { + "displayName": "True", + "id": "true", + }, + { + "displayName": "False", + "id": "false", + }, + { + "displayName": "Unknown Device", + "id": "unknownDevice", + }, + ], + "_type": { + "_id": "DeviceMatchNode", + "collection": true, + "name": "Device Match", + "version": "1.0", + }, + "acceptableVariance": 0, + "expiration": 30, + "script": "01e1a3c0-038b-4c16-956a-6c9d89328cff", + "useScript": false, + }, + "89d588b3-0616-48aa-9997-aad991b81e45": { + "_id": "89d588b3-0616-48aa-9997-aad991b81e45", + "_outcomes": [ + { + "displayName": "outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "ScriptedDecisionNode", + "collection": true, + "name": "Scripted Decision", + "version": "1.0", + }, + "inputs": [ + "*", + ], + "outcomes": [ + "outcome", + ], + "outputs": [ + "*", + ], + "script": "c5717943-efcf-442e-9be0-dbe10817ba26", + }, + "c4f83038-1763-4434-95fe-cf10faca394d": { + "_id": "c4f83038-1763-4434-95fe-cf10faca394d", + "_outcomes": [ + { + "displayName": "Success", + "id": "Success", + }, + { + "displayName": "Script Error", + "id": "Script Error", + }, + ], + "_type": { + "_id": "designer-c15e2efb3deb4d4ea338c74a6440b69f", + "collection": true, + "name": "Vector ALU", + "version": "1.0", + }, + "a": [ + 1, + 2, + 3, + ], + "b": [ + 4, + 5, + 6, + ], + "operator": "CROSS", + }, + "f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5": { + "_id": "f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5", + "_outcomes": [ + { + "displayName": "True", + "id": "True", + }, + { + "displayName": "False", + "id": "False", + }, + ], + "_type": { + "_id": "designer-c605506774a848f7877b4d17a453bd39", + "collection": true, + "name": "Has Session", + "version": "1.0", + }, + }, + "fabed91f-4e31-4f72-9859-52d0fdeaae62": { + "_id": "fabed91f-4e31-4f72-9859-52d0fdeaae62", + "_outcomes": [ + { + "displayName": "Outcome", + "id": "outcome", + }, + ], + "_type": { + "_id": "SetStateNode", + "collection": true, + "name": "Set State", + "version": "1.0", + }, + "attributes": { + "y": "0", + }, + }, + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "PrestonTestJourney", + "enabled": true, + "entryNodeId": "f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5", + "identityResource": "managed/bravo_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "03a7b135-8297-43a6-9e91-168e1a171c8f": { + "connections": { + "outcome": "fabed91f-4e31-4f72-9859-52d0fdeaae62", + }, + "displayName": "Set X", + "nodeType": "SetStateNode", + "version": "1.0", + "x": 440, + "y": 80, + }, + "3f988d7d-5980-492b-a43b-8476752e9d74": { + "connections": { + "Script Error": "c4f83038-1763-4434-95fe-cf10faca394d", + "Success": "c4f83038-1763-4434-95fe-cf10faca394d", + }, + "displayName": "ALU", + "nodeType": "designer-c6063fb2f5dc42dd9772bedc93898bd8", + "version": "1.0", + "x": 900, + "y": 128.5, + }, + "4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22": { + "connections": { + "outcome": "e301438c-0bd0-429c-ab0c-66126501069a", + }, + "displayName": "Display State", + "nodeType": "designer-8ab9f1aad4b4460a9c45d15fb148e221", + "version": "1.0", + "x": 1635, + "y": 155, + }, + "500c7716-aaf2-4cb8-95c8-12b9393c6783": { + "connections": { + "False": "e301438c-0bd0-429c-ab0c-66126501069a", + "True": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 454, + "y": 370.6125030517578, + }, + "8322efbd-4e9f-494b-86da-d6a87419c269": { + "connections": {}, + "displayName": "Device Match", + "nodeType": "DeviceMatchNode", + "version": "1.0", + "x": 826, + "y": 398.6125030517578, + }, + "89d588b3-0616-48aa-9997-aad991b81e45": { + "connections": { + "outcome": "4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22", + }, + "displayName": "Preston Test Script", + "nodeType": "ScriptedDecisionNode", + "version": "1.0", + "x": 1360, + "y": 155, + }, + "c4f83038-1763-4434-95fe-cf10faca394d": { + "connections": { + "Script Error": "89d588b3-0616-48aa-9997-aad991b81e45", + "Success": "89d588b3-0616-48aa-9997-aad991b81e45", + }, + "displayName": "Vector ALU", + "nodeType": "designer-c15e2efb3deb4d4ea338c74a6440b69f", + "version": "1.0", + "x": 1130, + "y": 128.5, + }, + "f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5": { + "connections": { + "False": "03a7b135-8297-43a6-9e91-168e1a171c8f", + "True": "03a7b135-8297-43a6-9e91-168e1a171c8f", + "false": "e301438c-0bd0-429c-ab0c-66126501069a", + "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Has Session", + "nodeType": "designer-c605506774a848f7877b4d17a453bd39", + "version": "1.0", + "x": 210, + "y": 128.5, + }, + "fabed91f-4e31-4f72-9859-52d0fdeaae62": { + "connections": { + "outcome": "3f988d7d-5980-492b-a43b-8476752e9d74", + }, + "displayName": "Set Y", + "nodeType": "SetStateNode", + "version": "1.0", + "x": 670, + "y": 155, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 440, + "y": 231, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 1870, + "y": 155.5, + }, + "startNode": { + "x": 70, + "y": 155.5, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "annotations": "{"forNodes":{"c4f83038-1763-4434-95fe-cf10faca394d":[{"id":"ba5468f8-4e1e-4ce8-8aaa-3e5593bb4917","text":"Weird bug on this one, where if you try to change the values it won't let you save, so it needs to use default values to function","color":"blue","createdBy":"Preston Hales","createdAt":"2025-10-23T21:30:04.432Z"}]},"structural":[{"id":"12508814-8fae-4cd3-88fb-2b0b08296f4a","text":"This is my test journey!","color":"green","createdBy":"Preston Hales","x":198,"y":275,"w":200,"h":100}]}", + "categories": "[]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/ProgressiveProfile.journey.json 1`] = ` +{ + "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/bravo_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", + "nodeVersion": "1.0", + }, + ], + "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/bravo_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", + "version": "1.0", + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 357, + "y": 36, + }, + "a5aecad8-854a-4ed5-b719-ff6c90e858c0": { + "connections": { + "outcome": "423a959a-a1b9-498a-b0f7-596b6b6e775a", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/Registration.journey.json 1`] = ` +{ + "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", + }, + "autocompleteValues": [], + "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", + "nodeVersion": "1.0", + }, + { + "_id": "d3ce2036-1523-4ce8-b1a2-895a2a036667", + "displayName": "Attribute Collector", + "nodeType": "AttributeCollectorNode", + "nodeVersion": "1.0", + }, + { + "_id": "3d8709a1-f09f-4d1f-8094-2850e472c1db", + "displayName": "Platform Password", + "nodeType": "ValidatedPasswordNode", + "nodeVersion": "1.0", + }, + { + "_id": "120c69d3-90b4-4ad4-b7af-380e8b119340", + "displayName": "KBA Definition", + "nodeType": "KbaCreateNode", + "nodeVersion": "1.0", + }, + { + "_id": "b4a0e915-c15d-4b83-9c9d-18347d645976", + "displayName": "Accept Terms and Conditions", + "nodeType": "AcceptTermsAndConditionsNode", + "nodeVersion": "1.0", + }, + ], + "pageDescription": { + "en": "Signing up is fast and easy.
Already have an account? Sign In", + }, + "pageHeader": { + "en": "Sign Up", + }, + }, + "6b70de2f-a625-4957-93d9-37005e33e6e1": { + "_id": "6b70de2f-a625-4957-93d9-37005e33e6e1", + "_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/bravo_user", + }, + }, + "saml2Entities": {}, + "scripts": {}, + "socialIdentityProviders": {}, + "themes": [], + "tree": { + "_id": "Registration", + "description": "Platform Registration Tree", + "enabled": true, + "entryNodeId": "0c091c49-f3af-48fb-ac6f-07fba0499dd6", + "identityResource": "managed/bravo_user", + "innerTreeOnly": false, + "mustRun": false, + "noSession": false, + "nodes": { + "0c091c49-f3af-48fb-ac6f-07fba0499dd6": { + "connections": { + "outcome": "6b70de2f-a625-4957-93d9-37005e33e6e1", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 261, + "y": 168, + }, + "6b70de2f-a625-4957-93d9-37005e33e6e1": { + "connections": { + "outcome": "ad5dcbb3-7335-49b7-b3e7-7d850bb88237", + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "version": "1.0", + "x": 509, + "y": 305.015625, + }, + "97a15eb2-a015-4b6d-81a0-be78c3aa1a3b": { + "connections": { + "outcome": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0", + }, + "displayName": "Increment Login Count", + "nodeType": "IncrementLoginCountNode", + "version": "1.0", + "x": 895, + "y": 220, + }, + "ad5dcbb3-7335-49b7-b3e7-7d850bb88237": { + "connections": { + "CREATED": "97a15eb2-a015-4b6d-81a0-be78c3aa1a3b", + "FAILURE": "e301438c-0bd0-429c-ab0c-66126501069a", + }, + "displayName": "Create Object", + "nodeType": "CreateObjectNode", + "version": "1.0", + "x": 751, + "y": 282, + }, + }, + "staticNodes": { + "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": { + "x": 1119, + "y": 247, + }, + "e301438c-0bd0-429c-ab0c-66126501069a": { + "x": 955, + "y": 369, + }, + "startNode": { + "x": 50, + "y": 25, + }, + }, + "transactionalOnly": false, + "uiConfig": { + "categories": "["Registration"]", + }, + }, + "variable": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/ResetPassword.journey.json 1`] = ` +{ + "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/bravo_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", + "nodeVersion": "1.0", + }, + ], + "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", + "nodeVersion": "1.0", + }, + ], + "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/bravo_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", + "version": "1.0", + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 819, + "y": 61, + }, + "cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b": { + "connections": { + "outcome": "21b8ddf3-0203-4ae1-ab05-51cf3a3a707a", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 103, + "y": 50, + }, + "e4c752f9-c625-48c9-9644-a58802fa9e9c": { + "connections": { + "outcome": "989f0bf8-a328-4217-b82b-5275d79ca8bd", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/journey/UpdatePassword.journey.json 1`] = ` +{ + "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", + "nodeVersion": "1.0", + }, + ], + "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/bravo_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", + "nodeVersion": "1.0", + }, + ], + "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/bravo_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", + "version": "1.0", + "x": 288, + "y": 133, + }, + "20237b34-26cb-4a0b-958f-abb422290d42": { + "connections": { + "outcome": "7d1deabe-cd98-49c8-943f-ca12305775f3", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "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", + "version": "1.0", + "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", + "version": "1.0", + "x": 722, + "y": 45, + }, + "a3d97b53-e38a-4b24-aed0-a021050eb744": { + "connections": { + "outcome": "d018fcd1-4e22-4160-8c41-63bee51c9cb3", + }, + "displayName": "Email Suspend Node", + "nodeType": "EmailSuspendNode", + "version": "1.0", + "x": 659, + "y": 223, + }, + "d018fcd1-4e22-4160-8c41-63bee51c9cb3": { + "connections": { + "outcome": "3990ce1f-cce6-435b-ae1c-f138e89411c1", + }, + "displayName": "Page Node", + "nodeType": "PageNode", + "version": "1.0", + "x": 943, + "y": 30, + }, + "d1b79744-493a-44fe-bc26-7d324a8caa4e": { + "connections": { + "outcome": "0f0904e6-1da3-4cdb-9abf-0d2545016fab", + }, + "displayName": "Get Session Data", + "nodeType": "SessionDataNode", + "version": "1.0", + "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": {}, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/oauth2.app/RCSClient.oauth2.app.json 1`] = ` +{ + "application": { + "RCSClient": { + "_id": "RCSClient", + "_provider": { + "_id": "", + "_type": { + "_id": "oauth-oidc", + "collection": false, + "name": "OAuth2 Provider", + }, + "advancedOAuth2Config": { + "acceptAudienceParametersInTokenExchangeRequests": false, + "allowClientCredentialsInTokenRequestQueryParameters": true, + "allowedAudienceValues": [], + "authenticationAttributes": [ + "uid", + ], + "codeVerifierEnforced": "false", + "defaultScopes": [ + "address", + "phone", + "openid", + "profile", + "email", + ], + "displayNameAttribute": "cn", + "enableApplicationContext": false, + "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": {}, + "minMaxAge": 60, + "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, + }, + "aiAgentsConfig": { + "aiAgentsEnabled": 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": "21138ab1-0621-4466-b18f-670bfcbabca7", + "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": "3e31996b-4522-44a2-b360-0851cece3854", + "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, + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/policyset/customerApplicationPolicySet.policyset.json 1`] = ` +{ + "policyset": { + "customerApplicationPolicySet": { + "applicationType": "authenticationApplicationType", + "attributeNames": [], + "conditions": [ + "Policy", + "LEAuthLevel", + "AuthenticateToService", + "Script", + "SimpleTime", + "OR", + "AMIdentityMembership", + "IPv6", + "IPv4", + "Expiration", + "SessionProperty", + "Json", + "IdmUser", + "AuthScheme", + "AuthLevel", + "NOT", + "Transaction", + "AuthenticateToRealm", + "ResourceEnvIP", + "AND", + "LDAPFilter", + "ClientId", + "OAuth2Scope", + "Session", + ], + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1774473249128, + "description": "Contains policies to be used by the customer application policy decision node.", + "displayName": "Customer Application Policy Set", + "editable": true, + "entitlementCombiner": "DenyOverride", + "name": "customerApplicationPolicySet", + "resourceComparator": null, + "resourceTypeUuids": [ + "authenticationResourceType", + ], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "Policy", + "ResourceOwnerInGroup", + "NOT", + "OR", + "JwtClaim", + "AuthenticatedUsers", + "AND", + "Uma", + "NONE", + "Identity", + "ResourceOwnerPresent", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/policyset/oauth2Scopes.policyset.json 1`] = ` +{ + "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", + "name": "oauth2Scopes", + "resourceComparator": null, + "resourceTypeUuids": [ + "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b", + ], + "saveIndex": null, + "searchIndex": null, + "subjects": [ + "AuthenticatedUsers", + "NOT", + "Identity", + "OR", + "AND", + "NONE", + "JwtClaim", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/resourcetype/Authentication.resourcetype.json 1`] = ` +{ + "resourcetype": { + "authenticationResourceType": { + "actions": { + "Access": true, + }, + "createdBy": "id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org", + "creationDate": 1774473244108, + "description": "An immutable Authentication Resource Type available to OpenAM Policies.", + "name": "Authentication", + "patterns": [ + "*", + ], + "uuid": "authenticationResourceType", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/resourcetype/OAuth2-Scope.resourcetype.json 1`] = ` +{ + "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.", + "name": "OAuth2 Scope", + "patterns": [ + "*://*:*/*", + "*://*:*/*?*", + "*", + ], + "uuid": "d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/resourcetype/URL.resourcetype.json 1`] = ` +{ + "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.", + "name": "URL", + "patterns": [ + "*://*:*/*", + "*://*:*/*?*", + ], + "uuid": "76656a38-5f8e-401b-83aa-4ccb74ce88d2", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Bravo-OAuth2-Access-Token-Modification-Script.script.js 1`] = ` +"/* + * 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. +}()); +*/ +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Bravo-OAuth2-Access-Token-Modification-Script.script.json 1`] = ` +{ + "script": { + "21138ab1-0621-4466-b18f-670bfcbabca7": { + "_id": "21138ab1-0621-4466-b18f-670bfcbabca7", + "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Default bravo realm script for OAuth2 Access Token Modification", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "Bravo OAuth2 Access Token Modification Script", + "script": "file://Bravo-OAuth2-Access-Token-Modification-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Bravo-OIDC-Claims-Script.script.js 1`] = ` +"/* + * 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; +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Bravo-OIDC-Claims-Script.script.json 1`] = ` +{ + "script": { + "3e31996b-4522-44a2-b360-0851cece3854": { + "_id": "3e31996b-4522-44a2-b360-0851cece3854", + "context": "OIDC_CLAIMS", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Default bravo realm script for OIDC claims", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "Bravo OIDC Claims Script", + "script": "file://Bravo-OIDC-Claims-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Bravo-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.js 1`] = ` +"(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); + } +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Bravo-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.json 1`] = ` +{ + "script": { + "449ef739-828e-42b4-92d6-0456d378671e": { + "_id": "449ef739-828e-42b4-92d6-0456d378671e", + "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Used by endUserUIClient", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "Bravo endUserUIClient OAuth2 Access Token Modification Script", + "script": "file://Bravo-endUserUIClient-OAuth2-Access-Token-Modification-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Bravo-endUserUIClient-OIDC-Claims-Script.script.js 1`] = ` +"/* + * 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; +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Bravo-endUserUIClient-OIDC-Claims-Script.script.json 1`] = ` +{ + "script": { + "d3ced49b-50cd-4ee9-bd8b-33a46f367fb1": { + "_id": "d3ced49b-50cd-4ee9-bd8b-33a46f367fb1", + "context": "OIDC_CLAIMS", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Used by endUserUIClient", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "Bravo endUserUIClient OIDC Claims Script", + "script": "file://Bravo-endUserUIClient-OIDC-Claims-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.js 1`] = ` +"/* + * 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 +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.json 1`] = ` +{ + "script": { + "c234ba0b-58a1-4cfd-9567-09edde980745": { + "_id": "c234ba0b-58a1-4cfd-9567-09edde980745", + "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "createdBy": "null", + "creationDate": 1433147666269, + "default": false, + "description": "Internal token modification script", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "ForgeRock Internal: OAuth2 Access Token Modification Script", + "script": "file://ForgeRock-Internal-OAuth2-Access-Token-Modification-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/ForgeRock-Internal-OIDC-Claims-Script.script.js 1`] = ` +"/* + * 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; +}()); +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/ForgeRock-Internal-OIDC-Claims-Script.script.json 1`] = ` +{ + "script": { + "1f389a3d-21cf-417c-a6d3-42ea620071f0": { + "_id": "1f389a3d-21cf-417c-a6d3-42ea620071f0", + "context": "OIDC_CLAIMS", + "createdBy": "null", + "creationDate": 0, + "default": false, + "description": "Internal OIDC Claims script", + "evaluatorVersion": "1.0", + "language": "JAVASCRIPT", + "name": "ForgeRock Internal: OIDC Claims Script", + "script": "file://ForgeRock-Internal-OIDC-Claims-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/OAuth2-Client-Credentials-Default.script.js 1`] = ` +"/* + * 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. + */ + +/** + * Example cache loader script for performing an OAuth2 client credential flow + * to retrieve an access token. This script is called when a cache entry is + * requested that has not yet been loaded. The script returns the \`value\` + * in the key object. + * + * To utilise this cache loader in a scripted decision node, consider the following: + * + * var accessToken = cacheManager.named("oauth2_client_credentials").get({ + * url: "http://somewhere.com/.../access_token", + * clientId: "some-client", + * clientSecretLabel: "esv.secret.label", + * scope: "scope1 scope2" + * }).access_token; + * + * ... + * + * + * @param key {object} of string to string + * @returns json response {object} + */ +function load(key) { + var url = key.url; + var clientId = key.clientId; + var clientSecret = systemEnv.getProperty(key.clientSecretLabel); + var scope = key.scope; + + var options = { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + form: { + grant_type: "client_credentials", + client_id: clientId, + client_secret: clientSecret, + scope: scope + } + } + + var response = httpClient.send(url, options).get(); + if (!response || response.status != 200) { + logger.error("Bad response from " + url); + throw Error("Bad response from " + url); + } + return response.json(); +} +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/OAuth2-Client-Credentials-Default.script.json 1`] = ` +{ + "script": { + "24cb761e-0123-4078-a87c-3f1e2b25451b": { + "_id": "24cb761e-0123-4078-a87c-3f1e2b25451b", + "context": "CACHE_LOADER", + "createdBy": "id=amadmin,ou=user,ou=am-config", + "creationDate": 1756459006279, + "default": false, + "description": "Example cache loader script for performing an OAuth2 client credential flow to retrieve an access token. This script is called when a cache entry is requested that has not yet been loaded.", + "evaluatorVersion": "2.0", + "language": "JAVASCRIPT", + "name": "OAuth2 Client Credentials Default", + "script": "file://OAuth2-Client-Credentials-Default.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Preston-Test-Script.script.js 1`] = ` +"nodeState.putTransient('x', 'Transient X'); +nodeState.putTransient('y', 'Transient Y'); +nodeState.putTransient('c', 'Transient C'); +outcome="outcome"; +" +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/script/Preston-Test-Script.script.json 1`] = ` +{ + "script": { + "c5717943-efcf-442e-9be0-dbe10817ba26": { + "_id": "c5717943-efcf-442e-9be0-dbe10817ba26", + "context": "AUTHENTICATION_TREE_DECISION_NODE", + "createdBy": "id=0300848e-5223-42cd-bccb-765728cdeb54,ou=user,ou=am-config", + "creationDate": 1763051125470, + "default": false, + "description": null, + "evaluatorVersion": "2.0", + "language": "JAVASCRIPT", + "name": "Preston Test Script", + "script": "file://Preston-Test-Script.script.js", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/secretstore/ESV.secretstore.json 1`] = ` +{ + "secretstore": { + "ESV": { + "_id": "ESV", + "_type": { + "_id": "GoogleSecretManagerSecretStoreProvider", + "collection": true, + "name": "Google Secret Manager", + }, + "expiryDurationSeconds": 600, + "mappings": [], + "project": "&{google.project.id}", + "secretFormat": "PEM", + "serviceAccount": "default", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/service/SocialIdentityProviders.service.json 1`] = ` +{ + "service": { + "SocialIdentityProviders": { + "_id": "", + "_type": { + "_id": "SocialIdentityProviders", + "collection": false, + "name": "Social Identity Provider Service", + }, + "enabled": true, + "location": "/bravo", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/service/baseurl.service.json 1`] = ` +{ + "service": { + "baseurl": { + "_id": "", + "_type": { + "_id": "baseurl", + "collection": false, + "name": "Base URL Source", + }, + "contextPath": "/am", + "fixedValue": "https://&{fqdn}", + "location": "/bravo", + "nextDescendents": [], + "source": "REQUEST_VALUES", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/service/oauth-oidc.service.json 1`] = ` +{ + "service": { + "oauth-oidc": { + "_id": "", + "_type": { + "_id": "oauth-oidc", + "collection": false, + "name": "OAuth2 Provider", + }, + "advancedOAuth2Config": { + "acceptAudienceParametersInTokenExchangeRequests": false, + "allowClientCredentialsInTokenRequestQueryParameters": true, + "allowedAudienceValues": [], + "authenticationAttributes": [ + "uid", + ], + "codeVerifierEnforced": "false", + "defaultScopes": [ + "address", + "phone", + "openid", + "profile", + "email", + ], + "displayNameAttribute": "cn", + "enableApplicationContext": false, + "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": {}, + "minMaxAge": 60, + "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, + }, + "aiAgentsConfig": { + "aiAgentsEnabled": 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, + }, + "location": "/bravo", + "nextDescendents": [], + "pluginsConfig": { + "accessTokenEnricherClass": "org.forgerock.openam.oauth2.OpenAMScopeValidator", + "accessTokenModificationPluginType": "SCRIPTED", + "accessTokenModificationScript": "21138ab1-0621-4466-b18f-670bfcbabca7", + "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": "3e31996b-4522-44a2-b360-0851cece3854", + "userCodeGeneratorClass": "org.forgerock.oauth2.core.plugins.registry.DefaultUserCodeGenerator", + "validateScopeClass": "org.forgerock.openam.oauth2.OpenAMScopeValidator", + "validateScopePluginType": "JAVA", + "validateScopeScript": "[Empty]", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/service/policyconfiguration.service.json 1`] = ` +{ + "service": { + "policyconfiguration": { + "_id": "", + "_type": { + "_id": "policyconfiguration", + "collection": false, + "name": "Policy Configuration", + }, + "bindDn": "&{am.stores.user.username}", + "bindPassword": { + "$string": "&{am.stores.user.password}", + }, + "checkIfResourceTypeExists": true, + "connectionPoolMaximumSize": 10, + "connectionPoolMinimumSize": 1, + "ldapServer": [ + "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", + ], + "location": "/bravo", + "maximumSearchResults": 100, + "mtlsEnabled": false, + "nextDescendents": [], + "policyHeartbeatInterval": 10, + "policyHeartbeatTimeUnit": "SECONDS", + "realmSearchFilter": "(objectclass=sunismanagedorganization)", + "searchTimeout": 5, + "sslEnabled": { + "$bool": "&{am.stores.ssl.enabled}", + }, + "subjectsResultTTL": 10, + "userAliasEnabled": false, + "usersBaseDn": "ou=identities", + "usersSearchAttribute": "uid", + "usersSearchFilter": "(objectclass=inetorgperson)", + "usersSearchScope": "SCOPE_SUB", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/service/selfServiceTrees.service.json 1`] = ` +{ + "service": { + "selfServiceTrees": { + "_id": "", + "_type": { + "_id": "selfServiceTrees", + "collection": false, + "name": "Self Service Trees", + }, + "enabled": true, + "location": "/bravo", + "nextDescendents": [], + "treeMapping": { + "forgottenUsername": "ForgottenUsername", + "registration": "Registration", + "resetPassword": "ResetPassword", + "updatePassword": "UpdatePassword", + }, + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/service/validation.service.json 1`] = ` +{ + "service": { + "validation": { + "_id": "", + "_type": { + "_id": "validation", + "collection": false, + "name": "Validation Service", + }, + "location": "/bravo", + "nextDescendents": [], + "validGotoDestinations": [ + "&{am.server.protocol|https}://&{fqdn}/*?*", + ], + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/theme/Contrast.theme.json 1`] = ` +{ + "theme": { + "bf4828bd-6e24-41ba-8773-0a4a349399d3": { + "_id": "bf4828bd-6e24-41ba-8773-0a4a349399d3", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#000000", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "accountCardInputSelectHoverColor": "#f6f8fa", + "accountCardInputTextColor": "#23282e", + "accountCardOuterBorderColor": "#e7eef4", + "accountCardShadow": 3, + "accountCardTabActiveBorderColor": "#109cf1", + "accountCardTabActiveColor": "#e4f4fd", + "accountCardTextColor": "#5e6d82", + "accountFooter": "", + "accountFooterEnabled": false, + "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, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#000000", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "0", + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "isDefault": false, + "journeyA11yAddFallbackErrorHeading": true, + "journeyCardBackgroundColor": "#ffffff", + "journeyCardBorderRadius": 4, + "journeyCardHeaderBackgroundColor": "#ffffff", + "journeyCardShadow": 3, + "journeyCardTextColor": "#5e6d82", + "journeyCardTitleColor": "#23282e", + "journeyFloatingLabels": true, + "journeyFocusElement": "header", + "journeyFocusFirstFocusableItemEnabled": false, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyFooterScriptTag": "", + "journeyFooterScriptTagEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#000000", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "card", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#000000", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#000000", + "linkColorOnDark": "#109cf1", + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/theme/Highlander.theme.json 1`] = ` +{ + "theme": { + "f2bdd040-2e46-4602-a0ab-24ed52103cdc": { + "_id": "f2bdd040-2e46-4602-a0ab-24ed52103cdc", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#EB0A1E", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "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, + }, + "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, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "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": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#EB0A1E", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "card", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#C60819", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#EB0A1E", + "linkColorOnDark": "#109cf1", + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/theme/Robroy.theme.json 1`] = ` +{ + "theme": { + "62ac2a64-9db9-4f0a-a7e4-74f3d662bc42": { + "_id": "62ac2a64-9db9-4f0a-a7e4-74f3d662bc42", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#5AA625", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "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, + }, + "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, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "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": "
+ +
+", + "journeyHeaderEnabled": true, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#5AA625", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": true, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "justified-right", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#49871E", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#5AA625", + "linkColorOnDark": "#109cf1", + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/theme/Starter-Theme.theme.json 1`] = ` +{ + "theme": { + "b7d8de5a-f788-4ac8-b80a-3220a5f977ec": { + "_id": "b7d8de5a-f788-4ac8-b80a-3220a5f977ec", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#324054", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "accountCardInputSelectHoverColor": "#f6f8fa", + "accountCardInputTextColor": "#23282e", + "accountCardOuterBorderColor": "#e7eef4", + "accountCardShadow": 3, + "accountCardTabActiveBorderColor": "#109cf1", + "accountCardTabActiveColor": "#e4f4fd", + "accountCardTextColor": "#5e6d82", + "accountFooter": "", + "accountFooterEnabled": false, + "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, + }, + }, + }, + "consent": { + "enabled": false, + }, + "oauthApplications": { + "enabled": false, + }, + "personalInformation": { + "enabled": true, + }, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "trustedDevices": { + "enabled": true, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#324054", + "backgroundImage": "", + "bodyText": "#23282e", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": 5, + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "isDefault": true, + "journeyA11yAddFallbackErrorHeading": true, + "journeyCardBackgroundColor": "#ffffff", + "journeyCardBorderRadius": 4, + "journeyCardHeaderBackgroundColor": "#ffffff", + "journeyCardShadow": 3, + "journeyCardTextColor": "#5e6d82", + "journeyCardTitleColor": "#23282e", + "journeyFloatingLabels": true, + "journeyFocusElement": "header", + "journeyFocusFirstFocusableItemEnabled": false, + "journeyFooter": "", + "journeyFooterEnabled": false, + "journeyFooterScriptTag": "", + "journeyFooterScriptTagEnabled": false, + "journeyHeader": "
Header Content
", + "journeyHeaderEnabled": false, + "journeyHeaderSkipLinkEnabled": false, + "journeyInputBackgroundColor": "#ffffff", + "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#324054", + "journeyInputLabelColor": "#5e6d82", + "journeyInputSelectColor": "#e4f4fd", + "journeyInputSelectHoverColor": "#f6f8fa", + "journeyInputTextColor": "#23282e", + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, + "journeyJustifiedContentMobileViewEnabled": false, + "journeyLayout": "card", + "journeyRememberMeEnabled": false, + "journeyRememberMeLabel": "", + "journeySignInButtonPosition": "flex-column", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#0c85cf", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#109cf1", + "linkColorOnDark": "#109cf1", + "linkedTrees": [], + "logo": "img/placeholder.95d0bb8e.svg", + "logoAltText": "", + "logoEnabled": true, + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -AxND exportAllTestDir10": should export all separated files with extracted idm scripts.: exportAllTestDir10/realm/root-bravo/theme/Zardoz.theme.json 1`] = ` +{ + "theme": { + "8dfd6c93-972a-4786-950d-79904f66af4b": { + "_id": "8dfd6c93-972a-4786-950d-79904f66af4b", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#009C80", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "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, + }, + "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, + }, + }, + "accountTableRowHoverColor": "#f6f8fa", + "backgroundColor": "#FFFFFF", + "backgroundImage": "", + "bodyText": "#5E6D82", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "50", + "dangerColor": "#f7685b", + "darkColor": "#23282e", + "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", + "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", + "journeyInputFocusBorderColor": "#009C80", + "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, + "lightColor": "#f6f8fa", + "linkActiveColor": "#007661", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#009C80", + "linkColorOnDark": "#109cf1", + "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", + "successColor": "#2ed47a", + "switchBackgroundColor": "#939393", + "textColor": "#ffffff", + "topBarBackgroundColor": "#ffffff", + "topBarBorderColor": "#e7eef4", + "topBarHeaderColor": "#23282e", + "topBarTextColor": "#69788b", + "warningColor": "#ffb946", + }, + }, +} +`; + +exports[`frodo config export "frodo config export -RAD exportAllTestDir5 --include-active-values": should export everything including secret values into separate files in the directory exportAllTestDir5 1`] = `0`; + +exports[`frodo config export "frodo config export -RAD exportAllTestDir5 --include-active-values": should export everything including secret values into separate files in the directory exportAllTestDir5 2`] = `""`; exports[`frodo config export "frodo config export -adND exportAllTestDir4": should export everything, including default scripts, to a single file 1`] = `0`; diff --git a/test/e2e/__snapshots__/config-import.e2e.test.js.snap b/test/e2e/__snapshots__/config-import.e2e.test.js.snap index 0725ed988..abdbce8f5 100644 --- a/test/e2e/__snapshots__/config-import.e2e.test.js.snap +++ b/test/e2e/__snapshots__/config-import.e2e.test.js.snap @@ -112,6 +112,233 @@ Error Importing Services " `; +exports[`frodo config import "frodo config import -AD test/e2e/exports/all-separate/forgeops --type forgeops" Import all forgeops config with extracted idm scripts. 1`] = ` +"Errored ➞ PUT https://nightly.gcp.forgeops.com/openidm/config/mapping/managedUser_managedGroup _PollyError: [Polly] [adapter:node-http] Recording for the following request is not found and \`recordIfMissing\` is \`false\`. +{ + "url": "https://nightly.gcp.forgeops.com/openidm/config/mapping/managedUser_managedGroup", + "method": "PUT", + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "user-agent": "@rockcarver/frodo-lib/4.0.0-30", + "x-forgerock-transactionid": "frodo-1269e4c2-d4e0-4578-b62b-3601076fd8f8", + "authorization": "Bearer ", + "content-length": "939", + "accept-encoding": "gzip, compress, deflate, br", + "host": "nightly.gcp.forgeops.com" + }, + "body": "{\\"_id\\":\\"mapping/managedUser_managedGroup\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedUser_managedGroup\\",\\"icon\\":null,\\"name\\":\\"managedUser_managedGroup\\",\\"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\\":\\"city\\",\\"target\\":\\"name\\",\\"transform\\":{\\"globals\\":{},\\"source\\":\\"// extract script test \\\\nsource\\\\n\\",\\"type\\":\\"text/javascript\\"}}],\\"source\\":\\"managed/user\\",\\"target\\":\\"managed/group\\"}", + "recordingName": "config/import/0_AD_type/openidm", + "id": "68da4eee6cdfa1199ce90abc7fccda69", + "order": 0, + "identifiers": { + "method": "PUT", + "body": "{\\"_id\\":\\"mapping/managedUser_managedGroup\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedUser_managedGroup\\",\\"icon\\":null,\\"name\\":\\"managedUser_managedGroup\\",\\"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\\":\\"city\\",\\"target\\":\\"name\\",\\"transform\\":{\\"globals\\":{},\\"source\\":\\"// extract script test \\\\nsource\\\\n\\",\\"type\\":\\"text/javascript\\"}}],\\"source\\":\\"managed/user\\",\\"target\\":\\"managed/group\\"}", + "url": "/openidm/config/mapping/managedUser_managedGroup" + }, + "config": { + "mode": "replay", + "adapters": [ + "node-http" + ], + "logLevel": "warn", + "flushRequestsOnStop": true, + "recordIfMissing": false, + "recordFailedRequests": true, + "expiresIn": null, + "expiryStrategy": "warn", + "matchRequestsBy": { + "method": true, + "headers": false, + "body": true, + "order": false, + "url": { + "protocol": false, + "username": false, + "password": false, + "hostname": false, + "port": false, + "pathname": true, + "query": true, + "hash": true + } + } + } +} + at assert (/snapshot/dist/app.cjs:142821:11) + at FrodoNodeHttpAdapter.assert (/snapshot/dist/app.cjs:156602:5) + at FrodoNodeHttpAdapter.replay (/snapshot/dist/app.cjs:156591:10) + at async FrodoNodeHttpAdapter.handleRequest (/snapshot/dist/app.cjs:156475:7) +Errored ➞ PUT https://nightly.gcp.forgeops.com/openidm/config/sync _PollyError: [Polly] [adapter:node-http] Recording for the following request is not found and \`recordIfMissing\` is \`false\`. +{ + "url": "https://nightly.gcp.forgeops.com/openidm/config/sync", + "method": "PUT", + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "user-agent": "@rockcarver/frodo-lib/4.0.0-30", + "x-forgerock-transactionid": "frodo-1269e4c2-d4e0-4578-b62b-3601076fd8f8", + "authorization": "Bearer ", + "content-length": "1852", + "accept-encoding": "gzip, compress, deflate, br", + "host": "nightly.gcp.forgeops.com" + }, + "body": "{\\"mappings\\":[{\\"_id\\":\\"sync/managedUser_managedGroup\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedUser_managedGroup\\",\\"icon\\":null,\\"name\\":\\"managedUser_managedGroup\\",\\"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\\":[{\\"target\\":\\"name\\"}],\\"source\\":\\"managed/user\\",\\"syncAfter\\":[],\\"target\\":\\"managed/group\\"},{\\"_id\\":\\"sync/managedRole_managedUser\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedRole_managedUser\\",\\"icon\\":null,\\"name\\":\\"managedRole_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\\":\\"name\\",\\"target\\":\\"mail\\",\\"transform\\":{\\"globals\\":{},\\"source\\":\\"//test script\\\\nsource\\\\n\\",\\"type\\":\\"text/javascript\\"}},{\\"target\\":\\"sn\\"},{\\"target\\":\\"givenName\\"},{\\"target\\":\\"userName\\"}],\\"source\\":\\"managed/role\\",\\"syncAfter\\":[],\\"target\\":\\"managed/user\\"}]}", + "recordingName": "config/import/0_AD_type/openidm", + "id": "8e76b5843e7a4d10d574d1cbf0931238", + "order": 0, + "identifiers": { + "method": "PUT", + "body": "{\\"mappings\\":[{\\"_id\\":\\"sync/managedUser_managedGroup\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedUser_managedGroup\\",\\"icon\\":null,\\"name\\":\\"managedUser_managedGroup\\",\\"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\\":[{\\"target\\":\\"name\\"}],\\"source\\":\\"managed/user\\",\\"syncAfter\\":[],\\"target\\":\\"managed/group\\"},{\\"_id\\":\\"sync/managedRole_managedUser\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedRole_managedUser\\",\\"icon\\":null,\\"name\\":\\"managedRole_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\\":\\"name\\",\\"target\\":\\"mail\\",\\"transform\\":{\\"globals\\":{},\\"source\\":\\"//test script\\\\nsource\\\\n\\",\\"type\\":\\"text/javascript\\"}},{\\"target\\":\\"sn\\"},{\\"target\\":\\"givenName\\"},{\\"target\\":\\"userName\\"}],\\"source\\":\\"managed/role\\",\\"syncAfter\\":[],\\"target\\":\\"managed/user\\"}]}", + "url": "/openidm/config/sync" + }, + "config": { + "mode": "replay", + "adapters": [ + "node-http" + ], + "logLevel": "warn", + "flushRequestsOnStop": true, + "recordIfMissing": false, + "recordFailedRequests": true, + "expiresIn": null, + "expiryStrategy": "warn", + "matchRequestsBy": { + "method": true, + "headers": false, + "body": true, + "order": false, + "url": { + "protocol": false, + "username": false, + "password": false, + "hostname": false, + "port": false, + "pathname": true, + "query": true, + "hash": true + } + } + } +} + at assert (/snapshot/dist/app.cjs:142821:11) + at FrodoNodeHttpAdapter.assert (/snapshot/dist/app.cjs:156602:5) + at FrodoNodeHttpAdapter.replay (/snapshot/dist/app.cjs:156591:10) + at async FrodoNodeHttpAdapter.handleRequest (/snapshot/dist/app.cjs:156475:7) +Error Importing Mappings + Error importing mappings + Error updating mapping mapping/managedUser_managedGroup + [Polly] [adapter:node-http] Recording for the following request is not found and \`recordIfMissing\` is \`false\`. +{ + "url": "https://nightly.gcp.forgeops.com/openidm/config/mapping/managedUser_managedGroup", + "method": "PUT", + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "user-agent": "@rockcarver/frodo-lib/4.0.0-30", + "x-forgerock-transactionid": "frodo-1269e4c2-d4e0-4578-b62b-3601076fd8f8", + "authorization": "Bearer ", + "content-length": "939", + "accept-encoding": "gzip, compress, deflate, br", + "host": "nightly.gcp.forgeops.com" + }, + "body": "{\\"_id\\":\\"mapping/managedUser_managedGroup\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedUser_managedGroup\\",\\"icon\\":null,\\"name\\":\\"managedUser_managedGroup\\",\\"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\\":\\"city\\",\\"target\\":\\"name\\",\\"transform\\":{\\"globals\\":{},\\"source\\":\\"// extract script test \\\\nsource\\\\n\\",\\"type\\":\\"text/javascript\\"}}],\\"source\\":\\"managed/user\\",\\"target\\":\\"managed/group\\"}", + "recordingName": "config/import/0_AD_type/openidm", + "id": "68da4eee6cdfa1199ce90abc7fccda69", + "order": 0, + "identifiers": { + "method": "PUT", + "body": "{\\"_id\\":\\"mapping/managedUser_managedGroup\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedUser_managedGroup\\",\\"icon\\":null,\\"name\\":\\"managedUser_managedGroup\\",\\"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\\":\\"city\\",\\"target\\":\\"name\\",\\"transform\\":{\\"globals\\":{},\\"source\\":\\"// extract script test \\\\nsource\\\\n\\",\\"type\\":\\"text/javascript\\"}}],\\"source\\":\\"managed/user\\",\\"target\\":\\"managed/group\\"}", + "url": "/openidm/config/mapping/managedUser_managedGroup" + }, + "config": { + "mode": "replay", + "adapters": [ + "node-http" + ], + "logLevel": "warn", + "flushRequestsOnStop": true, + "recordIfMissing": false, + "recordFailedRequests": true, + "expiresIn": null, + "expiryStrategy": "warn", + "matchRequestsBy": { + "method": true, + "headers": false, + "body": true, + "order": false, + "url": { + "protocol": false, + "username": false, + "password": false, + "hostname": false, + "port": false, + "pathname": true, + "query": true, + "hash": true + } + } + } +} + Error updating sync mapping sync/managedRole_managedUser + [Polly] [adapter:node-http] Recording for the following request is not found and \`recordIfMissing\` is \`false\`. +{ + "url": "https://nightly.gcp.forgeops.com/openidm/config/sync", + "method": "PUT", + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "user-agent": "@rockcarver/frodo-lib/4.0.0-30", + "x-forgerock-transactionid": "frodo-1269e4c2-d4e0-4578-b62b-3601076fd8f8", + "authorization": "Bearer ", + "content-length": "1852", + "accept-encoding": "gzip, compress, deflate, br", + "host": "nightly.gcp.forgeops.com" + }, + "body": "{\\"mappings\\":[{\\"_id\\":\\"sync/managedUser_managedGroup\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedUser_managedGroup\\",\\"icon\\":null,\\"name\\":\\"managedUser_managedGroup\\",\\"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\\":[{\\"target\\":\\"name\\"}],\\"source\\":\\"managed/user\\",\\"syncAfter\\":[],\\"target\\":\\"managed/group\\"},{\\"_id\\":\\"sync/managedRole_managedUser\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedRole_managedUser\\",\\"icon\\":null,\\"name\\":\\"managedRole_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\\":\\"name\\",\\"target\\":\\"mail\\",\\"transform\\":{\\"globals\\":{},\\"source\\":\\"//test script\\\\nsource\\\\n\\",\\"type\\":\\"text/javascript\\"}},{\\"target\\":\\"sn\\"},{\\"target\\":\\"givenName\\"},{\\"target\\":\\"userName\\"}],\\"source\\":\\"managed/role\\",\\"syncAfter\\":[],\\"target\\":\\"managed/user\\"}]}", + "recordingName": "config/import/0_AD_type/openidm", + "id": "8e76b5843e7a4d10d574d1cbf0931238", + "order": 0, + "identifiers": { + "method": "PUT", + "body": "{\\"mappings\\":[{\\"_id\\":\\"sync/managedUser_managedGroup\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedUser_managedGroup\\",\\"icon\\":null,\\"name\\":\\"managedUser_managedGroup\\",\\"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\\":[{\\"target\\":\\"name\\"}],\\"source\\":\\"managed/user\\",\\"syncAfter\\":[],\\"target\\":\\"managed/group\\"},{\\"_id\\":\\"sync/managedRole_managedUser\\",\\"consentRequired\\":false,\\"displayName\\":\\"managedRole_managedUser\\",\\"icon\\":null,\\"name\\":\\"managedRole_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\\":\\"name\\",\\"target\\":\\"mail\\",\\"transform\\":{\\"globals\\":{},\\"source\\":\\"//test script\\\\nsource\\\\n\\",\\"type\\":\\"text/javascript\\"}},{\\"target\\":\\"sn\\"},{\\"target\\":\\"givenName\\"},{\\"target\\":\\"userName\\"}],\\"source\\":\\"managed/role\\",\\"syncAfter\\":[],\\"target\\":\\"managed/user\\"}]}", + "url": "/openidm/config/sync" + }, + "config": { + "mode": "replay", + "adapters": [ + "node-http" + ], + "logLevel": "warn", + "flushRequestsOnStop": true, + "recordIfMissing": false, + "recordFailedRequests": true, + "expiresIn": null, + "expiryStrategy": "warn", + "matchRequestsBy": { + "method": true, + "headers": false, + "body": true, + "order": false, + "url": { + "protocol": false, + "username": false, + "password": false, + "hostname": false, + "port": false, + "pathname": true, + "query": true, + "hash": true + } + } + } +} +✔ Finished Importing Everything to global! +✔ Finished Importing Everything to root realm! +✔ Finished Importing all other AM config entities! +" +`; + exports[`frodo config import "frodo config import -AdD test/e2e/exports/all-separate/classic -m classic" Import everything from directory "test/e2e/exports/all-separate/classic" 1`] = ` "Connected to http://openam-frodo-dev.classic.com:8080/am [/] as user amAdmin Error Importing Authentication Settings diff --git a/test/e2e/__snapshots__/idm-export.e2e.test.js.snap b/test/e2e/__snapshots__/idm-export.e2e.test.js.snap index 6c37ae75d..cefbe0c4f 100644 --- a/test/e2e/__snapshots__/idm-export.e2e.test.js.snap +++ b/test/e2e/__snapshots__/idm-export.e2e.test.js.snap @@ -2706,1057 +2706,784 @@ 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 --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 "idmTestDir3" 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 --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 "idmTestDir3" 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 --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 "idmTestDir3" directory according to the entity and env files: idmTestDir3/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": { - "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": "\${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", + "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-recon-clusteredTargetIds", + "fr-idm-managed-application", ], "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - "writability": "createOnly", + "members": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", }, - "reconId": { - "ldapAttribute": "fr-idm-recon-id", + "name": { + "ldapAttribute": "fr-idm-managed-application-name", "type": "simple", }, - "targetIds": { - "ldapAttribute": "fr-idm-recon-targetIds", - "type": "json", + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfApp", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + "roles": { + "isMultiValued": true, + "propertyName": "applications", + "resourcePath": "managed/alpha_role", + "type": "reverseReference", }, }, }, - "dsconfig/attributeValue": { - "dnTemplate": "cn=Password Validators,cn=config", + "managed/alpha_assignment": { + "dnTemplate": "ou=assignment,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-assignment-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-attribute-value-password-validator", + "uidObject", + "fr-idm-managed-assignment", ], "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", + "condition": { + "ldapAttribute": "fr-idm-assignment-condition", "type": "simple", }, - "matchAttribute": { + "members": { "isMultiValued": true, - "ldapAttribute": "ds-cfg-match-attribute", - "type": "simple", - }, - "minSubstringLength": { - "ldapAttribute": "ds-cfg-min-substring-length", - "type": "simple", + "propertyName": "assignments", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", }, - "testReversedPassword": { - "isRequired": true, - "ldapAttribute": "ds-cfg-test-reversed-password", - "type": "simple", + "roles": { + "isMultiValued": true, + "propertyName": "assignments", + "resourcePath": "managed/alpha_role", + "type": "reverseReference", }, }, }, - "dsconfig/characterSet": { - "dnTemplate": "cn=Password Validators,cn=config", + "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": [ - "ds-cfg-password-validator", - "ds-cfg-character-set-password-validator", + "top", + "groupOfURLs", + "fr-idm-managed-group", ], "properties": { "_id": { - "isRequired": true, "ldapAttribute": "cn", + "primaryKey": true, "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", + "condition": { + "ldapAttribute": "fr-idm-managed-group-condition", "type": "simple", }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", + "description": { + "ldapAttribute": "description", "type": "simple", }, - "minCharacterSets": { - "ldapAttribute": "ds-cfg-min-character-sets", - "type": "simple", + "members": { + "isMultiValued": true, + "propertyName": "groups", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", }, }, }, - "dsconfig/dictionary": { - "dnTemplate": "cn=Password Validators,cn=config", + "managed/alpha_organization": { + "dnTemplate": "ou=organization,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-organization-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-dictionary-password-validator", + "uidObject", + "fr-idm-managed-organization", + "fr-ext-attrs", ], "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", + "admins": { + "isMultiValued": true, + "propertyName": "adminOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", }, - "dictionaryFile": { - "isRequired": true, - "ldapAttribute": "ds-cfg-dictionary-file", - "type": "simple", + "children": { + "isMultiValued": true, + "propertyName": "parent", + "resourcePath": "managed/alpha_organization", + "type": "reverseReference", }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", - "type": "simple", + "members": { + "isMultiValued": true, + "propertyName": "memberOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", + "name": { + "ldapAttribute": "fr-idm-managed-organization-name", "type": "simple", }, - "minSubstringLength": { - "ldapAttribute": "ds-cfg-min-substring-length", - "type": "simple", + "owners": { + "isMultiValued": true, + "propertyName": "ownerOfOrg", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", }, - "testReversedPassword": { - "isRequired": true, - "ldapAttribute": "ds-cfg-test-reversed-password", - "type": "simple", + "parent": { + "ldapAttribute": "fr-idm-managed-organization-parent", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", }, }, }, - "dsconfig/lengthBased": { - "dnTemplate": "cn=Password Validators,cn=config", + "managed/alpha_role": { + "dnTemplate": "ou=role,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-role-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", "objectClasses": [ - "ds-cfg-password-validator", - "ds-cfg-length-based-password-validator", + "uidObject", + "fr-idm-managed-role", ], "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", + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-applications", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference", }, - "maxPasswordLength": { - "ldapAttribute": "ds-cfg-max-password-length", - "type": "simple", + "assignments": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-role-assignments", + "primaryKey": "uid", + "resourcePath": "managed/alpha_assignment", + "type": "reference", }, - "minPasswordLength": { - "ldapAttribute": "ds-cfg-min-password-length", - "type": "simple", + "members": { + "isMultiValued": true, + "propertyName": "roles", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", }, }, }, - "dsconfig/passwordPolicies": { - "dnTemplate": "cn=Password Policies,cn=config", + "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": [ - "ds-cfg-password-policy", - "ds-cfg-authentication-policy", + "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": { - "isRequired": true, - "ldapAttribute": "cn", + "ldapAttribute": "fr-idm-uuid", + "primaryKey": true, "type": "simple", - "writability": "createOnly", }, - "allowPreEncodedPasswords": { - "ldapAttribute": "ds-cfg-allow-pre-encoded-passwords", - "type": "simple", + "_meta": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-meta", + "primaryKey": "uid", + "resourcePath": "managed/alpha_usermeta", + "type": "reference", }, - "defaultPasswordStorageScheme": { + "_notifications": { "isMultiValued": true, - "isRequired": true, - "ldapAttribute": "ds-cfg-default-password-storage-scheme", + "ldapAttribute": "fr-idm-managed-user-notifications", + "primaryKey": "uid", + "resourcePath": "internal/notification", + "type": "reference", + }, + "accountStatus": { + "ldapAttribute": "inetUserStatus", "type": "simple", }, - "deprecatedPasswordStorageScheme": { + "adminOfOrg": { "isMultiValued": true, - "ldapAttribute": "ds-cfg-deprecated-password-storage-scheme", - "type": "simple", + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", }, - "maxPasswordAge": { - "ldapAttribute": "ds-cfg-max-password-age", + "aliasList": { + "isMultiValued": true, + "ldapAttribute": "iplanet-am-user-alias-list", "type": "simple", }, - "passwordAttribute": { - "isRequired": true, - "ldapAttribute": "ds-cfg-password-attribute", - "type": "simple", + "applications": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference", }, - "passwordHistoryCount": { - "ldapAttribute": "ds-cfg-password-history-count", + "assignedDashboard": { + "isMultiValued": true, + "ldapAttribute": "assignedDashboard", "type": "simple", }, - "validator": { + "assignments": { "isMultiValued": true, - "ldapAttribute": "ds-cfg-password-validator", - "type": "simple", + "ldapAttribute": "fr-idm-managed-assignment-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_assignment", + "type": "reference", }, - }, - }, - "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", + "authzRoles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", }, - "caseSensitiveValidation": { - "isRequired": true, - "ldapAttribute": "ds-cfg-case-sensitive-validation", + "city": { + "ldapAttribute": "l", "type": "simple", }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", + "cn": { + "ldapAttribute": "cn", "type": "simple", }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", - "type": "simple", + "consentedMappings": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-consentedMapping", + "type": "json", }, - "maxConsecutiveLength": { - "isRequired": true, - "ldapAttribute": "ds-cfg-max-consecutive-length", + "country": { + "ldapAttribute": "co", "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", + "description": { + "ldapAttribute": "description", "type": "simple", - "writability": "createOnly", }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", + "devicePrintProfiles": { + "isMultiValued": true, + "ldapAttribute": "devicePrintProfiles", "type": "simple", }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", + "deviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "deviceProfiles", "type": "simple", }, - "minPasswordDifference": { - "isRequired": true, - "ldapAttribute": "ds-cfg-min-password-difference", + "displayName": { + "ldapAttribute": "displayName", "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", + "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", - "writability": "createOnly", }, - "caseSensitiveValidation": { - "isRequired": true, - "ldapAttribute": "ds-cfg-case-sensitive-validation", + "frIndexedDate2": { + "ldapAttribute": "fr-attr-idate2", "type": "simple", }, - "enabled": { - "ldapAttribute": "ds-cfg-enabled", + "frIndexedDate3": { + "ldapAttribute": "fr-attr-idate3", "type": "simple", }, - "javaClass": { - "ldapAttribute": "ds-cfg-java-class", + "frIndexedDate4": { + "ldapAttribute": "fr-attr-idate4", "type": "simple", }, - "minUniqueCharacters": { - "isRequired": true, - "ldapAttribute": "ds-cfg-min-unique-characters", + "frIndexedDate5": { + "ldapAttribute": "fr-attr-idate5", "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", + "frIndexedInteger1": { + "ldapAttribute": "fr-attr-iint1", "type": "simple", - "writability": "createOnly", }, - "attributeType": { - "isRequired": true, - "ldapAttribute": "ds-cfg-attribute-type", + "frIndexedInteger2": { + "ldapAttribute": "fr-attr-iint2", "type": "simple", }, - "baseDn": { - "isMultiValued": true, - "ldapAttribute": "ds-cfg-base-dn", + "frIndexedInteger3": { + "ldapAttribute": "fr-attr-iint3", "type": "simple", }, - "conflictBehavior": { - "ldapAttribute": "ds-cfg-conflict-behavior", + "frIndexedInteger4": { + "ldapAttribute": "fr-attr-iint4", "type": "simple", }, - "enabled": { - "isRequired": true, - "ldapAttribute": "ds-cfg-enabled", + "frIndexedInteger5": { + "ldapAttribute": "fr-attr-iint5", "type": "simple", }, - "filter": { + "frIndexedMultivalued1": { "isMultiValued": true, - "ldapAttribute": "ds-cfg-filter", + "ldapAttribute": "fr-attr-imulti1", "type": "simple", }, - "groupDn": { - "ldapAttribute": "ds-cfg-group-dn", + "frIndexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti2", "type": "simple", }, - "javaClass": { - "isRequired": true, - "ldapAttribute": "ds-cfg-java-class", + "frIndexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti3", "type": "simple", }, - "scope": { - "ldapAttribute": "ds-cfg-scope", + "frIndexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti4", "type": "simple", }, - "value": { + "frIndexedMultivalued5": { "isMultiValued": true, - "isRequired": true, - "ldapAttribute": "ds-cfg-value", + "ldapAttribute": "fr-attr-imulti5", "type": "simple", }, - }, - }, - "identities/admin": { - "dnTemplate": "o=root,ou=identities", - "isReadOnly": true, - "namingStrategy": { - "dnAttribute": "ou", - "type": "clientDnNaming", - }, - "objectClasses": [ - "organizationalunit", - ], - "properties": { - "_id": { - "ldapAttribute": "ou", - "primaryKey": true, + "frIndexedString1": { + "ldapAttribute": "fr-attr-istr1", "type": "simple", }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", + "frIndexedString10": { + "ldapAttribute": "fr-attr-istr10", "type": "simple", - "writability": "readOnly", }, - }, - }, - "identities/alpha": { - "dnTemplate": "o=alpha,o=root,ou=identities", - "isReadOnly": true, - "namingStrategy": { - "dnAttribute": "ou", - "type": "clientDnNaming", - }, - "objectClasses": [ - "organizationalunit", - ], - "properties": { - "_id": { - "ldapAttribute": "ou", - "primaryKey": true, + "frIndexedString11": { + "ldapAttribute": "fr-attr-istr11", "type": "simple", }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", + "frIndexedString12": { + "ldapAttribute": "fr-attr-istr12", "type": "simple", - "writability": "readOnly", }, - }, - }, - "identities/bravo": { - "dnTemplate": "o=bravo,o=root,ou=identities", - "isReadOnly": true, - "namingStrategy": { - "dnAttribute": "ou", - "type": "clientDnNaming", - }, - "objectClasses": [ - "organizationalunit", - ], - "properties": { - "_id": { - "ldapAttribute": "ou", - "primaryKey": true, + "frIndexedString13": { + "ldapAttribute": "fr-attr-istr13", "type": "simple", }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", + "frIndexedString14": { + "ldapAttribute": "fr-attr-istr14", "type": "simple", - "writability": "readOnly", }, - }, - }, - "internal/role": { - "dnTemplate": "ou=roles,ou=internal,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "fr-idm-internal-role", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "cn", + "frIndexedString15": { + "ldapAttribute": "fr-attr-istr15", "type": "simple", - "writability": "createOnly", - }, - "authzMembers": { - "isMultiValued": true, - "propertyName": "authzRoles", - "resourcePath": "managed/alpha_user", - "type": "reverseReference", }, - "condition": { - "ldapAttribute": "fr-idm-condition", + "frIndexedString16": { + "ldapAttribute": "fr-attr-istr16", "type": "simple", }, - "description": { - "ldapAttribute": "description", + "frIndexedString17": { + "ldapAttribute": "fr-attr-istr17", "type": "simple", }, - "name": { - "ldapAttribute": "fr-idm-name", + "frIndexedString18": { + "ldapAttribute": "fr-attr-istr18", "type": "simple", }, - "privileges": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-privilege", - "type": "json", + "frIndexedString19": { + "ldapAttribute": "fr-attr-istr19", + "type": "simple", }, - "temporalConstraints": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-temporal-constraints", - "type": "json", + "frIndexedString2": { + "ldapAttribute": "fr-attr-istr2", + "type": "simple", }, - }, - }, - "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", + "frIndexedString20": { + "ldapAttribute": "fr-attr-istr20", "type": "simple", - "writability": "createOnly", }, - "password": { - "ldapAttribute": "fr-idm-password", - "type": "json", + "frIndexedString3": { + "ldapAttribute": "fr-attr-istr3", + "type": "simple", }, - }, - }, - "link": { - "dnTemplate": "ou=links,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-link", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", + "frIndexedString4": { + "ldapAttribute": "fr-attr-istr4", "type": "simple", - "writability": "createOnly", }, - "firstId": { - "ldapAttribute": "fr-idm-link-firstId", + "frIndexedString5": { + "ldapAttribute": "fr-attr-istr5", "type": "simple", }, - "linkQualifier": { - "ldapAttribute": "fr-idm-link-qualifier", + "frIndexedString6": { + "ldapAttribute": "fr-attr-istr6", "type": "simple", }, - "linkType": { - "ldapAttribute": "fr-idm-link-type", + "frIndexedString7": { + "ldapAttribute": "fr-attr-istr7", "type": "simple", }, - "secondId": { - "ldapAttribute": "fr-idm-link-secondId", + "frIndexedString8": { + "ldapAttribute": "fr-attr-istr8", "type": "simple", }, - }, - }, - "locks": { - "dnTemplate": "ou=locks,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-lock", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", + "frIndexedString9": { + "ldapAttribute": "fr-attr-istr9", "type": "simple", - "writability": "createOnly", }, - "nodeId": { - "ldapAttribute": "fr-idm-lock-nodeid", + "frUnindexedDate1": { + "ldapAttribute": "fr-attr-date1", "type": "simple", }, - }, - }, - "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, + "frUnindexedDate2": { + "ldapAttribute": "fr-attr-date2", "type": "simple", }, - "_meta": { - "isMultiValued": false, - "ldapAttribute": "fr-idm-managed-user-meta", - "primaryKey": "uid", - "resourcePath": "managed/teammembermeta", - "type": "reference", + "frUnindexedDate3": { + "ldapAttribute": "fr-attr-date3", + "type": "simple", }, - "accountStatus": { - "ldapAttribute": "inetUserStatus", + "frUnindexedDate4": { + "ldapAttribute": "fr-attr-date4", "type": "simple", }, - "cn": { - "ldapAttribute": "cn", + "frUnindexedDate5": { + "ldapAttribute": "fr-attr-date5", "type": "simple", }, - "givenName": { - "ldapAttribute": "givenName", + "frUnindexedInteger1": { + "ldapAttribute": "fr-attr-int1", "type": "simple", }, - "inviteDate": { - "ldapAttribute": "fr-idm-inviteDate", + "frUnindexedInteger2": { + "ldapAttribute": "fr-attr-int2", "type": "simple", }, - "jurisdiction": { - "ldapAttribute": "fr-idm-jurisdiction", + "frUnindexedInteger3": { + "ldapAttribute": "fr-attr-int3", "type": "simple", }, - "mail": { - "ldapAttribute": "mail", + "frUnindexedInteger4": { + "ldapAttribute": "fr-attr-int4", "type": "simple", }, - "onboardDate": { - "ldapAttribute": "fr-idm-onboardDate", + "frUnindexedInteger5": { + "ldapAttribute": "fr-attr-int5", "type": "simple", }, - "password": { - "ldapAttribute": "userPassword", + "frUnindexedMultivalued1": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi1", "type": "simple", }, - "sn": { - "ldapAttribute": "sn", + "frUnindexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi2", "type": "simple", }, - "userName": { - "ldapAttribute": "uid", + "frUnindexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi3", "type": "simple", }, - }, - }, - "managed/teammembergroup": { - "dnTemplate": "ou=groups,o=root,ou=identities", - "objectClasses": [ - "groupofuniquenames", - ], - "properties": { - "_id": { - "ldapAttribute": "cn", - "primaryKey": true, + "frUnindexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi4", "type": "simple", }, - "members": { + "frUnindexedMultivalued5": { "isMultiValued": true, - "ldapAttribute": "uniqueMember", + "ldapAttribute": "fr-attr-multi5", "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", + "frUnindexedString1": { + "ldapAttribute": "fr-attr-str1", "type": "simple", }, - "finishTime": { - "ldapAttribute": "fr-idm-reconassoc-finishtime", + "frUnindexedString2": { + "ldapAttribute": "fr-attr-str2", "type": "simple", }, - "isAnalysis": { - "ldapAttribute": "fr-idm-reconassoc-isanalysis", + "frUnindexedString3": { + "ldapAttribute": "fr-attr-str3", "type": "simple", }, - "mapping": { - "ldapAttribute": "fr-idm-reconassoc-mapping", + "frUnindexedString4": { + "ldapAttribute": "fr-attr-str4", "type": "simple", }, - "sourceResourceCollection": { - "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", + "frUnindexedString5": { + "ldapAttribute": "fr-attr-str5", "type": "simple", }, - "targetResourceCollection": { - "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", + "givenName": { + "ldapAttribute": "givenName", "type": "simple", }, - }, - "subResources": { - "entry": { - "namingStrategy": { - "dnAttribute": "uid", - "type": "clientDnNaming", - }, - "resource": "recon-assoc-entry", - "type": "collection", + "groups": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-groups", + "primaryKey": "cn", + "resourcePath": "managed/alpha_group", + "type": "reference", }, - }, - }, - "recon/assoc/entry": { - "objectClasses": [ - "uidObject", - "fr-idm-reconassocentry", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", + "kbaInfo": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-kbaInfo", + "type": "json", }, - "action": { - "ldapAttribute": "fr-idm-reconassocentry-action", - "type": "simple", + "lastSync": { + "ldapAttribute": "fr-idm-lastSync", + "type": "json", }, - "ambiguousTargetObjectIds": { - "ldapAttribute": "fr-idm-reconassocentry-ambiguoustargetobjectids", + "mail": { + "ldapAttribute": "mail", "type": "simple", }, - "exception": { - "ldapAttribute": "fr-idm-reconassocentry-exception", - "type": "simple", + "manager": { + "isMultiValued": false, + "ldapAttribute": "fr-idm-managed-user-manager", + "primaryKey": "uid", + "resourcePath": "managed/alpha_user", + "type": "reference", }, - "isAnalysis": { - "ldapAttribute": "fr-idm-reconassoc-isanalysis", - "type": "simple", + "memberOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-member", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", }, - "linkQualifier": { - "ldapAttribute": "fr-idm-reconassocentry-linkqualifier", + "memberOfOrgIDs": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-memberoforgid", "type": "simple", }, - "mapping": { - "ldapAttribute": "fr-idm-reconassoc-mapping", + "oathDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "oathDeviceProfiles", "type": "simple", }, - "message": { - "ldapAttribute": "fr-idm-reconassocentry-message", - "type": "simple", + "ownerOfApp": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-application-owner", + "primaryKey": "uid", + "resourcePath": "managed/alpha_application", + "type": "reference", }, - "messageDetail": { - "ldapAttribute": "fr-idm-reconassocentry-messagedetail", + "ownerOfOrg": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-owner", + "primaryKey": "uid", + "resourcePath": "managed/alpha_organization", + "type": "reference", + }, + "password": { + "ldapAttribute": "userPassword", "type": "simple", }, - "phase": { - "ldapAttribute": "fr-idm-reconassocentry-phase", + "passwordExpirationTime": { + "ldapAttribute": "pwdExpirationTime", "type": "simple", + "writability": "readOnlyDiscardWrites", }, - "reconId": { - "ldapAttribute": "fr-idm-reconassocentry-reconid", + "passwordLastChangedTime": { + "ldapAttribute": "pwdChangedTime", "type": "simple", + "writability": "readOnlyDiscardWrites", }, - "situation": { - "ldapAttribute": "fr-idm-reconassocentry-situation", + "postalAddress": { + "ldapAttribute": "street", "type": "simple", }, - "sourceObjectId": { - "ldapAttribute": "fr-idm-reconassocentry-sourceObjectId", + "postalCode": { + "ldapAttribute": "postalCode", "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=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-syncqueue", - ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - "writability": "createOnly", - }, - "context": { - "ldapAttribute": "fr-idm-syncqueue-context", + "preferences": { + "ldapAttribute": "fr-idm-preferences", "type": "json", }, - "createDate": { - "ldapAttribute": "fr-idm-syncqueue-createdate", - "type": "simple", - }, - "mapping": { - "ldapAttribute": "fr-idm-syncqueue-mapping", + "profileImage": { + "ldapAttribute": "labeledURI", "type": "simple", }, - "newObject": { - "ldapAttribute": "fr-idm-syncqueue-newobject", - "type": "json", - }, - "nodeId": { - "ldapAttribute": "fr-idm-syncqueue-nodeid", + "pushDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "pushDeviceProfiles", "type": "simple", }, - "objectRev": { - "ldapAttribute": "fr-idm-syncqueue-objectRev", - "type": "simple", + "reports": { + "isMultiValued": true, + "propertyName": "manager", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", }, - "oldObject": { - "ldapAttribute": "fr-idm-syncqueue-oldobject", - "type": "json", + "roles": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-roles", + "primaryKey": "uid", + "resourcePath": "managed/alpha_role", + "type": "reference", }, - "remainingRetries": { - "ldapAttribute": "fr-idm-syncqueue-remainingretries", + "sn": { + "ldapAttribute": "sn", "type": "simple", }, - "resourceCollection": { - "ldapAttribute": "fr-idm-syncqueue-resourcecollection", + "stateProvince": { + "ldapAttribute": "st", "type": "simple", }, - "resourceId": { - "ldapAttribute": "fr-idm-syncqueue-resourceid", + "telephoneNumber": { + "ldapAttribute": "telephoneNumber", "type": "simple", }, - "state": { - "ldapAttribute": "fr-idm-syncqueue-state", + "userName": { + "ldapAttribute": "uid", "type": "simple", }, - "syncAction": { - "ldapAttribute": "fr-idm-syncqueue-syncaction", + "webauthnDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "webauthnDeviceProfiles", "type": "simple", }, }, }, - }, - "genericMapping": { - "cluster/*": { - "dnTemplate": "ou=cluster,dc=openidm,dc=example,dc=com", - "jsonAttribute": "fr-idm-cluster-json", - "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchClusterObject", + "managed/alpha_usermeta": { + "dnTemplate": "ou=usermeta,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ "uidObject", - "fr-idm-cluster-obj", + "fr-idm-generic-obj", ], + "properties": { + "target": { + "propertyName": "_meta", + "resourcePath": "managed/alpha_user", + "type": "reverseReference", + }, + }, }, - "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", + "managed/bravo_application": { + "dnTemplate": "ou=application,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-application-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ "uidObject", - "fr-idm-notification", + "fr-idm-managed-application", ], "properties": { - "target": { - "propertyName": "_notifications", - "resourcePath": "managed/alpha_user", + "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", }, }, }, - "internal/usermeta": { - "dnTemplate": "ou=usermeta,ou=internal,dc=openidm,dc=example,dc=com", - "jsonAttribute": "fr-idm-json", + "managed/bravo_assignment": { + "dnTemplate": "ou=assignment,o=bravo,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-assignment-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ "uidObject", - "fr-idm-generic-obj", + "fr-idm-managed-assignment", ], "properties": { - "target": { - "propertyName": "_meta", - "resourcePath": "managed/alpha_user", + "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", }, }, }, - "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", + "managed/bravo_group": { + "dnTemplate": "ou=groups,o=bravo,o=root,ou=identities", "idGenerator": { "propertyName": "name", "type": "property", @@ -3791,13 +3518,13 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "members": { "isMultiValued": true, "propertyName": "groups", - "resourcePath": "managed/alpha_user", + "resourcePath": "managed/bravo_user", "type": "reverseReference", }, }, }, - "managed/alpha_organization": { - "dnTemplate": "ou=organization,o=alpha,o=root,ou=identities", + "managed/bravo_organization": { + "dnTemplate": "ou=organization,o=bravo,o=root,ou=identities", "jsonAttribute": "fr-idm-managed-organization-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ @@ -3806,26 +3533,22 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "fr-ext-attrs", ], "properties": { - "_id": { - "ldapAttribute": "uid", - "type": "simple", - }, "admins": { "isMultiValued": true, "propertyName": "adminOfOrg", - "resourcePath": "managed/alpha_user", + "resourcePath": "managed/bravo_user", "type": "reverseReference", }, "children": { "isMultiValued": true, "propertyName": "parent", - "resourcePath": "managed/alpha_organization", + "resourcePath": "managed/bravo_organization", "type": "reverseReference", }, "members": { "isMultiValued": true, "propertyName": "memberOfOrg", - "resourcePath": "managed/alpha_user", + "resourcePath": "managed/bravo_user", "type": "reverseReference", }, "name": { @@ -3835,19 +3558,19 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "owners": { "isMultiValued": true, "propertyName": "ownerOfOrg", - "resourcePath": "managed/alpha_user", + "resourcePath": "managed/bravo_user", "type": "reverseReference", }, "parent": { "ldapAttribute": "fr-idm-managed-organization-parent", "primaryKey": "uid", - "resourcePath": "managed/alpha_organization", + "resourcePath": "managed/bravo_organization", "type": "reference", }, }, }, - "managed/alpha_role": { - "dnTemplate": "ou=role,o=alpha,o=root,ou=identities", + "managed/bravo_role": { + "dnTemplate": "ou=role,o=bravo,o=root,ou=identities", "jsonAttribute": "fr-idm-managed-role-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", "objectClasses": [ @@ -3855,16 +3578,30 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "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/alpha_user", + "resourcePath": "managed/bravo_user", "type": "reverseReference", }, }, }, - "managed/alpha_user": { - "dnTemplate": "ou=user,o=alpha,o=root,ou=identities", + "managed/bravo_user": { + "dnTemplate": "ou=user,o=bravo,o=root,ou=identities", "jsonAttribute": "fr-idm-custom-attrs", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "namingStrategy": { @@ -3904,7 +3641,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "isMultiValued": false, "ldapAttribute": "fr-idm-managed-user-meta", "primaryKey": "uid", - "resourcePath": "managed/alpha_usermeta", + "resourcePath": "managed/bravo_usermeta", "type": "reference", }, "_notifications": { @@ -3922,7 +3659,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "isMultiValued": true, "ldapAttribute": "fr-idm-managed-organization-admin", "primaryKey": "uid", - "resourcePath": "managed/alpha_organization", + "resourcePath": "managed/bravo_organization", "type": "reference", }, "aliasList": { @@ -3930,11 +3667,25 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "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", @@ -3963,10 +3714,25 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "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", @@ -4051,10 +3817,54 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "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", @@ -4067,6 +3877,22 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "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", @@ -4160,7 +3986,7 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "isMultiValued": true, "ldapAttribute": "fr-idm-managed-user-groups", "primaryKey": "cn", - "resourcePath": "managed/alpha_group", + "resourcePath": "managed/bravo_group", "type": "reference", }, "kbaInfo": { @@ -4180,14 +4006,14 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "isMultiValued": false, "ldapAttribute": "fr-idm-managed-user-manager", "primaryKey": "uid", - "resourcePath": "managed/alpha_user", + "resourcePath": "managed/bravo_user", "type": "reference", }, "memberOfOrg": { "isMultiValued": true, "ldapAttribute": "fr-idm-managed-organization-member", "primaryKey": "uid", - "resourcePath": "managed/alpha_organization", + "resourcePath": "managed/bravo_organization", "type": "reference", }, "memberOfOrgIDs": { @@ -4195,17 +4021,39 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "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/alpha_organization", + "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", @@ -4222,17 +4070,22 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "ldapAttribute": "labeledURI", "type": "simple", }, + "pushDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "pushDeviceProfiles", + "type": "simple", + }, "reports": { "isMultiValued": true, "propertyName": "manager", - "resourcePath": "managed/alpha_user", + "resourcePath": "managed/bravo_user", "type": "reverseReference", }, "roles": { "isMultiValued": true, "ldapAttribute": "fr-idm-managed-user-roles", "primaryKey": "uid", - "resourcePath": "managed/alpha_role", + "resourcePath": "managed/bravo_role", "type": "reference", }, "sn": { @@ -4251,10 +4104,15 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "ldapAttribute": "uid", "type": "simple", }, + "webauthnDeviceProfiles": { + "isMultiValued": true, + "ldapAttribute": "webauthnDeviceProfiles", + "type": "simple", + }, }, }, - "managed/alpha_usermeta": { - "dnTemplate": "ou=usermeta,o=alpha,o=root,ou=identities", + "managed/bravo_usermeta": { + "dnTemplate": "ou=usermeta,o=bravo,o=root,ou=identities", "jsonAttribute": "fr-idm-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ @@ -4264,585 +4122,219 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "properties": { "target": { "propertyName": "_meta", - "resourcePath": "managed/alpha_user", - "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", + "managed/teammembermeta": { + "dnTemplate": "ou=teammembermeta,o=root,ou=identities", + "jsonAttribute": "fr-idm-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ "uidObject", - "fr-idm-managed-organization", - "fr-ext-attrs", + "fr-idm-generic-obj", ], "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", + "target": { + "propertyName": "_meta", + "resourcePath": "managed/teammember", "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": { - "members": { - "isMultiValued": true, - "propertyName": "roles", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", + }, + }, + }, + }, +} +`; + +exports[`frodo idm export "frodo idm export --all-separate --no-metadata --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 "idmTestDir3" directory according to the entity and env files: idmTestDir3/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + { + "_id": "sync/extract_script_test", + "consentRequired": false, + "correlationScript": { + "globals": {}, + "source": "//extract script test UPDATED CORRELATION QUERY +", + "type": "text/javascript", + }, + "displayName": "extract_script_test", + "icon": null, + "name": "extract_script_test", + "onCreate": { + "globals": {}, + "source": "//test UPDATED ONCREATED +", + "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": "_id", + "target": "name", + "transform": { + "globals": {}, + "source": "//groovy EXTRACT SCRIPT test UPDATED +", + "type": "groovy", }, }, + ], + "result": { + "globals": {}, + "source": "//tests UPDATED RESULT SCRIPT +", + "type": "text/javascript", }, - "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", + "source": "managed/alpha_user", + "syncAfter": [], + "target": "managed/alpha_group", + "validSource": { + "globals": {}, + "source": "//extract script test UPDATED VALIDSOURCE +", + "type": "text/javascript", + }, + }, + { + "_id": "sync/synctest", + "consentRequired": false, + "displayName": "synctest", + "icon": null, + "name": "synctest", + "policies": [ + { + "action": "ASYNC", + "situation": "ABSENT", }, - "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", - }, - "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/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", - }, - "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", - }, - "profileImage": { - "ldapAttribute": "labeledURI", - "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", - }, + { + "action": "ASYNC", + "situation": "ALL_GONE", }, - }, - "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", - }, + { + "action": "ASYNC", + "situation": "AMBIGUOUS", }, - }, - "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", - }, + { + "action": "ASYNC", + "situation": "CONFIRMED", }, - }, - "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", - }, + { + "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_group", + "syncAfter": [ + "extract_script_test", + "testMapping2", + ], + "target": "managed/alpha_assignment", }, - }, - "rest2LdapOptions": { - "mvccAttribute": "etag", - "readOnUpdatePolicy": "controls", - "returnNullForMissingProperties": true, - "useMvcc": true, - "usePermissiveModify": true, - "useSubtreeDelete": true, - }, - "security": { - "keyManager": "jvm", - "trustManager": "jvm", - }, + ], }, }, } `; -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 --entity-id script": should export the idm config entity with idm id "script" 1`] = `0`; + +exports[`frodo idm export "frodo idm export --entity-id script": should export the idm config entity with idm id "script" 2`] = `""`; + +exports[`frodo idm export "frodo idm export --entity-id script": should export the idm config entity with idm id "script": script.idm.json 1`] = ` { "idm": { "script": { @@ -4856,25 +4348,25 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "#groovy.output.debug": false, "#groovy.output.verbose": false, "#groovy.script.base": "#any class extends groovy.lang.Script", - "#groovy.script.extension": "\${groovy}", + "#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": "&{\${installDir}}/lib", + "groovy.classpath": "&{idm.install.dir}/lib", "groovy.recompile": true, "groovy.recompile.minimumInterval": 60000, "groovy.source.encoding": "UTF-8", - "groovy.target.directory": "&{\${installDir}}/classes", + "groovy.target.directory": "&{idm.install.dir}/classes", }, "_id": "script", "properties": {}, "sources": { "default": { - "directory": "&{\${installDir}}/bin/defaults/script", + "directory": "&{idm.install.dir}/bin/defaults/script", }, "install": { - "directory": "&{\${installDir}}", + "directory": "&{idm.install.dir}", }, "project": { "directory": "&{idm.instance.dir}", @@ -4885,572 +4377,15 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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`] = ` -{ - "_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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory 1`] = `1`; -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`] = ` -{ - "_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 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 --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`] = ` -{ - "_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 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`] = ` -{ - "_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 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`] = ` -{ - "_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 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`] = ` -{ - "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", - ], - }, - }, -} -`; - -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 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 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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/access.idm.json 1`] = ` { "idm": { "access": { @@ -5778,10 +4713,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ ], }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/alphaOrgPrivileges.idm.json 1`] = ` { "idm": { "alphaOrgPrivileges": { @@ -6542,10 +5478,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ ], }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/audit.idm.json 1`] = ` { "idm": { "audit": { @@ -6663,10 +5600,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/authentication.idm.json 1`] = ` { "idm": { "authentication": { @@ -6710,10 +5648,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/bravoOrgPrivileges.idm.json 1`] = ` { "idm": { "bravoOrgPrivileges": { @@ -7474,10 +6413,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ ], }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/baselineDemoEmailVerification.idm.json 1`] = ` { "idm": { "emailTemplate/baselineDemoEmailVerification": { @@ -7546,10 +6486,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "templateId": "baselineDemoEmailVerification", }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/baselineDemoMagicLink.idm.json 1`] = ` { "idm": { "emailTemplate/baselineDemoMagicLink": { @@ -7618,53 +6559,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "templateId": "baselineDemoMagicLink", }, }, + "meta": Any, } `; -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`] = ` -{ - "idm": { - "emailTemplate/deleteTemplate": { - "_id": "emailTemplate/deleteTemplate", - "defaultLocale": "en", - "description": "", - "displayName": "deleteTemplate", - "enabled": true, - "from": "", - "html": { - "en": "

alt text

Email Title

Message text lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor.

", - }, - "message": { - "en": "

alt text

Email Title

Message text lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor.

", - }, - "mimeType": "text/html", - "styles": "body { - background-color: #324054; - color: #455469; - 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": "", - }, - }, - }, -} -`; - -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/forgottenUsername.idm.json 1`] = ` { "idm": { "emailTemplate/forgottenUsername": { @@ -7688,10 +6587,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frEmailUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frEmailUpdated": { @@ -7708,10 +6608,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frForgotUsername.idm.json 1`] = ` { "idm": { "emailTemplate/frForgotUsername": { @@ -7728,10 +6629,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frOnboarding.idm.json 1`] = ` { "idm": { "emailTemplate/frOnboarding": { @@ -7748,10 +6650,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frPasswordUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frPasswordUpdated": { @@ -7768,10 +6671,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frProfileUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frProfileUpdated": { @@ -7788,10 +6692,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frResetPassword.idm.json 1`] = ` { "idm": { "emailTemplate/frResetPassword": { @@ -7808,10 +6713,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/frUsernameUpdated.idm.json 1`] = ` { "idm": { "emailTemplate/frUsernameUpdated": { @@ -7828,10 +6734,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/idv.idm.json 1`] = ` { "idm": { "emailTemplate/idv": { @@ -7859,10 +6766,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "templateId": "idv", }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/joiner.idm.json 1`] = ` { "idm": { "emailTemplate/joiner": { @@ -7918,10 +6826,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ "templateId": "joiner", }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/registerPasswordlessDevice.idm.json 1`] = ` { "idm": { "emailTemplate/registerPasswordlessDevice": { @@ -7964,10 +6873,11 @@ a { "templateId": "registerPasswordlessDevice", }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/registration.idm.json 1`] = ` { "idm": { "emailTemplate/registration": { @@ -7991,10 +6901,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/resetPassword.idm.json 1`] = ` { "idm": { "emailTemplate/resetPassword": { @@ -8013,10 +6924,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/updatePassword.idm.json 1`] = ` { "idm": { "emailTemplate/updatePassword": { @@ -8037,94 +6949,54 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/emailTemplate/welcome.idm.json 1`] = ` { "idm": { "emailTemplate/welcome": { "_id": "emailTemplate/welcome", "defaultLocale": "en", + "displayName": "Welcome", "enabled": true, - "from": "", + "from": "saas@forgerock.com", "html": { - "en": "

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

", + "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}", + "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 --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`] = ` -{ - "idm": { - "endpoint/Test": { - "_id": "endpoint/Test", - "description": "test", - "globalsObject": "" {\\n \\"request\\": {\\n \\"method\\": \\"create\\"\\n }\\n }"", - "source": " (function () { - if (request.method === 'create') { - // POST - return {}; - } else if (request.method === 'read') { - // GET - return {}; - } else if (request.method === 'update') { - // PUT - return {}; - } else if (request.method === 'patch') { - return {}; - } else if (request.method === 'delete') { - return {}; - } - throw { code: 500, message: 'Unknown error' }; - }());", - "type": "text/javascript", - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "endpoint/testEndpoint2": { - "_id": "endpoint/testEndpoint2", - "description": "", - "globalsObject": "" {\\n \\"request\\": {\\n \\"method\\": \\"create\\"\\n }\\n }"", - "source": " (function () { - if (request.method === 'create') { - // POST - return {}; - } else if (request.method === 'read') { - // GET - return {}; - } else if (request.method === 'update') { - // PUT - return {}; - } else if (request.method === 'patch') { - return {}; - } else if (request.method === 'delete') { - return {}; - } - throw { code: 500, message: 'Unknown error' }; - }());", - "type": "text/javascript", - }, - }, -} -`; - -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/entityId.idm.json 1`] = ` { "idm": { "entityId": { @@ -8142,70 +7014,73 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ }, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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}", + "password": "&{sendgrid.api.key}", + "username": "apikey", }, "connectiontimeout": 300000, "debug": false, "from": "&{email.sender.address}", - "host": "&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}", - "port": 25, + "host": "smtp.sendgrid.net", + "port": 587, "smtpProperties": [], "ssl": { "enable": false, }, "starttls": { - "enable": false, + "enable": true, }, "threadPoolSize": 20, "timeout": 300000, "writetimeout": 300000, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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}", + "password": "&{sendgrid.api.key}", + "username": "apikey", }, "connectiontimeout": 300000, "debug": false, "from": "&{email.sender.address}", - "host": "&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}", - "port": 25, + "host": "smtp.sendgrid.net", + "port": 587, "smtpProperties": [], "ssl": { "enable": false, }, "starttls": { - "enable": false, + "enable": true, }, "threadPoolSize": 20, "timeout": 300000, "writetimeout": 300000, }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/fieldPolicy/alpha_user.idm.json 1`] = ` { "idm": { "fieldPolicy/alpha_user": { @@ -8256,10 +7131,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ ], }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/fieldPolicy/bravo_user.idm.json 1`] = ` { "idm": { "fieldPolicy/bravo_user": { @@ -8309,10 +7185,11 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ ], }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/internal.idm.json 1`] = ` { "idm": { "internal": { @@ -8346,15551 +7223,6198 @@ exports[`frodo idm export "frodo idm export --all-separate --no-metadata --separ ], }, }, + "meta": Any, } `; -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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/managed.idm.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": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Group Members Items _refProperties", - "type": "object", - }, + "idm": { + "managed": { + "_id": "managed", + "objects": [ + { + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", }, - "resourceCollection": [ - { - "label": "User", - "notify": true, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", + "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", + }, ], - "queryFilter": "true", + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, }, - }, - ], - "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", - }, + "accountStatus": { + "default": "active", + "description": "Status", + "isPersonal": false, + "searchable": true, + "title": "Status", + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, - "title": "Application _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "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, }, - }, - ], - "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": { - "_id": { - "propName": "_id", - "required": false, + "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, }, - "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": { - "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", - }, -} -`; - -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`] = ` -{ - "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": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", + "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, }, - "_id": { - "description": "_refProperties object ID", + "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, }, - "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", + "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, }, - }, - ], - "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", + "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, }, - "title": "Managed Roles Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Role", - "notify": true, - "path": "managed/alpha_role", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", + "city": { + "description": "City", + "isPersonal": false, + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": 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 --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`] = ` -{ - "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", + "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", }, - "_id": { - "description": "_refProperties object ID", - "type": "string", + "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, }, - "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", + "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, }, - }, - ], - "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 --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`] = ` -{ - "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", + "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, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": false, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], + "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, }, - }, - ], - "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, + "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, }, - "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, + "frIndexedMultivalued2": { + "description": "Generic Indexed Multivalue 2", + "isPersonal": false, + "items": { "type": "string", }, + "title": "Generic Indexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": true, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], + "frIndexedMultivalued3": { + "description": "Generic Indexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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, + "frIndexedMultivalued4": { + "description": "Generic Indexed Multivalue 4", + "isPersonal": false, + "items": { "type": "string", }, + "title": "Generic Indexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": false, - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], + "frIndexedMultivalued5": { + "description": "Generic Indexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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, + "frIndexedString1": { + "description": "Generic Indexed String 1", + "isPersonal": false, + "title": "Generic Indexed String 1", "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - "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 --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`] = ` -{ - "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", + "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, }, - "title": "Role Application Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Application", - "path": "managed/alpha_application", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", + "frUnindexedMultivalued2": { + "description": "Generic Unindexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": 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", + "frUnindexedMultivalued3": { + "description": "Generic Unindexed Multivalue 3", + "isPersonal": false, + "items": { "type": "string", }, + "title": "Generic Unindexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "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", + "frUnindexedMultivalued4": { + "description": "Generic Unindexed Multivalue 4", + "isPersonal": false, + "items": { "type": "string", }, + "title": "Generic Unindexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "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 --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`] = ` -{ - "lastSync": { - "effectiveAssignmentsProperty": "effectiveAssignments", - "lastSyncProperty": "lastSync", - }, - "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, + "frUnindexedMultivalued5": { + "description": "Generic Unindexed Multivalue 5", + "isPersonal": false, + "items": { "type": "string", }, + "title": "Generic Unindexed Multivalue 5", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Organization", - "notify": true, - "path": "managed/alpha_organization", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - "sortKeys": [], + "frUnindexedString1": { + "description": "Generic Unindexed String 1", + "isPersonal": false, + "title": "Generic Unindexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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", - }, + "frUnindexedString2": { + "description": "Generic Unindexed String 2", + "isPersonal": false, + "title": "Generic Unindexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "title": "Groups Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Application", - "path": "managed/alpha_application", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - "sortKeys": [ - "name", - ], + "frUnindexedString3": { + "description": "Generic Unindexed String 3", + "isPersonal": false, + "title": "Generic Unindexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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", - }, + "frUnindexedString4": { + "description": "Generic Unindexed String 4", + "isPersonal": false, + "title": "Generic Unindexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "title": "Provisioning Roles Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociationField": "condition", - "label": "Assignment", - "path": "managed/alpha_assignment", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", + "frUnindexedString5": { + "description": "Generic Unindexed String 5", + "isPersonal": false, + "title": "Generic Unindexed String 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": 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", + "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, }, - "title": "Authorization Roles Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociationField": "condition", - "label": "Internal Role", - "path": "internal/role", - "query": { - "fields": [ - "name", + "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", ], - "queryFilter": "true", + "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, }, - }, - ], - "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", + "mail": { + "description": "Email Address", + "isPersonal": true, + "policies": [ + { + "policyId": "valid-email-address-format", + }, + ], "searchable": true, - "title": "Consent Date", + "title": "Email Address", "type": "string", + "usageDescription": "", "userEditable": true, "viewable": true, }, - "mapping": { - "description": "Mapping", - "searchable": true, - "title": "Mapping", + "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, }, - }, - "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", - }, + "postalCode": { + "description": "Postal Code", + "isPersonal": false, + "title": "Postal Code", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "title": "Groups Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociationField": "condition", - "label": "Group", - "path": "managed/alpha_group", - "query": { - "fields": [ - "name", + "preferences": { + "description": "Preferences", + "isPersonal": false, + "order": [ + "updates", + "marketing", ], - "queryFilter": "true", + "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, }, - }, - ], - "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", + "profileImage": { + "description": "Profile Image", + "isPersonal": true, + "searchable": true, + "title": "Profile Image", "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": false, }, - }, - "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", + "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, }, - "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", + "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, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Application", - "path": "managed/alpha_application", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - "sortKeys": [ - "name", - ], + "sn": { + "description": "Last Name", + "isPersonal": true, + "searchable": true, + "title": "Last Name", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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", - }, + "stateProvince": { + "description": "State/Province", + "isPersonal": false, + "title": "State/Province", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Organization", - "notify": true, - "path": "managed/alpha_organization", - "query": { - "fields": [ - "name", + "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", + }, ], - "queryFilter": "true", - "sortKeys": [], + "searchable": true, + "title": "Username", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, }, - ], - "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": [ + "userName", + "givenName", + "sn", + "mail", + ], + "title": "Alpha realm - User", + "type": "object", + "viewable": true, }, }, - "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", - }, + { + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/alpha_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", + "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", + }, ], - "queryFilter": "true", + "searchable": false, + "type": "string", + "usageDescription": "", + "userEditable": false, + "viewable": false, }, - }, - ], - "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", + "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, }, - "_id": { - "description": "_refProperties object ID", + "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, }, - "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, - }, -} -`; - -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`] = ` -{ - "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": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", + "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, }, - "_id": { - "description": "_refProperties object ID", + "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", }, - }, - "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", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], }, + "searchable": false, + "title": "Assigned Dashboard", + "type": "array", + "userEditable": false, + "viewable": true, }, - "title": "Application _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "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, }, - }, - ], - "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": { - "_id": { - "propName": "_id", - "required": false, - "type": "string", + "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, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Role", - "notify": true, - "path": "managed/bravo_role", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", - "sortKeys": [], + "city": { + "description": "City", + "isPersonal": false, + "title": "City", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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": { - "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": "Bravo realm - Application", - "type": "object", - }, -} -`; - -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`] = ` -{ - "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": { - "_grantType": { - "description": "Grant Type", - "label": "Grant Type", - "type": "string", - }, - "_id": { - "description": "_refProperties object ID", - "type": "string", + "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, }, - "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", + "country": { + "description": "Country", + "isPersonal": false, + "title": "Country", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": 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", - }, + "description": { + "description": "Description", + "isPersonal": false, + "searchable": true, + "title": "Description", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "title": "Managed Roles Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Role", - "notify": true, - "path": "managed/bravo_role", - "query": { - "fields": [ - "name", - ], - "queryFilter": "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, }, - }, - ], - "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 --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`] = ` -{ - "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", + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", }, - "_id": { - "description": "_refProperties object ID", - "type": "string", + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], }, + "returnByDefault": true, + "title": "Effective Assignments", + "type": "array", + "usageDescription": "", + "viewable": false, }, - "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", + "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, }, - }, - ], - "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 --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`] = ` -{ - "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", + "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, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": false, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], + "frIndexedDate1": { + "description": "Generic Indexed Date 1", + "isPersonal": false, + "title": "Generic Indexed Date 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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", - }, + "frIndexedDate2": { + "description": "Generic Indexed Date 2", + "isPersonal": false, + "title": "Generic Indexed Date 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Organization", - "notify": true, - "path": "managed/bravo_organization", - "query": { - "fields": [ - "name", - "description", - ], - "queryFilter": "true", - "sortKeys": [], + "frIndexedDate3": { + "description": "Generic Indexed Date 3", + "isPersonal": false, + "title": "Generic Indexed Date 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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", - }, + "frIndexedDate4": { + "description": "Generic Indexed Date 4", + "isPersonal": false, + "title": "Generic Indexed Date 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": true, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], + "frIndexedDate5": { + "description": "Generic Indexed Date 5", + "isPersonal": false, + "title": "Generic Indexed Date 5", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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", - }, + "frIndexedInteger1": { + "description": "Generic Indexed Integer 1", + "isPersonal": false, + "title": "Generic Indexed Integer 1", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "User", - "notify": false, - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - "sortKeys": [], + "frIndexedInteger2": { + "description": "Generic Indexed Integer 2", + "isPersonal": false, + "title": "Generic Indexed Integer 2", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - ], - "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", + "frIndexedInteger3": { + "description": "Generic Indexed Integer 3", + "isPersonal": false, + "title": "Generic Indexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - "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 --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`] = ` -{ - "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", + "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, }, - "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", + "frIndexedMultivalued2": { + "description": "Generic Indexed Multivalue 2", + "isPersonal": false, + "items": { "type": "string", }, + "title": "Generic Indexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "title": "Managed Assignments Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "label": "Assignment", - "path": "managed/bravo_assignment", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", + "frIndexedMultivalued3": { + "description": "Generic Indexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Indexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": 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", + "frIndexedMultivalued4": { + "description": "Generic Indexed Multivalue 4", + "isPersonal": false, + "items": { "type": "string", }, - "_id": { - "description": "_refProperties object ID", + "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, }, - "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 --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`] = ` -{ - "lastSync": { - "effectiveAssignmentsProperty": "effectiveAssignments", - "lastSyncProperty": "lastSync", - }, - "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", - }, - ], - "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", - }, + "frIndexedString1": { + "description": "Generic Indexed String 1", + "isPersonal": false, + "title": "Generic Indexed String 1", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "title": "Provisioning Roles Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociationField": "condition", - "label": "Assignment", - "path": "managed/bravo_assignment", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", + "frIndexedString2": { + "description": "Generic Indexed String 2", + "isPersonal": false, + "title": "Generic Indexed String 2", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": 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", - }, + "frIndexedString3": { + "description": "Generic Indexed String 3", + "isPersonal": false, + "title": "Generic Indexed String 3", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "title": "Authorization Roles Items _refProperties", - "type": "object", - }, - }, - "resourceCollection": [ - { - "conditionalAssociationField": "condition", - "label": "Internal Role", - "path": "internal/role", - "query": { - "fields": [ - "name", - ], - "queryFilter": "true", + "frIndexedString4": { + "description": "Generic Indexed String 4", + "isPersonal": false, + "title": "Generic Indexed String 4", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": 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", + "frIndexedString5": { + "description": "Generic Indexed String 5", + "isPersonal": false, + "title": "Generic Indexed String 5", "type": "string", + "usageDescription": "", "userEditable": true, "viewable": true, }, - "mapping": { - "description": "Mapping", - "searchable": true, - "title": "Mapping", + "frUnindexedDate1": { + "description": "Generic Unindexed Date 1", + "isPersonal": false, + "title": "Generic Unindexed Date 1", "type": "string", + "usageDescription": "", "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, - }, - "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, - }, - "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, - }, - "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/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, - }, - }, - "required": [ - "userName", - "givenName", - "sn", - "mail", - ], - "title": "Bravo realm - User", - "type": "object", - "viewable": true, - }, -} -`; - -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`] = ` -{ - "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", - ], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "mapping/mapping12": { - "_id": "mapping/mapping12", - "consentRequired": false, - "displayName": "mapping12", - "linkQualifiers": [], - "name": "mapping12", - "policies": [], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [], - "target": "managed/bravo_user", - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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___", - }, - "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"]", - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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__"]", - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, - { - "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__"]", - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "policy": { - "_id": "policy", - "additionalFiles": [], - "resources": [], - }, - }, -} -`; - -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`] = ` -{ - "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", - }, - ], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "privileges": { - "_id": "privileges", - "privileges": [], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "nativeName": "lastLoginTime", - "nativeType": "string", - "type": "array", - }, - "nonEditableAliases": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "nonEditableAliases", - "nativeType": "string", - "type": "array", - }, - "orgUnitPath": { - "nativeName": "orgUnitPath", - "nativeType": "string", - "type": "string", - }, - "organizations": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "organizations", - "nativeType": "object", - "type": "array", - }, - "phones": { - "items": { - "nativeType": "object", - "type": "object", - }, - "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, - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "provisioner.openicf.connectorinfoprovider": { - "_id": "provisioner.openicf.connectorinfoprovider", - "connectorsLocation": "connectors", - "remoteConnectorClients": [ - { - "enabled": true, - "name": "rcs1", - "useSSL": true, - }, - ], - "remoteConnectorClientsGroups": [], - "remoteConnectorServers": [], - "remoteConnectorServersGroups": [], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - "nativeName": "__roles__", - "nativeType": "string", - "type": "array", - }, - "__servicePlanIds__": { - "items": { - "nativeType": "string", - "type": "string", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "nativeName": "__addAppRoleAssignedTo__", - "nativeType": "object", - "type": "array", - }, - "__addAppRoleAssignments__": { - "flags": [ - "NOT_READABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "__addAppRoleAssignments__", - "nativeType": "object", - "type": "array", - }, - "__removeAppRoleAssignedTo__": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "__removeAppRoleAssignedTo__", - "nativeType": "string", - "type": "array", - }, - "__removeAppRoleAssignments__": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "__removeAppRoleAssignments__", - "nativeType": "string", - "type": "array", - }, - "accountEnabled": { - "nativeName": "accountEnabled", - "nativeType": "boolean", - "type": "boolean", - }, - "addIns": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "addIns", - "nativeType": "object", - "type": "array", - }, - "alternativeNames": { - "items": { - "nativeType": "string", - "type": "string", - }, - "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", - }, - "nativeName": "notificationEmailAddresses", - "nativeType": "string", - "type": "array", - }, - "oauth2PermissionScopes": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "oauth2PermissionScopes", - "nativeType": "object", - "type": "array", - }, - "passwordCredentials": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "passwordCredentials", - "nativeType": "object", - "type": "array", - }, - "preferredSingleSignOnMode": { - "nativeName": "preferredSingleSignOnMode", - "nativeType": "string", - "type": "string", - }, - "replyUrls": { - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "replyUrls", - "nativeType": "string", - "type": "array", - }, - "resourceSpecificApplicationPermissions": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "object", - "type": "object", - }, - "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", - }, - }, - "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, - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "nativeName": "lastLoginTime", - "nativeType": "string", - "type": "array", - }, - "nonEditableAliases": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "nonEditableAliases", - "nativeType": "string", - "type": "array", - }, - "orgUnitPath": { - "nativeName": "orgUnitPath", - "nativeType": "string", - "type": "string", - }, - "organizations": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "organizations", - "nativeType": "object", - "type": "array", - }, - "phones": { - "items": { - "nativeType": "object", - "type": "object", - }, - "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, - }, - }, - }, -} -`; - -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`] = ` -{ - "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": { - "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", - }, - "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", - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "identities/admin": { - "dnTemplate": "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", - }, - }, - }, - "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", - }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", - "type": "simple", - "writability": "readOnly", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "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=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", - }, - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "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_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": { - "_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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - "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/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", - }, - "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", - }, - "profileImage": { - "ldapAttribute": "labeledURI", - "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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "rest2LdapOptions": { - "mvccAttribute": "etag", - "readOnUpdatePolicy": "controls", - "returnNullForMissingProperties": true, - "useMvcc": true, - "usePermissiveModify": true, - "useSubtreeDelete": true, - }, - "security": { - "keyManager": "jvm", - "trustManager": "jvm", - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "router": { - "_id": "router", - "filters": [], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "script": { - "ECMAScript": { - "#javascript.debug": "&{openidm.script.javascript.debug}", - "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.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", - }, - "_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", - }, - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - ], - }, - { - "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", - }, - ], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "selfservice.kba": { - "_id": "selfservice.kba", - "kbaPropertyName": "kbaInfo", - "minimumAnswersToDefine": 1, - "minimumAnswersToVerify": 1, - "questions": { - "1": { - "en": "What's your favorite color?", - }, - }, - }, - }, -} -`; - -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`] = ` -{ - "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", - }, - ], - }, - }, -} -`; - -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`] = ` -{ - "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": [ - "/*", - ], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "servletfilter/payload": { - "_id": "servletfilter/payload", - "initParams": { - "maxRequestSizeInMegabytes": 5, - }, - "urlPatterns": [ - "&{openidm.servlet.alias}/*", - ], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "servletfilter/upload": { - "_id": "servletfilter/upload", - "initParams": { - "maxRequestSizeInMegabytes": 50, - }, - "urlPatterns": [ - "&{openidm.servlet.upload.alias}/*", - ], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "sync": { - "_id": "sync", - "mappings": [], - }, - }, -} -`; - -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`] = ` -{ - "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", - }, - }, -} -`; - -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`] = ` -{ - "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", - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "ui.context/enduser": { - "_id": "ui.context/enduser", - "defaultDir": "&{idm.install.dir}/ui/enduser", - "enabled": true, - "responseHeaders": { - "X-Frame-Options": "DENY", - }, - "urlContextRoot": "/", - }, - }, -} -`; - -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`] = ` -{ - "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", - }, - }, -} -`; - -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`] = ` -{ - "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", - }, - "selfRegistration": true, - }, - }, - }, -} -`; - -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`] = ` -{ - "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", - }, - ], - }, - }, - }, -} -`; - -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`] = ` -{ - "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", - }, - ], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - ], - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "ui/themerealm": { - "_id": "ui/themerealm", - "realm": { - "/alpha": [ - { - "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", - "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", - }, - ], - "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, - }, - }, - "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, - }, - "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, - }, - }, - "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, - }, - }, - }, - "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": "", - "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, - }, - "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": true, - }, - "social": { - "enabled": false, - }, - "trustedDevices": { - "enabled": true, - }, - }, - "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", - ], - "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", - }, - { - "_id": "b82755e8-fe9a-4d27-b66b-45e37ae12345", - "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": "", - "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, - }, - "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": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", - "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": "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, - }, - }, - }, - "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": "", - "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, - }, - "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", - }, - { - "_id": "86ce2f64-586d-44fe-8593-b12a85aac68d", - "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": "b82755e8-fe9a-4d27-b66b-45e37ae12345", - "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": "", - "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, - }, - "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", - }, - ], - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, - }, - }, - }, - "login": { - "login": { - "next": "Suivant", - }, - "overrides": { - "Password": "Mot de passe", - "UserName": "Nom d'utilisateur", - }, - }, - "shared": { - "sideMenu": { - "dashboard": "Tableau de bord", - }, - }, - }, - }, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, - }, - }, -} -`; - -exports[`frodo idm export "frodo idm export --entity-id script": should export the idm config entity with idm id "script" 1`] = `0`; - -exports[`frodo idm export "frodo idm export --entity-id script": should export the idm config entity with idm id "script" 2`] = `""`; - -exports[`frodo idm export "frodo idm export --entity-id script": should export the idm config entity with idm id "script": script.idm.json 1`] = ` -{ - "idm": { - "script": { - "ECMAScript": { - "#javascript.debug": "&{openidm.script.javascript.debug}", - "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.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", - }, - "_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 testDir1": should export all idm config entities to separate files in the "testDir" 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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": "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", - }, - ], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/audit.idm.json 1`] = ` -{ - "idm": { - "audit": { - "_id": "audit", - "auditServiceConfig": { - "availableAuditEventHandlers": [ - "org.forgerock.audit.handlers.csv.CsvAuditEventHandler", - "org.forgerock.audit.handlers.elasticsearch.ElasticsearchAuditEventHandler", - "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.splunk.SplunkAuditEventHandler", - "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", + "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, + }, + "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, + }, + "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/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, + }, + }, + "required": [ + "userName", + "givenName", + "sn", + "mail", ], + "title": "Bravo realm - User", + "type": "object", + "viewable": true, }, }, { - "class": "org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler", - "config": { - "enabled": false, - "name": "repo", - "topics": [ - "access", - "activity", - "sync", - "authentication", - "config", - ], - }, - }, - ], - "eventTopics": { - "activity": { - "filter": { - "actions": [ - "create", - "update", - "delete", - "patch", - "action", + "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", ], - }, - "passwordFields": [ - "password", - ], - "watchedFields": [], - }, - "config": { - "filter": { - "actions": [ - "create", - "update", - "delete", - "patch", - "action", + "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, + }, + }, + "required": [ + "name", ], + "title": "Alpha realm - Role", + "type": "object", }, }, - }, - "exceptionFormatter": { - "file": "bin/defaults/script/audit/stacktraceFormatter.js", - "type": "text/javascript", - }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "authentication": { - "_id": "authentication", - "rsFilter": { - "augmentSecurityContext": { - "source": "require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, security.authorization.component.includes('/alpha_') ? 'alphaOrgPrivileges' : 'bravoOrgPrivileges', 'privilegeAssignments');", - "type": "text/javascript", - }, - "cache": { - "maxTimeout": "300 seconds", - }, - "scopes": [ - "fr:idm:*", - ], - "staticUserMapping": [ - { - "localUser": "internal/user/idm-provisioning", - "roles": [ - "internal/role/openidm-admin", - ], - "subject": "autoid-resource-server", - }, - ], - "subjectMapping": [ - { - "additionalUserFields": [ - "adminOfOrg", - "ownerOfOrg", - ], - "defaultRoles": [ - "internal/role/openidm-authorized", + { + "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", ], - "propertyMapping": { - "sub": "_id", + "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", + "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, + }, }, - "queryOnResource": "managed/{{substring realm 1}}_user", - "userRoles": "authzRoles/*", + "required": [ + "name", + ], + "title": "Bravo realm - Role", + "type": "object", }, - ], - }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "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, + "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": { + "_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, + }, + "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/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, + }, }, - ], - "actions": [], - "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", - "name": "owner-view-update-delete-admins-and-members", - "path": "managed/bravo_user", - "permissions": [ - "VIEW", - "DELETE", - "UPDATE", - ], + "required": [ + "name", + "description", + "mapping", + ], + "title": "Alpha realm - Assignment", + "type": "object", + }, }, { - "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, + "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": { + "_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", + "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, + }, + "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, + }, }, - ], - "actions": [], - "filter": "/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)", - "name": "owner-create-admins", - "path": "managed/bravo_user", - "permissions": [ - "CREATE", - ], + "required": [ + "name", + "description", + "mapping", + ], + "title": "Bravo realm - Assignment", + "type": "object", + }, }, { - "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, + "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, + }, }, - ], - "actions": [], - "filter": "/adminIDs eq "{{_id}}" or /parentAdminIDs eq "{{_id}}"", - "name": "admin-view-update-delete-orgs", - "path": "managed/bravo_organization", - "permissions": [ - "VIEW", - "UPDATE", - "DELETE", - ], + "required": [ + "name", + ], + "title": "Alpha realm - Organization", + "type": "object", + }, }, { - "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, + "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, + }, }, - ], - "actions": [], - "filter": "/parent pr", - "name": "admin-create-orgs", - "path": "managed/bravo_organization", - "permissions": [ - "CREATE", - ], + "required": [ + "name", + ], + "title": "Bravo realm - Organization", + "type": "object", + }, }, { - "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, + "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, + }, }, - ], - "actions": [], - "filter": "/memberOfOrgIDs eq "__org_id_placeholder__"", - "name": "admin-view-update-delete-members", - "path": "managed/bravo_user", - "permissions": [ - "VIEW", - "DELETE", - "UPDATE", - ], + "required": [ + "name", + ], + "title": "Alpha realm - Group", + "viewable": true, + }, }, { - "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, + "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, + }, }, - { - "attribute": "memberOfOrgIDs", - "readOnly": true, + "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, + "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": { + "_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, + }, + "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": { + "_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": { + "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, + }, }, - ], - "actions": [], - "filter": "/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)", - "name": "admin-create-members", - "path": "managed/bravo_user", - "permissions": [ - "CREATE", - ], + "required": [ + "name", + ], + "title": "Alpha realm - Application", + "type": "object", + }, }, - ], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "emailTemplate/baselineDemoEmailVerification": { - "_id": "emailTemplate/baselineDemoEmailVerification", - "defaultLocale": "en", - "displayName": "Baseline Demo Email Verification", - "enabled": true, - "from": "security@example.com", - "html": { - "en": "

Email Verification


Hello,

Great to have you on board.



Verify Your Account

Finish the steps of verification for the account by clicking the button below.


Click Here to Verify Your Account

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

", - }, - "message": { - "en": "

Email Verification


Hello,

Great to have you on board.



Verify Your Account

Finish the steps of verfication for the account by clicking the button below.


Click Here to Verify Your Account

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

", - }, - "mimeType": "text/html", - "styles": "body { - background-color: #f6f6f6; - color: #455469; - padding: 60px; - text-align: center -} - a { - text-decoration: none; - color: #109cf1; -} - h1 { - font-size: 40px; - text-align: center; -} - h2 { - font-size: 36px; -} - h3 { - font-size: 32px; -} - h4 { - font-size: 28px; -} - h5 { - font-size: 24px; -} - h6 { - font-size: 20px; -} - .content { - background-color: #fff; - border-radius: 4px; - margin: 0 auto; - padding: 48px; - width: 600px -} - .button { - background-color: #109cf1; - border: none; - color: white; - padding: 15px 32px; - text-align: center; - text-decoration: none; - display: inline-block; - font-size: 16px; -} - ", - "subject": { - "en": "Please verify your email address", - }, - "templateId": "baselineDemoEmailVerification", - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "emailTemplate/baselineDemoMagicLink": { - "_id": "emailTemplate/baselineDemoMagicLink", - "defaultLocale": "en", - "displayName": "Baseline Demo Magic Link", - "enabled": true, - "from": "security@example.com", - "html": { - "en": "

Welcome back


Hello,

You're receiving this email because you requested a link to sign you into your account.



Finish Signing In

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

", - }, - "message": { - "en": "

Welcome back


Hello,

You're receiving this email because you requested a link to sign you into your account.



Finish Signing In

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

", - }, - "mimeType": "text/html", - "styles": "body { - background-color: #f6f6f6; - color: #455469; - padding: 60px; - text-align: center -} - a { - text-decoration: none; - color: #109cf1; -} - h1 { - font-size: 40px; - text-align: center; -} - h2 { - font-size: 36px; -} - h3 { - font-size: 32px; -} - h4 { - font-size: 28px; -} - h5 { - font-size: 24px; -} - h6 { - font-size: 20px; -} - .content { - background-color: #fff; - border-radius: 4px; - margin: 0 auto; - padding: 48px; - width: 600px -} - .button { - background-color: #109cf1; - border: none; - color: white; - padding: 15px 32px; - text-align: center; - text-decoration: none; - display: inline-block; - font-size: 16px; + { + "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": { + "_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, + }, + "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": { + "_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": { + "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": "Bravo realm - Application", + "type": "object", + }, + }, + ], + }, + }, + "meta": Any, } - ", - "subject": { - "en": "Your sign-in link", - }, - "templateId": "baselineDemoMagicLink", +`; + +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`] = ` +{ + "idm": { + "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", }, }, "meta": Any, } `; -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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/managedAlpha_user_systemAzureUser.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

", + "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, }, - "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", + "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", }, }, "meta": Any, } `; -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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/managedBravo_group_managedBravo_group.idm.json 1`] = ` { "idm": { - "emailTemplate/frEmailUpdated": { - "_id": "emailTemplate/frEmailUpdated", - "defaultLocale": "en", - "enabled": true, - "from": "", - "message": { - "en": "
ForgeRock Logo

Your account email has changed

Your ForgeRock Identity Cloud email has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
", - }, - "mimeType": "text/html", - "subject": { - "en": "Your email has been updated", - }, + "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 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/managedBravo_user_managedBravo_user0.idm.json 1`] = ` { "idm": { - "emailTemplate/frForgotUsername": { - "_id": "emailTemplate/frForgotUsername", - "defaultLocale": "en", - "enabled": true, - "from": "", - "message": { - "en": "
ForgeRock Logo

Forgot your username?

Your username is {{ object.userName }}.

Sign In to Your Account

If you didn't request this, please ignore this email.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
", - }, - "mimeType": "text/html", - "subject": { - "en": "Forgot Username", - }, + "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 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/mapping12.idm.json 1`] = ` { "idm": { - "emailTemplate/frOnboarding": { - "_id": "emailTemplate/frOnboarding", - "defaultLocale": "en", - "enabled": true, - "from": "", - "message": { - "en": "
ForgeRock Logo

Your account is ready

Your ForgeRock Identity Cloud account is ready. Click the button below to complete registration and access your environment.

Complete Registration

If you did not request this account, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
", - }, - "mimeType": "text/html", - "subject": { - "en": "Complete your ForgeRock Identity Cloud registration", - }, + "mapping/mapping12": { + "_id": "mapping/mapping12", + "consentRequired": false, + "displayName": "mapping12", + "linkQualifiers": [], + "name": "mapping12", + "policies": [], + "properties": [], + "source": "managed/bravo_user", + "syncAfter": [], + "target": "managed/bravo_user", }, }, "meta": Any, } `; -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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/systemAzure__group___managedAlpha_assignment.idm.json 1`] = ` { "idm": { - "emailTemplate/frPasswordUpdated": { - "_id": "emailTemplate/frPasswordUpdated", - "defaultLocale": "en", - "enabled": true, - "from": "", - "message": { - "en": "
ForgeRock Logo

Your account password has changed

Your ForgeRock Identity Cloud password has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
", - }, - "mimeType": "text/html", - "subject": { - "en": "Your password has been updated", + "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___", + }, + "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"]", }, }, }, @@ -23898,20 +13422,126 @@ 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/systemAzureDirectoryrole_managedAlpha_assignment.idm.json 1`] = ` { "idm": { - "emailTemplate/frProfileUpdated": { - "_id": "emailTemplate/frProfileUpdated", - "defaultLocale": "en", - "enabled": true, - "from": "", - "message": { - "en": "
ForgeRock Logo

Your account profile has changed

Your ForgeRock Identity Cloud profile has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
", - }, - "mimeType": "text/html", - "subject": { - "en": "Your profile has been updated", + "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__"]", }, }, }, @@ -23919,20 +13549,126 @@ 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/systemAzureServiceplan_managedAlpha_assignment.idm.json 1`] = ` { "idm": { - "emailTemplate/frResetPassword": { - "_id": "emailTemplate/frResetPassword", - "defaultLocale": "en", - "enabled": true, - "from": "", - "message": { - "en": "
ForgeRock Logo

Reset your password

It seems you have forgotten the password for your ForgeRock Identity Cloud account. Click the button below to reset your password and access your environment.

Reset Password

If you did not request to reset your password, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
", - }, - "mimeType": "text/html", - "subject": { - "en": "Reset your password", + "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", + }, + }, + { + "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__"]", }, }, }, @@ -23940,187 +13676,619 @@ 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/mapping/systemAzureUser_managedAlpha_user.idm.json 1`] = ` { "idm": { - "emailTemplate/frUsernameUpdated": { - "_id": "emailTemplate/frUsernameUpdated", - "defaultLocale": "en", - "enabled": true, - "from": "", - "message": { - "en": "
ForgeRock Logo

Your account username has changed

Your ForgeRock Identity Cloud username has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
", - }, - "mimeType": "text/html", - "subject": { - "en": "Your username has been updated", - }, + "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", }, }, "meta": Any, } `; -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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/policy.idm.json 1`] = ` { "idm": { - "emailTemplate/idv": { - "_id": "emailTemplate/idv", - "defaultLocale": "en", - "description": "Identity Verification Invitation", - "displayName": "idv", - "enabled": true, - "from": "", - "html": { - "en": "

Click the link below to verify your identity:

Verify my identity now

", - "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", - }, - "message": { - "en": "

Click the link below to verify your identity:

Verify my identity now

", - "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", - }, - "mimeType": "text/html", - "name": "registration", - "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": "You have been invited to verify your identity", - "fr": "Créer un nouveau compte", - }, - "templateId": "idv", + "policy": { + "_id": "policy", + "additionalFiles": [], + "resources": [], }, }, "meta": Any, } `; -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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/privilegeAssignments.idm.json 1`] = ` { "idm": { - "emailTemplate/joiner": { - "_id": "emailTemplate/joiner", - "advancedEditor": true, - "defaultLocale": "en", - "description": "This email will be sent onCreate of user to the external eMail address provided during creation. An OTP will also be sent to Telephone Number provided during creation to validate the user. The user will then be able to set their password and ForgeRock Push Authenticator", - "displayName": "Joiner", - "enabled": true, - "from": ""Encore HR" ", - "html": { - "en": "", - }, - "message": { - "en": " - - -
-

- -

-

Welcome to Encore {{object.givenName}} {{object.sn}}

-

Please click on the link below to validate your phone number with a One Time Code that will be sent via SMS or called to you depending on your phone type.

-

You will see your UserName and have the ability to set your password that will be used to login to Encore resources.

-

As we believe in enhanced security, you will also be setting up a Push Notification for future use.

- Click to Join Encore -
- -", - }, - "mimeType": "text/html", - "styles": "body { - background-color: #324054; - color: #455469; - 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": "Welcome to Encore!", - }, - "templateId": "joiner", + "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 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/privileges.idm.json 1`] = ` { "idm": { - "emailTemplate/registerPasswordlessDevice": { - "_id": "emailTemplate/registerPasswordlessDevice", - "defaultLocale": "en", - "description": "", - "displayName": "Register Passwordless Device", - "enabled": true, - "from": ""ForgeRock Identity Cloud" ", - "html": { - "en": "

Welcome back

alt text


Hello,

You're receiving this email because you requested a link to register a new passwordless device.



Register New Device

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

", - }, - "message": { - "en": "

Welcome back

alt text


Hello,

You're receiving this email because you requested a link to register a new passwordless device.



Register New Device

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

", - }, - "mimeType": "text/html", - "styles": "body { - background-color: #324054; - color: #455469; - 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 magic link is here - register new WebAuthN device", - }, - "templateId": "registerPasswordlessDevice", + "privileges": { + "_id": "privileges", + "privileges": [], }, }, "meta": Any, } `; -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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/provisioner.openic/GoogleApps.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

", + "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, }, - "message": { - "en": "

This is your registration email.

Email verification link

", - "fr": "

Ceci est votre mail d'inscription.

Lien de vérification email

", + "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", }, - "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", + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "nativeName": "lastLoginTime", + "nativeType": "string", + "type": "array", + }, + "nonEditableAliases": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "nonEditableAliases", + "nativeType": "string", + "type": "array", + }, + "orgUnitPath": { + "nativeName": "orgUnitPath", + "nativeType": "string", + "type": "string", + }, + "organizations": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "organizations", + "nativeType": "object", + "type": "array", + }, + "phones": { + "items": { + "nativeType": "object", + "type": "object", + }, + "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, }, }, }, @@ -24128,90 +14296,760 @@ 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/provisioner.openicf.connectorinfoprovider.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", - }, + "provisioner.openicf.connectorinfoprovider": { + "_id": "provisioner.openicf.connectorinfoprovider", + "connectorsLocation": "connectors", + "remoteConnectorClients": [ + { + "enabled": true, + "name": "rcs1", + "useSSL": true, + }, + ], + "remoteConnectorClientsGroups": [], + "remoteConnectorServers": [], + "remoteConnectorServersGroups": [], }, }, "meta": Any, } `; -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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/provisioner.openicf/Azure.idm.json 1`] = ` { "idm": { - "emailTemplate/updatePassword": { - "_id": "emailTemplate/updatePassword", - "defaultLocale": "en", - "enabled": true, - "from": "", - "html": { - "en": "

Verify email to update password

Update password link

", + "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, }, - "message": { - "en": "

Verify email to update password

Update password link

", + "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", }, - "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", + "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", + }, + "nativeName": "__roles__", + "nativeType": "string", + "type": "array", + }, + "__servicePlanIds__": { + "items": { + "nativeType": "string", + "type": "string", + }, + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "nativeName": "__addAppRoleAssignedTo__", + "nativeType": "object", + "type": "array", + }, + "__addAppRoleAssignments__": { + "flags": [ + "NOT_READABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "__addAppRoleAssignments__", + "nativeType": "object", + "type": "array", + }, + "__removeAppRoleAssignedTo__": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "__removeAppRoleAssignedTo__", + "nativeType": "string", + "type": "array", + }, + "__removeAppRoleAssignments__": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + "NOT_RETURNED_BY_DEFAULT", + ], + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "__removeAppRoleAssignments__", + "nativeType": "string", + "type": "array", + }, + "accountEnabled": { + "nativeName": "accountEnabled", + "nativeType": "boolean", + "type": "boolean", + }, + "addIns": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "addIns", + "nativeType": "object", + "type": "array", + }, + "alternativeNames": { + "items": { + "nativeType": "string", + "type": "string", + }, + "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", + }, + "nativeName": "notificationEmailAddresses", + "nativeType": "string", + "type": "array", + }, + "oauth2PermissionScopes": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "oauth2PermissionScopes", + "nativeType": "object", + "type": "array", + }, + "passwordCredentials": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "passwordCredentials", + "nativeType": "object", + "type": "array", + }, + "preferredSingleSignOnMode": { + "nativeName": "preferredSingleSignOnMode", + "nativeType": "string", + "type": "string", + }, + "replyUrls": { + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "replyUrls", + "nativeType": "string", + "type": "array", + }, + "resourceSpecificApplicationPermissions": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "object", + "type": "object", + }, + "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", + }, + }, + "type": "object", + }, }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "emailTemplate/welcome": { - "_id": "emailTemplate/welcome", - "defaultLocale": "en", - "displayName": "Welcome", - "enabled": true, - "from": "saas@forgerock.com", - "html": { - "en": "

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

", + "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, }, - "message": { - "en": "

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

", + "poolConfigOption": { + "maxIdle": 10, + "maxObjects": 10, + "maxWait": 150000, + "minEvictableIdleTimeMillis": 120000, + "minIdle": 1, }, - "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", + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, }, }, }, @@ -24219,5910 +15057,7934 @@ 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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/provisioner.openicf/GoogleApps.idm.json 1`] = ` { "idm": { - "entityId": { - "_id": "entityId", - "defaultLocale": "en", - "displayName": "Frodo Test Email Template Three", - "enabled": true, - "from": "", - "message": { - "en": "

You started a login or profile update that requires MFA.

Click to Proceed

", - }, - "mimeType": "text/html", - "subject": { - "en": "Multi-Factor Email for Identity Cloud login", + "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, }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "external.email": { - "_id": "external.email", - "auth": { - "enable": true, - "password": "&{sendgrid.api.key}", - "username": "apikey", + "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", }, - "connectiontimeout": 300000, - "debug": false, - "from": "&{email.sender.address}", - "host": "smtp.sendgrid.net", - "port": 587, - "smtpProperties": [], - "ssl": { - "enable": false, + "enabled": { + "$bool": "&{esv.gac.enable.connector}", }, - "starttls": { - "enable": true, + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "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", + }, + "nativeName": "lastLoginTime", + "nativeType": "string", + "type": "array", + }, + "nonEditableAliases": { + "flags": [ + "NOT_CREATABLE", + "NOT_UPDATEABLE", + ], + "items": { + "nativeType": "string", + "type": "string", + }, + "nativeName": "nonEditableAliases", + "nativeType": "string", + "type": "array", + }, + "orgUnitPath": { + "nativeName": "orgUnitPath", + "nativeType": "string", + "type": "string", + }, + "organizations": { + "items": { + "nativeType": "object", + "type": "object", + }, + "nativeName": "organizations", + "nativeType": "object", + "type": "array", + }, + "phones": { + "items": { + "nativeType": "object", + "type": "object", + }, + "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", + }, }, - "threadPoolSize": 20, - "timeout": 300000, - "writetimeout": 300000, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "external.emailDefault": { - "_id": "external.emailDefault", - "auth": { - "enable": true, - "password": "&{sendgrid.api.key}", - "username": "apikey", + "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, }, - "connectiontimeout": 300000, - "debug": false, - "from": "&{email.sender.address}", - "host": "smtp.sendgrid.net", - "port": 587, - "smtpProperties": [], - "ssl": { - "enable": false, + "poolConfigOption": { + "maxIdle": 10, + "maxObjects": 10, + "maxWait": 150000, + "minEvictableIdleTimeMillis": 120000, + "minIdle": 1, }, - "starttls": { - "enable": true, + "resultsHandlerConfig": { + "enableAttributesToGetSearchResultsHandler": true, + "enableCaseInsensitiveFilter": false, + "enableFilteredResultsHandler": false, + "enableNormalizingResultsHandler": false, }, - "threadPoolSize": 20, - "timeout": 300000, - "writetimeout": 300000, }, }, "meta": Any, } `; -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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/repo.ds.idm.json 1`] = ` { "idm": { - "fieldPolicy/alpha_user": { - "_id": "fieldPolicy/alpha_user", - "defaultPasswordStorageScheme": [ - { - "_id": "PBKDF2-HMAC-SHA256", + "repo.ds": { + "_id": "repo.ds", + "commands": { + "delete-mapping-links": { + "_queryFilter": "/linkType eq "\${mapping}"", + "operation": "DELETE", }, - ], - "passwordAttribute": "password", - "resourceCollection": "managed/alpha_user", - "type": "password-policy", - "validator": [ - { - "_id": "alpha_userPasswordPolicy-length-based-password-validator", - "enabled": true, - "maxPasswordLength": 0, - "minPasswordLength": 10, - "type": "length-based", + "delete-target-ids-for-recon": { + "_queryFilter": "/reconId eq "\${reconId}"", + "operation": "DELETE", }, - { - "_id": "alpha_userPasswordPolicy-attribute-value-password-validator", - "checkSubstrings": true, - "enabled": true, - "matchAttribute": [ - "mail", - "userName", - "givenName", - "sn", + }, + "embedded": false, + "ldapConnectionFactories": { + "bind": { + "availabilityCheckIntervalSeconds": 30, + "availabilityCheckTimeoutMilliSeconds": 10000, + "connectionPoolSize": 50, + "connectionSecurity": "none", + "heartBeatIntervalSeconds": 60, + "heartBeatTimeoutMilliSeconds": 10000, + "primaryLdapServers": [ + { + "hostname": "userstore-0.userstore", + "port": 1389, + }, ], - "minSubstringLength": 5, - "testReversedPassword": true, - "type": "attribute-value", - }, - { - "_id": "alpha_userPasswordPolicy-character-set-password-validator", - "allowUnclassifiedCharacters": true, - "characterSet": [ - "0:abcdefghijklmnopqrstuvwxyz", - "0:ABCDEFGHIJKLMNOPQRSTUVWXYZ", - "0:0123456789", - "0:~!@#$%^&*()-_=+[]{}|;:,.<>/?"'\\\`", + "secondaryLdapServers": [ + { + "hostname": "userstore-2.userstore", + "port": 1389, + }, ], - "enabled": true, - "minCharacterSets": 4, - "type": "character-set", }, - ], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "fieldPolicy/bravo_user": { - "_id": "fieldPolicy/bravo_user", - "defaultPasswordStorageScheme": [ - { - "_id": "PBKDF2-HMAC-SHA256", + "root": { + "authentication": { + "simple": { + "bindDn": "uid=admin", + "bindPassword": "&{userstore.password}", + }, + }, + "inheritFrom": "bind", }, - ], - "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", + }, + "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", + }, }, - { - "_id": "bravo_userPasswordPolicy-attribute-value-password-validator", - "checkSubstrings": true, - "enabled": true, - "matchAttribute": [ - "mail", - "userName", - "givenName", - "sn", - ], - "minSubstringLength": 5, - "testReversedPassword": true, - "type": "attribute-value", + "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", + }, }, - { - "_id": "bravo_userPasswordPolicy-character-set-password-validator", - "allowUnclassifiedCharacters": true, - "characterSet": [ - "1:abcdefghijklmnopqrstuvwxyz", - "1:ABCDEFGHIJKLMNOPQRSTUVWXYZ", - "1:0123456789", - "1:~!@#$%^&*()-_=+[]{}|;:,.<>/?"'\\\`", - ], - "enabled": true, - "type": "character-set", + }, + "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", + }, + }, + }, + "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", + }, + "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", + }, + }, + }, + "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", + }, + }, + }, + "identities/admin": { + "dnTemplate": "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", + }, + }, + }, + "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", + }, + "count": { + "isRequired": true, + "ldapAttribute": "numSubordinates", + "type": "simple", + "writability": "readOnly", + }, + }, + }, + "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", + }, + }, + }, + "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", + }, + }, + }, + "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", + }, + }, + }, + "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", + }, + }, + }, + "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", + }, + }, + }, + "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", + }, + }, + }, + "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", + }, + }, + }, + "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=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", + }, + }, + }, }, - ], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "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", - }, - }, - ], + "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", + }, + }, + }, + "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", + }, + }, + }, + "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", }, }, }, - }, - ], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "managed": { - "_id": "managed", - "objects": [ - { - "lastSync": { - "effectiveAssignmentsProperty": "effectiveAssignments", - "lastSyncProperty": "lastSync", + "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", + }, + }, + }, + "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_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": { + "_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", + }, + }, }, - "meta": { - "property": "_meta", - "resourceCollection": "managed/alpha_usermeta", - "trackedProperties": [ - "createDate", - "lastChanged", + "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", + }, + }, }, - "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", + "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": { - "description": "User ID", - "isPersonal": false, - "policies": [ - { - "params": { - "forbiddenChars": [ - "/", - ], - }, - "policyId": "cannot-contain-characters", - }, - ], - "searchable": false, - "type": "string", - "usageDescription": "", - "userEditable": false, - "viewable": false, + "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": { - "default": "active", - "description": "Status", - "isPersonal": false, - "searchable": true, - "title": "Status", - "type": "string", - "usageDescription": "", - "userEditable": false, - "viewable": true, + "ldapAttribute": "inetUserStatus", + "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/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, + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-organization-admin", + "primaryKey": "uid", + "resourcePath": "managed/bravo_organization", + "type": "reference", }, "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, + "isMultiValued": true, + "ldapAttribute": "iplanet-am-user-alias-list", + "type": "simple", }, "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, + "isMultiValued": true, + "ldapAttribute": "assignedDashboard", + "type": "simple", }, "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, + "isMultiValued": true, + "ldapAttribute": "fr-idm-managed-user-authzroles-internal-role", + "primaryKey": "cn", + "resourcePath": "internal/role", + "type": "reference", }, "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, + "ldapAttribute": "l", + "type": "simple", + }, + "cn": { + "ldapAttribute": "cn", + "type": "simple", + }, + "consentedMappings": { + "isMultiValued": true, + "ldapAttribute": "fr-idm-consentedMapping", + "type": "json", }, "country": { - "description": "Country", - "isPersonal": false, - "title": "Country", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "co", + "type": "simple", }, "description": { - "description": "Description", - "isPersonal": false, - "searchable": true, - "title": "Description", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "description", + "type": "simple", }, - "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, + "displayName": { + "ldapAttribute": "displayName", + "type": "simple", }, "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, + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveAssignment", + "type": "json", }, "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, + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveGroup", + "type": "json", }, "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, + "isMultiValued": true, + "ldapAttribute": "fr-idm-effectiveRole", + "type": "json", }, "frIndexedDate1": { - "description": "Generic Indexed Date 1", - "isPersonal": false, - "title": "Generic Indexed Date 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-idate1", + "type": "simple", }, "frIndexedDate2": { - "description": "Generic Indexed Date 2", - "isPersonal": false, - "title": "Generic Indexed Date 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-idate2", + "type": "simple", }, "frIndexedDate3": { - "description": "Generic Indexed Date 3", - "isPersonal": false, - "title": "Generic Indexed Date 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-idate3", + "type": "simple", }, "frIndexedDate4": { - "description": "Generic Indexed Date 4", - "isPersonal": false, - "title": "Generic Indexed Date 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-idate4", + "type": "simple", }, "frIndexedDate5": { - "description": "Generic Indexed Date 5", - "isPersonal": false, - "title": "Generic Indexed Date 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-idate5", + "type": "simple", }, "frIndexedInteger1": { - "description": "Generic Indexed Integer 1", - "isPersonal": false, - "title": "Generic Indexed Integer 1", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-iint1", + "type": "simple", }, "frIndexedInteger2": { - "description": "Generic Indexed Integer 2", - "isPersonal": false, - "title": "Generic Indexed Integer 2", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-iint2", + "type": "simple", }, "frIndexedInteger3": { - "description": "Generic Indexed Integer 3", - "isPersonal": false, - "title": "Generic Indexed Integer 3", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-iint3", + "type": "simple", }, "frIndexedInteger4": { - "description": "Generic Indexed Integer 4", - "isPersonal": false, - "title": "Generic Indexed Integer 4", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-iint4", + "type": "simple", }, "frIndexedInteger5": { - "description": "Generic Indexed Integer 5", - "isPersonal": false, - "title": "Generic Indexed Integer 5", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "ldapAttribute": "fr-attr-iint5", + "type": "simple", }, "frIndexedMultivalued1": { - "description": "Generic Indexed Multivalue 1", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 1", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti1", + "type": "simple", }, "frIndexedMultivalued2": { - "description": "Generic Indexed Multivalue 2", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 2", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti2", + "type": "simple", }, "frIndexedMultivalued3": { - "description": "Generic Indexed Multivalue 3", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 3", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti3", + "type": "simple", }, "frIndexedMultivalued4": { - "description": "Generic Indexed Multivalue 4", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 4", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "isMultiValued": true, + "ldapAttribute": "fr-attr-imulti4", + "type": "simple", }, "frIndexedMultivalued5": { - "description": "Generic Indexed Multivalue 5", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 5", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "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/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", + }, + "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", + }, + "profileImage": { + "ldapAttribute": "labeledURI", + "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", + }, + }, + }, + "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", }, - "frIndexedString1": { - "description": "Generic Indexed String 1", - "isPersonal": false, - "title": "Generic Indexed String 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + }, + }, + "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", + }, + }, + }, + "rest2LdapOptions": { + "mvccAttribute": "etag", + "readOnUpdatePolicy": "controls", + "returnNullForMissingProperties": true, + "useMvcc": true, + "usePermissiveModify": true, + "useSubtreeDelete": true, + }, + "security": { + "keyManager": "jvm", + "trustManager": "jvm", + }, + }, + }, + "meta": Any, +} +`; + +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`] = ` +{ + "idm": { + "router": { + "_id": "router", + "filters": [], + }, + }, + "meta": Any, +} +`; + +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`] = ` +{ + "idm": { + "script": { + "ECMAScript": { + "#javascript.debug": "&{openidm.script.javascript.debug}", + "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.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", + }, + "_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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/secrets.idm.json 1`] = ` +{ + "idm": { + "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", + ], }, - "frIndexedString2": { - "description": "Generic Indexed String 2", - "isPersonal": false, - "title": "Generic Indexed String 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.config.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "frIndexedString3": { - "description": "Generic Indexed String 3", - "isPersonal": false, - "title": "Generic Indexed String 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.password.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "frIndexedString4": { - "description": "Generic Indexed String 4", - "isPersonal": false, - "title": "Generic Indexed String 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + { + "aliases": [ + "&{openidm.https.keystore.cert.alias|openidm-localhost}", + ], + "secretId": "idm.jwt.session.module.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "frIndexedString5": { - "description": "Generic Indexed String 5", - "isPersonal": false, - "title": "Generic Indexed String 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + { + "aliases": [ + "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}", + ], + "secretId": "idm.jwt.session.module.signing", + "types": [ + "SIGN", + "VERIFY", + ], }, - "frUnindexedDate1": { - "description": "Generic Unindexed Date 1", - "isPersonal": false, - "title": "Generic Unindexed Date 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + { + "aliases": [ + "selfservice", + ], + "secretId": "idm.selfservice.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "frUnindexedDate2": { - "description": "Generic Unindexed Date 2", - "isPersonal": false, - "title": "Generic Unindexed Date 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + { + "aliases": [ + "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}", + ], + "secretId": "idm.selfservice.signing", + "types": [ + "SIGN", + "VERIFY", + ], }, - "frUnindexedDate3": { - "description": "Generic Unindexed Date 3", - "isPersonal": false, - "title": "Generic Unindexed Date 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + { + "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", + }, + ], + }, + }, + "meta": Any, +} +`; + +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`] = ` +{ + "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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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", }, - "frUnindexedDate4": { - "description": "Generic Unindexed Date 4", - "isPersonal": false, - "title": "Generic Unindexed Date 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "default": [ + "Default value string", + ], + "source": "accountStatus", + "target": "applications", + "transform": { + "globals": {}, + "source": "console.log("hello");", + "type": "text/javascript", }, - "frUnindexedDate5": { - "description": "Generic Unindexed Date 5", - "isPersonal": false, - "title": "Generic Unindexed Date 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + }, + ], + "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__", + ], }, - "frUnindexedInteger1": { - "description": "Generic Unindexed Integer 1", - "isPersonal": false, - "title": "Generic Unindexed Integer 1", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "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", }, - "frUnindexedInteger2": { - "description": "Generic Unindexed Integer 2", - "isPersonal": false, - "title": "Generic Unindexed Integer 2", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "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", }, - "frUnindexedInteger3": { - "description": "Generic Unindexed Integer 3", - "isPersonal": false, - "title": "Generic Unindexed Integer 3", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "source": "custom_password_encrypted", + "target": "__PASSWORD__", + "transform": { + "globals": {}, + "source": "openidm.decrypt(source);", + "type": "text/javascript", }, - "frUnindexedInteger4": { - "description": "Generic Unindexed Integer 4", - "isPersonal": false, - "title": "Generic Unindexed Integer 4", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + }, + { + "source": "cn", + "target": "__NAME__", + "transform": { + "globals": {}, + "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", + "type": "text/javascript", }, - "frUnindexedInteger5": { - "description": "Generic Unindexed Integer 5", - "isPersonal": false, - "title": "Generic Unindexed Integer 5", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + }, + { + "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", }, - "frUnindexedMultivalued1": { - "description": "Generic Unindexed Multivalue 1", - "isPersonal": false, - "items": { - "type": "string", + }, + ], + "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", + }, + }, + ], + }, + }, + "meta": Any, +} +`; + +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`] = ` +{ + "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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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", + }, + "selfRegistration": true, + }, + }, + }, + "meta": Any, +} +`; + +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`] = ` +{ + "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", }, - "title": "Generic Unindexed Multivalue 1", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedMultivalued2": { - "description": "Generic Unindexed Multivalue 2", - "isPersonal": false, - "items": { - "type": "string", + { + "href": "#resource/managed/alpha_role/list/", + "icon": "fa-check-square-o", + "name": "Manage Roles", }, - "title": "Generic Unindexed Multivalue 2", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedMultivalued3": { - "description": "Generic Unindexed Multivalue 3", - "isPersonal": false, - "items": { - "type": "string", + { + "href": "#connectors/add/", + "icon": "fa-database", + "name": "Add Connector", }, - "title": "Generic Unindexed Multivalue 3", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedMultivalued4": { - "description": "Generic Unindexed Multivalue 4", - "isPersonal": false, - "items": { - "type": "string", + { + "href": "#mapping/add/", + "icon": "fa-map-marker", + "name": "Create Mapping", }, - "title": "Generic Unindexed Multivalue 4", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, - }, - "frUnindexedMultivalued5": { - "description": "Generic Unindexed Multivalue 5", - "isPersonal": false, - "items": { - "type": "string", + { + "href": "#managed/add/", + "icon": "fa-tablet", + "name": "Add Device", }, - "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, + { + "href": "#settings/", + "icon": "fa-user", + "name": "Configure System Preferences", }, - "relationshipGrantTemporalConstraintsEnforced": false, - "returnByDefault": false, - "title": "Groups", - "type": "array", - "usageDescription": "", - "userEditable": false, - "viewable": true, + ], + "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, + ], }, - "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, + "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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/ui/themeconfig.idm.json 1`] = ` +{ + "idm": { + "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", + ], + }, + }, + "meta": Any, +} +`; + +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`] = ` +{ + "idm": { + "ui/themerealm": { + "_id": "ui/themerealm", + "realm": { + "/alpha": [ + { + "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": 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", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, }, - }, - "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", + "securityQuestions": { + "enabled": false, }, - ], - "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", + "twoStepVerification": { + "enabled": true, }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Manager _refProperties", - "type": "object", + "username": { + "enabled": true, }, }, - "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, + "consent": { + "enabled": false, }, - "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, + "oauthApplications": { + "enabled": 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, + "personalInformation": { + "enabled": 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, + "preferences": { + "enabled": false, }, - "password": { - "description": "Password", - "isPersonal": false, - "isProtected": true, - "scope": "private", - "searchable": false, - "title": "Password", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": false, + "social": { + "enabled": false, }, - "postalAddress": { - "description": "Address 1", - "isPersonal": true, - "title": "Address 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "trustedDevices": { + "enabled": true, }, - "postalCode": { - "description": "Postal Code", - "isPersonal": false, - "title": "Postal Code", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": 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", + }, + ], + "alpha": [ + { + "_id": "cd6c93e2-52e2-4340-9770-66a588343841", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "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", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, }, - }, - "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", - }, + "securityQuestions": { + "enabled": false, }, - "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", - }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, }, - "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, + "consent": { + "enabled": false, }, - "stateProvince": { - "description": "State/Province", - "isPersonal": false, - "title": "State/Province", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "oauthApplications": { + "enabled": false, }, - "telephoneNumber": { - "description": "Telephone Number", - "isPersonal": true, - "pattern": "^\\+?([0-9\\- \\(\\)])*$", - "title": "Telephone Number", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "personalInformation": { + "enabled": true, }, - "userName": { - "description": "Username", - "isPersonal": true, - "minLength": 1, - "policies": [ - { - "policyId": "valid-username", + "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": "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, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, }, - { - "params": { - "forbiddenChars": [ - "/", - ], - }, - "policyId": "cannot-contain-characters", + "securityQuestions": { + "enabled": false, }, - { - "params": { - "minLength": 1, - }, - "policyId": "minimum-length", + "twoStepVerification": { + "enabled": true, }, - { - "params": { - "maxLength": 255, - }, - "policyId": "maximum-length", + "username": { + "enabled": true, }, - ], - "searchable": true, - "title": "Username", - "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", - }, - ], - "searchable": false, - "type": "string", - "usageDescription": "", - "userEditable": false, - "viewable": false, + "consent": { + "enabled": false, }, - "accountStatus": { - "default": "active", - "description": "Status", - "isPersonal": false, - "searchable": true, - "title": "Status", - "type": "string", - "usageDescription": "", - "userEditable": false, - "viewable": true, + "oauthApplications": { + "enabled": false, }, - "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, + "personalInformation": { + "enabled": 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, + "preferences": { + "enabled": false, + }, + "social": { + "enabled": false, + }, + "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", + }, + { + "_id": "00203891-dde0-4114-b27a-219ae0b43a61", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": 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", - }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, }, - "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", - }, + "securityQuestions": { + "enabled": false, }, - "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", - }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, }, - "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, + "consent": { + "enabled": false, }, - "cn": { - "default": "{{givenName}} {{sn}}", - "description": "Common Name", - "isPersonal": true, - "scope": "private", - "searchable": false, - "title": "Common Name", - "type": "string", - "userEditable": false, - "viewable": false, + "oauthApplications": { + "enabled": 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, + "personalInformation": { + "enabled": true, }, - "country": { - "description": "Country", - "isPersonal": false, - "title": "Country", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "preferences": { + "enabled": false, }, - "description": { - "description": "Description", - "isPersonal": false, - "searchable": true, - "title": "Description", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "social": { + "enabled": false, }, - "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, + "trustedDevices": { + "enabled": 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, + }, + "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, }, - "effectiveGroups": { - "description": "Effective Groups", - "isPersonal": false, - "isVirtual": true, - "items": { - "title": "Effective Groups Items", - "type": "object", - }, - "queryConfig": { - "referencedRelationshipFields": [ - "groups", - ], + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, }, - "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, + "consent": { + "enabled": false, }, - "frIndexedDate1": { - "description": "Generic Indexed Date 1", - "isPersonal": false, - "title": "Generic Indexed Date 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "oauthApplications": { + "enabled": false, }, - "frIndexedDate2": { - "description": "Generic Indexed Date 2", - "isPersonal": false, - "title": "Generic Indexed Date 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "personalInformation": { + "enabled": true, }, - "frIndexedDate3": { - "description": "Generic Indexed Date 3", - "isPersonal": false, - "title": "Generic Indexed Date 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "preferences": { + "enabled": true, }, - "frIndexedDate4": { - "description": "Generic Indexed Date 4", - "isPersonal": false, - "title": "Generic Indexed Date 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "social": { + "enabled": false, }, - "frIndexedDate5": { - "description": "Generic Indexed Date 5", - "isPersonal": false, - "title": "Generic Indexed Date 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "trustedDevices": { + "enabled": true, }, - "frIndexedInteger1": { - "description": "Generic Indexed Integer 1", - "isPersonal": false, - "title": "Generic Indexed Integer 1", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + }, + "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", + ], + "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", + }, + { + "_id": "b82755e8-fe9a-4d27-b66b-45e37ae12345", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "frIndexedInteger2": { - "description": "Generic Indexed Integer 2", - "isPersonal": false, - "title": "Generic Indexed Integer 2", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, + }, }, - "frIndexedInteger3": { - "description": "Generic Indexed Integer 3", - "isPersonal": false, - "title": "Generic Indexed Integer 3", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "consent": { + "enabled": false, }, - "frIndexedInteger4": { - "description": "Generic Indexed Integer 4", - "isPersonal": false, - "title": "Generic Indexed Integer 4", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "oauthApplications": { + "enabled": false, }, - "frIndexedInteger5": { - "description": "Generic Indexed Integer 5", - "isPersonal": false, - "title": "Generic Indexed Integer 5", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "personalInformation": { + "enabled": true, }, - "frIndexedMultivalued1": { - "description": "Generic Indexed Multivalue 1", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 1", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "preferences": { + "enabled": false, }, - "frIndexedMultivalued2": { - "description": "Generic Indexed Multivalue 2", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 2", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "social": { + "enabled": false, }, - "frIndexedMultivalued3": { - "description": "Generic Indexed Multivalue 3", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 3", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "trustedDevices": { + "enabled": true, }, - "frIndexedMultivalued4": { - "description": "Generic Indexed Multivalue 4", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Indexed Multivalue 4", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": 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", + }, + { + "_id": "86ce2f64-586d-44fe-8593-b12a85aac68d", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "frIndexedMultivalued5": { - "description": "Generic Indexed Multivalue 5", - "isPersonal": false, - "items": { - "type": "string", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, }, - "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, + "consent": { + "enabled": false, }, - "frUnindexedInteger4": { - "description": "Generic Unindexed Integer 4", - "isPersonal": false, - "title": "Generic Unindexed Integer 4", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "oauthApplications": { + "enabled": false, }, - "frUnindexedInteger5": { - "description": "Generic Unindexed Integer 5", - "isPersonal": false, - "title": "Generic Unindexed Integer 5", - "type": "number", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "personalInformation": { + "enabled": true, }, - "frUnindexedMultivalued1": { - "description": "Generic Unindexed Multivalue 1", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Unindexed Multivalue 1", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "preferences": { + "enabled": false, }, - "frUnindexedMultivalued2": { - "description": "Generic Unindexed Multivalue 2", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Unindexed Multivalue 2", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "social": { + "enabled": false, }, - "frUnindexedMultivalued3": { - "description": "Generic Unindexed Multivalue 3", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Unindexed Multivalue 3", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "trustedDevices": { + "enabled": true, }, - "frUnindexedMultivalued4": { - "description": "Generic Unindexed Multivalue 4", - "isPersonal": false, - "items": { - "type": "string", - }, - "title": "Generic Unindexed Multivalue 4", - "type": "array", - "usageDescription": "", - "userEditable": true, - "viewable": 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": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "frUnindexedMultivalued5": { - "description": "Generic Unindexed Multivalue 5", - "isPersonal": false, - "items": { - "type": "string", + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, + }, }, - "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, + "consent": { + "enabled": false, }, - "frUnindexedString2": { - "description": "Generic Unindexed String 2", - "isPersonal": false, - "title": "Generic Unindexed String 2", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "oauthApplications": { + "enabled": false, }, - "frUnindexedString3": { - "description": "Generic Unindexed String 3", - "isPersonal": false, - "title": "Generic Unindexed String 3", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "personalInformation": { + "enabled": true, }, - "frUnindexedString4": { - "description": "Generic Unindexed String 4", - "isPersonal": false, - "title": "Generic Unindexed String 4", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "preferences": { + "enabled": false, }, - "frUnindexedString5": { - "description": "Generic Unindexed String 5", - "isPersonal": false, - "title": "Generic Unindexed String 5", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "social": { + "enabled": false, }, - "givenName": { - "description": "First Name", - "isPersonal": true, - "searchable": true, - "title": "First Name", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "trustedDevices": { + "enabled": 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, + }, + "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, }, - "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", - }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, }, - "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", + "securityQuestions": { + "enabled": false, }, - "timestamp": { - "description": "Timestamp", - "type": "string", + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, }, }, - "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, + "consent": { + "enabled": false, }, - "manager": { - "description": "Manager", - "isPersonal": false, - "properties": { - "_ref": { - "description": "References a relationship from a managed object", - "type": "string", + "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": "", + "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, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, }, - "_refProperties": { - "description": "Supports metadata within the relationship", - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "title": "Manager _refProperties", - "type": "object", + "securityQuestions": { + "enabled": false, }, - }, - "resourceCollection": [ - { - "label": "User", - "path": "managed/bravo_user", - "query": { - "fields": [ - "userName", - "givenName", - "sn", - ], - "queryFilter": "true", - }, + "twoStepVerification": { + "enabled": 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", - }, + "username": { + "enabled": true, }, - "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, + "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", + }, + { + "_id": "86ce2f64-586d-44fe-8593-b12a85aac68d", + "accountFooter": "", + "accountFooterEnabled": false, + "accountPageSections": { + "accountControls": { + "enabled": false, }, - "ownerOfApp": { - "items": { - "properties": { - "_ref": { - "type": "string", - }, - "_refProperties": { - "properties": { - "_id": { - "description": "_refProperties object ID", - "type": "string", - }, - }, - "type": "object", - }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, }, - "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", - }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, }, - "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, + "consent": { + "enabled": false, }, - "postalAddress": { - "description": "Address 1", - "isPersonal": true, - "title": "Address 1", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "oauthApplications": { + "enabled": false, }, - "postalCode": { - "description": "Postal Code", - "isPersonal": false, - "title": "Postal Code", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "personalInformation": { + "enabled": true, }, "preferences": { - "description": "Preferences", - "isPersonal": false, - "order": [ - "updates", - "marketing", - ], - "properties": { - "marketing": { - "description": "Send me special offers and services", - "type": "boolean", + "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": "b82755e8-fe9a-4d27-b66b-45e37ae12345", + "accountFooter": " +", + "accountFooterEnabled": true, + "accountPageSections": { + "accountControls": { + "enabled": false, + }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, }, - "updates": { - "description": "Send me news and updates", - "type": "boolean", + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, }, }, - "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, + "consent": { + "enabled": 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/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, + "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": "", + "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, }, - "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", - }, + "accountSecurity": { + "enabled": true, + "subsections": { + "password": { + "enabled": true, + }, + "securityQuestions": { + "enabled": false, + }, + "twoStepVerification": { + "enabled": true, + }, + "username": { + "enabled": true, }, - "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, + "consent": { + "enabled": false, }, - "stateProvince": { - "description": "State/Province", - "isPersonal": false, - "title": "State/Province", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "oauthApplications": { + "enabled": false, }, - "telephoneNumber": { - "description": "Telephone Number", - "isPersonal": true, - "pattern": "^\\+?([0-9\\- \\(\\)])*$", - "title": "Telephone Number", - "type": "string", - "usageDescription": "", - "userEditable": true, - "viewable": true, + "personalInformation": { + "enabled": 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, + "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", + }, + ], + }, + }, + }, + "meta": Any, +} +`; + +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`] = ` +{ + "idm": { + "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", }, }, - "required": [ - "userName", - "givenName", - "sn", - "mail", - ], - "title": "Bravo realm - User", - "type": "object", - "viewable": true, - }, + }, + }, + }, + "login": { + "login": { + "next": "Suivant", + }, + "overrides": { + "Password": "Mot de passe", + "UserName": "Nom d'utilisateur", + }, + }, + "shared": { + "sideMenu": { + "dashboard": "Tableau de bord", + }, + }, + }, + }, + "meta": Any, +} +`; + +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`] = ` +{ + "idm": { + "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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory 1`] = `0`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory 2`] = `""`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/FrodoTestEmailTemplate2.idm.json 1`] = ` +{ + "idm": { + "FrodoTestEmailTemplate2": { + "_id": "FrodoTestEmailTemplate2", + "defaultLocale": "en", + "displayName": "Frodo Test Email Template Two", + "enabled": true, + "from": "", + "message": { + "en": "

This is your one-time password:

{{object.description}}

", + }, + "mimeType": "text/html", + "subject": { + "en": "One-Time Password for login", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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", + ], }, { - "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, - }, + "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, }, - "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, - }, - "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", - "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, - }, + { + "attribute": "parentOwnerIDs", + "readOnly": true, }, - "required": [ - "name", - ], - "title": "Bravo realm - Role", - "type": "object", - }, + ], + "actions": [], + "filter": "/parent pr", + "name": "owner-create-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "CREATE", + ], }, { - "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": { - "_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, - }, - "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/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, - }, + "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, }, - "required": [ - "name", - "description", - "mapping", - ], - "title": "Alpha realm - Assignment", - "type": "object", - }, + { + "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", + ], }, { - "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": { - "_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", - "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, - }, - "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, - }, + "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, }, - "required": [ - "name", - "description", - "mapping", - ], - "title": "Bravo realm - Assignment", - "type": "object", - }, + ], + "actions": [], + "filter": "/adminIDs eq "{{_id}}" or /parentAdminIDs eq "{{_id}}"", + "name": "admin-view-update-delete-orgs", + "path": "managed/alpha_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], }, { - "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, - }, + "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, }, - "required": [ - "name", - ], - "title": "Alpha realm - Organization", - "type": "object", - }, + { + "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", + ], }, { - "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, - }, + "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, }, - "required": [ - "name", + { + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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", ], - "title": "Bravo realm - Organization", - "type": "object", + "includeIf": [], }, }, + "handlerForQueries": "json", + }, + "eventHandlers": [ { - "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", + "class": "org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler", + "config": { + "name": "json", + "topics": [ + "access", + "activity", + "sync", + "authentication", + "config", ], - "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", + }, + }, + ], + "eventTopics": { + "activity": { + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", ], - "title": "Alpha realm - Group", - "viewable": true, }, + "passwordFields": [ + "password", + ], + "watchedFields": [ + "*", + ], }, - { - "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", + "config": { + "filter": { + "actions": [ + "create", + "update", + "delete", + "patch", + "action", ], - "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, - }, + }, + }, + }, + "exceptionFormatter": { + "file": "bin/defaults/script/audit/stacktraceFormatter.js", + "type": "text/javascript", + }, + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/authentication.idm.json 1`] = ` +{ + "idm": { + "authentication": { + "_id": "authentication", + "rsFilter": { + "augmentSecurityContext": { + "source": "file://authentication.rsFilter.augmentSecurityContext.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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/authentication.rsFilter.augmentSecurityContext.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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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, }, - "required": [ - "name", - ], - "title": "Bravo realm - Group", - "viewable": 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": "/ownerIDs eq "{{_id}}" or /parentOwnerIDs eq "{{_id}}"", + "name": "owner-view-update-delete-orgs", + "path": "managed/bravo_organization", + "permissions": [ + "VIEW", + "UPDATE", + "DELETE", + ], }, { - "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": { - "_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, - }, - "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": { - "_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": { - "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, - }, + "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, }, - "required": [ - "name", - ], - "title": "Alpha realm - Application", - "type": "object", - }, + { + "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", + ], }, { - "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": { - "_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, - }, - "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": { - "_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": { - "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, - }, + "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, }, - "required": [ - "name", - ], - "title": "Bravo realm - Application", - "type": "object", - }, + { + "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", + ], }, ], }, @@ -30131,4162 +22993,7056 @@ 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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/emailTemplate/testTemplate.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/testTemplate": { + "_id": "emailTemplate/testTemplate", + "advancedEditor": true, + "defaultLocale": "en", + "description": "Test description", + "displayName": "TestTemplate", + "enabled": false, + "from": ""Test From" ", + "html": { + "en": "", + "es": "", + }, + "message": { + "en": " + + +
+

+ alt text +

+

Email Title

+

Message text lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor.

+
+ + ", + "es": " + + +
+

+ alt text +

+

Email Title

+

Message text lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor.

+
+ + ", + }, + "mimeType": "text/html", + "styles": "body { + background-color: #324054; + color: #455469; + 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": "", + "es": "", + }, + "templateId": "testTemplate", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/emailTemplate/welcome.idm.json 1`] = ` +{ + "idm": { + "emailTemplate/welcome": { + "_id": "emailTemplate/welcome", + "defaultLocale": "en", + "displayName": "Welcome", + "enabled": true, + "from": "saas@forgerock.com", + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/endpoint/extractscripttest.idm.json 1`] = ` +{ + "idm": { + "endpoint/extractscripttest": { + "_id": "endpoint/extractscripttest", + "description": "", + "globalsObject": "" {\\n \\"request\\": {\\n \\"method\\": \\"create\\"\\n }\\n }"", + "source": "file://extractscripttest.js", + "type": "text/javascript", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/endpoint/extractscripttest.js 1`] = ` +"//extract idm script test + +//test +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/external.emailDefault.idm.json 1`] = ` { "idm": { - "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", - }, + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/fieldPolicy/alpha_user.idm.json 1`] = ` +{ + "idm": { + "fieldPolicy/alpha_user": { + "_id": "fieldPolicy/alpha_user", + "defaultPasswordStorageScheme": [ { - "action": "ASYNC", - "situation": "SOURCE_MISSING", + "_id": "PBKDF2-HMAC-SHA256", }, + ], + "passwordAttribute": "password", + "resourceCollection": "managed/alpha_user", + "type": "password-policy", + "validator": [ { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + "_id": "alpha_userPasswordPolicy-length-based-password-validator", + "enabled": true, + "maxPasswordLength": 0, + "minPasswordLength": 8, + "type": "length-based", }, { - "action": "ASYNC", - "situation": "UNASSIGNED", + "_id": "alpha_userPasswordPolicy-attribute-value-password-validator", + "checkSubstrings": true, + "enabled": true, + "matchAttribute": [ + "userName", + "givenName", + "sn", + ], + "minSubstringLength": 5, + "testReversedPassword": true, + "type": "attribute-value", }, { - "action": "ASYNC", - "situation": "UNQUALIFIED", + "_id": "alpha_userPasswordPolicy-character-set-password-validator", + "allowUnclassifiedCharacters": true, + "characterSet": [ + "0:abcdefghijklmnopqrstuvwxyz", + "0:ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "0:0123456789", + "0:~!@#$%^&*()-_=+[]{}|;:,.<>/?"'\\\`", + ], + "enabled": true, + "minCharacterSets": 4, + "type": "character-set", }, ], - "properties": [], - "source": "managed/alpha_assignment", - "target": "managed/bravo_assignment", }, }, "meta": Any, } `; -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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/fieldPolicy/bravo_user.idm.json 1`] = ` { "idm": { - "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", - }, + "fieldPolicy/bravo_user": { + "_id": "fieldPolicy/bravo_user", + "defaultPasswordStorageScheme": [ { - "action": "UPDATE", - "situation": "CONFIRMED", + "_id": "PBKDF2-HMAC-SHA256", }, + ], + "passwordAttribute": "password", + "resourceCollection": "managed/bravo_user", + "type": "password-policy", + "validator": [ { - "action": "ASYNC", - "situation": "FOUND", + "_id": "bravo_userPasswordPolicy-length-based-password-validator", + "enabled": true, + "maxPasswordLength": 0, + "minPasswordLength": 8, + "type": "length-based", }, { - "action": "CREATE", - "situation": "ABSENT", + "_id": "bravo_userPasswordPolicy-attribute-value-password-validator", + "checkSubstrings": true, + "enabled": true, + "matchAttribute": [ + "mail", + "userName", + "givenName", + "sn", + ], + "minSubstringLength": 5, + "testReversedPassword": true, + "type": "attribute-value", }, { - "action": "ASYNC", - "situation": "SOURCE_TARGET_CONFLICT", + "_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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/internal.idm.json 1`] = ` +{ + "idm": { + "internal": { + "_id": "internal", + "objects": [ { - "action": "INCORPORATE_CHANGES", - "situation": "TARGET_CHANGED", + "name": "role", + "properties": { + "authzMembers": { + "items": { + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, + }, + ], + }, + }, + }, }, ], - "properties": [ - { - "source": "mail", - "target": "mail", + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/alpha_application/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", }, - { - "source": "givenName", - "target": "givenName", + "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, }, - { - "source": "sn", - "target": "surname", + "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, }, - { - "source": "", - "target": "displayName", - "transform": { - "source": "source.givenName+" "+source.sn", - "type": "text/javascript", + "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", }, - }, - { - "source": "", - "target": "mailNickname", - "transform": { - "source": "source.givenName[0].toLowerCase()+source.sn.toLowerCase()", - "type": "text/javascript", + "federatedDomain": { + "type": "string", }, - }, - { - "source": "", - "target": "accountEnabled", - "transform": { - "source": "true", - "type": "text/javascript", + "idpLocation": { + "type": "string", }, - }, - { - "condition": { - "globals": {}, - "source": "(typeof oldTarget === 'undefined' || oldTarget === null)", - "type": "text/javascript", + "idpLoginUrl": { + "type": "string", }, - "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", + "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", }, }, - ], - "queuedSync": { - "enabled": true, - "maxRetries": 0, - "pollingInterval": 10000, + "searchable": false, + "title": "SSO Entity Id", + "type": "object", + "userEditable": false, + "viewable": false, }, - "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__")]", + "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, }, - "target": "system/Azure/User", }, + "required": [ + "name", + ], + "title": "Alpha realm - Application", + "type": "object", }, - "meta": Any, } `; -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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/alpha_assignment/alpha_assignment.managed.json 1`] = ` { - "idm": { - "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", + "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", }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + "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", }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", + "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, }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", + "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, }, - ], - "properties": [], - "source": "managed/bravo_group", - "target": "managed/bravo_group", + "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", }, - "meta": Any, } `; -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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/alpha_group/alpha_group.managed.json 1`] = ` { - "idm": { - "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", + "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, }, - ], - "properties": [], - "source": "managed/bravo_user", - "target": "managed/bravo_user", - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "mapping/mapping12": { - "_id": "mapping/mapping12", - "consentRequired": false, - "displayName": "mapping12", - "linkQualifiers": [], - "name": "mapping12", - "policies": [], - "properties": [], - "source": "managed/bravo_user", - "syncAfter": [], - "target": "managed/bravo_user", + "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, }, - "meta": Any, } `; -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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/alpha_organization/alpha_organization.managed.json 1`] = ` { - "idm": { - "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", + "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", }, - { - "action": "DELETE", - "situation": "SOURCE_MISSING", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "admins", + ], }, - { - "action": "CREATE", - "situation": "MISSING", + "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, }, - { - "action": "EXCEPTION", - "situation": "FOUND_ALREADY_LINKED", + "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, }, - { - "action": "DELETE", - "situation": "UNQUALIFIED", + "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, }, - { - "action": "EXCEPTION", - "situation": "UNASSIGNED", + "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", }, - { - "action": "EXCEPTION", - "situation": "LINK_ONLY", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "owners", + ], }, - { - "action": "IGNORE", - "situation": "TARGET_IGNORED", + "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, }, - { - "action": "IGNORE", - "situation": "SOURCE_IGNORED", + "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", + }, }, - { - "action": "IGNORE", - "situation": "ALL_GONE", + "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", }, - { - "action": "UPDATE", - "situation": "CONFIRMED", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "adminIDs", + "parentAdminIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], }, - { - "action": "LINK", - "situation": "FOUND", + "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", }, - { - "action": "CREATE", - "situation": "ABSENT", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + "parentIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], }, - ], - "properties": [ - { - "default": "__RESOURCE__", - "target": "type", + "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", }, - { - "source": "", - "target": "description", - "transform": { - "globals": {}, - "source": "(typeof source.description !== "undefined" && source.description !== null) ? source.description : source._id", - "type": "text/javascript", - }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "ownerIDs", + "parentOwnerIDs", + ], + "referencedRelationshipFields": [ + "parent", + ], }, - { - "default": "managedAlpha_user_systemAzureUser", - "target": "mapping", + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/alpha_role/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, }, - { - "source": "", - "target": "name", - "transform": { - "globals": {}, - "source": "(typeof source.displayName !== "undefined" && source.displayName !== null) ? source.displayName : source._id", - "type": "text/javascript", + "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, }, - { - "source": "_id", - "target": "attributes", - "transform": { - "globals": {}, - "source": "[ - { - 'name': 'memberOf', - 'value': [source] - } -]", - "type": "text/javascript", + "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, }, - { - "source": "_id", - "target": "_id", - "transform": { - "globals": { - "sourceObjectSet": "system_Azure___GROUP___", + "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", }, - "source": "sourceObjectSet.concat(source)", - "type": "text/javascript", }, + "required": [ + "duration", + ], + "title": "Temporal Constraints Items", + "type": "object", }, - ], - "source": "system/Azure/__GROUP__", - "target": "managed/alpha_assignment", - "targetQuery": { - "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "memberOf"]", + "notifyRelationships": [ + "members", + ], + "returnByDefault": true, + "title": "Temporal Constraints", + "type": "array", + "viewable": false, }, }, + "required": [ + "name", + ], + "title": "Alpha realm - Role", + "type": "object", }, - "meta": Any, } `; -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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/alpha_user/alpha_user.managed.json 1`] = ` { - "idm": { - "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", + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "alpha_user", + "notifications": {}, + "onCreate": { + "globals": {}, + "source": "file://onCreate.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", }, - }, - { - "source": "_id", - "target": "_id", - "transform": { - "globals": { - "sourceObjectSet": "system_Azure_directoryRole_", + ], + "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", }, - "source": "sourceObjectSet.concat(source)", - "type": "text/javascript", }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, + }, + ], + "reversePropertyName": "admins", + "reverseRelationship": true, + "type": "relationship", + "validate": true, }, - ], - "source": "system/Azure/directoryRole", - "target": "managed/alpha_assignment", - "targetQuery": { - "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "__roles__"]", + "policies": [], + "returnByDefault": false, + "searchable": false, + "title": "Organizations I Administer", + "type": "array", + "userEditable": false, + "viewable": true, }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "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", + "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", }, - { - "source": "", - "target": "description", - "transform": { - "globals": {}, - "source": "(typeof source.servicePlanName !== "undefined" && source.servicePlanName !== null) ? source.servicePlanName : source._id", - "type": "text/javascript", + "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, }, - { - "default": "managedAlpha_user_systemAzureUser", - "target": "mapping", + "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", }, - { - "source": "", - "target": "name", - "transform": { - "globals": {}, - "source": "(typeof source.servicePlanName !== "undefined" && source.servicePlanName !== null) ? source.servicePlanName : source._id", - "type": "text/javascript", - }, + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], }, - { - "source": "_id", - "target": "attributes", - "transform": { - "globals": {}, - "source": "[ - { - 'name': '__servicePlanIds__', - 'value': [source] - } -]", - "type": "text/javascript", + "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, }, - { - "source": "_id", - "target": "_id", - "transform": { - "globals": { - "sourceObjectSet": "system_Azure_servicePlan_", + "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", }, - "source": "sourceObjectSet.concat(source)", - "type": "text/javascript", }, + "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, }, - ], - "source": "system/Azure/servicePlan", - "target": "managed/alpha_assignment", - "targetQuery": { - "_queryFilter": "mapping eq "managedAlpha_user_systemAzureUser" and attributes[name eq "__servicePlanIds__"]", + "returnByDefault": false, + "title": "Authorization Roles", + "type": "array", + "usageDescription": "", + "userEditable": false, + "viewable": true, }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "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", + "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", }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", + "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", }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", + "searchable": false, + "title": "Device Print Profiles", + "type": "array", + "userEditable": true, + "viewable": true, + }, + "deviceProfiles": { + "description": "Device Profiles", + "isPersonal": false, + "items": { + "title": "Profile", + "type": "string", }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", + "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", }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + "queryConfig": { + "referencedObjectFields": [ + "name", + ], + "referencedRelationshipFields": [ + [ + "roles", + "applications", + ], + [ + "applications", + ], + ], }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "returnByDefault": true, + "title": "Effective Applications", + "type": "array", + "viewable": false, + }, + "effectiveAssignments": { + "description": "Effective Assignments", + "isPersonal": false, + "isVirtual": true, + "items": { + "title": "Effective Assignments Items", + "type": "object", }, - { - "action": "ASYNC", - "situation": "ALL_GONE", + "queryConfig": { + "referencedObjectFields": [ + "*", + ], + "referencedRelationshipFields": [ + [ + "roles", + "assignments", + ], + [ + "assignments", + ], + ], }, - { - "action": "UPDATE", - "situation": "CONFIRMED", + "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", }, - { - "action": "ONBOARD", - "situation": "FOUND", + "queryConfig": { + "referencedRelationshipFields": [ + "groups", + ], }, - { - "action": "ASYNC", - "situation": "ABSENT", + "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", }, - { - "action": "ASYNC", - "situation": "SOURCE_TARGET_CONFLICT", + "queryConfig": { + "referencedRelationshipFields": [ + "roles", + ], }, - ], - "properties": [ - { - "referencedObjectType": "__GROUP__", - "source": "memberOf", - "target": "assignments", + "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", }, - { - "referencedObjectType": "directoryRole", - "source": "__roles__", - "target": "assignments", + "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", }, - { - "referencedObjectType": "servicePlan", - "source": "__servicePlanIds__", - "target": "assignments", + "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", }, - ], - "reconSourceQueryPageSize": 999, - "reconSourceQueryPaging": true, - "runTargetPhase": false, - "source": "system/Azure/User", - "sourceQueryFullEntry": true, - "target": "managed/alpha_user", - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "policy": { - "_id": "policy", - "additionalFiles": [], - "resources": [], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "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", + "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", }, - { - "name": "adminPrivileges", - "privileges": [ - "admin-view-update-delete-orgs", - "admin-create-orgs", - "admin-view-update-delete-members", - "admin-create-members", - ], - "relationshipField": "adminOfOrg", + "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", }, - ], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "privileges": { - "_id": "privileges", - "privileges": [], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "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, + "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, }, - "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", + "frIndexedString17": { + "description": "Generic Indexed String 17", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 17", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "enabled": { - "$bool": "&{esv.gac.enable.connector}", + "frIndexedString18": { + "description": "Generic Indexed String 18", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 18", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "nativeName": "lastLoginTime", - "nativeType": "string", - "type": "array", - }, - "nonEditableAliases": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "nonEditableAliases", - "nativeType": "string", - "type": "array", - }, - "orgUnitPath": { - "nativeName": "orgUnitPath", - "nativeType": "string", - "type": "string", - }, - "organizations": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "organizations", - "nativeType": "object", - "type": "array", - }, - "phones": { - "items": { - "nativeType": "object", - "type": "object", - }, - "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", - }, + "frIndexedString19": { + "description": "Generic Indexed String 19", + "isPersonal": false, + "searchable": true, + "title": "Generic Indexed String 19", + "type": "string", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "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, + "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, }, - "poolConfigOption": { - "maxIdle": 10, - "maxObjects": 10, - "maxWait": 150000, - "minEvictableIdleTimeMillis": 120000, - "minIdle": 1, + "frUnindexedInteger3": { + "description": "Generic Unindexed Integer 3", + "isPersonal": false, + "title": "Generic Unindexed Integer 3", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "resultsHandlerConfig": { - "enableAttributesToGetSearchResultsHandler": true, - "enableCaseInsensitiveFilter": false, - "enableFilteredResultsHandler": false, - "enableNormalizingResultsHandler": false, + "frUnindexedInteger4": { + "description": "Generic Unindexed Integer 4", + "isPersonal": false, + "title": "Generic Unindexed Integer 4", + "type": "number", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "provisioner.openicf.connectorinfoprovider": { - "_id": "provisioner.openicf.connectorinfoprovider", - "connectorsLocation": "connectors", - "remoteConnectorClients": [ - { - "enabled": true, - "name": "rcs1", - "useSSL": 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", }, - ], - "remoteConnectorClientsGroups": [], - "remoteConnectorServers": [], - "remoteConnectorServersGroups": [], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "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", - }, - }, + "title": "Generic Unindexed Multivalue 1", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued2": { + "description": "Generic Unindexed Multivalue 2", + "isPersonal": false, + "items": { + "type": "string", }, - "httpProxyHost": null, - "httpProxyPassword": null, - "httpProxyPort": null, - "httpProxyUsername": null, - "licenseCacheExpiryTime": 60, - "performHardDelete": true, - "readRateLimit": null, - "tenant": "711ffa9c-5972-4713-ace3-688c9732614a", - "writeRateLimit": null, + "title": "Generic Unindexed Multivalue 2", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "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", + "frUnindexedMultivalued3": { + "description": "Generic Unindexed Multivalue 3", + "isPersonal": false, + "items": { + "type": "string", + }, + "title": "Generic Unindexed Multivalue 3", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, }, - "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", - }, - "nativeName": "__roles__", - "nativeType": "string", - "type": "array", - }, - "__servicePlanIds__": { - "items": { - "nativeType": "string", - "type": "string", - }, - "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", - }, - "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", - }, - "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", - }, - "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", + "frUnindexedMultivalued4": { + "description": "Generic Unindexed Multivalue 4", + "isPersonal": false, + "items": { + "type": "string", }, - "__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", - }, - "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", - }, - "nativeName": "proxyAddresses", - "nativeType": "string", - "type": "array", - }, - "securityEnabled": { - "nativeName": "securityEnabled", - "nativeType": "boolean", - "required": true, - "type": "boolean", - }, - "type": { - "nativeName": "type", - "required": true, - "type": "string", - }, - }, - "type": "object", + "title": "Generic Unindexed Multivalue 4", + "type": "array", + "usageDescription": "", + "userEditable": true, + "viewable": true, + }, + "frUnindexedMultivalued5": { + "description": "Generic Unindexed Multivalue 5", + "isPersonal": false, + "items": { + "type": "string", }, - "directoryRole": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "directoryRole", - "nativeType": "directoryRole", + "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": { - "description": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "description", - "nativeType": "string", + "_ref": { + "description": "References a relationship from a managed object", "type": "string", }, - "displayName": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "displayName", - "nativeType": "string", - "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", }, }, - "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, }, - "servicePlan": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "servicePlan", - "nativeType": "servicePlan", + "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": { - "__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", + "answer": { + "description": "Answer", "type": "string", }, - "servicePlanName": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "servicePlanName", - "nativeType": "string", + "customQuestion": { + "description": "Custom question", "type": "string", }, - "subscriberSkuId": { - "flags": [ - "NOT_UPDATEABLE", - "NOT_CREATABLE", - ], - "nativeName": "subscriberSkuId", + "questionId": { + "description": "Question ID", "type": "string", }, }, + "required": [], + "title": "KBA Info Items", "type": "object", }, - "servicePrincipal": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "servicePrincipal", - "nativeType": "servicePrincipal", - "properties": { - "__NAME__": { - "nativeName": "__NAME__", - "nativeType": "string", - "type": "string", + "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", }, - "__addAppRoleAssignedTo__": { - "flags": [ - "NOT_READABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "object", - "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", }, - "nativeName": "__addAppRoleAssignedTo__", - "nativeType": "object", - "type": "array", }, - "__addAppRoleAssignments__": { - "flags": [ - "NOT_READABLE", - "NOT_RETURNED_BY_DEFAULT", + "title": "Manager _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", ], - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "__addAppRoleAssignments__", - "nativeType": "object", - "type": "array", + "queryFilter": "true", }, - "__removeAppRoleAssignedTo__": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", + }, + ], + "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", + }, }, - "nativeName": "__removeAppRoleAssignedTo__", - "nativeType": "string", - "type": "array", + "type": "object", }, - "__removeAppRoleAssignments__": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], }, - "nativeName": "__removeAppRoleAssignments__", - "nativeType": "string", - "type": "array", }, - "accountEnabled": { - "nativeName": "accountEnabled", - "nativeType": "boolean", - "type": "boolean", + ], + "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", }, - "addIns": { - "items": { - "nativeType": "object", - "type": "object", + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, }, - "nativeName": "addIns", - "nativeType": "object", - "type": "array", + "type": "object", }, - "alternativeNames": { - "items": { - "nativeType": "string", - "type": "string", + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/alpha_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], }, - "nativeName": "alternativeNames", - "nativeType": "string", - "type": "array", }, - "appDescription": { - "nativeName": "appDescription", - "nativeType": "string", + ], + "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", }, - "appDisplayName": { - "nativeName": "appDisplayName", - "nativeType": "string", - "type": "string", + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", }, - "appId": { - "nativeName": "appId", - "nativeType": "string", - "type": "string", + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/alpha_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], + }, }, - "appOwnerOrganizationId": { - "nativeName": "appOwnerOrganizationId", - "nativeType": "string", + ], + "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", }, - "appRoleAssignmentRequired": { - "nativeName": "appRoleAssignmentRequired", - "nativeType": "boolean", - "type": "boolean", - }, - "appRoles": { - "items": { - "nativeType": "object", - "type": "object", + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, }, - "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", + "title": "Direct Reports Items _refProperties", "type": "object", }, - "keyCredentials": { - "items": { - "nativeType": "object", - "type": "object", + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/alpha_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", }, - "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", + ], + "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", }, - "notificationEmailAddresses": { - "items": { - "nativeType": "string", - "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", + }, }, - "nativeName": "notificationEmailAddresses", - "nativeType": "string", - "type": "array", + "title": "Provisioning Roles Items _refProperties", + "type": "object", }, - "oauth2PermissionScopes": { - "items": { - "nativeType": "object", - "type": "object", + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/alpha_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", }, - "nativeName": "oauth2PermissionScopes", - "nativeType": "object", - "type": "array", }, - "passwordCredentials": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "passwordCredentials", - "nativeType": "object", - "type": "array", + ], + "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": [ + "/", + ], }, - "preferredSingleSignOnMode": { - "nativeName": "preferredSingleSignOnMode", - "nativeType": "string", - "type": "string", + "policyId": "cannot-contain-characters", + }, + { + "params": { + "minLength": 1, }, - "replyUrls": { - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "replyUrls", - "nativeType": "string", - "type": "array", + "policyId": "minimum-length", + }, + { + "params": { + "maxLength": 255, }, - "resourceSpecificApplicationPermissions": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "resourceSpecificApplicationPermissions", - "nativeType": "object", - "type": "array", + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/alpha_user/onCreate.js 1`] = ` +"//extract script test UPDATED + + +//test UPDATED + +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/bravo_application/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", }, - "samlSingleSignOnSettings": { - "nativeName": "samlSingleSignOnSettings", - "nativeType": "object", + "_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", }, - "servicePrincipalNames": { - "items": { - "nativeType": "string", - "type": "string", + }, + "resourceCollection": [ + { + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", }, - "nativeName": "servicePrincipalNames", - "nativeType": "string", - "type": "array", }, - "servicePrincipalType": { - "nativeName": "servicePrincipalType", - "nativeType": "string", + ], + "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", }, - "signInAudience": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "signInAudience", - "nativeType": "string", - "type": "string", + "_refProperties": { + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, + }, + "title": "Application _refProperties", + "type": "object", }, - "tags": { - "items": { - "nativeType": "string", - "type": "string", + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", }, - "nativeName": "tags", - "nativeType": "string", - "type": "array", }, - "tokenEncryptionKeyId": { - "nativeName": "tokenEncryptionKeyId", - "nativeType": "string", + ], + "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", }, - "verifiedPublisher": { - "nativeName": "verifiedPublisher", - "nativeType": "object", + "_refProperties": { + "properties": { + "_accountType": { + "description": "Account type", + "type": "string", + }, + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, "type": "object", }, }, - "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, }, - "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, + "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, }, - "poolConfigOption": { - "maxIdle": 10, - "maxObjects": 10, - "maxWait": 150000, - "minEvictableIdleTimeMillis": 120000, - "minIdle": 1, + "templateName": { + "description": "Name of the template the application was created from", + "searchable": false, + "title": "Template Name", + "type": "string", + "userEditable": false, + "viewable": false, }, - "resultsHandlerConfig": { - "enableAttributesToGetSearchResultsHandler": true, - "enableCaseInsensitiveFilter": false, - "enableFilteredResultsHandler": false, - "enableNormalizingResultsHandler": 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", }, - "meta": Any, } `; -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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/bravo_assignment/bravo_assignment.managed.json 1`] = ` { - "idm": { - "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}", + "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, }, - "objectTypes": { - "__ACCOUNT__": { - "$schema": "http://json-schema.org/draft-03/schema", - "id": "__ACCOUNT__", - "nativeType": "__ACCOUNT__", + "attributes": { + "description": "The attributes operated on by this assignment.", + "items": { + "order": [ + "assignmentOperation", + "unassignmentOperation", + "name", + "value", + ], "properties": { - "__GROUPS__": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "items": { - "nativeType": "string", - "type": "string", - }, - "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", - }, - "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", - }, - "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", - }, - "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", + "assignmentOperation": { + "description": "Assignment operation", "type": "string", }, - "externalIds": { - "items": { - "nativeType": "object", - "type": "object", - }, - "nativeName": "externalIds", - "nativeType": "object", - "type": "array", - }, - "familyName": { - "nativeName": "familyName", - "nativeType": "string", + "name": { + "description": "Name", "type": "string", }, - "fullName": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "fullName", - "nativeType": "string", + "unassignmentOperation": { + "description": "Unassignment operation", "type": "string", }, - "givenName": { - "nativeName": "givenName", - "nativeType": "string", - "required": true, + "value": { + "description": "Value", "type": "string", }, - "hashFunction": { - "flags": [ - "NOT_RETURNED_BY_DEFAULT", - ], - "nativeName": "hashFunction", - "nativeType": "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", }, - "ims": { - "items": { - "nativeType": "object", - "type": "object", + "_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", + }, }, - "nativeName": "ims", - "nativeType": "object", - "type": "array", - }, - "includeInGlobalAddressList": { - "nativeName": "includeInGlobalAddressList", - "nativeType": "boolean", - "type": "boolean", + "title": "Assignment Members Items _refProperties", + "type": "object", }, - "ipWhitelisted": { - "nativeName": "ipWhitelisted", - "nativeType": "boolean", - "type": "boolean", + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + }, }, - "isAdmin": { - "nativeName": "isAdmin", - "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", - "type": "boolean", + ], + "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", }, - "isDelegatedAdmin": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isDelegatedAdmin", - "nativeType": "JAVA_TYPE_PRIMITIVE_BOOLEAN", - "type": "boolean", + "_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", }, - "isEnforcedIn2Sv": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isEnforcedIn2Sv", - "nativeType": "boolean", - "type": "boolean", + }, + "resourceCollection": [ + { + "label": "Role", + "notify": true, + "path": "managed/bravo_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + }, }, - "isEnrolledIn2Sv": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isEnrolledIn2Sv", - "nativeType": "boolean", - "type": "boolean", + ], + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/bravo_group/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", }, - "isMailboxSetup": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "isMailboxSetup", - "nativeType": "boolean", - "type": "boolean", + "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", }, - "languages": { - "items": { - "nativeType": "object", - "type": "object", + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_grantType": { + "description": "Grant Type", + "label": "Grant Type", + "type": "string", + }, + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, }, - "nativeName": "languages", - "nativeType": "object", - "type": "array", + "title": "Group Members Items _refProperties", + "type": "object", }, - "lastLoginTime": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "items": { - "nativeType": "string", - "type": "string", + }, + "resourceCollection": [ + { + "conditionalAssociation": true, + "label": "User", + "notify": true, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", }, - "nativeName": "lastLoginTime", - "nativeType": "string", - "type": "array", }, - "nonEditableAliases": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", + ], + "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": [ + "/*", ], - "items": { - "nativeType": "string", - "type": "string", - }, - "nativeName": "nonEditableAliases", - "nativeType": "string", - "type": "array", }, - "orgUnitPath": { - "nativeName": "orgUnitPath", - "nativeType": "string", + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/bravo_organization/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", }, - "organizations": { - "items": { - "nativeType": "object", - "type": "object", + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, }, - "nativeName": "organizations", - "nativeType": "object", - "type": "array", + "type": "object", }, - "phones": { - "items": { - "nativeType": "object", - "type": "object", + }, + "resourceCollection": [ + { + "label": "User", + "notify": false, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], }, - "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", + ], + "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", }, - "relations": { - "items": { - "nativeType": "object", - "type": "object", + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, }, - "nativeName": "relations", - "nativeType": "object", - "type": "array", + "type": "object", }, - "suspended": { - "nativeName": "suspended", - "nativeType": "boolean", - "type": "boolean", + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], + }, }, - "suspensionReason": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "suspensionReason", - "nativeType": "string", + ], + "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", }, - "thumbnailPhotoUrl": { - "flags": [ - "NOT_CREATABLE", - "NOT_UPDATEABLE", - ], - "nativeName": "thumbnailPhotoUrl", - "nativeType": "string", - "type": "string", + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", }, }, - "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, }, - "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, + "name": { + "searchable": true, + "title": "Name", + "type": "string", + "userEditable": true, + "viewable": true, }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "repo.ds": { - "_id": "repo.ds", - "commands": { - "delete-mapping-links": { - "_queryFilter": "/linkType eq "\${mapping}"", - "operation": "DELETE", + "ownerIDs": { + "isVirtual": true, + "items": { + "title": "owner ids", + "type": "string", }, - "delete-target-ids-for-recon": { - "_queryFilter": "/reconId eq "\${reconId}"", - "operation": "DELETE", + "queryConfig": { + "flattenProperties": true, + "referencedObjectFields": [ + "_id", + ], + "referencedRelationshipFields": [ + "owners", + ], }, + "returnByDefault": true, + "searchable": false, + "title": "Owner user ids", + "type": "array", + "userEditable": false, + "viewable": false, }, - "embedded": false, - "ldapConnectionFactories": { - "bind": { - "availabilityCheckIntervalSeconds": 30, - "availabilityCheckTimeoutMilliSeconds": 10000, - "connectionPoolSize": 50, - "connectionSecurity": "none", - "heartBeatIntervalSeconds": 60, - "heartBeatTimeoutMilliSeconds": 10000, - "primaryLdapServers": [ - { - "hostname": "userstore-0.userstore", - "port": 1389, + "owners": { + "items": { + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", }, - ], - "secondaryLdapServers": [ + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, + }, + "type": "object", + }, + }, + "resourceCollection": [ { - "hostname": "userstore-2.userstore", - "port": 1389, + "label": "User", + "notify": false, + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", + "sortKeys": [], + }, }, ], + "reversePropertyName": "ownerOfOrg", + "reverseRelationship": true, + "type": "relationship", + "validate": true, }, - "root": { - "authentication": { - "simple": { - "bindDn": "uid=admin", - "bindPassword": "&{userstore.password}", - }, - }, - "inheritFrom": "bind", - }, + "notifyRelationships": [ + "children", + ], + "returnByDefault": false, + "searchable": false, + "title": "Owner", + "type": "array", + "userEditable": false, + "viewable": true, }, - "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", + "parent": { + "description": "Parent Organization", + "notifyRelationships": [ + "children", + "members", + ], + "notifySelf": true, + "properties": { + "_ref": { + "type": "string", }, - }, - }, - "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", - ], + "_refProperties": { "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", + "propName": "_id", + "required": false, + "type": "string", }, }, + "type": "object", }, - "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", - }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + "description", + ], + "queryFilter": "true", + "sortKeys": [], }, }, - "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", - }, + ], + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/bravo_role/bravo_role.managed.json 1`] = ` +{ + "name": "bravo_role", + "onValidate": { + "globals": {}, + "source": "file://onValidate.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", }, - }, - "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", + "_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", }, }, - "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", + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "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", - }, - "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", + ], + "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", }, }, - "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", + "resourceCollection": [ + { + "label": "Assignment", + "path": "managed/bravo_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", }, - "maxConsecutiveLength": { - "isRequired": true, - "ldapAttribute": "ds-cfg-max-consecutive-length", - "type": "simple", + }, + ], + "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", }, }, - "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", + "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", }, - "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", - }, + ], + "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", }, }, - "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", - }, + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/bravo_role/onValidate.js 1`] = ` +"//extract script test UPDATED ONVALIDATE + +//test UPDATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/bravo_user/bravo_user.managed.json 1`] = ` +{ + "lastSync": { + "effectiveAssignmentsProperty": "effectiveAssignments", + "lastSyncProperty": "lastSync", + }, + "name": "bravo_user", + "notifications": {}, + "postUpdate": { + "globals": {}, + "source": "file://postUpdate.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", }, - "identities/admin": { - "dnTemplate": "o=root,ou=identities", - "isReadOnly": true, - "namingStrategy": { - "dnAttribute": "ou", - "type": "clientDnNaming", + ], + "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", }, - "objectClasses": [ - "organizationalunit", - ], - "properties": { - "_id": { - "ldapAttribute": "ou", - "primaryKey": true, - "type": "simple", - }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", - "type": "simple", - "writability": "readOnly", + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, }, + "type": "object", }, }, - "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", - }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", - "type": "simple", - "writability": "readOnly", + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], }, }, - }, - "identities/bravo": { - "dnTemplate": "o=bravo,o=root,ou=identities", - "isReadOnly": true, - "namingStrategy": { - "dnAttribute": "ou", - "type": "clientDnNaming", + ], + "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", }, - "objectClasses": [ - "organizationalunit", - ], - "properties": { - "_id": { - "ldapAttribute": "ou", - "primaryKey": true, - "type": "simple", - }, - "count": { - "isRequired": true, - "ldapAttribute": "numSubordinates", - "type": "simple", - "writability": "readOnly", + "_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", }, }, - "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", + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], }, }, - }, - "internal/user": { - "dnTemplate": "ou=users,ou=internal,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-internal-user", + ], + "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", ], - "properties": { - "_id": { - "isRequired": true, - "ldapAttribute": "uid", - "type": "simple", - "writability": "createOnly", - }, - "password": { - "ldapAttribute": "fr-idm-password", - "type": "json", - }, - }, - }, - "link": { - "dnTemplate": "ou=links,dc=openidm,dc=example,dc=com", - "objectClasses": [ - "uidObject", - "fr-idm-link", + [ + "applications", ], - "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", + ], + }, + "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", }, }, - "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", + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Assignment", + "path": "managed/bravo_assignment", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", }, }, - }, - "managed/teammember": { - "dnTemplate": "ou=people,o=root,ou=identities", - "namingStrategy": { - "dnAttribute": "fr-idm-uuid", - "type": "clientDnNaming", + ], + "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", }, - "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", + "_refProperties": { + "description": "Supports metadata within the relationship", + "properties": { + "_id": { + "description": "_refProperties object ID", + "type": "string", + }, }, + "title": "Authorization Roles Items _refProperties", + "type": "object", }, }, - "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", + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Internal Role", + "path": "internal/role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", }, }, - }, - "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", + ], + "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": { - "_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", + "consentDate": { + "description": "Consent Date", + "searchable": false, + "title": "Consent Date", + "type": "string", + "userEditable": true, + "viewable": true, }, "mapping": { - "ldapAttribute": "fr-idm-reconassoc-mapping", - "type": "simple", - }, - "sourceResourceCollection": { - "ldapAttribute": "fr-idm-reconassoc-sourceresourcecollection", - "type": "simple", - }, - "targetResourceCollection": { - "ldapAttribute": "fr-idm-reconassoc-targetresourcecollection", - "type": "simple", + "description": "Mapping", + "searchable": false, + "title": "Mapping", + "type": "string", + "userEditable": true, + "viewable": true, }, }, - "subResources": { - "entry": { - "namingStrategy": { - "dnAttribute": "uid", - "type": "clientDnNaming", + "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", }, - "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", }, + "title": "Groups Items _refProperties", + "type": "object", }, - "resourceName": "recon-assoc-entry", - "subResourceRouting": [ - { - "prefix": "entry", - "template": "recon/assoc/{reconId}/entry", - }, - ], }, - "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", + "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, }, - "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", - }, + "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", }, }, - "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", - }, + "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", }, - "jsonstorage": { - "dnTemplate": "ou=jsonstorage,dc=openidm,dc=example,dc=com", + "timestamp": { + "description": "Timestamp", + "type": "string", }, - "managed/*": { - "dnTemplate": "ou=managed,dc=openidm,dc=example,dc=com", + }, + "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", }, - "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", - }, - }, + ], + "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", }, - "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", - ], + "_refProperties": { + "description": "Supports metadata within the relationship", "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", + "description": "_refProperties object ID", + "type": "string", }, }, + "title": "Manager _refProperties", + "type": "object", }, - "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", - }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", }, }, - "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", + ], + "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", }, - "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", + "_refProperties": { + "properties": { + "_id": { + "propName": "_id", + "required": false, + "type": "string", + }, }, - "frUnindexedMultivalued4": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi4", - "type": "simple", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": false, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], }, - "frUnindexedMultivalued5": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi5", - "type": "simple", + }, + ], + "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", + }, }, - "frUnindexedString1": { - "ldapAttribute": "fr-attr-str1", - "type": "simple", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Application", + "path": "managed/bravo_application", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [ + "name", + ], }, - "frUnindexedString2": { - "ldapAttribute": "fr-attr-str2", - "type": "simple", + }, + ], + "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", + }, }, - "frUnindexedString3": { - "ldapAttribute": "fr-attr-str3", - "type": "simple", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "Organization", + "notify": true, + "path": "managed/bravo_organization", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", + "sortKeys": [], }, - "frUnindexedString4": { - "ldapAttribute": "fr-attr-str4", - "type": "simple", + }, + ], + "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", + }, }, - "frUnindexedString5": { - "ldapAttribute": "fr-attr-str5", - "type": "simple", + "title": "Direct Reports Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "label": "User", + "path": "managed/bravo_user", + "query": { + "fields": [ + "userName", + "givenName", + "sn", + ], + "queryFilter": "true", }, - "givenName": { - "ldapAttribute": "givenName", - "type": "simple", + }, + ], + "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", + }, }, - "groups": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-groups", - "primaryKey": "cn", - "resourcePath": "managed/alpha_group", - "type": "reference", + "title": "Provisioning Roles Items _refProperties", + "type": "object", + }, + }, + "resourceCollection": [ + { + "conditionalAssociationField": "condition", + "label": "Role", + "path": "managed/bravo_role", + "query": { + "fields": [ + "name", + ], + "queryFilter": "true", }, - "kbaInfo": { + }, + ], + "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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/bravo_user/postUpdate.js 1`] = ` +"//extract feature test UPDATED POSTUPDATE SCRIPT + + +//test UPDATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/managed/managed.idm.json 1`] = ` +{ + "idm": { + "managed": { + "_id": "managed", + "objects": [ + "file://alpha_user/alpha_user.managed.json", + "file://bravo_user/bravo_user.managed.json", + "file://alpha_role/alpha_role.managed.json", + "file://bravo_role/bravo_role.managed.json", + "file://alpha_assignment/alpha_assignment.managed.json", + "file://bravo_assignment/bravo_assignment.managed.json", + "file://alpha_organization/alpha_organization.managed.json", + "file://bravo_organization/bravo_organization.managed.json", + "file://alpha_group/alpha_group.managed.json", + "file://bravo_group/bravo_group.managed.json", + "file://alpha_application/alpha_application.managed.json", + "file://bravo_application/bravo_application.managed.json", + ], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/policy.idm.json 1`] = ` +{ + "idm": { + "policy": { + "_id": "policy", + "additionalFiles": [], + "resources": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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 all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/privileges.idm.json 1`] = ` +{ + "idm": { + "privileges": { + "_id": "privileges", + "privileges": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/provisioner.openicf.connectorinfoprovider.idm.json 1`] = ` +{ + "idm": { + "provisioner.openicf.connectorinfoprovider": { + "_id": "provisioner.openicf.connectorinfoprovider", + "connectorsLocation": "connectors", + "remoteConnectorClients": [], + "remoteConnectorClientsGroups": [], + "remoteConnectorServers": [], + "remoteConnectorServersGroups": [], + }, + }, + "meta": Any, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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, - "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", + "propertyName": "applications", "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", + "type": "reverseReference", }, - "profileImage": { - "ldapAttribute": "labeledURI", + "name": { + "ldapAttribute": "fr-idm-managed-application-name", "type": "simple", }, - "reports": { + "owners": { "isMultiValued": true, - "propertyName": "manager", + "propertyName": "ownerOfApp", "resourcePath": "managed/alpha_user", "type": "reverseReference", }, "roles": { "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-user-roles", - "primaryKey": "uid", + "propertyName": "applications", "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", + "type": "reverseReference", }, }, }, - "managed/alpha_usermeta": { - "dnTemplate": "ou=usermeta,o=alpha,o=root,ou=identities", - "jsonAttribute": "fr-idm-json", + "managed/alpha_assignment": { + "dnTemplate": "ou=assignment,o=alpha,o=root,ou=identities", + "jsonAttribute": "fr-idm-managed-assignment-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ "uidObject", - "fr-idm-generic-obj", + "fr-idm-managed-assignment", ], "properties": { - "target": { - "propertyName": "_meta", + "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/bravo_group": { - "dnTemplate": "ou=groups,o=bravo,o=root,ou=identities", + "managed/alpha_group": { + "dnTemplate": "ou=groups,o=alpha,o=root,ou=identities", "idGenerator": { "propertyName": "name", "type": "property", @@ -34321,13 +30077,13 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "members": { "isMultiValued": true, "propertyName": "groups", - "resourcePath": "managed/bravo_user", + "resourcePath": "managed/alpha_user", "type": "reverseReference", }, }, }, - "managed/bravo_organization": { - "dnTemplate": "ou=organization,o=bravo,o=root,ou=identities", + "managed/alpha_organization": { + "dnTemplate": "ou=organization,o=alpha,o=root,ou=identities", "jsonAttribute": "fr-idm-managed-organization-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "objectClasses": [ @@ -34336,26 +30092,22 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "fr-ext-attrs", ], "properties": { - "_id": { - "ldapAttribute": "uid", - "type": "simple", - }, "admins": { "isMultiValued": true, "propertyName": "adminOfOrg", - "resourcePath": "managed/bravo_user", + "resourcePath": "managed/alpha_user", "type": "reverseReference", }, "children": { "isMultiValued": true, "propertyName": "parent", - "resourcePath": "managed/bravo_organization", + "resourcePath": "managed/alpha_organization", "type": "reverseReference", }, "members": { "isMultiValued": true, "propertyName": "memberOfOrg", - "resourcePath": "managed/bravo_user", + "resourcePath": "managed/alpha_user", "type": "reverseReference", }, "name": { @@ -34365,19 +30117,19 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "owners": { "isMultiValued": true, "propertyName": "ownerOfOrg", - "resourcePath": "managed/bravo_user", + "resourcePath": "managed/alpha_user", "type": "reverseReference", }, "parent": { "ldapAttribute": "fr-idm-managed-organization-parent", "primaryKey": "uid", - "resourcePath": "managed/bravo_organization", + "resourcePath": "managed/alpha_organization", "type": "reference", }, }, }, - "managed/bravo_role": { - "dnTemplate": "ou=role,o=bravo,o=root,ou=identities", + "managed/alpha_role": { + "dnTemplate": "ou=role,o=alpha,o=root,ou=identities", "jsonAttribute": "fr-idm-managed-role-json", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatchManagedRole", "objectClasses": [ @@ -34385,16 +30137,30 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "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/bravo_user", + "resourcePath": "managed/alpha_user", "type": "reverseReference", }, }, }, - "managed/bravo_user": { - "dnTemplate": "ou=user,o=bravo,o=root,ou=identities", + "managed/alpha_user": { + "dnTemplate": "ou=user,o=alpha,o=root,ou=identities", "jsonAttribute": "fr-idm-custom-attrs", "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", "namingStrategy": { @@ -34434,7 +30200,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "isMultiValued": false, "ldapAttribute": "fr-idm-managed-user-meta", "primaryKey": "uid", - "resourcePath": "managed/bravo_usermeta", + "resourcePath": "managed/alpha_usermeta", "type": "reference", }, "_notifications": { @@ -34452,7 +30218,7 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "isMultiValued": true, "ldapAttribute": "fr-idm-managed-organization-admin", "primaryKey": "uid", - "resourcePath": "managed/bravo_organization", + "resourcePath": "managed/alpha_organization", "type": "reference", }, "aliasList": { @@ -34460,11 +30226,25 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "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", @@ -34493,10 +30273,25 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "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", @@ -34581,1094 +30376,1405 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "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", + "frIndexedString10": { + "ldapAttribute": "fr-attr-istr10", "type": "simple", }, - "frIndexedString5": { - "ldapAttribute": "fr-attr-istr5", + "frIndexedString11": { + "ldapAttribute": "fr-attr-istr11", "type": "simple", }, - "frUnindexedDate1": { - "ldapAttribute": "fr-attr-date1", + "frIndexedString12": { + "ldapAttribute": "fr-attr-istr12", "type": "simple", }, - "frUnindexedDate2": { - "ldapAttribute": "fr-attr-date2", + "frIndexedString13": { + "ldapAttribute": "fr-attr-istr13", "type": "simple", }, - "frUnindexedDate3": { - "ldapAttribute": "fr-attr-date3", + "frIndexedString14": { + "ldapAttribute": "fr-attr-istr14", "type": "simple", }, - "frUnindexedDate4": { - "ldapAttribute": "fr-attr-date4", + "frIndexedString15": { + "ldapAttribute": "fr-attr-istr15", "type": "simple", }, - "frUnindexedDate5": { - "ldapAttribute": "fr-attr-date5", + "frIndexedString16": { + "ldapAttribute": "fr-attr-istr16", "type": "simple", }, - "frUnindexedInteger1": { - "ldapAttribute": "fr-attr-int1", + "frIndexedString17": { + "ldapAttribute": "fr-attr-istr17", "type": "simple", }, - "frUnindexedInteger2": { - "ldapAttribute": "fr-attr-int2", + "frIndexedString18": { + "ldapAttribute": "fr-attr-istr18", "type": "simple", }, - "frUnindexedInteger3": { - "ldapAttribute": "fr-attr-int3", + "frIndexedString19": { + "ldapAttribute": "fr-attr-istr19", "type": "simple", }, - "frUnindexedInteger4": { - "ldapAttribute": "fr-attr-int4", + "frIndexedString2": { + "ldapAttribute": "fr-attr-istr2", "type": "simple", }, - "frUnindexedInteger5": { - "ldapAttribute": "fr-attr-int5", + "frIndexedString20": { + "ldapAttribute": "fr-attr-istr20", "type": "simple", }, - "frUnindexedMultivalued1": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi1", + "frIndexedString3": { + "ldapAttribute": "fr-attr-istr3", "type": "simple", }, - "frUnindexedMultivalued2": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi2", + "frIndexedString4": { + "ldapAttribute": "fr-attr-istr4", "type": "simple", }, - "frUnindexedMultivalued3": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi3", + "frIndexedString5": { + "ldapAttribute": "fr-attr-istr5", "type": "simple", }, - "frUnindexedMultivalued4": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi4", + "frIndexedString6": { + "ldapAttribute": "fr-attr-istr6", "type": "simple", }, - "frUnindexedMultivalued5": { - "isMultiValued": true, - "ldapAttribute": "fr-attr-multi5", + "frIndexedString7": { + "ldapAttribute": "fr-attr-istr7", "type": "simple", }, - "frUnindexedString1": { - "ldapAttribute": "fr-attr-str1", + "frIndexedString8": { + "ldapAttribute": "fr-attr-istr8", "type": "simple", }, - "frUnindexedString2": { - "ldapAttribute": "fr-attr-str2", + "frIndexedString9": { + "ldapAttribute": "fr-attr-istr9", "type": "simple", }, - "frUnindexedString3": { - "ldapAttribute": "fr-attr-str3", + "frUnindexedDate1": { + "ldapAttribute": "fr-attr-date1", "type": "simple", }, - "frUnindexedString4": { - "ldapAttribute": "fr-attr-str4", + "frUnindexedDate2": { + "ldapAttribute": "fr-attr-date2", "type": "simple", }, - "frUnindexedString5": { - "ldapAttribute": "fr-attr-str5", + "frUnindexedDate3": { + "ldapAttribute": "fr-attr-date3", "type": "simple", }, - "givenName": { - "ldapAttribute": "givenName", + "frUnindexedDate4": { + "ldapAttribute": "fr-attr-date4", "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", + "frUnindexedDate5": { + "ldapAttribute": "fr-attr-date5", "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", + "frUnindexedInteger1": { + "ldapAttribute": "fr-attr-int1", "type": "simple", }, - "ownerOfOrg": { - "isMultiValued": true, - "ldapAttribute": "fr-idm-managed-organization-owner", - "primaryKey": "uid", - "resourcePath": "managed/bravo_organization", - "type": "reference", - }, - "password": { - "ldapAttribute": "userPassword", + "frUnindexedInteger2": { + "ldapAttribute": "fr-attr-int2", "type": "simple", }, - "postalAddress": { - "ldapAttribute": "street", + "frUnindexedInteger3": { + "ldapAttribute": "fr-attr-int3", "type": "simple", }, - "postalCode": { - "ldapAttribute": "postalCode", + "frUnindexedInteger4": { + "ldapAttribute": "fr-attr-int4", "type": "simple", }, - "preferences": { - "ldapAttribute": "fr-idm-preferences", - "type": "json", - }, - "profileImage": { - "ldapAttribute": "labeledURI", + "frUnindexedInteger5": { + "ldapAttribute": "fr-attr-int5", "type": "simple", }, - "reports": { - "isMultiValued": true, - "propertyName": "manager", - "resourcePath": "managed/bravo_user", - "type": "reverseReference", - }, - "roles": { + "frUnindexedMultivalued1": { "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", - }, - }, - }, - "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", - }, - }, - }, - "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", - }, - }, - }, - "rest2LdapOptions": { - "mvccAttribute": "etag", - "readOnUpdatePolicy": "controls", - "returnNullForMissingProperties": true, - "useMvcc": true, - "usePermissiveModify": true, - "useSubtreeDelete": true, - }, - "security": { - "keyManager": "jvm", - "trustManager": "jvm", - }, - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "router": { - "_id": "router", - "filters": [], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "idm": { - "script": { - "ECMAScript": { - "#javascript.debug": "&{openidm.script.javascript.debug}", - "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.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", - }, - "_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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/secrets.idm.json 1`] = ` -{ - "idm": { - "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", - ], + "ldapAttribute": "fr-attr-multi1", + "type": "simple", }, - { - "aliases": [ - "&{openidm.config.crypto.alias|openidm-sym-default}", - ], - "secretId": "idm.config.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], + "frUnindexedMultivalued2": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi2", + "type": "simple", }, - { - "aliases": [ - "&{openidm.config.crypto.alias|openidm-sym-default}", - ], - "secretId": "idm.password.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], + "frUnindexedMultivalued3": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi3", + "type": "simple", }, - { - "aliases": [ - "&{openidm.https.keystore.cert.alias|openidm-localhost}", - ], - "secretId": "idm.jwt.session.module.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], + "frUnindexedMultivalued4": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi4", + "type": "simple", }, - { - "aliases": [ - "&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}", - ], - "secretId": "idm.jwt.session.module.signing", - "types": [ - "SIGN", - "VERIFY", - ], + "frUnindexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi5", + "type": "simple", }, - { - "aliases": [ - "selfservice", - ], - "secretId": "idm.selfservice.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], + "frUnindexedString1": { + "ldapAttribute": "fr-attr-str1", + "type": "simple", }, - { - "aliases": [ - "&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}", - ], - "secretId": "idm.selfservice.signing", - "types": [ - "SIGN", - "VERIFY", - ], + "frUnindexedString2": { + "ldapAttribute": "fr-attr-str2", + "type": "simple", }, - { - "aliases": [ - "&{openidm.config.crypto.alias|openidm-sym-default}", - ], - "secretId": "idm.assignment.attribute.encryption", - "types": [ - "ENCRYPT", - "DECRYPT", - ], + "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", }, - ], - "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", - }, - ], - }, - }, - "meta": Any, -} -`; - -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`] = ` -{ - "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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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 -AD testDir1": should export all idm config entities to separate files in the "testDir" directory: testDir1/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", + }, + "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", + }, }, - { - "action": "ASYNC", - "situation": "FOUND_ALREADY_LINKED", + }, + "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", + }, }, - { - "action": "ASYNC", - "situation": "LINK_ONLY", + }, + "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", + }, }, - { - "action": "ASYNC", - "situation": "MISSING", + }, + "managed/bravo_group": { + "dnTemplate": "ou=groups,o=bravo,o=root,ou=identities", + "idGenerator": { + "propertyName": "name", + "type": "property", }, - { - "action": "ASYNC", - "situation": "SOURCE_IGNORED", + "jsonAttribute": "fr-idm-managed-group-json", + "jsonQueryEqualityMatchingRule": "caseIgnoreJsonQueryMatch", + "namingStrategy": { + "dnAttribute": "cn", + "type": "clientDnNaming", }, - { - "action": "ASYNC", - "situation": "SOURCE_MISSING", + "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", + }, }, - { - "action": "ASYNC", - "situation": "TARGET_IGNORED", + }, + "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", + }, }, - { - "action": "ASYNC", - "situation": "UNASSIGNED", + }, + "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", + }, }, - { - "action": "ASYNC", - "situation": "UNQUALIFIED", + }, + "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", }, - ], - "properties": [ - { - "condition": { - "globals": {}, - "source": "console.log("Hello World!");", - "type": "text/javascript", + "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", }, - "default": [ - "Default value string", - ], - "source": "accountStatus", - "target": "applications", - "transform": { - "globals": {}, - "source": "console.log("hello");", - "type": "text/javascript", + "frUnindexedMultivalued5": { + "isMultiValued": true, + "ldapAttribute": "fr-attr-multi5", + "type": "simple", }, - }, - ], - "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__", - ], + "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", }, - "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", + "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", + }, }, - { - "action": "UNLINK", - "situation": "SOURCE_MISSING", + }, + "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", + }, }, - { - "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; + }, + }, + }, + }, + }, + "meta": Any, } +`; -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. +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/router.idm.json 1`] = ` +{ + "idm": { + "router": { + "_id": "router", + "filters": [], + }, + }, + "meta": Any, } +`; -if (!queryResults.result || queryResults.resultCount === 0) { - logger.warn("idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - " + googleEmail + " not found after " + ATTEMPT + " attempts."); - resultingAction = "UNLINK"; -} -resultingAction; -", - "type": "text/javascript", +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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", + ], }, - "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", + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.config.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - "source": "custom_password_encrypted", - "target": "__PASSWORD__", - "transform": { - "globals": {}, - "source": "openidm.decrypt(source);", - "type": "text/javascript", + { + "aliases": [ + "&{openidm.config.crypto.alias|openidm-sym-default}", + ], + "secretId": "idm.password.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - }, - { - "source": "cn", - "target": "__NAME__", - "transform": { - "globals": {}, - "source": "source + "@" + identityServer.getProperty("esv.gac.domain");", - "type": "text/javascript", + { + "aliases": [ + "&{openidm.https.keystore.cert.alias|openidm-localhost}", + ], + "secretId": "idm.jwt.session.module.encryption", + "types": [ + "ENCRYPT", + "DECRYPT", + ], }, - }, - { - "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", + { + "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", + ], }, - }, - ], - "queuedSync": { - "enabled": true, - "maxQueueSize": 20000, - "maxRetries": 5, - "pageSize": 100, - "pollingInterval": 1000, - "postRetryAction": "logged-ignore", - "retryDelay": 1000, + ], + "providerName": "&{openidm.keystore.provider|SunJCE}", + "storePassword": "&{openidm.keystore.password|changeit}", + "storetype": "&{openidm.keystore.type|JCEKS}", }, - "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 + ") -"; + "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, +} +`; -//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 idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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, } +`; -//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 idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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, } +`; -//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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: 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, } +`; -if (!isGoogleEligible) { - logMsg = logMsg + " Not sent to Google." - logger.info(logMsg); -} +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/servletfilter/payload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/payload": { + "_id": "servletfilter/payload", + "initParams": { + "maxRequestSizeInMegabytes": 5, + }, + "urlPatterns": [ + "&{openidm.servlet.alias}/*", + ], + }, + }, + "meta": Any, +} +`; -if (isGoogleEligible) { - logMsg = logMsg + " Sent to Google." - logger.info(logMsg); +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/servletfilter/upload.idm.json 1`] = ` +{ + "idm": { + "servletfilter/upload": { + "_id": "servletfilter/upload", + "initParams": { + "maxRequestSizeInMegabytes": 50, + }, + "urlPatterns": [ + "&{openidm.servlet.upload.alias}/*", + ], + }, + }, + "meta": Any, } +`; -isGoogleEligible; -", - "type": "text/javascript", - }, - }, +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/sync/extract_script_test/SOURCE.name.transform.groovy 1`] = ` +"//groovy EXTRACT SCRIPT test UPDATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/sync/extract_script_test/correlationScript.js 1`] = ` +"//extract script test UPDATED CORRELATION QUERY +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/sync/extract_script_test/extract_script_test.sync.json 1`] = ` +{ + "_id": "sync/extract_script_test", + "consentRequired": false, + "correlationScript": { + "globals": {}, + "source": "file://correlationScript.js", + "type": "text/javascript", + }, + "displayName": "extract_script_test", + "icon": null, + "name": "extract_script_test", + "onCreate": { + "globals": {}, + "source": "file://onCreate.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://SOURCE.name.transform.groovy", + "type": "groovy", + }, + }, + ], + "result": { + "globals": {}, + "source": "file://result.js", + "type": "text/javascript", + }, + "source": "managed/alpha_user", + "syncAfter": [], + "target": "managed/alpha_group", + "validSource": { + "globals": {}, + "source": "file://validSource.js", + "type": "text/javascript", + }, +} +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/sync/extract_script_test/onCreate.js 1`] = ` +"//test UPDATED ONCREATED +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/sync/extract_script_test/result.js 1`] = ` +"//tests UPDATED RESULT SCRIPT +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/sync/extract_script_test/validSource.js 1`] = ` +"//extract script test UPDATED VALIDSOURCE +" +`; + +exports[`frodo idm export "frodo idm export -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/sync/sync.idm.json 1`] = ` +{ + "idm": { + "sync": { + "_id": "sync", + "mappings": [ + "file://extract_script_test/extract_script_test.sync.json", ], }, }, @@ -35676,7 +31782,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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui.context/admin.idm.json 1`] = ` { "idm": { "ui.context/admin": { @@ -35694,7 +31800,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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui.context/api.idm.json 1`] = ` { "idm": { "ui.context/api": { @@ -35711,7 +31817,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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui.context/enduser.idm.json 1`] = ` { "idm": { "ui.context/enduser": { @@ -35728,7 +31834,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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui.context/oauth.idm.json 1`] = ` { "idm": { "ui.context/oauth": { @@ -35744,7 +31850,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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui/configuration.idm.json 1`] = ` { "idm": { "ui/configuration": { @@ -35778,6 +31884,8 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "roles": { "internal/role/openidm-admin": "ui-admin", "internal/role/openidm-authorized": "ui-user", + "super-admins": "ui-admin", + "tenant-admins": "ui-admin", }, "selfRegistration": true, }, @@ -35787,7 +31895,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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui/dashboard.idm.json 1`] = ` { "idm": { "ui/dashboard": { @@ -35969,7 +32077,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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui/profile.idm.json 1`] = ` { "idm": { "ui/profile": { @@ -36018,7 +32126,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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui/themeconfig.idm.json 1`] = ` { "idm": { "ui/themeconfig": { @@ -36027,19 +32135,19 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "path": "", "settings": { "footer": { - "mailto": "info@forgerock.com", + "mailto": "info@pingidentity.com", }, "loginLogo": { - "alt": "ForgeRock", - "height": "104px", + "alt": "Ping Identity", + "height": "120px", "src": "images/login-logo-dark.png", - "title": "ForgeRock", - "width": "210px", + "title": "Ping Identity", + "width": "120px", }, "logo": { - "alt": "ForgeRock", + "alt": "Ping Identity", "src": "images/logo-horizontal-white.png", - "title": "ForgeRock", + "title": "Ping Identity", }, }, "stylesheets": [ @@ -36053,235 +32161,23 @@ 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 -AxD idmTestDir9": should export all idm config entities to separate files and extracted scripts in the "idmTestDir9" directory: idmTestDir9/ui/themerealm.idm.json 1`] = ` { "idm": { "ui/themerealm": { "_id": "ui/themerealm", "realm": { - "/alpha": [ - { - "_id": "4ded6d91-ceea-400a-ae3f-42209f1b0e06", - "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", - }, - ], "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, - }, - }, - "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", + "_id": "abb4efed-ae70-4064-91a7-936be552d6fc", "accountCardBackgroundColor": "#ffffff", "accountCardHeaderColor": "#23282e", "accountCardInnerBorderColor": "#e7eef4", "accountCardInputBackgroundColor": "#ffffff", "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#000000", "accountCardInputLabelColor": "#5e6d82", - "accountCardInputSelectColor": "#e4f4fd", + "accountCardInputSelectColor": "#edf7fd", "accountCardInputSelectHoverColor": "#f6f8fa", "accountCardInputTextColor": "#23282e", "accountCardOuterBorderColor": "#e7eef4", @@ -36289,26 +32185,9 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "accountCardTabActiveBorderColor": "#109cf1", "accountCardTabActiveColor": "#e4f4fd", "accountCardTextColor": "#5e6d82", - "accountFooter": " -", - "accountFooterEnabled": true, + "accountFooter": "", + "accountFooterEnabled": false, "accountFooterScriptTag": "", "accountFooterScriptTagEnabled": false, "accountNavigationBackgroundColor": "#ffffff", @@ -36357,12 +32236,15 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "accountTableRowHoverColor": "#f6f8fa", "backgroundColor": "#FFFFFF", "backgroundImage": "", - "bodyText": "#5E6D82", + "bodyText": "#000000", "boldLinks": false, - "buttonRounded": "50", + "buttonFocusBorderColor": "#0672cb", + "buttonRounded": "0", "dangerColor": "#f7685b", + "darkColor": "#23282e", "favicon": "", "fontFamily": "Open Sans", + "infoColor": "#109cf1", "isDefault": false, "journeyA11yAddFallbackErrorHeading": true, "journeyCardBackgroundColor": "#ffffff", @@ -36374,26 +32256,9 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "journeyFloatingLabels": true, "journeyFocusElement": "header", "journeyFocusFirstFocusableItemEnabled": false, - "journeyFooter": " -", - "journeyFooterEnabled": true, + "journeyFooter": "", + "journeyFooterEnabled": false, "journeyFooterScriptTag": "", "journeyFooterScriptTagEnabled": false, "journeyHeader": "
Header Content
", @@ -36401,56 +32266,71 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "journeyHeaderSkipLinkEnabled": false, "journeyInputBackgroundColor": "#ffffff", "journeyInputBorderColor": "#c0c9d5", + "journeyInputFocusBorderColor": "#000000", "journeyInputLabelColor": "#5e6d82", "journeyInputSelectColor": "#e4f4fd", "journeyInputSelectHoverColor": "#f6f8fa", "journeyInputTextColor": "#23282e", - "journeyJustifiedContent": "
-

Uptime & Performance Benchmarking Made Easy

-
- -", - "journeyJustifiedContentEnabled": true, + "journeyJustifiedContent": "", + "journeyJustifiedContentEnabled": false, "journeyJustifiedContentMobileViewEnabled": false, - "journeyLayout": "justified-right", + "journeyLayout": "card", "journeyRememberMeEnabled": false, "journeyRememberMeLabel": "", "journeySignInButtonPosition": "flex-column", - "journeyTheaterMode": true, - "linkActiveColor": "#007661", - "linkColor": "#009C80", + "journeyTheaterMode": false, + "lightColor": "#f6f8fa", + "linkActiveColor": "#000000", + "linkActiveColorOnDark": "#0a6eab", + "linkColor": "#000000", + "linkColorOnDark": "#109cf1", "linkedTrees": [], - "logo": "https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg", - "logoAltText": "Zardoz Logo", + "logo": "https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg", + "logoAltText": "Contrast", "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", + "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": "#009C80", - "primaryOffColor": "#007661", + "primaryColor": "#000000", + "primaryOffColor": "#000000", "profileBackgroundColor": "#FFFFFF", "profileMenuHighlightColor": "#FFFFFF", "profileMenuHoverColor": "#FFFFFF", - "profileMenuHoverTextColor": "#455469", - "profileMenuTextHighlightColor": "#009C80", + "profileMenuHoverTextColor": "#000000", + "profileMenuTextHighlightColor": "#455469", "secondaryColor": "#69788b", "successColor": "#2ed47a", - "switchBackgroundColor": "#c0c9d5", + "switchBackgroundColor": "#939393", "textColor": "#ffffff", "topBarBackgroundColor": "#ffffff", "topBarBorderColor": "#e7eef4", "topBarHeaderColor": "#23282e", "topBarTextColor": "#69788b", + "warningColor": "#ffb946", }, { - "_id": "00203891-dde0-4114-b27a-219ae0b43a61", + "_id": "72ef4fcb-aae2-4c78-a050-d0e373c6a175", + "accountCardBackgroundColor": "#ffffff", + "accountCardHeaderColor": "#23282e", + "accountCardInnerBorderColor": "#e7eef4", + "accountCardInputBackgroundColor": "#ffffff", + "accountCardInputBorderColor": "#c0c9d5", + "accountCardInputFocusBorderColor": "#EB0A1E", + "accountCardInputLabelColor": "#5e6d82", + "accountCardInputSelectColor": "#edf7fd", + "accountCardInputSelectHoverColor": "#f6f8fa", + "accountCardInputTextColor": "#23282e", + "accountCardOuterBorderColor": "#e7eef4", + "accountCardShadow": 3, + "accountCardTabActiveBorderColor": "#109cf1", + "accountCardTabActiveColor": "#e4f4fd", + "accountCardTextColor": "#5e6d82", "accountFooter": "
@@ -36493,6 +32373,11 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm
", "accountFooterEnabled": true, + "accountFooterScriptTag": "", + "accountFooterScriptTagEnabled": false, + "accountNavigationBackgroundColor": "#ffffff", + "accountNavigationTextColor": "#455469", + "accountNavigationToggleBorderColor": "#e7eef4", "accountPageSections": { "accountControls": { "enabled": false, @@ -36533,13 +32418,29 @@ exports[`frodo idm export "frodo idm export -AD testDir1": should export all idm "enabled": true, }, }, + "accountTableRowHoverColor": "#f6f8fa", "backgroundColor": "#FFFFFF", "backgroundImage": "", "bodyText": "#5E6D82", + "boldLinks": false, + "buttonFocusBorderColor": "#0672cb", "buttonRounded": "50", "dangerColor": "#f7685b", + "darkColor": "#23282e", "favicon": "", + "fontFamily": "Open Sans", + "infoColor": "#109cf1", "isDefault": false, + "journeyA11yAddFallbackErrorHeading": true, + "journeyCardBackgroundColor": "#ffffff", + "journeyCardBorderRadius": 4, + "journeyCardHeaderBackgroundColor": "#ffffff", + "journeyCardShadow": 3, + "journeyCardTextColor": "#5e6d82", + "journeyCardTitleColor": "#23282e", + "journeyFloatingLabels": true, + "journeyFocusElement": "header", + "journeyFocusFirstFocusableItemEnabled": false, "journeyFooter": "