@rockcarver/frodo-cli 2.0.0-55 → 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 +9 -1
- package/esm/cli/script/script-export.js +2 -2
- package/esm/cli/script/script-export.js.map +1 -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/ConfigOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +2 -1
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/ScriptOps.js +5 -2
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/templates/{cloud/GenericExtensionAttributesTemplate.json → GenericExtensionAttributesTemplate.json} +20 -0
- package/package.json +2 -2
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/ConfigOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigOps.js","names":["frodo","FrodoError","state","fs","fse","getFullExportConfig","getFullExportConfigFromDirectory","cleanupProgressIndicators","printError","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","stringify","json","exportFullConfiguration","importFullConfiguration","config","exportEverythingToFile","file","includeMeta","options","useStringArrays","noDecode","coords","includeDefault","collectErrors","exportData","fileName","getRealm","length","error","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name","importEverythingFromFile","reUuidJourneys","reUuidScripts","cleanServices","global","realm","data","importEverythingFromFiles","getDirectory"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport {\n FullExportInterface,\n FullExportOptions,\n FullImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport {\n getFullExportConfig,\n getFullExportConfigFromDirectory,\n} from '../utils/Config';\nimport { cleanupProgressIndicators, printError, printMessage } from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { stringify } = frodo.utils.json;\nconst { exportFullConfiguration, importFullConfiguration } = frodo.config;\n\n/**\n * Export everything to separate files\n * @param {String} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFile(\n file: string,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData = await exportFullConfiguration(options, collectErrors);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export everything to separate files\n * @param {boolean} extract Extracts the scripts from the exports into separate files if true\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFiles(\n extract: boolean = false,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData: FullExportInterface = await exportFullConfiguration(\n options,\n collectErrors\n );\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`,\n includeMeta\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`,\n includeMeta\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name && type !== 'emailTemplate'\n ? value.name\n : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n }\n });\n }\n }\n });\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from a single file\n * @param {string} file The file path\n * @param {FullImportOptions} options import options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFile(\n file: string,\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfig(file);\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n cleanupProgressIndicators();\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from separate files\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFiles(\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfigFromDirectory(state.getDirectory());\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConfigOps.js","names":["frodo","FrodoError","state","fs","fse","getFullExportConfig","getFullExportConfigFromDirectory","cleanupProgressIndicators","printError","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","stringify","json","exportFullConfiguration","importFullConfiguration","config","exportEverythingToFile","file","includeMeta","options","useStringArrays","noDecode","coords","includeDefault","collectErrors","exportData","fileName","getRealm","length","error","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name","importEverythingFromFile","reUuidJourneys","reUuidScripts","cleanServices","global","realm","data","importEverythingFromFiles","getDirectory"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport {\n FullExportInterface,\n FullExportOptions,\n FullImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport {\n getFullExportConfig,\n getFullExportConfigFromDirectory,\n} from '../utils/Config';\nimport {\n cleanupProgressIndicators,\n printError,\n printMessage,\n} from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { stringify } = frodo.utils.json;\nconst { exportFullConfiguration, importFullConfiguration } = frodo.config;\n\n/**\n * Export everything to separate files\n * @param {String} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFile(\n file: string,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData = await exportFullConfiguration(options, collectErrors);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export everything to separate files\n * @param {boolean} extract Extracts the scripts from the exports into separate files if true\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFiles(\n extract: boolean = false,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData: FullExportInterface = await exportFullConfiguration(\n options,\n collectErrors\n );\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`,\n includeMeta\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`,\n includeMeta\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name && type !== 'emailTemplate'\n ? value.name\n : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n }\n });\n }\n }\n });\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from a single file\n * @param {string} file The file path\n * @param {FullImportOptions} options import options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFile(\n file: string,\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfig(file);\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n cleanupProgressIndicators();\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from separate files\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFiles(\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfigFromDirectory(state.getDirectory());\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\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');
|