@rockcarver/frodo-cli 2.0.0-56 → 2.0.0-57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -1
- package/esm/cli/service/service-import.js +2 -2
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/ops/AdminOps.js +17 -19
- package/esm/ops/AdminOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +2 -1
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/templates/{cloud/GenericExtensionAttributesTemplate.json → GenericExtensionAttributesTemplate.json} +20 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.0.0-56] - 2024-05-01
|
|
11
|
+
|
|
10
12
|
## [2.0.0-55] - 2024-04-09
|
|
11
13
|
|
|
12
14
|
### Changed
|
|
@@ -1543,7 +1545,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1543
1545
|
- Fixed problem with adding connection profiles
|
|
1544
1546
|
- Miscellaneous bug fixes
|
|
1545
1547
|
|
|
1546
|
-
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-
|
|
1548
|
+
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-56...HEAD
|
|
1549
|
+
|
|
1550
|
+
[2.0.0-56]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-55...v2.0.0-56
|
|
1547
1551
|
|
|
1548
1552
|
[2.0.0-55]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-54...v2.0.0-55
|
|
1549
1553
|
|
|
@@ -4,11 +4,11 @@ import { importFirstServiceFromFile, importServiceFromFile, importServicesFromFi
|
|
|
4
4
|
import { printMessage, verboseMessage } from '../../utils/Console.js';
|
|
5
5
|
import { FrodoCommand } from '../FrodoCommand';
|
|
6
6
|
const program = new FrodoCommand('frodo service import');
|
|
7
|
-
program.description('Import AM services.').addOption(new Option('-i, --service-id <service-id>', 'Service id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the file to import SAML Entity(s) from. Ignored with -A.')).addOption(new Option('-a, --all', 'Import all services from a single file.')).addOption(new Option('-C, --clean', 'Remove existing service(s) before importing.')).addOption(new Option('-A, --all-separate', 'Import all services from separate files <id>.service.json.')).addOption(new Option('-g, --global', 'Import service(s) as global service(s).')).addOption(new Option('-r, --current-realm', 'Import service(s) into the current realm.')).action(async (host, realm, user, password, options, command) => {
|
|
7
|
+
program.description('Import AM services.').addOption(new Option('-i, --service-id <service-id>', 'Service id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the file to import SAML Entity(s) from. Ignored with -A.')).addOption(new Option('-a, --all', 'Import all services from a single file.')).addOption(new Option('-C, --clean', 'Remove existing service(s) before importing.')).addOption(new Option('-A, --all-separate', 'Import all services from separate files <id>.service.json.')).addOption(new Option('-g, --global', 'Import service(s) as global service(s).').default(false)).addOption(new Option('-r, --current-realm', 'Import service(s) into the current realm. Use this flag if you exported a service from one realm and are importing into another realm.').default(false)).action(async (host, realm, user, password, options, command) => {
|
|
8
8
|
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
9
9
|
const clean = options.clean ?? false;
|
|
10
10
|
const globalConfig = options.global ?? false;
|
|
11
|
-
const realmConfig = options.
|
|
11
|
+
const realmConfig = globalConfig ? false : options.currentRealm ?? false;
|
|
12
12
|
|
|
13
13
|
// import by id
|
|
14
14
|
if (options.serviceId && options.file && (await getTokens())) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-import.js","names":["Option","getTokens","importFirstServiceFromFile","importServiceFromFile","importServicesFromFile","importServicesFromFiles","printMessage","verboseMessage","FrodoCommand","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","clean","globalConfig","global","realmConfig","serviceId","file","outcome","process","exitCode","all","allSeparate","help","parse"],"sources":["../../../src/cli/service/service-import.ts"],"sourcesContent":["import { Option } from 'commander';\n\nimport { getTokens } from '../../ops/AuthenticateOps';\nimport {\n importFirstServiceFromFile,\n importServiceFromFile,\n importServicesFromFile,\n importServicesFromFiles,\n} from '../../ops/ServiceOps.js';\nimport { printMessage, verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst program = new FrodoCommand('frodo service import');\n\ninterface ServiceImportOptions {\n file?: string;\n all?: boolean;\n serviceId?: string;\n allSeparate?: boolean;\n type?: string;\n insecure?: boolean;\n clean?: boolean;\n directory?: string;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n global?: boolean;\n
|
|
1
|
+
{"version":3,"file":"service-import.js","names":["Option","getTokens","importFirstServiceFromFile","importServiceFromFile","importServicesFromFile","importServicesFromFiles","printMessage","verboseMessage","FrodoCommand","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","clean","globalConfig","global","realmConfig","currentRealm","serviceId","file","outcome","process","exitCode","all","allSeparate","help","parse"],"sources":["../../../src/cli/service/service-import.ts"],"sourcesContent":["import { Option } from 'commander';\n\nimport { getTokens } from '../../ops/AuthenticateOps';\nimport {\n importFirstServiceFromFile,\n importServiceFromFile,\n importServicesFromFile,\n importServicesFromFiles,\n} from '../../ops/ServiceOps.js';\nimport { printMessage, verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst program = new FrodoCommand('frodo service import');\n\ninterface ServiceImportOptions {\n file?: string;\n all?: boolean;\n serviceId?: string;\n allSeparate?: boolean;\n type?: string;\n insecure?: boolean;\n clean?: boolean;\n directory?: string;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n global?: boolean;\n currentRealm?: boolean;\n}\n\nprogram\n .description('Import AM services.')\n .addOption(\n new Option(\n '-i, --service-id <service-id>',\n 'Service id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'Name of the file to import SAML Entity(s) from. Ignored with -A.'\n )\n )\n .addOption(new Option('-a, --all', 'Import all services from a single file.'))\n .addOption(\n new Option('-C, --clean', 'Remove existing service(s) before importing.')\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all services from separate files <id>.service.json.'\n )\n )\n .addOption(\n new Option(\n '-g, --global',\n 'Import service(s) as global service(s).'\n ).default(false)\n )\n .addOption(\n new Option(\n '-r, --current-realm',\n 'Import service(s) into the current realm. Use this flag if you exported a service from one realm and are importing into another realm.'\n ).default(false)\n )\n .action(\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: ServiceImportOptions,\n command\n ) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n\n const clean = options.clean ?? false;\n const globalConfig = options.global ?? false;\n const realmConfig = globalConfig ? false : options.currentRealm ?? false;\n\n // import by id\n if (options.serviceId && options.file && (await getTokens())) {\n verboseMessage('Importing service...');\n const outcome = await importServiceFromFile(\n options.serviceId,\n options.file,\n {\n clean,\n global: globalConfig,\n realm: realmConfig,\n }\n );\n if (!outcome) process.exitCode = 1;\n }\n // -a / --all\n else if (options.all && options.file && (await getTokens())) {\n verboseMessage('Importing all services from a single file...');\n const outcome = await importServicesFromFile(options.file, {\n clean,\n global: globalConfig,\n realm: realmConfig,\n });\n if (!outcome) process.exitCode = 1;\n }\n // -A / --all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Importing all services from separate files...');\n const outcome = await importServicesFromFiles({\n clean,\n global: globalConfig,\n realm: realmConfig,\n });\n if (!outcome) process.exitCode = 1;\n }\n // import file\n else if (options.file && (await getTokens())) {\n verboseMessage('Importing service...');\n const outcome = await importFirstServiceFromFile(options.file, {\n clean,\n global: globalConfig,\n realm: realmConfig,\n });\n if (!outcome) process.exitCode = 1;\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
|
package/esm/ops/AdminOps.js
CHANGED
|
@@ -47,7 +47,7 @@ const {
|
|
|
47
47
|
} = frodo.cloud.secret;
|
|
48
48
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
49
49
|
const OAUTH2_CLIENT = JSON.parse(fs.readFileSync(path.resolve(__dirname, './templates/OAuth2ClientTemplate.json'), 'utf8'));
|
|
50
|
-
const GENERIC_EXTENSION_ATTRIBUTES = JSON.parse(fs.readFileSync(path.resolve(__dirname, './templates/
|
|
50
|
+
const GENERIC_EXTENSION_ATTRIBUTES = JSON.parse(fs.readFileSync(path.resolve(__dirname, './templates/GenericExtensionAttributesTemplate.json'), 'utf8'));
|
|
51
51
|
const protectedClients = ['ui', 'idm-provisioning'];
|
|
52
52
|
const protectedSubjects = ['amadmin', 'autoid-resource-server'];
|
|
53
53
|
const privilegedScopes = ['am-introspect-all-tokens', 'fr:idm:*', 'fr:idc:esv:*'];
|
|
@@ -628,25 +628,24 @@ export async function hideGenericExtensionAttributes(includeCustomized, dryRun)
|
|
|
628
628
|
try {
|
|
629
629
|
const response = await readConfigEntity('managed');
|
|
630
630
|
const managed = cloneDeep(response);
|
|
631
|
-
const propertyNames = Object.keys(GENERIC_EXTENSION_ATTRIBUTES);
|
|
632
631
|
const updatedObjects = managed.objects.map(object => {
|
|
633
632
|
// ignore all other objects
|
|
634
633
|
if (object.name !== getCurrentRealmManagedUser()) {
|
|
635
634
|
return object;
|
|
636
635
|
}
|
|
637
|
-
|
|
638
|
-
if (isEqualJson(GENERIC_EXTENSION_ATTRIBUTES[
|
|
639
|
-
if (object.schema.properties[
|
|
640
|
-
printMessage(`${
|
|
636
|
+
for (const property of Object.keys(cloneDeep(GENERIC_EXTENSION_ATTRIBUTES))) {
|
|
637
|
+
if (isEqualJson(GENERIC_EXTENSION_ATTRIBUTES[property], object.schema.properties[property], ['viewable', 'usageDescription', 'searchable']) || includeCustomized) {
|
|
638
|
+
if (object.schema.properties[property].viewable) {
|
|
639
|
+
printMessage(`${property}: hide`);
|
|
641
640
|
// eslint-disable-next-line no-param-reassign
|
|
642
|
-
object.schema.properties[
|
|
641
|
+
object.schema.properties[property].viewable = false;
|
|
643
642
|
} else {
|
|
644
|
-
printMessage(`${
|
|
643
|
+
printMessage(`${property}: ignore (already hidden)`);
|
|
645
644
|
}
|
|
646
645
|
} else {
|
|
647
|
-
printMessage(`${
|
|
646
|
+
printMessage(`${property}: skip (customized)`);
|
|
648
647
|
}
|
|
649
|
-
}
|
|
648
|
+
}
|
|
650
649
|
return object;
|
|
651
650
|
});
|
|
652
651
|
managed.objects = updatedObjects;
|
|
@@ -666,25 +665,24 @@ export async function showGenericExtensionAttributes(includeCustomized, dryRun)
|
|
|
666
665
|
try {
|
|
667
666
|
const response = await readConfigEntity('managed');
|
|
668
667
|
const managed = cloneDeep(response);
|
|
669
|
-
const propertyNames = Object.keys(GENERIC_EXTENSION_ATTRIBUTES);
|
|
670
668
|
const updatedObjects = managed.objects.map(object => {
|
|
671
669
|
// ignore all other objects
|
|
672
670
|
if (object.name !== getCurrentRealmManagedUser()) {
|
|
673
671
|
return object;
|
|
674
672
|
}
|
|
675
|
-
|
|
676
|
-
if (isEqualJson(GENERIC_EXTENSION_ATTRIBUTES[
|
|
677
|
-
if (!object.schema.properties[
|
|
678
|
-
printMessage(`${
|
|
673
|
+
for (const property of Object.keys(cloneDeep(GENERIC_EXTENSION_ATTRIBUTES))) {
|
|
674
|
+
if (isEqualJson(GENERIC_EXTENSION_ATTRIBUTES[property], object.schema.properties[property], ['viewable', 'usageDescription']) || includeCustomized) {
|
|
675
|
+
if (!object.schema.properties[property].viewable) {
|
|
676
|
+
printMessage(`${property}: show`);
|
|
679
677
|
// eslint-disable-next-line no-param-reassign
|
|
680
|
-
object.schema.properties[
|
|
678
|
+
object.schema.properties[property].viewable = true;
|
|
681
679
|
} else {
|
|
682
|
-
printMessage(`${
|
|
680
|
+
printMessage(`${property}: ignore (already showing)`);
|
|
683
681
|
}
|
|
684
682
|
} else {
|
|
685
|
-
printMessage(`${
|
|
683
|
+
printMessage(`${property}: skip (customized)`);
|
|
686
684
|
}
|
|
687
|
-
}
|
|
685
|
+
}
|
|
688
686
|
return object;
|
|
689
687
|
});
|
|
690
688
|
managed.objects = updatedObjects;
|
package/esm/ops/AdminOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminOps.js","names":["frodo","FrodoError","state","fs","path","fileURLToPath","cleanupProgressIndicators","createKeyValueTable","createProgressIndicator","printError","printMessage","stopProgressIndicator","updateProgressIndicator","cloneDeep","getTypedFilename","saveJsonToFile","getFilePath","getCurrentRealmManagedUser","utils","get","isEqualJson","json","generateRfc7523AuthZGrantArtefacts","_generateRfc7523AuthZGrantArtefacts","executeRfc7523AuthZGrantFlow","_executeRfc7523AuthZGrantFlow","admin","stringify","clientCredentialsGrant","oauth2oidc","endpoint","readOAuth2TrustedJwtIssuer","issuer","readOAuth2Client","readOAuth2Clients","updateOAuth2Client","client","readOAuth2Provider","provider","readConfigEntity","updateConfigEntity","idm","config","getRealmManagedOrganization","organization","createSecret","cloud","secret","__dirname","dirname","import","meta","url","OAUTH2_CLIENT","JSON","parse","readFileSync","resolve","GENERIC_EXTENSION_ATTRIBUTES","protectedClients","protectedSubjects","privilegedScopes","privilegedRoles","adminScopes","adminDefaultScopes","adminRoles","autoIdRoles","listOAuth2CustomClients","clients","clientIds","map","_id","filter","includes","authentication","subjects","rsFilter","mapping","subject","adminClients","sort","a","b","localeCompare","forEach","item","error","listOAuth2AdminClients","isPrivileged","coreOAuth2ClientConfig","scopes","scope","clientId","roles","role","listNonOAuth2AdminStaticUserMappings","showProtected","adminSubjects","getDynamicClientRegistrationScope","clientDynamicRegistrationConfig","dynamicClientRegistrationScope","addAdminScopes","modClient","allAdminScopes","concat","addScopes","value","add","addDefaultScope","defaultScopes","length","addClientCredentialsGrantType","modified","advancedOAuth2ClientConfig","grantTypes","push","inherited","addAdminStaticUserMapping","name","needsAdminMapping","addRoles","mappings","newMapping","localUser","userRoles","addAutoIdStaticUserMapping","grantOAuth2ClientAdminPrivileges","clientName","descriptions","startsWith","Date","toLocaleString","removeAdminScopes","finalScopes","finalDefaultScopes","removeClientCredentialsGrantType","finalGrantTypes","grantType","removeAdminStaticUserMapping","finalRoles","removeMapping","revokeOAuth2ClientAdminPrivileges","createOAuth2ClientWithAdminPrivileges","clientSecret","userpassword","createLongLivedToken","lifetime","rememberedLifetime","accessTokenLifetime","tokenResponse","getHost","lltResponse","access_token","expires","getTime","expires_in","expires_on","description","newSecret","removeStaticUserMapping","hideGenericExtensionAttributes","includeCustomized","dryRun","response","managed","propertyNames","Object","keys","updatedObjects","objects","object","schema","properties","viewable","showGenericExtensionAttributes","repairOrgModelUser","repairData","RDVPs","queryConfig","flattenProperties","repairOrgModelOrg","repairOrgModelData","extendOrgModelPermissins","repairOrgModel","excludeCustomized","extendPermissions","getJwkFilePath","getJwksFilePath","iss","jwk","sub","options","artefacts","barId","save","jwkFile","jwksFile","jwkBarId","jwksBarId","jwks","_artefacts$issuer$all","_artefacts$issuer$all2","getRealm","join","clientType","isConsentImplied","tokenEndpointAuthMethod","signEncOAuth2ClientConfig","publicKeyLocation","toString","allowedSubjects","spinnerId","issSpinnerId","message","jwkSpinnerId","subSpinnerId","_error$response","data","id_token"],"sources":["../../src/ops/AdminOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport { Readable, Writable } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { OAuth2ClientSkeleton } from '@rockcarver/frodo-lib/types/api/OAuth2ClientApi';\nimport { AccessTokenResponseType } from '@rockcarver/frodo-lib/types/api/OAuth2OIDCApi';\nimport { OAuth2TrustedJwtIssuerSkeleton } from '@rockcarver/frodo-lib/types/api/OAuth2TrustedJwtIssuerApi';\nimport { JwkRsa, JwksInterface } from '@rockcarver/frodo-lib/types/ops/JoseOps';\nimport { AccessTokenMetaType } from '@rockcarver/frodo-lib/types/ops/OAuth2OidcOps';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport {\n cleanupProgressIndicators,\n createKeyValueTable,\n createProgressIndicator,\n printError,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { cloneDeep } from './utils/OpsUtils';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getFilePath,\n getCurrentRealmManagedUser,\n} = frodo.utils;\nconst { get, isEqualJson } = frodo.utils.json;\nconst {\n generateRfc7523AuthZGrantArtefacts: _generateRfc7523AuthZGrantArtefacts,\n executeRfc7523AuthZGrantFlow: _executeRfc7523AuthZGrantFlow,\n} = frodo.admin;\nconst { stringify } = frodo.utils.json;\nconst { clientCredentialsGrant } = frodo.oauth2oidc.endpoint;\nconst { readOAuth2TrustedJwtIssuer } = frodo.oauth2oidc.issuer;\nconst { readOAuth2Client, readOAuth2Clients, updateOAuth2Client } =\n frodo.oauth2oidc.client;\nconst { readOAuth2Provider } = frodo.oauth2oidc.provider;\nconst { readConfigEntity, updateConfigEntity } = frodo.idm.config;\nconst { getRealmManagedOrganization } = frodo.idm.organization;\nconst { createSecret } = frodo.cloud.secret;\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst OAUTH2_CLIENT: OAuth2ClientSkeleton = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './templates/OAuth2ClientTemplate.json'),\n 'utf8'\n )\n);\nconst GENERIC_EXTENSION_ATTRIBUTES = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './templates/cloud/GenericExtensionAttributesTemplate.json'\n ),\n 'utf8'\n )\n);\n\nconst protectedClients = ['ui', 'idm-provisioning'];\nconst protectedSubjects = ['amadmin', 'autoid-resource-server'];\n\nconst privilegedScopes = [\n 'am-introspect-all-tokens',\n 'fr:idm:*',\n 'fr:idc:esv:*',\n];\n// const privilegedUsers = ['openidm-admin'];\nconst privilegedRoles = [\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\n\nconst adminScopes = ['fr:idm:*', 'fr:idc:esv:*'];\nconst adminDefaultScopes = ['fr:idm:*'];\nconst adminRoles = [\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\nconst autoIdRoles = [\n 'internal/role/platform-provisioning',\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\n\n/*\n * List all oauth2 clients, which have a corresponding staticUserMapping\n * in the IDM authentication.json:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"someOauth2ClientID\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n },\n {\n \"subject\": \"RCSClient\",\n \"localUser\": \"internal/user/idm-provisioning\"\n }\n ]\n }\n }\n */\nexport async function listOAuth2CustomClients(): Promise<boolean> {\n try {\n const clients = await readOAuth2Clients();\n const clientIds = clients\n .map((client) => client._id)\n .filter((client) => !protectedClients.includes(client));\n const authentication = await readConfigEntity('authentication');\n const subjects = authentication.rsFilter['staticUserMapping']\n .map((mapping) => mapping.subject)\n .filter((subject) => !protectedSubjects.includes(subject));\n const adminClients = subjects.filter((subject) =>\n clientIds.includes(subject)\n );\n adminClients.sort((a, b) => a.localeCompare(b));\n adminClients.forEach((item) => {\n printMessage(`${item}`, 'data');\n });\n return true;\n } catch (error) {\n printError(error, `Error listing custom OAuth2 clients`);\n }\n return false;\n}\n\n/*\n * List all oauth2 clients, which have the fr:idm:* scope and a \n * corresponding staticUserMapping in the IDM authentication.json\n * and are assigned admin privileges:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"someOauth2ClientID\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function listOAuth2AdminClients(): Promise<boolean> {\n try {\n const clients = await readOAuth2Clients();\n const clientIds = clients\n .filter((client) => {\n // printMessage({ message: client, type: 'error', state });\n let isPrivileged = false;\n if (client.coreOAuth2ClientConfig.scopes) {\n (client.coreOAuth2ClientConfig.scopes as Readable<string[]>).forEach(\n (scope) => {\n if (privilegedScopes.includes(scope)) {\n isPrivileged = true;\n }\n }\n );\n }\n return isPrivileged;\n })\n .map((client) => client._id)\n .filter((clientId) => !protectedClients.includes(clientId));\n const authentication = await readConfigEntity('authentication');\n const subjects = authentication.rsFilter['staticUserMapping']\n .filter((mapping) => {\n let isPrivileged = false;\n if (mapping.roles) {\n mapping.roles.forEach((role) => {\n if (privilegedRoles.includes(role)) {\n isPrivileged = true;\n }\n });\n }\n return isPrivileged;\n })\n .map((mapping) => mapping.subject)\n .filter((subject) => !protectedSubjects.includes(subject));\n const adminClients = subjects.filter((subject) =>\n clientIds.includes(subject)\n );\n adminClients.sort((a, b) => a.localeCompare(b));\n adminClients.forEach((item) => {\n printMessage(`${item}`, 'data');\n });\n return true;\n } catch (error) {\n printError(error, `Error listing admin OAuth2 clients`);\n }\n return false;\n}\n\n/*\n * List all static user mappings that are not oauth2 clients in authentication.json\n * and are assigned admin privileges:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"amadmin\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n },\n {\n \"subject\": \"idm-provisioning\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\"\n ]\n },\n {\n \"subject\": \"RCSClient\",\n \"localUser\": \"internal/user/idm-provisioning\"\n },\n {\n \"subject\": \"autoid-resource-server\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\",\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function listNonOAuth2AdminStaticUserMappings(\n showProtected: boolean\n): Promise<boolean> {\n try {\n const clients = await readOAuth2Clients();\n const clientIds = clients\n .map((client) => client._id)\n .filter((client) => !protectedClients.includes(client));\n const authentication = await readConfigEntity('authentication');\n let subjects = authentication.rsFilter['staticUserMapping']\n .filter((mapping) => {\n let isPrivileged = false;\n if (mapping.roles) {\n mapping.roles.forEach((role) => {\n if (privilegedRoles.includes(role)) {\n isPrivileged = true;\n }\n });\n }\n return isPrivileged;\n })\n .map((mapping) => mapping.subject);\n if (!showProtected) {\n subjects = subjects.filter(\n (subject) => !protectedSubjects.includes(subject)\n );\n }\n const adminSubjects = subjects.filter(\n (subject) => !clientIds.includes(subject)\n );\n adminSubjects.sort((a, b) => a.localeCompare(b));\n adminSubjects.forEach((item) => {\n printMessage(`${item}`, 'data');\n });\n return true;\n } catch (error) {\n printError(error, `Error listing non-oauth2 admin static user mappings`);\n }\n return false;\n}\n\nasync function getDynamicClientRegistrationScope() {\n try {\n const provider = await readOAuth2Provider();\n return provider.clientDynamicRegistrationConfig\n .dynamicClientRegistrationScope;\n } catch (error) {\n throw new FrodoError(\n `Error getting dynamic client registration scope`,\n error\n );\n }\n}\n\nasync function addAdminScopes(clientId: string, client: OAuth2ClientSkeleton) {\n try {\n const modClient = client;\n const allAdminScopes = adminScopes.concat([\n await getDynamicClientRegistrationScope(),\n ]);\n let addScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.scopes &&\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value\n ) {\n addScopes = allAdminScopes.filter((scope) => {\n let add = false;\n if (\n !(\n modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>\n ).value.includes(scope)\n ) {\n add = true;\n }\n return add;\n });\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value = (\n modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>\n ).value.concat(addScopes);\n } else {\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value =\n allAdminScopes;\n }\n let addDefaultScope = false;\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes &&\n modClient.coreOAuth2ClientConfig.defaultScopes.value\n ) {\n if (modClient.coreOAuth2ClientConfig.defaultScopes.value.length === 0) {\n addDefaultScope = true;\n modClient.coreOAuth2ClientConfig.defaultScopes.value =\n adminDefaultScopes;\n } else {\n printMessage(\n `Client \"${clientId}\" already has default scopes configured, not adding admin default scope.`\n );\n }\n }\n if (addScopes.length > 0 || addDefaultScope) {\n printMessage(`Adding admin scopes to client \"${clientId}\"...`);\n } else {\n printMessage(`Client \"${clientId}\" already has admin scopes.`);\n }\n return modClient;\n } catch (error) {\n throw new FrodoError(\n `Error adding admin scopes to oauth2 client ${clientId}`,\n error\n );\n }\n}\n\nfunction addClientCredentialsGrantType(\n clientId: string,\n client: OAuth2ClientSkeleton\n) {\n try {\n const modClient = client;\n let modified = false;\n if (\n modClient.advancedOAuth2ClientConfig.grantTypes &&\n (modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>)\n .value\n ) {\n if (\n !(\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value.includes('client_credentials')\n ) {\n modified = true;\n (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value.push('client_credentials');\n }\n } else {\n (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value = ['client_credentials'];\n }\n (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).inherited = false;\n if (modified) {\n printMessage(\n `Adding client credentials grant type to client \"${clientId}\"...`\n );\n } else {\n printMessage(\n `Client \"${clientId}\" already has client credentials grant type.`\n );\n }\n return modClient;\n } catch (error) {\n throw new FrodoError(\n `Error client credentials grant type to oauth2 client ${clientId}`,\n error\n );\n }\n}\n\nasync function addAdminStaticUserMapping(name: string) {\n try {\n const authentication = await readConfigEntity('authentication');\n let needsAdminMapping = true;\n let addRoles = [];\n const mappings = authentication['rsFilter']['staticUserMapping'].map(\n (mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n needsAdminMapping = false;\n addRoles = adminRoles.filter((role) => {\n let add = false;\n if (!mapping.roles.includes(role)) {\n add = true;\n }\n return add;\n });\n const newMapping = mapping;\n newMapping.roles = newMapping.roles.concat(addRoles);\n return newMapping;\n }\n );\n if (needsAdminMapping) {\n printMessage(`Creating static user mapping for client \"${name}\"...`);\n mappings.push({\n subject: name,\n localUser: 'internal/user/openidm-admin',\n userRoles: 'authzRoles/*',\n roles: adminRoles,\n });\n }\n authentication['rsFilter']['staticUserMapping'] = mappings;\n if (addRoles.length > 0 || needsAdminMapping) {\n printMessage(\n `Adding admin roles to static user mapping for client \"${name}\"...`\n );\n await updateConfigEntity('authentication', authentication);\n } else {\n printMessage(\n `Static user mapping for client \"${name}\" already has admin roles.`\n );\n }\n } catch (error) {\n throw new FrodoError(\n `Error adding admin static user mapping to ${name}`,\n error\n );\n }\n}\n\n/*\n * Add AutoId static user mapping to authentication.json to enable dashboards and other AutoId-based functionality.\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n ...\n {\n \"subject\": \"autoid-resource-server\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\",\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function addAutoIdStaticUserMapping(): Promise<boolean> {\n const name = 'autoid-resource-server';\n try {\n const authentication = await readConfigEntity('authentication');\n let needsAdminMapping = true;\n let addRoles = [];\n const mappings = authentication.rsFilter['staticUserMapping'].map(\n (mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n needsAdminMapping = false;\n addRoles = autoIdRoles.filter((role) => {\n let add = false;\n if (!mapping.roles.includes(role)) {\n add = true;\n }\n return add;\n });\n const newMapping = mapping;\n newMapping.roles = newMapping.roles.concat(addRoles);\n return newMapping;\n }\n );\n if (needsAdminMapping) {\n printMessage(\n `Creating static user mapping for AutoId client \"${name}\"...`\n );\n mappings.push({\n subject: name,\n localUser: 'internal/user/idm-provisioning',\n userRoles: 'authzRoles/*',\n roles: autoIdRoles,\n });\n }\n authentication.rsFilter['staticUserMapping'] = mappings;\n if (addRoles.length > 0 || needsAdminMapping) {\n printMessage(\n `Adding required roles to static user mapping for AutoId client \"${name}\"...`\n );\n await updateConfigEntity('authentication', authentication);\n printMessage('Done.');\n } else {\n printMessage(\n `Static user mapping for AutoId client \"${name}\" already has all required roles.`\n );\n }\n return true;\n } catch (error) {\n printError(\n error,\n `Error adding static user mapping for AutoId oauth2 client ${name}`\n );\n }\n return false;\n}\n\nexport async function grantOAuth2ClientAdminPrivileges(\n clientId: string\n): Promise<boolean> {\n try {\n let client = await readOAuth2Client(clientId);\n if (\n (client.coreOAuth2ClientConfig.clientName as Readable<string[]>)\n .length === 0\n ) {\n client.coreOAuth2ClientConfig.clientName = {\n inherited: false,\n value: [clientId],\n };\n }\n if (\n client.advancedOAuth2ClientConfig.descriptions.value.length === 0 ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Modified by Frodo'\n ) ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Created by Frodo'\n )\n ) {\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Modified by Frodo on ${new Date().toLocaleString()}`,\n ];\n }\n client = await addAdminScopes(clientId, client);\n client = addClientCredentialsGrantType(clientId, client);\n await updateOAuth2Client(clientId, client);\n await addAdminStaticUserMapping(clientId);\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(\n error,\n `Error granting oauth2 client ${clientId} admin privileges`\n );\n }\n return false;\n}\n\nasync function removeAdminScopes(name: string, client: OAuth2ClientSkeleton) {\n try {\n const modClient = client;\n const allAdminScopes = adminScopes.concat([\n await getDynamicClientRegistrationScope(),\n ]);\n let finalScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.scopes &&\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value\n ) {\n finalScopes = (\n modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>\n ).value.filter((scope) => !allAdminScopes.includes(scope));\n }\n if (\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value\n .length > finalScopes.length\n ) {\n printMessage(`Removing admin scopes from client \"${name}\"...`);\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value =\n finalScopes;\n } else {\n printMessage(`Client \"${name}\" has no admin scopes.`);\n }\n let finalDefaultScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes &&\n modClient.coreOAuth2ClientConfig.defaultScopes.value\n ) {\n finalDefaultScopes =\n modClient.coreOAuth2ClientConfig.defaultScopes.value.filter(\n (scope) => !adminDefaultScopes.includes(scope)\n );\n }\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes.value.length >\n finalDefaultScopes.length\n ) {\n printMessage(`Removing admin default scopes from client \"${name}\"...`);\n modClient.coreOAuth2ClientConfig.defaultScopes.value = finalDefaultScopes;\n } else {\n printMessage(`Client \"${name}\" has no admin default scopes.`);\n }\n return modClient;\n } catch (error) {\n throw new FrodoError(\n `Error removing admin scopes from oauth2 client ${name}`,\n error\n );\n }\n}\n\nfunction removeClientCredentialsGrantType(\n clientId: string,\n client: OAuth2ClientSkeleton\n) {\n try {\n const modClient = client;\n let modified = false;\n let finalGrantTypes = [];\n if (\n modClient.advancedOAuth2ClientConfig.grantTypes &&\n (modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>)\n .value\n ) {\n finalGrantTypes = (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value.filter((grantType) => grantType !== 'client_credentials');\n modified =\n (modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>)\n .value.length > finalGrantTypes.length;\n }\n if (modified) {\n printMessage(\n `Removing client credentials grant type from client \"${clientId}\"...`\n );\n (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value = finalGrantTypes;\n } else {\n printMessage(\n `Client \"${clientId}\" does not allow client credentials grant type.`\n );\n }\n return modClient;\n } catch (error) {\n throw new FrodoError(\n `Error removing client credentials grant type from oauth2 client ${clientId}`,\n error\n );\n }\n}\n\nasync function removeAdminStaticUserMapping(name: string) {\n try {\n const authentication = await readConfigEntity('authentication');\n let finalRoles = [];\n let removeMapping = false;\n let modified = false;\n const mappings = authentication.rsFilter['staticUserMapping']\n .map((mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n finalRoles = mapping.roles.filter((role) => !adminRoles.includes(role));\n const newMapping = mapping;\n removeMapping = finalRoles.length === 0; // if there are no more roles left on this mapping, flag it for removal\n modified = mapping.roles.length > finalRoles.length; // if there were roles removed, set modified flag\n newMapping.roles = finalRoles;\n return newMapping;\n })\n .filter((mapping) => mapping.subject !== name || !removeMapping);\n authentication.rsFilter['staticUserMapping'] = mappings;\n if (modified || removeMapping) {\n if (removeMapping) {\n printMessage(`Removing static user mapping for client \"${name}\"...`);\n } else {\n printMessage(\n `Removing admin roles from static user mapping for client \"${name}\"...`\n );\n }\n await updateConfigEntity('authentication', authentication);\n } else {\n printMessage(\n `Static user mapping for client \"${name}\" has no admin roles.`\n );\n }\n } catch (error) {\n throw new FrodoError(\n `Error removing admin static user mapping for client ${name}`,\n error\n );\n }\n}\n\nexport async function revokeOAuth2ClientAdminPrivileges(\n clientId: string\n): Promise<boolean> {\n try {\n let client = await readOAuth2Client(clientId);\n if (\n (client.coreOAuth2ClientConfig.clientName as Readable<string[]>)\n .length === 0\n ) {\n client.coreOAuth2ClientConfig.clientName = {\n inherited: false,\n value: [clientId],\n };\n }\n if (\n client.advancedOAuth2ClientConfig.descriptions.value.length === 0 ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Modified by Frodo'\n ) ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Created by Frodo'\n )\n ) {\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Modified by Frodo on ${new Date().toLocaleString()}`,\n ];\n }\n client = await removeAdminScopes(clientId, client);\n client = removeClientCredentialsGrantType(clientId, client);\n await updateOAuth2Client(clientId, client);\n await removeAdminStaticUserMapping(clientId);\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(\n error,\n `Error revoking oauth2 client ${clientId} admin privileges`\n );\n }\n return false;\n}\n\nexport async function createOAuth2ClientWithAdminPrivileges(\n clientId: string,\n clientSecret: string\n): Promise<boolean> {\n try {\n let client = cloneDeep(OAUTH2_CLIENT);\n client.coreOAuth2ClientConfig.userpassword = clientSecret;\n client.coreOAuth2ClientConfig.clientName.value = [clientId];\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Created by Frodo on ${new Date().toLocaleString()}`,\n ];\n client = await addAdminScopes(clientId, client);\n await updateOAuth2Client(clientId, client);\n await addAdminStaticUserMapping(clientId);\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(\n error,\n `Error creating oauth2 client ${clientId} with admin privileges`\n );\n }\n return false;\n}\n\nexport type lltResponseType = Omit<AccessTokenMetaType, 'access_token'> & {\n access_token?: string;\n expires_on: string;\n secret?: string;\n};\n\nexport async function createLongLivedToken(\n clientId: string,\n clientSecret: string,\n scope: string,\n secret: string,\n lifetime: number\n): Promise<lltResponseType> {\n try {\n // get oauth2 client\n const client = await readOAuth2Client(clientId);\n client.userpassword = clientSecret;\n // remember current lifetime\n const rememberedLifetime =\n (client.coreOAuth2ClientConfig.accessTokenLifetime as Writable<number>)\n .value || 3600;\n // set long token lifetime\n client.coreOAuth2ClientConfig.accessTokenLifetime = {\n inherited: false,\n value: lifetime,\n };\n await updateOAuth2Client(clientId, client);\n const tokenResponse = await clientCredentialsGrant(\n state.getHost(),\n clientId,\n clientSecret,\n scope\n );\n const lltResponse: lltResponseType = cloneDeep(tokenResponse);\n delete lltResponse.access_token;\n const expires = new Date().getTime() + 1000 * tokenResponse.expires_in;\n lltResponse.expires_on = new Date(expires).toLocaleString();\n // reset token lifetime\n client.coreOAuth2ClientConfig.accessTokenLifetime = {\n inherited: false,\n value: rememberedLifetime,\n };\n await updateOAuth2Client(clientId, client);\n // create secret with token as value\n if (secret) {\n const description = 'Long-lived admin token';\n try {\n await createSecret(\n secret as string,\n tokenResponse.access_token,\n description\n );\n lltResponse.secret = secret;\n } catch (error) {\n if (\n get(error, ['response', 'data', 'code']) === 400 &&\n get(error, ['response', 'data', 'message']) ===\n 'Failed to create secret, the secret already exists'\n ) {\n const newSecret = `${secret}-${expires}`;\n printMessage(\n `esv '${secret}' already exists, using ${newSecret}`,\n 'warn'\n );\n await createSecret(\n newSecret,\n tokenResponse.access_token,\n description\n );\n lltResponse.secret = newSecret;\n }\n }\n }\n return lltResponse;\n } catch (error) {\n throw new FrodoError(\n `Error creating long-lived token for client ${clientId}`,\n error\n );\n }\n}\n\nexport async function removeStaticUserMapping(\n subject: string\n): Promise<boolean> {\n try {\n const authentication = await readConfigEntity('authentication');\n let removeMapping = false;\n const mappings = authentication.rsFilter['staticUserMapping'].filter(\n (mapping) => {\n // find the subject and flag it\n if (mapping.subject === subject) {\n removeMapping = true;\n }\n // ignore mappings for other subjects\n return mapping.subject !== subject;\n }\n );\n authentication.rsFilter['staticUserMapping'] = mappings;\n if (removeMapping) {\n printMessage(`Removing static user mapping for subject \"${subject}\"...`);\n await updateConfigEntity('authentication', authentication);\n } else {\n printMessage(`No static user mapping for subject \"${subject}\" found.`);\n }\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(\n error,\n `Error removing static user mapping for subject ${subject}`\n );\n }\n return false;\n}\n\nexport async function hideGenericExtensionAttributes(\n includeCustomized: boolean,\n dryRun: boolean\n) {\n try {\n const response = await readConfigEntity('managed');\n const managed = cloneDeep(response);\n const propertyNames = Object.keys(GENERIC_EXTENSION_ATTRIBUTES);\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getCurrentRealmManagedUser()) {\n return object;\n }\n propertyNames.forEach((name) => {\n if (\n isEqualJson(\n GENERIC_EXTENSION_ATTRIBUTES[name],\n object.schema.properties[name],\n ['viewable', 'usageDescription']\n ) ||\n includeCustomized\n ) {\n if (object.schema.properties[name].viewable) {\n printMessage(`${name}: hide`);\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].viewable = false;\n } else {\n printMessage(`${name}: ignore (already hidden)`);\n }\n } else {\n printMessage(`${name}: skip (customized)`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (dryRun) {\n printMessage('Dry-run only. Changes are not saved.');\n } else {\n await updateConfigEntity('managed', managed);\n printMessage('Done.');\n }\n return true;\n } catch (error) {\n printError(error, `Error hiding generic extension attributes`);\n }\n return false;\n}\n\nexport async function showGenericExtensionAttributes(\n includeCustomized: boolean,\n dryRun: boolean\n) {\n try {\n const response = await readConfigEntity('managed');\n const managed = cloneDeep(response);\n const propertyNames = Object.keys(GENERIC_EXTENSION_ATTRIBUTES);\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getCurrentRealmManagedUser()) {\n return object;\n }\n propertyNames.forEach((name) => {\n if (\n isEqualJson(\n GENERIC_EXTENSION_ATTRIBUTES[name],\n object.schema.properties[name],\n ['viewable', 'usageDescription']\n ) ||\n includeCustomized\n ) {\n if (!object.schema.properties[name].viewable) {\n printMessage(`${name}: show`);\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].viewable = true;\n } else {\n printMessage(`${name}: ignore (already showing)`);\n }\n } else {\n printMessage(`${name}: skip (customized)`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (dryRun) {\n printMessage('Dry-run only. Changes are not saved.');\n } else {\n await updateConfigEntity('managed', managed);\n printMessage('Done.');\n }\n return true;\n } catch (error) {\n printError(error, `Error showing generic extension attributes`);\n }\n return false;\n}\n\nasync function repairOrgModelUser(dryRun: boolean): Promise<boolean> {\n let repairData = false;\n try {\n const response = await readConfigEntity('managed');\n const managed = cloneDeep(response);\n const RDVPs = ['memberOfOrgIDs'];\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getCurrentRealmManagedUser()) {\n return object;\n }\n printMessage(`${object.name}: checking...`);\n RDVPs.forEach((name) => {\n if (!object.schema.properties[name].queryConfig.flattenProperties) {\n printMessage(`- ${name}: repairing - needs flattening`, 'warn');\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].queryConfig.flattenProperties = true;\n repairData = true;\n } else {\n printMessage(`- ${name}: OK`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (!dryRun) {\n await updateConfigEntity('managed', managed);\n }\n } catch (error) {\n printError(error, `Error repairing org model user`);\n }\n return repairData;\n}\n\nasync function repairOrgModelOrg(dryRun: boolean): Promise<boolean> {\n let repairData = false;\n try {\n const response = await readConfigEntity('managed');\n const managed = cloneDeep(response);\n const RDVPs = [\n 'adminIDs',\n 'ownerIDs',\n 'parentAdminIDs',\n 'parentOwnerIDs',\n 'parentIDs',\n ];\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getRealmManagedOrganization()) {\n return object;\n }\n printMessage(`${object.name}: checking...`);\n RDVPs.forEach((name) => {\n if (!object.schema.properties[name].queryConfig.flattenProperties) {\n printMessage(`- ${name}: repairing - needs flattening`, 'warn');\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].queryConfig.flattenProperties = true;\n repairData = true;\n } else {\n printMessage(`- ${name}: OK`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (!dryRun) {\n await updateConfigEntity('managed', managed);\n }\n } catch (error) {\n printError(error, `Error repairing org model org`);\n }\n return repairData;\n}\n\nasync function repairOrgModelData(dryRun = false) {\n if (!dryRun) {\n // const rootOrgs = await findRootOrganizations();\n }\n}\n\nasync function extendOrgModelPermissins(dryRun = false) {\n if (!dryRun) {\n // const rootOrgs = await findRootOrganizations();\n }\n}\n\nexport async function repairOrgModel(\n excludeCustomized: boolean,\n extendPermissions: boolean,\n dryRun: boolean\n): Promise<boolean> {\n try {\n let repairData = false;\n repairData = repairData || (await repairOrgModelUser(dryRun));\n repairData = repairData || (await repairOrgModelOrg(dryRun));\n if (excludeCustomized) {\n //\n }\n if (repairData) {\n await repairOrgModelData(dryRun);\n }\n if (extendPermissions) {\n await extendOrgModelPermissins(dryRun);\n }\n if (dryRun) {\n printMessage('Dry-run only. Changes are not saved.', 'warn');\n }\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(error, `Error repairing the org model`);\n }\n return false;\n}\n\n// Rfc7523 functions\n\nfunction getJwkFilePath(clientId: string): string {\n return getFilePath(getTypedFilename(clientId + '_private', 'jwk'), true);\n}\n\nfunction getJwksFilePath(clientId: string): string {\n return getFilePath(getTypedFilename(clientId + '_public', 'jwks'), true);\n}\n\nexport async function generateRfc7523AuthZGrantArtefacts(\n clientId: string,\n iss: string,\n jwk?: JwkRsa,\n sub?: string,\n scope?: string[],\n options?: { save: boolean },\n json?: boolean\n): Promise<boolean> {\n let artefacts: {\n jwk: JwkRsa;\n jwks: JwksInterface;\n client: OAuth2ClientSkeleton;\n issuer: OAuth2TrustedJwtIssuerSkeleton;\n };\n try {\n const barId = createProgressIndicator(\n 'determinate',\n options.save ? 3 : 1,\n 'Generating artefacts...'\n );\n artefacts = await _generateRfc7523AuthZGrantArtefacts(\n clientId,\n iss,\n jwk,\n sub,\n scope,\n options\n );\n updateProgressIndicator(barId, 'Successfully generated artefacts.');\n let jwkFile: string;\n let jwksFile: string;\n if (options.save) {\n const jwkBarId = createProgressIndicator(\n 'determinate',\n 1,\n 'Saving JWK (private key)...'\n );\n jwkFile = getJwkFilePath(clientId);\n saveJsonToFile(artefacts.jwk, jwkFile, false);\n updateProgressIndicator(jwkBarId, `Saved JWK to ${jwkFile}.`);\n updateProgressIndicator(barId, 'Successfully saved JWK (private key).');\n stopProgressIndicator(jwkBarId);\n const jwksBarId = createProgressIndicator(\n 'determinate',\n 1,\n 'Saving JWKS (public key)...'\n );\n jwksFile = getJwksFilePath(clientId);\n saveJsonToFile(artefacts.jwks, jwksFile, false);\n updateProgressIndicator(jwksBarId, `Saved JWKS to ${jwksFile}.`);\n stopProgressIndicator(jwksBarId);\n updateProgressIndicator(barId, 'Successfully saved JWKS (public key).');\n }\n stopProgressIndicator(\n barId,\n `Successfully generated ${\n options.save ? 'and saved artefacts' : 'artefacts'\n }.`\n );\n cleanupProgressIndicators();\n\n if (json) {\n printMessage(artefacts, 'data');\n } else {\n printMessage(\n options.save\n ? `\\nCreated oauth2 client in the ${state.getRealm()} realm:`\n : `\\nIn AM, create an OAuth2 client in the ${state.getRealm()} realm with the following information:`\n );\n const client = createKeyValueTable();\n client.push(['Client ID'['brightCyan'], clientId]);\n client.push(['Client Name'['brightCyan'], clientId]);\n client.push([\n 'Scopes'['brightCyan'],\n (\n artefacts.client.coreOAuth2ClientConfig.scopes as Writable<string[]>\n ).value.join(', '),\n ]);\n client.push([\n 'Client Type'['brightCyan'],\n (artefacts.client.coreOAuth2ClientConfig.clientType as Writable<string>)\n .value,\n ]);\n client.push([\n 'Grant Types'['brightCyan'],\n (\n artefacts.client.advancedOAuth2ClientConfig.grantTypes as Writable<\n string[]\n >\n ).value.join(', '),\n ]);\n client.push([\n 'Implied Consent'['brightCyan'],\n (\n artefacts.client.advancedOAuth2ClientConfig\n .isConsentImplied as Writable<boolean>\n ).value,\n ]);\n client.push([\n 'Token Endpoint Authentication '['brightCyan'],\n (\n artefacts.client.advancedOAuth2ClientConfig\n .tokenEndpointAuthMethod as Writable<string>\n ).value,\n ]);\n client.push([\n 'Public Key Selector'['brightCyan'],\n (\n artefacts.client.signEncOAuth2ClientConfig\n .publicKeyLocation as Writable<string>\n ).value,\n ]);\n client.push([\n 'JWKS (Public Key)'['brightCyan'],\n options.save ? `${jwksFile}` : 'See below',\n ]);\n printMessage(`\\n${client.toString()}`);\n\n printMessage(\n options.save\n ? `\\nCreated oauth2 trusted issuer in the ${state.getRealm()} realm:`\n : `\\nIn AM, create a trusted issuer in the ${state.getRealm()} realm with the following information:`\n );\n const issuer = createKeyValueTable();\n issuer.push(['Name'['brightCyan'], artefacts.issuer._id]);\n issuer.push([\n 'JWT Issuer'['brightCyan'],\n (artefacts.issuer.issuer as Writable<string>).value,\n ]);\n issuer.push([\n 'Allowed Subjects '['brightCyan'],\n (artefacts.issuer.allowedSubjects as Writable<string[]>)?.value.length\n ? (\n artefacts.issuer.allowedSubjects as Writable<string[]>\n )?.value.join(', ')\n : `Any ${state.getRealm()} realm user`,\n ]);\n issuer.push([\n 'JWKS (Public Key)'['brightCyan'],\n options.save ? `${jwksFile}` : 'See below',\n ]);\n printMessage(`\\n${issuer.toString()}`);\n if (!options.save) {\n printMessage('\\nJWK (Private Key)'['brightCyan']);\n printMessage(stringify(artefacts.jwk));\n printMessage('\\nJWKS (Public Key)'['brightCyan']);\n printMessage(stringify(artefacts.jwks));\n }\n }\n return true;\n } catch (error) {\n printMessage(error, 'error');\n return false;\n }\n}\n\nexport async function executeRfc7523AuthZGrantFlow(\n clientId: string,\n iss?: string,\n jwk?: JwkRsa,\n sub?: string,\n scope?: string[],\n json?: boolean\n): Promise<boolean> {\n let tokenResponse: AccessTokenResponseType;\n let spinnerId: string;\n try {\n let issuer: OAuth2TrustedJwtIssuerSkeleton;\n // make sure we have an issuer\n if (!iss) {\n let issSpinnerId: string;\n try {\n issSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'No issuer provided, attempting to find suitable issuer...'\n );\n if (!issuer)\n issuer = await readOAuth2TrustedJwtIssuer(clientId + '-issuer');\n iss = (issuer.issuer as Writable<string>).value;\n stopProgressIndicator(\n issSpinnerId,\n `Found suitable issuer: ${clientId + '-issuer'} - ${iss}`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n issSpinnerId,\n `No issuer provided and no suitable issuer could be found: ${error.message}`,\n 'fail'\n );\n }\n }\n // make sure we have a JWK\n if (!jwk) {\n let jwkSpinnerId: string;\n try {\n jwkSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'No JWK provided, attempting to locate a suitable JWK...'\n );\n jwk = JSON.parse(fs.readFileSync(getJwkFilePath(clientId), 'utf8'));\n stopProgressIndicator(\n jwkSpinnerId,\n `Loaded private key JWK from: ${getJwkFilePath(clientId)}`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n jwkSpinnerId,\n `No JWK provided and no suitable JWK could be loaded from file: ${error.message}`,\n 'fail'\n );\n }\n }\n // make sure we have a subject\n if (!sub) {\n let subSpinnerId: string;\n try {\n subSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Executing rfc7523 authz grant flow...'\n );\n if (!issuer)\n issuer = await frodo.oauth2oidc.issuer.readOAuth2TrustedJwtIssuer(\n clientId + '-issuer'\n );\n if (\n (issuer.allowedSubjects as Writable<string[]>).value &&\n (issuer.allowedSubjects as Writable<string[]>).value.length\n )\n sub = (issuer.allowedSubjects as Writable<string[]>).value[0];\n } catch (error) {\n stopProgressIndicator(\n subSpinnerId,\n `No subject provided and no suitable subject could be extracted from the trusted issuer configuration: ${error.message}`,\n 'fail'\n );\n }\n if (sub) {\n stopProgressIndicator(\n subSpinnerId,\n `Using first subject from issuer's allowed subjects: ${sub}`,\n 'success'\n );\n } else {\n stopProgressIndicator(\n subSpinnerId,\n `No subject provided and no suitable subject could be extracted from the trusted issuer's list of allowed subjects.`,\n 'success'\n );\n }\n }\n // we got everything we need, let's get that token\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Executing rfc7523 authz grant flow...'\n );\n tokenResponse = await _executeRfc7523AuthZGrantFlow(\n clientId,\n iss,\n jwk,\n sub,\n scope\n );\n stopProgressIndicator(\n spinnerId,\n 'Successfully executed rfc7523 authz grant flow.',\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error executing rfc7523 authz grant flow: ${stringify(\n error.response?.data || error.message\n )}`,\n 'fail'\n );\n return false;\n }\n cleanupProgressIndicators();\n\n if (json) {\n printMessage(tokenResponse, 'data');\n } else {\n printMessage('\\nAccess Token'['brightCyan']);\n printMessage(tokenResponse.access_token);\n if (tokenResponse.id_token) {\n printMessage('\\nIdentity Token'['brightCyan']);\n printMessage(tokenResponse.id_token);\n }\n }\n return true;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdminOps.js","names":["frodo","FrodoError","state","fs","path","fileURLToPath","cleanupProgressIndicators","createKeyValueTable","createProgressIndicator","printError","printMessage","stopProgressIndicator","updateProgressIndicator","cloneDeep","getTypedFilename","saveJsonToFile","getFilePath","getCurrentRealmManagedUser","utils","get","isEqualJson","json","generateRfc7523AuthZGrantArtefacts","_generateRfc7523AuthZGrantArtefacts","executeRfc7523AuthZGrantFlow","_executeRfc7523AuthZGrantFlow","admin","stringify","clientCredentialsGrant","oauth2oidc","endpoint","readOAuth2TrustedJwtIssuer","issuer","readOAuth2Client","readOAuth2Clients","updateOAuth2Client","client","readOAuth2Provider","provider","readConfigEntity","updateConfigEntity","idm","config","getRealmManagedOrganization","organization","createSecret","cloud","secret","__dirname","dirname","import","meta","url","OAUTH2_CLIENT","JSON","parse","readFileSync","resolve","GENERIC_EXTENSION_ATTRIBUTES","protectedClients","protectedSubjects","privilegedScopes","privilegedRoles","adminScopes","adminDefaultScopes","adminRoles","autoIdRoles","listOAuth2CustomClients","clients","clientIds","map","_id","filter","includes","authentication","subjects","rsFilter","mapping","subject","adminClients","sort","a","b","localeCompare","forEach","item","error","listOAuth2AdminClients","isPrivileged","coreOAuth2ClientConfig","scopes","scope","clientId","roles","role","listNonOAuth2AdminStaticUserMappings","showProtected","adminSubjects","getDynamicClientRegistrationScope","clientDynamicRegistrationConfig","dynamicClientRegistrationScope","addAdminScopes","modClient","allAdminScopes","concat","addScopes","value","add","addDefaultScope","defaultScopes","length","addClientCredentialsGrantType","modified","advancedOAuth2ClientConfig","grantTypes","push","inherited","addAdminStaticUserMapping","name","needsAdminMapping","addRoles","mappings","newMapping","localUser","userRoles","addAutoIdStaticUserMapping","grantOAuth2ClientAdminPrivileges","clientName","descriptions","startsWith","Date","toLocaleString","removeAdminScopes","finalScopes","finalDefaultScopes","removeClientCredentialsGrantType","finalGrantTypes","grantType","removeAdminStaticUserMapping","finalRoles","removeMapping","revokeOAuth2ClientAdminPrivileges","createOAuth2ClientWithAdminPrivileges","clientSecret","userpassword","createLongLivedToken","lifetime","rememberedLifetime","accessTokenLifetime","tokenResponse","getHost","lltResponse","access_token","expires","getTime","expires_in","expires_on","description","newSecret","removeStaticUserMapping","hideGenericExtensionAttributes","includeCustomized","dryRun","response","managed","updatedObjects","objects","object","property","Object","keys","schema","properties","viewable","showGenericExtensionAttributes","repairOrgModelUser","repairData","RDVPs","queryConfig","flattenProperties","repairOrgModelOrg","repairOrgModelData","extendOrgModelPermissins","repairOrgModel","excludeCustomized","extendPermissions","getJwkFilePath","getJwksFilePath","iss","jwk","sub","options","artefacts","barId","save","jwkFile","jwksFile","jwkBarId","jwksBarId","jwks","_artefacts$issuer$all","_artefacts$issuer$all2","getRealm","join","clientType","isConsentImplied","tokenEndpointAuthMethod","signEncOAuth2ClientConfig","publicKeyLocation","toString","allowedSubjects","spinnerId","issSpinnerId","message","jwkSpinnerId","subSpinnerId","_error$response","data","id_token"],"sources":["../../src/ops/AdminOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport { Readable, Writable } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { OAuth2ClientSkeleton } from '@rockcarver/frodo-lib/types/api/OAuth2ClientApi';\nimport { AccessTokenResponseType } from '@rockcarver/frodo-lib/types/api/OAuth2OIDCApi';\nimport { OAuth2TrustedJwtIssuerSkeleton } from '@rockcarver/frodo-lib/types/api/OAuth2TrustedJwtIssuerApi';\nimport { JwkRsa, JwksInterface } from '@rockcarver/frodo-lib/types/ops/JoseOps';\nimport { AccessTokenMetaType } from '@rockcarver/frodo-lib/types/ops/OAuth2OidcOps';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport {\n cleanupProgressIndicators,\n createKeyValueTable,\n createProgressIndicator,\n printError,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { cloneDeep } from './utils/OpsUtils';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getFilePath,\n getCurrentRealmManagedUser,\n} = frodo.utils;\nconst { get, isEqualJson } = frodo.utils.json;\nconst {\n generateRfc7523AuthZGrantArtefacts: _generateRfc7523AuthZGrantArtefacts,\n executeRfc7523AuthZGrantFlow: _executeRfc7523AuthZGrantFlow,\n} = frodo.admin;\nconst { stringify } = frodo.utils.json;\nconst { clientCredentialsGrant } = frodo.oauth2oidc.endpoint;\nconst { readOAuth2TrustedJwtIssuer } = frodo.oauth2oidc.issuer;\nconst { readOAuth2Client, readOAuth2Clients, updateOAuth2Client } =\n frodo.oauth2oidc.client;\nconst { readOAuth2Provider } = frodo.oauth2oidc.provider;\nconst { readConfigEntity, updateConfigEntity } = frodo.idm.config;\nconst { getRealmManagedOrganization } = frodo.idm.organization;\nconst { createSecret } = frodo.cloud.secret;\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst OAUTH2_CLIENT: OAuth2ClientSkeleton = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './templates/OAuth2ClientTemplate.json'),\n 'utf8'\n )\n);\nconst GENERIC_EXTENSION_ATTRIBUTES = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './templates/GenericExtensionAttributesTemplate.json'\n ),\n 'utf8'\n )\n);\n\nconst protectedClients = ['ui', 'idm-provisioning'];\nconst protectedSubjects = ['amadmin', 'autoid-resource-server'];\n\nconst privilegedScopes = [\n 'am-introspect-all-tokens',\n 'fr:idm:*',\n 'fr:idc:esv:*',\n];\n// const privilegedUsers = ['openidm-admin'];\nconst privilegedRoles = [\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\n\nconst adminScopes = ['fr:idm:*', 'fr:idc:esv:*'];\nconst adminDefaultScopes = ['fr:idm:*'];\nconst adminRoles = [\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\nconst autoIdRoles = [\n 'internal/role/platform-provisioning',\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\n\n/*\n * List all oauth2 clients, which have a corresponding staticUserMapping\n * in the IDM authentication.json:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"someOauth2ClientID\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n },\n {\n \"subject\": \"RCSClient\",\n \"localUser\": \"internal/user/idm-provisioning\"\n }\n ]\n }\n }\n */\nexport async function listOAuth2CustomClients(): Promise<boolean> {\n try {\n const clients = await readOAuth2Clients();\n const clientIds = clients\n .map((client) => client._id)\n .filter((client) => !protectedClients.includes(client));\n const authentication = await readConfigEntity('authentication');\n const subjects = authentication.rsFilter['staticUserMapping']\n .map((mapping) => mapping.subject)\n .filter((subject) => !protectedSubjects.includes(subject));\n const adminClients = subjects.filter((subject) =>\n clientIds.includes(subject)\n );\n adminClients.sort((a, b) => a.localeCompare(b));\n adminClients.forEach((item) => {\n printMessage(`${item}`, 'data');\n });\n return true;\n } catch (error) {\n printError(error, `Error listing custom OAuth2 clients`);\n }\n return false;\n}\n\n/*\n * List all oauth2 clients, which have the fr:idm:* scope and a \n * corresponding staticUserMapping in the IDM authentication.json\n * and are assigned admin privileges:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"someOauth2ClientID\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function listOAuth2AdminClients(): Promise<boolean> {\n try {\n const clients = await readOAuth2Clients();\n const clientIds = clients\n .filter((client) => {\n // printMessage({ message: client, type: 'error', state });\n let isPrivileged = false;\n if (client.coreOAuth2ClientConfig.scopes) {\n (client.coreOAuth2ClientConfig.scopes as Readable<string[]>).forEach(\n (scope) => {\n if (privilegedScopes.includes(scope)) {\n isPrivileged = true;\n }\n }\n );\n }\n return isPrivileged;\n })\n .map((client) => client._id)\n .filter((clientId) => !protectedClients.includes(clientId));\n const authentication = await readConfigEntity('authentication');\n const subjects = authentication.rsFilter['staticUserMapping']\n .filter((mapping) => {\n let isPrivileged = false;\n if (mapping.roles) {\n mapping.roles.forEach((role) => {\n if (privilegedRoles.includes(role)) {\n isPrivileged = true;\n }\n });\n }\n return isPrivileged;\n })\n .map((mapping) => mapping.subject)\n .filter((subject) => !protectedSubjects.includes(subject));\n const adminClients = subjects.filter((subject) =>\n clientIds.includes(subject)\n );\n adminClients.sort((a, b) => a.localeCompare(b));\n adminClients.forEach((item) => {\n printMessage(`${item}`, 'data');\n });\n return true;\n } catch (error) {\n printError(error, `Error listing admin OAuth2 clients`);\n }\n return false;\n}\n\n/*\n * List all static user mappings that are not oauth2 clients in authentication.json\n * and are assigned admin privileges:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"amadmin\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n },\n {\n \"subject\": \"idm-provisioning\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\"\n ]\n },\n {\n \"subject\": \"RCSClient\",\n \"localUser\": \"internal/user/idm-provisioning\"\n },\n {\n \"subject\": \"autoid-resource-server\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\",\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function listNonOAuth2AdminStaticUserMappings(\n showProtected: boolean\n): Promise<boolean> {\n try {\n const clients = await readOAuth2Clients();\n const clientIds = clients\n .map((client) => client._id)\n .filter((client) => !protectedClients.includes(client));\n const authentication = await readConfigEntity('authentication');\n let subjects = authentication.rsFilter['staticUserMapping']\n .filter((mapping) => {\n let isPrivileged = false;\n if (mapping.roles) {\n mapping.roles.forEach((role) => {\n if (privilegedRoles.includes(role)) {\n isPrivileged = true;\n }\n });\n }\n return isPrivileged;\n })\n .map((mapping) => mapping.subject);\n if (!showProtected) {\n subjects = subjects.filter(\n (subject) => !protectedSubjects.includes(subject)\n );\n }\n const adminSubjects = subjects.filter(\n (subject) => !clientIds.includes(subject)\n );\n adminSubjects.sort((a, b) => a.localeCompare(b));\n adminSubjects.forEach((item) => {\n printMessage(`${item}`, 'data');\n });\n return true;\n } catch (error) {\n printError(error, `Error listing non-oauth2 admin static user mappings`);\n }\n return false;\n}\n\nasync function getDynamicClientRegistrationScope() {\n try {\n const provider = await readOAuth2Provider();\n return provider.clientDynamicRegistrationConfig\n .dynamicClientRegistrationScope;\n } catch (error) {\n throw new FrodoError(\n `Error getting dynamic client registration scope`,\n error\n );\n }\n}\n\nasync function addAdminScopes(clientId: string, client: OAuth2ClientSkeleton) {\n try {\n const modClient = client;\n const allAdminScopes = adminScopes.concat([\n await getDynamicClientRegistrationScope(),\n ]);\n let addScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.scopes &&\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value\n ) {\n addScopes = allAdminScopes.filter((scope) => {\n let add = false;\n if (\n !(\n modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>\n ).value.includes(scope)\n ) {\n add = true;\n }\n return add;\n });\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value = (\n modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>\n ).value.concat(addScopes);\n } else {\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value =\n allAdminScopes;\n }\n let addDefaultScope = false;\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes &&\n modClient.coreOAuth2ClientConfig.defaultScopes.value\n ) {\n if (modClient.coreOAuth2ClientConfig.defaultScopes.value.length === 0) {\n addDefaultScope = true;\n modClient.coreOAuth2ClientConfig.defaultScopes.value =\n adminDefaultScopes;\n } else {\n printMessage(\n `Client \"${clientId}\" already has default scopes configured, not adding admin default scope.`\n );\n }\n }\n if (addScopes.length > 0 || addDefaultScope) {\n printMessage(`Adding admin scopes to client \"${clientId}\"...`);\n } else {\n printMessage(`Client \"${clientId}\" already has admin scopes.`);\n }\n return modClient;\n } catch (error) {\n throw new FrodoError(\n `Error adding admin scopes to oauth2 client ${clientId}`,\n error\n );\n }\n}\n\nfunction addClientCredentialsGrantType(\n clientId: string,\n client: OAuth2ClientSkeleton\n) {\n try {\n const modClient = client;\n let modified = false;\n if (\n modClient.advancedOAuth2ClientConfig.grantTypes &&\n (modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>)\n .value\n ) {\n if (\n !(\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value.includes('client_credentials')\n ) {\n modified = true;\n (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value.push('client_credentials');\n }\n } else {\n (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value = ['client_credentials'];\n }\n (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).inherited = false;\n if (modified) {\n printMessage(\n `Adding client credentials grant type to client \"${clientId}\"...`\n );\n } else {\n printMessage(\n `Client \"${clientId}\" already has client credentials grant type.`\n );\n }\n return modClient;\n } catch (error) {\n throw new FrodoError(\n `Error client credentials grant type to oauth2 client ${clientId}`,\n error\n );\n }\n}\n\nasync function addAdminStaticUserMapping(name: string) {\n try {\n const authentication = await readConfigEntity('authentication');\n let needsAdminMapping = true;\n let addRoles = [];\n const mappings = authentication['rsFilter']['staticUserMapping'].map(\n (mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n needsAdminMapping = false;\n addRoles = adminRoles.filter((role) => {\n let add = false;\n if (!mapping.roles.includes(role)) {\n add = true;\n }\n return add;\n });\n const newMapping = mapping;\n newMapping.roles = newMapping.roles.concat(addRoles);\n return newMapping;\n }\n );\n if (needsAdminMapping) {\n printMessage(`Creating static user mapping for client \"${name}\"...`);\n mappings.push({\n subject: name,\n localUser: 'internal/user/openidm-admin',\n userRoles: 'authzRoles/*',\n roles: adminRoles,\n });\n }\n authentication['rsFilter']['staticUserMapping'] = mappings;\n if (addRoles.length > 0 || needsAdminMapping) {\n printMessage(\n `Adding admin roles to static user mapping for client \"${name}\"...`\n );\n await updateConfigEntity('authentication', authentication);\n } else {\n printMessage(\n `Static user mapping for client \"${name}\" already has admin roles.`\n );\n }\n } catch (error) {\n throw new FrodoError(\n `Error adding admin static user mapping to ${name}`,\n error\n );\n }\n}\n\n/*\n * Add AutoId static user mapping to authentication.json to enable dashboards and other AutoId-based functionality.\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n ...\n {\n \"subject\": \"autoid-resource-server\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\",\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function addAutoIdStaticUserMapping(): Promise<boolean> {\n const name = 'autoid-resource-server';\n try {\n const authentication = await readConfigEntity('authentication');\n let needsAdminMapping = true;\n let addRoles = [];\n const mappings = authentication.rsFilter['staticUserMapping'].map(\n (mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n needsAdminMapping = false;\n addRoles = autoIdRoles.filter((role) => {\n let add = false;\n if (!mapping.roles.includes(role)) {\n add = true;\n }\n return add;\n });\n const newMapping = mapping;\n newMapping.roles = newMapping.roles.concat(addRoles);\n return newMapping;\n }\n );\n if (needsAdminMapping) {\n printMessage(\n `Creating static user mapping for AutoId client \"${name}\"...`\n );\n mappings.push({\n subject: name,\n localUser: 'internal/user/idm-provisioning',\n userRoles: 'authzRoles/*',\n roles: autoIdRoles,\n });\n }\n authentication.rsFilter['staticUserMapping'] = mappings;\n if (addRoles.length > 0 || needsAdminMapping) {\n printMessage(\n `Adding required roles to static user mapping for AutoId client \"${name}\"...`\n );\n await updateConfigEntity('authentication', authentication);\n printMessage('Done.');\n } else {\n printMessage(\n `Static user mapping for AutoId client \"${name}\" already has all required roles.`\n );\n }\n return true;\n } catch (error) {\n printError(\n error,\n `Error adding static user mapping for AutoId oauth2 client ${name}`\n );\n }\n return false;\n}\n\nexport async function grantOAuth2ClientAdminPrivileges(\n clientId: string\n): Promise<boolean> {\n try {\n let client = await readOAuth2Client(clientId);\n if (\n (client.coreOAuth2ClientConfig.clientName as Readable<string[]>)\n .length === 0\n ) {\n client.coreOAuth2ClientConfig.clientName = {\n inherited: false,\n value: [clientId],\n };\n }\n if (\n client.advancedOAuth2ClientConfig.descriptions.value.length === 0 ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Modified by Frodo'\n ) ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Created by Frodo'\n )\n ) {\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Modified by Frodo on ${new Date().toLocaleString()}`,\n ];\n }\n client = await addAdminScopes(clientId, client);\n client = addClientCredentialsGrantType(clientId, client);\n await updateOAuth2Client(clientId, client);\n await addAdminStaticUserMapping(clientId);\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(\n error,\n `Error granting oauth2 client ${clientId} admin privileges`\n );\n }\n return false;\n}\n\nasync function removeAdminScopes(name: string, client: OAuth2ClientSkeleton) {\n try {\n const modClient = client;\n const allAdminScopes = adminScopes.concat([\n await getDynamicClientRegistrationScope(),\n ]);\n let finalScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.scopes &&\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value\n ) {\n finalScopes = (\n modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>\n ).value.filter((scope) => !allAdminScopes.includes(scope));\n }\n if (\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value\n .length > finalScopes.length\n ) {\n printMessage(`Removing admin scopes from client \"${name}\"...`);\n (modClient.coreOAuth2ClientConfig.scopes as Writable<string[]>).value =\n finalScopes;\n } else {\n printMessage(`Client \"${name}\" has no admin scopes.`);\n }\n let finalDefaultScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes &&\n modClient.coreOAuth2ClientConfig.defaultScopes.value\n ) {\n finalDefaultScopes =\n modClient.coreOAuth2ClientConfig.defaultScopes.value.filter(\n (scope) => !adminDefaultScopes.includes(scope)\n );\n }\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes.value.length >\n finalDefaultScopes.length\n ) {\n printMessage(`Removing admin default scopes from client \"${name}\"...`);\n modClient.coreOAuth2ClientConfig.defaultScopes.value = finalDefaultScopes;\n } else {\n printMessage(`Client \"${name}\" has no admin default scopes.`);\n }\n return modClient;\n } catch (error) {\n throw new FrodoError(\n `Error removing admin scopes from oauth2 client ${name}`,\n error\n );\n }\n}\n\nfunction removeClientCredentialsGrantType(\n clientId: string,\n client: OAuth2ClientSkeleton\n) {\n try {\n const modClient = client;\n let modified = false;\n let finalGrantTypes = [];\n if (\n modClient.advancedOAuth2ClientConfig.grantTypes &&\n (modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>)\n .value\n ) {\n finalGrantTypes = (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value.filter((grantType) => grantType !== 'client_credentials');\n modified =\n (modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>)\n .value.length > finalGrantTypes.length;\n }\n if (modified) {\n printMessage(\n `Removing client credentials grant type from client \"${clientId}\"...`\n );\n (\n modClient.advancedOAuth2ClientConfig.grantTypes as Writable<string[]>\n ).value = finalGrantTypes;\n } else {\n printMessage(\n `Client \"${clientId}\" does not allow client credentials grant type.`\n );\n }\n return modClient;\n } catch (error) {\n throw new FrodoError(\n `Error removing client credentials grant type from oauth2 client ${clientId}`,\n error\n );\n }\n}\n\nasync function removeAdminStaticUserMapping(name: string) {\n try {\n const authentication = await readConfigEntity('authentication');\n let finalRoles = [];\n let removeMapping = false;\n let modified = false;\n const mappings = authentication.rsFilter['staticUserMapping']\n .map((mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n finalRoles = mapping.roles.filter((role) => !adminRoles.includes(role));\n const newMapping = mapping;\n removeMapping = finalRoles.length === 0; // if there are no more roles left on this mapping, flag it for removal\n modified = mapping.roles.length > finalRoles.length; // if there were roles removed, set modified flag\n newMapping.roles = finalRoles;\n return newMapping;\n })\n .filter((mapping) => mapping.subject !== name || !removeMapping);\n authentication.rsFilter['staticUserMapping'] = mappings;\n if (modified || removeMapping) {\n if (removeMapping) {\n printMessage(`Removing static user mapping for client \"${name}\"...`);\n } else {\n printMessage(\n `Removing admin roles from static user mapping for client \"${name}\"...`\n );\n }\n await updateConfigEntity('authentication', authentication);\n } else {\n printMessage(\n `Static user mapping for client \"${name}\" has no admin roles.`\n );\n }\n } catch (error) {\n throw new FrodoError(\n `Error removing admin static user mapping for client ${name}`,\n error\n );\n }\n}\n\nexport async function revokeOAuth2ClientAdminPrivileges(\n clientId: string\n): Promise<boolean> {\n try {\n let client = await readOAuth2Client(clientId);\n if (\n (client.coreOAuth2ClientConfig.clientName as Readable<string[]>)\n .length === 0\n ) {\n client.coreOAuth2ClientConfig.clientName = {\n inherited: false,\n value: [clientId],\n };\n }\n if (\n client.advancedOAuth2ClientConfig.descriptions.value.length === 0 ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Modified by Frodo'\n ) ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Created by Frodo'\n )\n ) {\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Modified by Frodo on ${new Date().toLocaleString()}`,\n ];\n }\n client = await removeAdminScopes(clientId, client);\n client = removeClientCredentialsGrantType(clientId, client);\n await updateOAuth2Client(clientId, client);\n await removeAdminStaticUserMapping(clientId);\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(\n error,\n `Error revoking oauth2 client ${clientId} admin privileges`\n );\n }\n return false;\n}\n\nexport async function createOAuth2ClientWithAdminPrivileges(\n clientId: string,\n clientSecret: string\n): Promise<boolean> {\n try {\n let client = cloneDeep(OAUTH2_CLIENT);\n client.coreOAuth2ClientConfig.userpassword = clientSecret;\n client.coreOAuth2ClientConfig.clientName.value = [clientId];\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Created by Frodo on ${new Date().toLocaleString()}`,\n ];\n client = await addAdminScopes(clientId, client);\n await updateOAuth2Client(clientId, client);\n await addAdminStaticUserMapping(clientId);\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(\n error,\n `Error creating oauth2 client ${clientId} with admin privileges`\n );\n }\n return false;\n}\n\nexport type lltResponseType = Omit<AccessTokenMetaType, 'access_token'> & {\n access_token?: string;\n expires_on: string;\n secret?: string;\n};\n\nexport async function createLongLivedToken(\n clientId: string,\n clientSecret: string,\n scope: string,\n secret: string,\n lifetime: number\n): Promise<lltResponseType> {\n try {\n // get oauth2 client\n const client = await readOAuth2Client(clientId);\n client.userpassword = clientSecret;\n // remember current lifetime\n const rememberedLifetime =\n (client.coreOAuth2ClientConfig.accessTokenLifetime as Writable<number>)\n .value || 3600;\n // set long token lifetime\n client.coreOAuth2ClientConfig.accessTokenLifetime = {\n inherited: false,\n value: lifetime,\n };\n await updateOAuth2Client(clientId, client);\n const tokenResponse = await clientCredentialsGrant(\n state.getHost(),\n clientId,\n clientSecret,\n scope\n );\n const lltResponse: lltResponseType = cloneDeep(tokenResponse);\n delete lltResponse.access_token;\n const expires = new Date().getTime() + 1000 * tokenResponse.expires_in;\n lltResponse.expires_on = new Date(expires).toLocaleString();\n // reset token lifetime\n client.coreOAuth2ClientConfig.accessTokenLifetime = {\n inherited: false,\n value: rememberedLifetime,\n };\n await updateOAuth2Client(clientId, client);\n // create secret with token as value\n if (secret) {\n const description = 'Long-lived admin token';\n try {\n await createSecret(\n secret as string,\n tokenResponse.access_token,\n description\n );\n lltResponse.secret = secret;\n } catch (error) {\n if (\n get(error, ['response', 'data', 'code']) === 400 &&\n get(error, ['response', 'data', 'message']) ===\n 'Failed to create secret, the secret already exists'\n ) {\n const newSecret = `${secret}-${expires}`;\n printMessage(\n `esv '${secret}' already exists, using ${newSecret}`,\n 'warn'\n );\n await createSecret(\n newSecret,\n tokenResponse.access_token,\n description\n );\n lltResponse.secret = newSecret;\n }\n }\n }\n return lltResponse;\n } catch (error) {\n throw new FrodoError(\n `Error creating long-lived token for client ${clientId}`,\n error\n );\n }\n}\n\nexport async function removeStaticUserMapping(\n subject: string\n): Promise<boolean> {\n try {\n const authentication = await readConfigEntity('authentication');\n let removeMapping = false;\n const mappings = authentication.rsFilter['staticUserMapping'].filter(\n (mapping) => {\n // find the subject and flag it\n if (mapping.subject === subject) {\n removeMapping = true;\n }\n // ignore mappings for other subjects\n return mapping.subject !== subject;\n }\n );\n authentication.rsFilter['staticUserMapping'] = mappings;\n if (removeMapping) {\n printMessage(`Removing static user mapping for subject \"${subject}\"...`);\n await updateConfigEntity('authentication', authentication);\n } else {\n printMessage(`No static user mapping for subject \"${subject}\" found.`);\n }\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(\n error,\n `Error removing static user mapping for subject ${subject}`\n );\n }\n return false;\n}\n\nexport async function hideGenericExtensionAttributes(\n includeCustomized: boolean,\n dryRun: boolean\n) {\n try {\n const response = await readConfigEntity('managed');\n const managed = cloneDeep(response);\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getCurrentRealmManagedUser()) {\n return object;\n }\n for (const property of Object.keys(\n cloneDeep(GENERIC_EXTENSION_ATTRIBUTES)\n )) {\n if (\n isEqualJson(\n GENERIC_EXTENSION_ATTRIBUTES[property],\n object.schema.properties[property],\n ['viewable', 'usageDescription', 'searchable']\n ) ||\n includeCustomized\n ) {\n if (object.schema.properties[property].viewable) {\n printMessage(`${property}: hide`);\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[property].viewable = false;\n } else {\n printMessage(`${property}: ignore (already hidden)`);\n }\n } else {\n printMessage(`${property}: skip (customized)`);\n }\n }\n return object;\n });\n managed.objects = updatedObjects;\n if (dryRun) {\n printMessage('Dry-run only. Changes are not saved.');\n } else {\n await updateConfigEntity('managed', managed);\n printMessage('Done.');\n }\n return true;\n } catch (error) {\n printError(error, `Error hiding generic extension attributes`);\n }\n return false;\n}\n\nexport async function showGenericExtensionAttributes(\n includeCustomized: boolean,\n dryRun: boolean\n) {\n try {\n const response = await readConfigEntity('managed');\n const managed = cloneDeep(response);\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getCurrentRealmManagedUser()) {\n return object;\n }\n for (const property of Object.keys(\n cloneDeep(GENERIC_EXTENSION_ATTRIBUTES)\n )) {\n if (\n isEqualJson(\n GENERIC_EXTENSION_ATTRIBUTES[property],\n object.schema.properties[property],\n ['viewable', 'usageDescription']\n ) ||\n includeCustomized\n ) {\n if (!object.schema.properties[property].viewable) {\n printMessage(`${property}: show`);\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[property].viewable = true;\n } else {\n printMessage(`${property}: ignore (already showing)`);\n }\n } else {\n printMessage(`${property}: skip (customized)`);\n }\n }\n return object;\n });\n managed.objects = updatedObjects;\n if (dryRun) {\n printMessage('Dry-run only. Changes are not saved.');\n } else {\n await updateConfigEntity('managed', managed);\n printMessage('Done.');\n }\n return true;\n } catch (error) {\n printError(error, `Error showing generic extension attributes`);\n }\n return false;\n}\n\nasync function repairOrgModelUser(dryRun: boolean): Promise<boolean> {\n let repairData = false;\n try {\n const response = await readConfigEntity('managed');\n const managed = cloneDeep(response);\n const RDVPs = ['memberOfOrgIDs'];\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getCurrentRealmManagedUser()) {\n return object;\n }\n printMessage(`${object.name}: checking...`);\n RDVPs.forEach((name) => {\n if (!object.schema.properties[name].queryConfig.flattenProperties) {\n printMessage(`- ${name}: repairing - needs flattening`, 'warn');\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].queryConfig.flattenProperties = true;\n repairData = true;\n } else {\n printMessage(`- ${name}: OK`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (!dryRun) {\n await updateConfigEntity('managed', managed);\n }\n } catch (error) {\n printError(error, `Error repairing org model user`);\n }\n return repairData;\n}\n\nasync function repairOrgModelOrg(dryRun: boolean): Promise<boolean> {\n let repairData = false;\n try {\n const response = await readConfigEntity('managed');\n const managed = cloneDeep(response);\n const RDVPs = [\n 'adminIDs',\n 'ownerIDs',\n 'parentAdminIDs',\n 'parentOwnerIDs',\n 'parentIDs',\n ];\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getRealmManagedOrganization()) {\n return object;\n }\n printMessage(`${object.name}: checking...`);\n RDVPs.forEach((name) => {\n if (!object.schema.properties[name].queryConfig.flattenProperties) {\n printMessage(`- ${name}: repairing - needs flattening`, 'warn');\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].queryConfig.flattenProperties = true;\n repairData = true;\n } else {\n printMessage(`- ${name}: OK`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (!dryRun) {\n await updateConfigEntity('managed', managed);\n }\n } catch (error) {\n printError(error, `Error repairing org model org`);\n }\n return repairData;\n}\n\nasync function repairOrgModelData(dryRun = false) {\n if (!dryRun) {\n // const rootOrgs = await findRootOrganizations();\n }\n}\n\nasync function extendOrgModelPermissins(dryRun = false) {\n if (!dryRun) {\n // const rootOrgs = await findRootOrganizations();\n }\n}\n\nexport async function repairOrgModel(\n excludeCustomized: boolean,\n extendPermissions: boolean,\n dryRun: boolean\n): Promise<boolean> {\n try {\n let repairData = false;\n repairData = repairData || (await repairOrgModelUser(dryRun));\n repairData = repairData || (await repairOrgModelOrg(dryRun));\n if (excludeCustomized) {\n //\n }\n if (repairData) {\n await repairOrgModelData(dryRun);\n }\n if (extendPermissions) {\n await extendOrgModelPermissins(dryRun);\n }\n if (dryRun) {\n printMessage('Dry-run only. Changes are not saved.', 'warn');\n }\n printMessage('Done.');\n return true;\n } catch (error) {\n printError(error, `Error repairing the org model`);\n }\n return false;\n}\n\n// Rfc7523 functions\n\nfunction getJwkFilePath(clientId: string): string {\n return getFilePath(getTypedFilename(clientId + '_private', 'jwk'), true);\n}\n\nfunction getJwksFilePath(clientId: string): string {\n return getFilePath(getTypedFilename(clientId + '_public', 'jwks'), true);\n}\n\nexport async function generateRfc7523AuthZGrantArtefacts(\n clientId: string,\n iss: string,\n jwk?: JwkRsa,\n sub?: string,\n scope?: string[],\n options?: { save: boolean },\n json?: boolean\n): Promise<boolean> {\n let artefacts: {\n jwk: JwkRsa;\n jwks: JwksInterface;\n client: OAuth2ClientSkeleton;\n issuer: OAuth2TrustedJwtIssuerSkeleton;\n };\n try {\n const barId = createProgressIndicator(\n 'determinate',\n options.save ? 3 : 1,\n 'Generating artefacts...'\n );\n artefacts = await _generateRfc7523AuthZGrantArtefacts(\n clientId,\n iss,\n jwk,\n sub,\n scope,\n options\n );\n updateProgressIndicator(barId, 'Successfully generated artefacts.');\n let jwkFile: string;\n let jwksFile: string;\n if (options.save) {\n const jwkBarId = createProgressIndicator(\n 'determinate',\n 1,\n 'Saving JWK (private key)...'\n );\n jwkFile = getJwkFilePath(clientId);\n saveJsonToFile(artefacts.jwk, jwkFile, false);\n updateProgressIndicator(jwkBarId, `Saved JWK to ${jwkFile}.`);\n updateProgressIndicator(barId, 'Successfully saved JWK (private key).');\n stopProgressIndicator(jwkBarId);\n const jwksBarId = createProgressIndicator(\n 'determinate',\n 1,\n 'Saving JWKS (public key)...'\n );\n jwksFile = getJwksFilePath(clientId);\n saveJsonToFile(artefacts.jwks, jwksFile, false);\n updateProgressIndicator(jwksBarId, `Saved JWKS to ${jwksFile}.`);\n stopProgressIndicator(jwksBarId);\n updateProgressIndicator(barId, 'Successfully saved JWKS (public key).');\n }\n stopProgressIndicator(\n barId,\n `Successfully generated ${\n options.save ? 'and saved artefacts' : 'artefacts'\n }.`\n );\n cleanupProgressIndicators();\n\n if (json) {\n printMessage(artefacts, 'data');\n } else {\n printMessage(\n options.save\n ? `\\nCreated oauth2 client in the ${state.getRealm()} realm:`\n : `\\nIn AM, create an OAuth2 client in the ${state.getRealm()} realm with the following information:`\n );\n const client = createKeyValueTable();\n client.push(['Client ID'['brightCyan'], clientId]);\n client.push(['Client Name'['brightCyan'], clientId]);\n client.push([\n 'Scopes'['brightCyan'],\n (\n artefacts.client.coreOAuth2ClientConfig.scopes as Writable<string[]>\n ).value.join(', '),\n ]);\n client.push([\n 'Client Type'['brightCyan'],\n (artefacts.client.coreOAuth2ClientConfig.clientType as Writable<string>)\n .value,\n ]);\n client.push([\n 'Grant Types'['brightCyan'],\n (\n artefacts.client.advancedOAuth2ClientConfig.grantTypes as Writable<\n string[]\n >\n ).value.join(', '),\n ]);\n client.push([\n 'Implied Consent'['brightCyan'],\n (\n artefacts.client.advancedOAuth2ClientConfig\n .isConsentImplied as Writable<boolean>\n ).value,\n ]);\n client.push([\n 'Token Endpoint Authentication '['brightCyan'],\n (\n artefacts.client.advancedOAuth2ClientConfig\n .tokenEndpointAuthMethod as Writable<string>\n ).value,\n ]);\n client.push([\n 'Public Key Selector'['brightCyan'],\n (\n artefacts.client.signEncOAuth2ClientConfig\n .publicKeyLocation as Writable<string>\n ).value,\n ]);\n client.push([\n 'JWKS (Public Key)'['brightCyan'],\n options.save ? `${jwksFile}` : 'See below',\n ]);\n printMessage(`\\n${client.toString()}`);\n\n printMessage(\n options.save\n ? `\\nCreated oauth2 trusted issuer in the ${state.getRealm()} realm:`\n : `\\nIn AM, create a trusted issuer in the ${state.getRealm()} realm with the following information:`\n );\n const issuer = createKeyValueTable();\n issuer.push(['Name'['brightCyan'], artefacts.issuer._id]);\n issuer.push([\n 'JWT Issuer'['brightCyan'],\n (artefacts.issuer.issuer as Writable<string>).value,\n ]);\n issuer.push([\n 'Allowed Subjects '['brightCyan'],\n (artefacts.issuer.allowedSubjects as Writable<string[]>)?.value.length\n ? (\n artefacts.issuer.allowedSubjects as Writable<string[]>\n )?.value.join(', ')\n : `Any ${state.getRealm()} realm user`,\n ]);\n issuer.push([\n 'JWKS (Public Key)'['brightCyan'],\n options.save ? `${jwksFile}` : 'See below',\n ]);\n printMessage(`\\n${issuer.toString()}`);\n if (!options.save) {\n printMessage('\\nJWK (Private Key)'['brightCyan']);\n printMessage(stringify(artefacts.jwk));\n printMessage('\\nJWKS (Public Key)'['brightCyan']);\n printMessage(stringify(artefacts.jwks));\n }\n }\n return true;\n } catch (error) {\n printMessage(error, 'error');\n return false;\n }\n}\n\nexport async function executeRfc7523AuthZGrantFlow(\n clientId: string,\n iss?: string,\n jwk?: JwkRsa,\n sub?: string,\n scope?: string[],\n json?: boolean\n): Promise<boolean> {\n let tokenResponse: AccessTokenResponseType;\n let spinnerId: string;\n try {\n let issuer: OAuth2TrustedJwtIssuerSkeleton;\n // make sure we have an issuer\n if (!iss) {\n let issSpinnerId: string;\n try {\n issSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'No issuer provided, attempting to find suitable issuer...'\n );\n if (!issuer)\n issuer = await readOAuth2TrustedJwtIssuer(clientId + '-issuer');\n iss = (issuer.issuer as Writable<string>).value;\n stopProgressIndicator(\n issSpinnerId,\n `Found suitable issuer: ${clientId + '-issuer'} - ${iss}`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n issSpinnerId,\n `No issuer provided and no suitable issuer could be found: ${error.message}`,\n 'fail'\n );\n }\n }\n // make sure we have a JWK\n if (!jwk) {\n let jwkSpinnerId: string;\n try {\n jwkSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'No JWK provided, attempting to locate a suitable JWK...'\n );\n jwk = JSON.parse(fs.readFileSync(getJwkFilePath(clientId), 'utf8'));\n stopProgressIndicator(\n jwkSpinnerId,\n `Loaded private key JWK from: ${getJwkFilePath(clientId)}`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n jwkSpinnerId,\n `No JWK provided and no suitable JWK could be loaded from file: ${error.message}`,\n 'fail'\n );\n }\n }\n // make sure we have a subject\n if (!sub) {\n let subSpinnerId: string;\n try {\n subSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Executing rfc7523 authz grant flow...'\n );\n if (!issuer)\n issuer = await frodo.oauth2oidc.issuer.readOAuth2TrustedJwtIssuer(\n clientId + '-issuer'\n );\n if (\n (issuer.allowedSubjects as Writable<string[]>).value &&\n (issuer.allowedSubjects as Writable<string[]>).value.length\n )\n sub = (issuer.allowedSubjects as Writable<string[]>).value[0];\n } catch (error) {\n stopProgressIndicator(\n subSpinnerId,\n `No subject provided and no suitable subject could be extracted from the trusted issuer configuration: ${error.message}`,\n 'fail'\n );\n }\n if (sub) {\n stopProgressIndicator(\n subSpinnerId,\n `Using first subject from issuer's allowed subjects: ${sub}`,\n 'success'\n );\n } else {\n stopProgressIndicator(\n subSpinnerId,\n `No subject provided and no suitable subject could be extracted from the trusted issuer's list of allowed subjects.`,\n 'success'\n );\n }\n }\n // we got everything we need, let's get that token\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Executing rfc7523 authz grant flow...'\n );\n tokenResponse = await _executeRfc7523AuthZGrantFlow(\n clientId,\n iss,\n jwk,\n sub,\n scope\n );\n stopProgressIndicator(\n spinnerId,\n 'Successfully executed rfc7523 authz grant flow.',\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error executing rfc7523 authz grant flow: ${stringify(\n error.response?.data || error.message\n )}`,\n 'fail'\n );\n return false;\n }\n cleanupProgressIndicators();\n\n if (json) {\n printMessage(tokenResponse, 'data');\n } else {\n printMessage('\\nAccess Token'['brightCyan']);\n printMessage(tokenResponse.access_token);\n if (tokenResponse.id_token) {\n printMessage('\\nIdentity Token'['brightCyan']);\n printMessage(tokenResponse.id_token);\n }\n }\n return true;\n}\n"],"mappings":"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"}
|
package/esm/ops/JourneyOps.js
CHANGED
|
@@ -290,7 +290,8 @@ export async function importFirstJourneyFromFile(file, options) {
|
|
|
290
290
|
return true;
|
|
291
291
|
} catch (importError) {
|
|
292
292
|
if (verbose) importSpinnerId = createProgressIndicator('indeterminate', 0, `Importing ${journeyId}...`);
|
|
293
|
-
stopProgressIndicator(importSpinnerId,
|
|
293
|
+
stopProgressIndicator(importSpinnerId, `Error importing ${journeyId}`, 'fail');
|
|
294
|
+
printError(importError);
|
|
294
295
|
}
|
|
295
296
|
} else {
|
|
296
297
|
stopProgressIndicator(depSpinnerId, `Unresolved dependencies:`, 'fail');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JourneyOps.js","names":["frodo","FrodoError","state","fs","createProgressIndicator","createTable","debugMessage","printError","printMessage","stopProgressIndicator","updateProgressIndicator","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","exportJourneys","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","disableJourney","_disableJourney","enableJourney","_enableJourney","deleteJourney","_deleteJourney","deleteJourneys","_deleteJourneys","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","spinnerId","exportPromises","useStringArrays","deps","coords","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","exportJourneyToFile","journeyId","file","includeMeta","options","verbose","getVerbose","filePath","fileData","exportJourneysToFile","exportJourneysToFiles","journeysExport","trees","Object","entries","treeId","treeValue","indicatorId","meta","importJourneyFromFile","data","readFileSync","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","indicatorId1","keys","length","indicatorId2","importError","indicatorId3","importFirstJourneyFromFile","hasOwnProperty","call","depSpinnerId","importSpinnerId","importJourneysFromFile","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","allJourneysData","it","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","errors","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd","deep","progress","status"],"sources":["../../src/ops/JourneyOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport { type NodeSkeleton } from '@rockcarver/frodo-lib/types/api/NodeApi';\nimport { type TreeSkeleton } from '@rockcarver/frodo-lib/types/api/TreeApi';\nimport {\n DeleteJourneysStatus,\n type JourneyClassificationType,\n type MultiTreeExportInterface,\n type SingleTreeExportInterface,\n type TreeDependencyMapInterface,\n type TreeExportOptions,\n type TreeExportResolverInterface,\n type TreeImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/JourneyOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printError,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport * as CirclesOfTrust from './CirclesOfTrustOps';\nimport * as EmailTemplate from './EmailTemplateOps';\nimport * as Idp from './IdpOps';\nimport * as Node from './NodeOps';\nimport * as Saml2 from './Saml2Ops';\nimport * as Script from './ScriptOps';\nimport * as Theme from './ThemeOps';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readJourneys,\n exportJourney,\n exportJourneys,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\n disableJourney: _disableJourney,\n enableJourney: _enableJourney,\n deleteJourney: _deleteJourney,\n deleteJourneys: _deleteJourneys,\n} = frodo.authn.journey;\n\n/**\n * List all the journeys/trees\n * @param {boolean} long Long version, all the fields\n * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function listJourneys(\n long: boolean = false,\n analyze: boolean = false\n): Promise<boolean> {\n let journeys = [];\n try {\n journeys = await readJourneys();\n if (!long && !analyze) {\n for (const journeyStub of journeys) {\n printMessage(`${journeyStub['_id']}`, 'data');\n }\n return true;\n } else {\n if (!analyze) {\n const table = createTable(['Name', 'Status', 'Tags']);\n for (const journeyStub of journeys) {\n table.push([\n `${journeyStub._id}`,\n journeyStub.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n journeyStub.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyStub.uiConfig.categories).join(', '),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n return true;\n } else {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Retrieving details of all journeys...`\n );\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n coords: true,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n stopProgressIndicator(\n spinnerId,\n 'Retrieved details of all journeys.',\n 'success'\n );\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n return true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n 'Error retrieving details of all journeys.',\n 'fail'\n );\n printError(error);\n }\n }\n }\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n includeMeta: boolean = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<boolean> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getVerbose();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n let spinnerId: string;\n if (!verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n return true;\n } catch (error) {\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n stopProgressIndicator(\n spinnerId,\n `Error exporting journey ${journeyId}: ${error}`,\n 'fail'\n );\n printError(error);\n }\n return false;\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function exportJourneysToFile(\n file: string,\n includeMeta: boolean = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<boolean> {\n try {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const fileData: MultiTreeExportInterface = await exportJourneys(options);\n saveJsonToFile(fileData, filePath, includeMeta);\n return true;\n } catch (error) {\n printError(error);\n }\n}\n\n/**\n * Export all journeys to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function exportJourneysToFiles(\n includeMeta: boolean = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<boolean> {\n try {\n const journeysExport = await exportJourneys(options);\n const trees = Object.entries(journeysExport.trees);\n for (const [treeId, treeValue] of trees) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Saving ${treeId}...`\n );\n const file = getFilePath(getTypedFilename(`${treeId}`, 'journey'), true);\n treeValue['meta'] = journeysExport.meta;\n try {\n updateProgressIndicator(indicatorId, `Saving ${treeId} to ${file}`);\n saveJsonToFile(treeValue, file, includeMeta);\n stopProgressIndicator(indicatorId, `${treeId} saved to ${file}`);\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error saving ${treeId} to ${file}`);\n }\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n): Promise<boolean> {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const indicatorId1 = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n indicatorId1,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let indicatorId2: string;\n if (!verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n indicatorId2,\n `Imported ${journeyId}.`,\n 'success'\n );\n return true;\n } catch (importError) {\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId2, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(indicatorId1, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n const indicatorId3 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId3, `${journeyId} not found!`, 'fail');\n }\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n): Promise<boolean> {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const depSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n depSpinnerId,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let importSpinnerId: string;\n if (!verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n importSpinnerId,\n `Imported ${journeyId}.`,\n 'success'\n );\n return true;\n } catch (importError) {\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(importSpinnerId, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(depSpinnerId, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n const importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing...`\n );\n stopProgressIndicator(importSpinnerId, `No journeys found!`, 'fail');\n }\n // end dependency resolution for single tree import\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n): Promise<boolean> {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await importJourneys(fileData, options);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import all journeys from separate files\n * @param {TreeImportOptions} options import options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function importJourneysFromFiles(\n options: TreeImportOptions\n): Promise<boolean> {\n try {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.journey.json'))\n .map((name) => getFilePath(name));\n const allJourneysData = { trees: {} };\n for (const file of jsonFiles) {\n const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));\n allJourneysData.trees[journeyData.tree._id] = journeyData;\n }\n await importJourneys(allJourneysData as MultiTreeExportInterface, options);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Get journey classification\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassification(\n journey: SingleTreeExportInterface\n): JourneyClassificationType[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return it['brightGreen'];\n\n case 'cloud':\n return it['brightMagenta'];\n\n case 'custom':\n return it['brightRed'];\n\n case 'premium':\n return it['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return `:green_circle: \\`${it}\\``;\n\n case 'cloud':\n return `:purple_circle: \\`${it}\\``;\n\n case 'custom':\n return `:red_circle: \\`${it}\\``;\n\n case 'premium':\n return `:yellow_circle: \\`${it}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n): Promise<boolean> {\n const errors: Error[] = [];\n try {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');\n printMessage(\n Array(`[${journeyData.tree._id}]`['length']).fill('=').join('')\n );\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Status\n printMessage(\n `\\nStatus\\n${\n journeyData.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen']\n }`\n );\n\n // Classification\n if (state.getAmVersion()) {\n printMessage(\n `\\nClassification\\n${getJourneyClassification(journeyData).join(', ')}`,\n 'data'\n );\n }\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage('\\nCategories/Tags', 'data');\n printMessage(\n `${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`,\n 'data'\n );\n }\n\n // Dependency Tree\n try {\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n describeTreeDescendents(descendents);\n } catch (error) {\n errors.push(error);\n }\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `\\nNode Types (${Object.entries(nodeTypeMap).length}):`,\n 'data'\n );\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `- ${String(count)} [${\n nodeType['brightCyan']\n }] (${Node.getNodeClassification(nodeType).join(', ')})`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`\\nNodes (${Object.entries(allNodes).length}):`, 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `- ${Node.getOneLineDescription(\n nodeObj,\n getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`\\nThemes (${journeyData.themes.length}):`, 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `\\nScripts (${Object.entries(journeyData.scripts).length}):`,\n 'data'\n );\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `\\nEmail Templates (${\n Object.entries(journeyData.emailTemplates).length\n }):`,\n 'data'\n );\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(\n `- ${EmailTemplate.getOneLineDescription(templateData)}`,\n 'data'\n );\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `\\nSocial Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n }):`,\n 'data'\n );\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `\\nSAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n }):`,\n 'data'\n );\n for (const entityProviderData of Object.values(\n journeyData.saml2Entities\n )) {\n printMessage(\n `- ${Saml2.getOneLineDescription(entityProviderData)}`,\n 'data'\n );\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `\\nSAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n }):`,\n 'data'\n );\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(\n `- ${CirclesOfTrust.getOneLineDescription(cotData)}`,\n 'data'\n );\n }\n }\n if (errors.length > 0) {\n throw new FrodoError(`Error describing journey`, errors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Describe a journey in markdown:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function describeJourneyMd(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n) {\n const errors: Error[] = [];\n try {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(\n `# ${getOneLineDescriptionMd(journeyData.tree)} - ${\n journeyData.tree.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n }, ${getJourneyClassificationMd(journeyData).join(', ')}`,\n 'data'\n );\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage(\n `\\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\\``,\n 'data'\n );\n }\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Journey image\n printMessage(`\\n[]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(\n journeyData.saml2Entities\n )) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n if (errors.length > 0) {\n throw new FrodoError(`Error describing journey`, errors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Enable a journey\n * @param {string} journeyId id/name of journey\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function enableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Enabling journey ${journeyId}...`\n );\n try {\n await _enableJourney(journeyId);\n stopProgressIndicator(\n indicatorId,\n `Enabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error enabling journey ${journeyId}`,\n 'fail'\n );\n printError(error);\n }\n return false;\n}\n\n/**\n * Disable a journey\n * @param {string} journeyId id/name of journey\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function disableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Disabling journey ${journeyId}...`\n );\n try {\n await _disableJourney(journeyId);\n stopProgressIndicator(\n indicatorId,\n `Disabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error disabling journey ${journeyId}`,\n 'fail'\n );\n }\n return false;\n}\n\n/**\n * Delete a journey\n * @param {string} journeyId id/name of journey\n * @param {{ deep: boolean; verbose: boolean }} [options] delete journey options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function deleteJourney(\n journeyId: string,\n options: { deep: boolean; verbose: boolean; progress?: boolean } = {\n deep: true,\n verbose: false,\n progress: true,\n }\n): Promise<boolean> {\n try {\n await _deleteJourney(journeyId, options);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Delete all journeys\n * @param {{ deep: boolean; verbose: boolean }} [options] delete journey options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function deleteJourneys(\n options: { deep: boolean; verbose: boolean } = {\n deep: true,\n verbose: false,\n }\n): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n null,\n `Deleting journeys...`\n );\n try {\n const status: DeleteJourneysStatus = await _deleteJourneys(options);\n stopProgressIndicator(\n indicatorId,\n `Deleted ${Object.keys(status).length} journeys`\n );\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error deleting journeys`);\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JourneyOps.js","names":["frodo","FrodoError","state","fs","createProgressIndicator","createTable","debugMessage","printError","printMessage","stopProgressIndicator","updateProgressIndicator","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","exportJourneys","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","disableJourney","_disableJourney","enableJourney","_enableJourney","deleteJourney","_deleteJourney","deleteJourneys","_deleteJourneys","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","spinnerId","exportPromises","useStringArrays","deps","coords","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","exportJourneyToFile","journeyId","file","includeMeta","options","verbose","getVerbose","filePath","fileData","exportJourneysToFile","exportJourneysToFiles","journeysExport","trees","Object","entries","treeId","treeValue","indicatorId","meta","importJourneyFromFile","data","readFileSync","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","indicatorId1","keys","length","indicatorId2","importError","indicatorId3","importFirstJourneyFromFile","hasOwnProperty","call","depSpinnerId","importSpinnerId","importJourneysFromFile","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","allJourneysData","it","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","errors","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd","deep","progress","status"],"sources":["../../src/ops/JourneyOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport { type NodeSkeleton } from '@rockcarver/frodo-lib/types/api/NodeApi';\nimport { type TreeSkeleton } from '@rockcarver/frodo-lib/types/api/TreeApi';\nimport {\n DeleteJourneysStatus,\n type JourneyClassificationType,\n type MultiTreeExportInterface,\n type SingleTreeExportInterface,\n type TreeDependencyMapInterface,\n type TreeExportOptions,\n type TreeExportResolverInterface,\n type TreeImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/JourneyOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printError,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport * as CirclesOfTrust from './CirclesOfTrustOps';\nimport * as EmailTemplate from './EmailTemplateOps';\nimport * as Idp from './IdpOps';\nimport * as Node from './NodeOps';\nimport * as Saml2 from './Saml2Ops';\nimport * as Script from './ScriptOps';\nimport * as Theme from './ThemeOps';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readJourneys,\n exportJourney,\n exportJourneys,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\n disableJourney: _disableJourney,\n enableJourney: _enableJourney,\n deleteJourney: _deleteJourney,\n deleteJourneys: _deleteJourneys,\n} = frodo.authn.journey;\n\n/**\n * List all the journeys/trees\n * @param {boolean} long Long version, all the fields\n * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function listJourneys(\n long: boolean = false,\n analyze: boolean = false\n): Promise<boolean> {\n let journeys = [];\n try {\n journeys = await readJourneys();\n if (!long && !analyze) {\n for (const journeyStub of journeys) {\n printMessage(`${journeyStub['_id']}`, 'data');\n }\n return true;\n } else {\n if (!analyze) {\n const table = createTable(['Name', 'Status', 'Tags']);\n for (const journeyStub of journeys) {\n table.push([\n `${journeyStub._id}`,\n journeyStub.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n journeyStub.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyStub.uiConfig.categories).join(', '),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n return true;\n } else {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Retrieving details of all journeys...`\n );\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n coords: true,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n stopProgressIndicator(\n spinnerId,\n 'Retrieved details of all journeys.',\n 'success'\n );\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n return true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n 'Error retrieving details of all journeys.',\n 'fail'\n );\n printError(error);\n }\n }\n }\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n includeMeta: boolean = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<boolean> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getVerbose();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n let spinnerId: string;\n if (!verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n return true;\n } catch (error) {\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n stopProgressIndicator(\n spinnerId,\n `Error exporting journey ${journeyId}: ${error}`,\n 'fail'\n );\n printError(error);\n }\n return false;\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function exportJourneysToFile(\n file: string,\n includeMeta: boolean = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<boolean> {\n try {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const fileData: MultiTreeExportInterface = await exportJourneys(options);\n saveJsonToFile(fileData, filePath, includeMeta);\n return true;\n } catch (error) {\n printError(error);\n }\n}\n\n/**\n * Export all journeys to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function exportJourneysToFiles(\n includeMeta: boolean = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<boolean> {\n try {\n const journeysExport = await exportJourneys(options);\n const trees = Object.entries(journeysExport.trees);\n for (const [treeId, treeValue] of trees) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Saving ${treeId}...`\n );\n const file = getFilePath(getTypedFilename(`${treeId}`, 'journey'), true);\n treeValue['meta'] = journeysExport.meta;\n try {\n updateProgressIndicator(indicatorId, `Saving ${treeId} to ${file}`);\n saveJsonToFile(treeValue, file, includeMeta);\n stopProgressIndicator(indicatorId, `${treeId} saved to ${file}`);\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error saving ${treeId} to ${file}`);\n }\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n): Promise<boolean> {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const indicatorId1 = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n indicatorId1,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let indicatorId2: string;\n if (!verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n indicatorId2,\n `Imported ${journeyId}.`,\n 'success'\n );\n return true;\n } catch (importError) {\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId2, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(indicatorId1, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n const indicatorId3 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId3, `${journeyId} not found!`, 'fail');\n }\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n): Promise<boolean> {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const depSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n depSpinnerId,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let importSpinnerId: string;\n if (!verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n importSpinnerId,\n `Imported ${journeyId}.`,\n 'success'\n );\n return true;\n } catch (importError) {\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n importSpinnerId,\n `Error importing ${journeyId}`,\n 'fail'\n );\n printError(importError);\n }\n } else {\n stopProgressIndicator(depSpinnerId, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n const importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing...`\n );\n stopProgressIndicator(importSpinnerId, `No journeys found!`, 'fail');\n }\n // end dependency resolution for single tree import\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n): Promise<boolean> {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await importJourneys(fileData, options);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import all journeys from separate files\n * @param {TreeImportOptions} options import options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function importJourneysFromFiles(\n options: TreeImportOptions\n): Promise<boolean> {\n try {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.journey.json'))\n .map((name) => getFilePath(name));\n const allJourneysData = { trees: {} };\n for (const file of jsonFiles) {\n const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));\n allJourneysData.trees[journeyData.tree._id] = journeyData;\n }\n await importJourneys(allJourneysData as MultiTreeExportInterface, options);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Get journey classification\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassification(\n journey: SingleTreeExportInterface\n): JourneyClassificationType[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return it['brightGreen'];\n\n case 'cloud':\n return it['brightMagenta'];\n\n case 'custom':\n return it['brightRed'];\n\n case 'premium':\n return it['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return `:green_circle: \\`${it}\\``;\n\n case 'cloud':\n return `:purple_circle: \\`${it}\\``;\n\n case 'custom':\n return `:red_circle: \\`${it}\\``;\n\n case 'premium':\n return `:yellow_circle: \\`${it}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n): Promise<boolean> {\n const errors: Error[] = [];\n try {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');\n printMessage(\n Array(`[${journeyData.tree._id}]`['length']).fill('=').join('')\n );\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Status\n printMessage(\n `\\nStatus\\n${\n journeyData.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen']\n }`\n );\n\n // Classification\n if (state.getAmVersion()) {\n printMessage(\n `\\nClassification\\n${getJourneyClassification(journeyData).join(', ')}`,\n 'data'\n );\n }\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage('\\nCategories/Tags', 'data');\n printMessage(\n `${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`,\n 'data'\n );\n }\n\n // Dependency Tree\n try {\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n describeTreeDescendents(descendents);\n } catch (error) {\n errors.push(error);\n }\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `\\nNode Types (${Object.entries(nodeTypeMap).length}):`,\n 'data'\n );\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `- ${String(count)} [${\n nodeType['brightCyan']\n }] (${Node.getNodeClassification(nodeType).join(', ')})`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`\\nNodes (${Object.entries(allNodes).length}):`, 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `- ${Node.getOneLineDescription(\n nodeObj,\n getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`\\nThemes (${journeyData.themes.length}):`, 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `\\nScripts (${Object.entries(journeyData.scripts).length}):`,\n 'data'\n );\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `\\nEmail Templates (${\n Object.entries(journeyData.emailTemplates).length\n }):`,\n 'data'\n );\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(\n `- ${EmailTemplate.getOneLineDescription(templateData)}`,\n 'data'\n );\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `\\nSocial Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n }):`,\n 'data'\n );\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `\\nSAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n }):`,\n 'data'\n );\n for (const entityProviderData of Object.values(\n journeyData.saml2Entities\n )) {\n printMessage(\n `- ${Saml2.getOneLineDescription(entityProviderData)}`,\n 'data'\n );\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `\\nSAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n }):`,\n 'data'\n );\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(\n `- ${CirclesOfTrust.getOneLineDescription(cotData)}`,\n 'data'\n );\n }\n }\n if (errors.length > 0) {\n throw new FrodoError(`Error describing journey`, errors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Describe a journey in markdown:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function describeJourneyMd(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n) {\n const errors: Error[] = [];\n try {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(\n `# ${getOneLineDescriptionMd(journeyData.tree)} - ${\n journeyData.tree.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n }, ${getJourneyClassificationMd(journeyData).join(', ')}`,\n 'data'\n );\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage(\n `\\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\\``,\n 'data'\n );\n }\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Journey image\n printMessage(`\\n[]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(\n journeyData.saml2Entities\n )) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n if (errors.length > 0) {\n throw new FrodoError(`Error describing journey`, errors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Enable a journey\n * @param {string} journeyId id/name of journey\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function enableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Enabling journey ${journeyId}...`\n );\n try {\n await _enableJourney(journeyId);\n stopProgressIndicator(\n indicatorId,\n `Enabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error enabling journey ${journeyId}`,\n 'fail'\n );\n printError(error);\n }\n return false;\n}\n\n/**\n * Disable a journey\n * @param {string} journeyId id/name of journey\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function disableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Disabling journey ${journeyId}...`\n );\n try {\n await _disableJourney(journeyId);\n stopProgressIndicator(\n indicatorId,\n `Disabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error disabling journey ${journeyId}`,\n 'fail'\n );\n }\n return false;\n}\n\n/**\n * Delete a journey\n * @param {string} journeyId id/name of journey\n * @param {{ deep: boolean; verbose: boolean }} [options] delete journey options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function deleteJourney(\n journeyId: string,\n options: { deep: boolean; verbose: boolean; progress?: boolean } = {\n deep: true,\n verbose: false,\n progress: true,\n }\n): Promise<boolean> {\n try {\n await _deleteJourney(journeyId, options);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Delete all journeys\n * @param {{ deep: boolean; verbose: boolean }} [options] delete journey options\n * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise\n */\nexport async function deleteJourneys(\n options: { deep: boolean; verbose: boolean } = {\n deep: true,\n verbose: false,\n }\n): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n null,\n `Deleting journeys...`\n );\n try {\n const status: DeleteJourneysStatus = await _deleteJourneys(options);\n stopProgressIndicator(\n indicatorId,\n `Deleted ${Object.keys(status).length} journeys`\n );\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error deleting journeys`);\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"frIndexedDate1": {
|
|
3
3
|
"description": "Generic Indexed Date 1",
|
|
4
4
|
"isPersonal": false,
|
|
5
|
+
"searchable": true,
|
|
5
6
|
"title": "Generic Indexed Date 1",
|
|
6
7
|
"type": "string",
|
|
7
8
|
"usageDescription": "",
|
|
@@ -11,6 +12,7 @@
|
|
|
11
12
|
"frIndexedDate2": {
|
|
12
13
|
"description": "Generic Indexed Date 2",
|
|
13
14
|
"isPersonal": false,
|
|
15
|
+
"searchable": true,
|
|
14
16
|
"title": "Generic Indexed Date 2",
|
|
15
17
|
"type": "string",
|
|
16
18
|
"usageDescription": "",
|
|
@@ -20,6 +22,7 @@
|
|
|
20
22
|
"frIndexedDate3": {
|
|
21
23
|
"description": "Generic Indexed Date 3",
|
|
22
24
|
"isPersonal": false,
|
|
25
|
+
"searchable": true,
|
|
23
26
|
"title": "Generic Indexed Date 3",
|
|
24
27
|
"type": "string",
|
|
25
28
|
"usageDescription": "",
|
|
@@ -29,6 +32,7 @@
|
|
|
29
32
|
"frIndexedDate4": {
|
|
30
33
|
"description": "Generic Indexed Date 4",
|
|
31
34
|
"isPersonal": false,
|
|
35
|
+
"searchable": true,
|
|
32
36
|
"title": "Generic Indexed Date 4",
|
|
33
37
|
"type": "string",
|
|
34
38
|
"usageDescription": "",
|
|
@@ -38,6 +42,7 @@
|
|
|
38
42
|
"frIndexedDate5": {
|
|
39
43
|
"description": "Generic Indexed Date 5",
|
|
40
44
|
"isPersonal": false,
|
|
45
|
+
"searchable": true,
|
|
41
46
|
"title": "Generic Indexed Date 5",
|
|
42
47
|
"type": "string",
|
|
43
48
|
"usageDescription": "",
|
|
@@ -47,6 +52,7 @@
|
|
|
47
52
|
"frIndexedInteger1": {
|
|
48
53
|
"description": "Generic Indexed Integer 1",
|
|
49
54
|
"isPersonal": false,
|
|
55
|
+
"searchable": true,
|
|
50
56
|
"title": "Generic Indexed Integer 1",
|
|
51
57
|
"type": "number",
|
|
52
58
|
"usageDescription": "",
|
|
@@ -56,6 +62,7 @@
|
|
|
56
62
|
"frIndexedInteger2": {
|
|
57
63
|
"description": "Generic Indexed Integer 2",
|
|
58
64
|
"isPersonal": false,
|
|
65
|
+
"searchable": true,
|
|
59
66
|
"title": "Generic Indexed Integer 2",
|
|
60
67
|
"type": "number",
|
|
61
68
|
"usageDescription": "",
|
|
@@ -65,6 +72,7 @@
|
|
|
65
72
|
"frIndexedInteger3": {
|
|
66
73
|
"description": "Generic Indexed Integer 3",
|
|
67
74
|
"isPersonal": false,
|
|
75
|
+
"searchable": true,
|
|
68
76
|
"title": "Generic Indexed Integer 3",
|
|
69
77
|
"type": "number",
|
|
70
78
|
"usageDescription": "",
|
|
@@ -74,6 +82,7 @@
|
|
|
74
82
|
"frIndexedInteger4": {
|
|
75
83
|
"description": "Generic Indexed Integer 4",
|
|
76
84
|
"isPersonal": false,
|
|
85
|
+
"searchable": true,
|
|
77
86
|
"title": "Generic Indexed Integer 4",
|
|
78
87
|
"type": "number",
|
|
79
88
|
"usageDescription": "",
|
|
@@ -83,6 +92,7 @@
|
|
|
83
92
|
"frIndexedInteger5": {
|
|
84
93
|
"description": "Generic Indexed Integer 5",
|
|
85
94
|
"isPersonal": false,
|
|
95
|
+
"searchable": true,
|
|
86
96
|
"title": "Generic Indexed Integer 5",
|
|
87
97
|
"type": "number",
|
|
88
98
|
"usageDescription": "",
|
|
@@ -95,6 +105,7 @@
|
|
|
95
105
|
"items": {
|
|
96
106
|
"type": "string"
|
|
97
107
|
},
|
|
108
|
+
"searchable": true,
|
|
98
109
|
"title": "Generic Indexed Multivalue 1",
|
|
99
110
|
"type": "array",
|
|
100
111
|
"usageDescription": "",
|
|
@@ -107,6 +118,7 @@
|
|
|
107
118
|
"items": {
|
|
108
119
|
"type": "string"
|
|
109
120
|
},
|
|
121
|
+
"searchable": true,
|
|
110
122
|
"title": "Generic Indexed Multivalue 2",
|
|
111
123
|
"type": "array",
|
|
112
124
|
"usageDescription": "",
|
|
@@ -119,6 +131,7 @@
|
|
|
119
131
|
"items": {
|
|
120
132
|
"type": "string"
|
|
121
133
|
},
|
|
134
|
+
"searchable": true,
|
|
122
135
|
"title": "Generic Indexed Multivalue 3",
|
|
123
136
|
"type": "array",
|
|
124
137
|
"usageDescription": "",
|
|
@@ -131,6 +144,7 @@
|
|
|
131
144
|
"items": {
|
|
132
145
|
"type": "string"
|
|
133
146
|
},
|
|
147
|
+
"searchable": true,
|
|
134
148
|
"title": "Generic Indexed Multivalue 4",
|
|
135
149
|
"type": "array",
|
|
136
150
|
"usageDescription": "",
|
|
@@ -143,6 +157,7 @@
|
|
|
143
157
|
"items": {
|
|
144
158
|
"type": "string"
|
|
145
159
|
},
|
|
160
|
+
"searchable": true,
|
|
146
161
|
"title": "Generic Indexed Multivalue 5",
|
|
147
162
|
"type": "array",
|
|
148
163
|
"usageDescription": "",
|
|
@@ -152,6 +167,7 @@
|
|
|
152
167
|
"frIndexedString1": {
|
|
153
168
|
"description": "Generic Indexed String 1",
|
|
154
169
|
"isPersonal": false,
|
|
170
|
+
"searchable": true,
|
|
155
171
|
"title": "Generic Indexed String 1",
|
|
156
172
|
"type": "string",
|
|
157
173
|
"usageDescription": "",
|
|
@@ -161,6 +177,7 @@
|
|
|
161
177
|
"frIndexedString2": {
|
|
162
178
|
"description": "Generic Indexed String 2",
|
|
163
179
|
"isPersonal": false,
|
|
180
|
+
"searchable": true,
|
|
164
181
|
"title": "Generic Indexed String 2",
|
|
165
182
|
"type": "string",
|
|
166
183
|
"usageDescription": "",
|
|
@@ -170,6 +187,7 @@
|
|
|
170
187
|
"frIndexedString3": {
|
|
171
188
|
"description": "Generic Indexed String 3",
|
|
172
189
|
"isPersonal": false,
|
|
190
|
+
"searchable": true,
|
|
173
191
|
"title": "Generic Indexed String 3",
|
|
174
192
|
"type": "string",
|
|
175
193
|
"usageDescription": "",
|
|
@@ -179,6 +197,7 @@
|
|
|
179
197
|
"frIndexedString4": {
|
|
180
198
|
"description": "Generic Indexed String 4",
|
|
181
199
|
"isPersonal": false,
|
|
200
|
+
"searchable": true,
|
|
182
201
|
"title": "Generic Indexed String 4",
|
|
183
202
|
"type": "string",
|
|
184
203
|
"usageDescription": "",
|
|
@@ -188,6 +207,7 @@
|
|
|
188
207
|
"frIndexedString5": {
|
|
189
208
|
"description": "Generic Indexed String 5",
|
|
190
209
|
"isPersonal": false,
|
|
210
|
+
"searchable": true,
|
|
191
211
|
"title": "Generic Indexed String 5",
|
|
192
212
|
"type": "string",
|
|
193
213
|
"usageDescription": "",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rockcarver/frodo-cli",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-57",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
|
|
6
6
|
"keywords": [
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
]
|
|
120
120
|
},
|
|
121
121
|
"dependencies": {
|
|
122
|
-
"@rockcarver/frodo-lib": "2.0.0-
|
|
122
|
+
"@rockcarver/frodo-lib": "2.0.0-79",
|
|
123
123
|
"chokidar": "^3.5.3",
|
|
124
124
|
"cli-progress": "^3.11.2",
|
|
125
125
|
"cli-table3": "^0.6.3",
|