From 521fa298e50ef082dbdcf951593cef6e318aebb7 Mon Sep 17 00:00:00 2001 From: Huston Franklin Date: Sun, 25 Jun 2023 15:20:06 -0600 Subject: [PATCH 1/6] feat: Add config-manager push secrets command --- .../config-manager-push-secrets.ts | 52 + .../config-manager-push.ts | 3 +- src/configManagerOps/FrConfigSecretOps.ts | 31 +- .../config-manager-push-secrets.test.js.snap | 66 + .../config-manager-push.test.js.snap | 1 + .../en/config-manager-push-secrets.test.js | 10 + ...nfig-manager-push-secrets.e2e.test.js.snap | 3 + .../config-manager-push-secrets.e2e.test.js | 72 + ...sv-osaic-fradmin-serviceclient-secret.json | 7 + .../esv-push-aws-sns-access-key-id.json | 7 + .../esv-push-aws-sns-access-key-secret.json | 7 + .../esvs/secrets/esv-sns-access-key-id.json | 7 + .../secrets/esv-sns-access-key-secret.json | 7 + .../am_1076162899/recording.har | 631 +++++ .../environment_1072573434/recording.har | 514 ++++ .../oauth2_393036114/recording.har | 289 ++ .../mocks/default_2470140894/recording.har | 2338 +++++++++++++++++ 17 files changed, 4043 insertions(+), 2 deletions(-) create mode 100644 src/cli/config-manager/config-manager-push/config-manager-push-secrets.ts create mode 100644 test/client_cli/en/__snapshots__/config-manager-push-secrets.test.js.snap create mode 100644 test/client_cli/en/config-manager-push-secrets.test.js create mode 100644 test/e2e/__snapshots__/config-manager-push-secrets.e2e.test.js.snap create mode 100644 test/e2e/config-manager-push-secrets.e2e.test.js create mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-osaic-fradmin-serviceclient-secret.json create mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-id.json create mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-secret.json create mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-id.json create mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-secret.json create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/default_2470140894/recording.har diff --git a/src/cli/config-manager/config-manager-push/config-manager-push-secrets.ts b/src/cli/config-manager/config-manager-push/config-manager-push-secrets.ts new file mode 100644 index 000000000..3ed2e63c7 --- /dev/null +++ b/src/cli/config-manager/config-manager-push/config-manager-push-secrets.ts @@ -0,0 +1,52 @@ +import { frodo } from '@rockcarver/frodo-lib'; + +import { configManagerImportSecrets } from '../../../configManagerOps/FrConfigSecretOps'; +import { getTokens } from '../../../ops/AuthenticateOps'; +import { printMessage, verboseMessage } from '../../../utils/Console'; +import { FrodoCommand } from '../../FrodoCommand'; + +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; + +export default function setup() { + const program = new FrodoCommand( + 'frodo config-manager push secrets', + [], + deploymentTypes + ); + + program + .description('Import secrets.') + .action(async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + + if (await getTokens(false, true, deploymentTypes)) { + verboseMessage('Importing secrets'); + const outcome = await configManagerImportSecrets(); + if (!outcome) process.exitCode = 1; + } + // unrecognized combination of options or no options + else { + printMessage( + 'Unrecognized combination of options or no options...', + 'error' + ); + program.help(); + process.exitCode = 1; + } + }); + + return program; +} diff --git a/src/cli/config-manager/config-manager-push/config-manager-push.ts b/src/cli/config-manager/config-manager-push/config-manager-push.ts index cf423832d..eb8db87ff 100644 --- a/src/cli/config-manager/config-manager-push/config-manager-push.ts +++ b/src/cli/config-manager/config-manager-push/config-manager-push.ts @@ -15,6 +15,7 @@ import OrgPrivileges from './config-manager-push-org-privileges'; import PasswordPolicy from './config-manager-push-password-policy'; import Schedules from './config-manager-push-schedules'; import ServiceObjects from './config-manager-push-service-objects'; +import Secrets from './config-manager-push-secrets'; import TermsAndConditions from './config-manager-push-terms-and-conditions'; import Themes from './config-manager-push-themes'; import UiConfig from './config-manager-push-ui-config'; @@ -43,6 +44,6 @@ export default function setup() { program.addCommand(UiConfig().name('ui-config')); program.addCommand(Authentication().name('authentication')); program.addCommand(ConnectorDefinitions().name('connector-definitions')); - + program.addCommand(Secrets().name('secrets')); return program; } diff --git a/src/configManagerOps/FrConfigSecretOps.ts b/src/configManagerOps/FrConfigSecretOps.ts index 231f9fa09..0573bf412 100644 --- a/src/configManagerOps/FrConfigSecretOps.ts +++ b/src/configManagerOps/FrConfigSecretOps.ts @@ -1,6 +1,7 @@ import { frodo } from '@rockcarver/frodo-lib'; import { SecretSkeleton } from '@rockcarver/frodo-lib/types/api/cloud/SecretsApi'; import { SecretsExportInterface } from '@rockcarver/frodo-lib/types/ops/cloud/SecretsOps'; +import fs from 'fs'; import { createProgressIndicator, @@ -10,7 +11,7 @@ import { } from '../utils/Console'; const { getFilePath, saveJsonToFile } = frodo.utils; -const { readSecrets, exportSecret } = frodo.cloud.secret; +const { readSecrets, exportSecret, importSecret } = frodo.cloud.secret; /** * Export all secrets to individual files in fr-config-manager format @@ -87,3 +88,31 @@ export async function configManagerExportSecrets( } return false; } + +export async function configManagerImportSecrets(): Promise { + try { + const secretsDir = getFilePath('esvs/secrets'); + const secretsFiles = fs.readdirSync(secretsDir); + + for (const secretsFile of secretsFiles) { + const filePath = `${secretsDir}/${secretsFile}`; + const readFile = fs.readFileSync(filePath, 'utf-8'); + const importData = JSON.parse(readFile); + + const singleSecretImport: SecretsExportInterface = { + secret: { [importData._id]: importData }, + }; + + try { + await importSecret(importData._id, singleSecretImport, false); + } catch (err) { + printError(err); + } + } + + return true; + } catch (err) { + printError(err); + return false; + } +} diff --git a/test/client_cli/en/__snapshots__/config-manager-push-secrets.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push-secrets.test.js.snap new file mode 100644 index 000000000..47775fce0 --- /dev/null +++ b/test/client_cli/en/__snapshots__/config-manager-push-secrets.test.js.snap @@ -0,0 +1,66 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'config-manager push secrets' should be expected english 1`] = ` +"Usage: frodo config-manager push secrets [options] [host] [realm] [username] [password] + +Import secrets. + +Arguments: + host AM base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring or alias. + realm Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise. (default: "alpha" for Identity Cloud tenants, "/" otherwise.) + username Username to login with. Must be an admin user with appropriate rights to manage authentication journeys/trees. + password Password. + +Options: + --curlirize Output all network calls in curl format. + -D, --directory Set the working directory. + --debug Debug output during command execution. If specified, may or may not produce additional output helpful for troubleshooting. + --flush-cache Flush token cache. + -h, --help Help + --idm-host IDM base URL, e.g.: https://cdk.idm.example.com/myidm. Use only if your IDM installation resides in a different domain and/or if the base path differs from the default "/openidm". + -k, --insecure Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://:), in that case the proxy must provide this capability. (default: Don't allow insecure connections) + --login-client-id Specify a custom OAuth2 client id to use a your own oauth2 client for IDM API calls in deployments of type "cloud" or "forgeops". Your custom client must be configured as a public client and allow the authorization code grant using the "openid fr:idm:*" scope. Use the "--redirect-uri" parameter if you have configured a custom redirect uri (default: "/platform/appAuthHelperRedirect.html"). + --login-redirect-uri Specify a custom redirect URI to use with your custom OAuth2 client (efault: "/platform/appAuthHelperRedirect.html"). + -m, --type Override auto-detected deployment type. Valid values for type: + classic: A classic Access Management-only deployment with custom layout and configuration. + cloud: A ForgeRock Identity Cloud environment. + forgeops: A ForgeOps CDK or CDM deployment. + The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops") + --no-cache Disable token cache for this operation. + --passphrase The passphrase for the Amster private key if it is encrypted. + --private-key File containing the private key for authenticating with Amster. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. + --retry Retry failed operations. Valid values for strategy: + everything: Retry all failed operations. + network: Retry only network-related failed operations. + nothing: Do not retry failed operations. + The selected retry strategy controls how the CLI handles failures. (choices: "nothing", "everything", "network", default: Do not retry failed operations.) + --sa-id Service account id. + --sa-jwk-file File containing the JSON Web Key (JWK) associated with the the service account. + --use-realm-prefix-on-managed-objects Set to true if you want to use the realm name as a prefix on managed object configuration, e.g. managed/alpha_user, managed/alpha_application or managed/bravo_organization. When false, the default behaviour of using managed/user etc. is retained. This option is ignored when the deployment type is "cloud". + --verbose Verbose output during command execution. If specified, may or may not produce additional output. + +Environment Variables: + FRODO_HOST: AM base URL. Overridden by 'host' argument. + FRODO_IDM_HOST: IDM base URL. Overridden by '--idm-host' option. + FRODO_REALM: Realm. Overridden by 'realm' argument. + FRODO_USERNAME: Username. Overridden by 'username' argument. + FRODO_PASSWORD: Password. Overridden by 'password' argument. + FRODO_LOGIN_CLIENT_ID: OAuth2 client id for IDM API calls. Overridden by '--login-client-id' option. + FRODO_LOGIN_REDIRECT_URI: Redirect Uri for custom OAuth2 client id. Overridden by '--login-redirect-uri' option. + FRODO_SA_ID: Service account uuid. Overridden by '--sa-id' option. + FRODO_SA_JWK: Service account JWK. Overridden by '--sa-jwk-file' option but takes the actual JWK as a value, not a file name. + FRODO_AMSTER_PASSPHRASE: Passphrase for the Amster private key if it is encrypted. Overridden by '--passphrase' option. + FRODO_AMSTER_PRIVATE_KEY: Amster private key. Overridden by '--private-key' option but takes the actual private key as a value (i.e. the file contents), not a file name. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. + FRODO_NO_CACHE: Disable token cache. Same as '--no-cache' option. + FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'. + FRODO_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'. + FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use. When using an Amster private key, specifies which journey to use for Amster authentication as opposed to the default 'amsterService' journey. + FRODO_AUTHENTICATION_HEADER_OVERRIDES: Map of headers: '{"host":"am.example.com:8081"}'. These headers are sent with all requests and can be used to override default behavior, for example to set a custom host header for Proxy Connect-protected PingOne Advanced Identity Cloud environments. + FRODO_CONFIGURATION_HEADER_OVERRIDES: Map of headers: '{"X-Configuration-Type":"mutable"}'. These headers are sent with all configuration requests and can be used to override default behavior, for example to set a custom configuration header for mutable PingOne Advanced Identity Cloud environments. + FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. + FRODO_IGA: Set to "true" to enable IGA (Identity Governance) endpoints for cloud deployments, or "false" to disable them, overriding auto-detected value. + FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file. + FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH. + +" +`; diff --git a/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap index c079ca13f..4cfaa409f 100644 --- a/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap @@ -30,6 +30,7 @@ Commands: password-policy [Experimental] Import password-policy objects. schedules [Experimental] Import schedules. service-objects [Experimental] Import service objects. + secrets Import secrets. terms-and-conditions [Experimental] Import terms and conditions. themes [Experimental] Import themes. ui-config [Experimental] Import UI configuration. diff --git a/test/client_cli/en/config-manager-push-secrets.test.js b/test/client_cli/en/config-manager-push-secrets.test.js new file mode 100644 index 000000000..2d301ae00 --- /dev/null +++ b/test/client_cli/en/config-manager-push-secrets.test.js @@ -0,0 +1,10 @@ +import cp from 'child_process'; +import { promisify } from 'util'; + +const exec = promisify(cp.exec); +const CMD = 'frodo config-manager push secrets --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'config-manager push secrets' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); \ No newline at end of file diff --git a/test/e2e/__snapshots__/config-manager-push-secrets.e2e.test.js.snap b/test/e2e/__snapshots__/config-manager-push-secrets.e2e.test.js.snap new file mode 100644 index 000000000..81a71bacd --- /dev/null +++ b/test/e2e/__snapshots__/config-manager-push-secrets.e2e.test.js.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`frodo config-manager push secrets "frodo config-manager push secrets -D test/e2e/exports/fr-config-manager/forgeops -m cloud": should import the secrets into cloud" 1`] = `""`; diff --git a/test/e2e/config-manager-push-secrets.e2e.test.js b/test/e2e/config-manager-push-secrets.e2e.test.js new file mode 100644 index 000000000..1023fa4ec --- /dev/null +++ b/test/e2e/config-manager-push-secrets.e2e.test.js @@ -0,0 +1,72 @@ +/** + * Follow this process to write e2e tests for the CLI project: + * + * 1. Test if all the necessary mocks for your tests already exist. + * In mock mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=1 frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * If your command completes without errors and with the expected results, + * all the required mocks already exist and you are good to write your + * test and skip to step #4. + * + * If, however, your command fails and you see errors like the one below, + * you know you need to record the mock responses first: + * + * [Polly] [adapter:node-http] Recording for the following request is not found and `recordIfMissing` is `false`. + * + * 2. Record mock responses for your exact command. + * In mock record mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=record frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * Wait until you see all the Polly instances (mock recording adapters) have + * shutdown before you try to run step #1 again. + * Messages like these indicate mock recording adapters shutting down: + * + * Polly instance 'conn/4' stopping in 3s... + * Polly instance 'conn/4' stopping in 2s... + * Polly instance 'conn/save/3' stopping in 3s... + * Polly instance 'conn/4' stopping in 1s... + * Polly instance 'conn/save/3' stopping in 2s... + * Polly instance 'conn/4' stopped. + * Polly instance 'conn/save/3' stopping in 1s... + * Polly instance 'conn/save/3' stopped. + * + * 3. Validate your freshly recorded mock responses are complete and working. + * Re-run the exact command you want to test in mock mode (see step #1). + * + * 4. Write your test. + * Make sure to use the exact command including number of arguments and params. + * + * 5. Commit both your test and your new recordings to the repository. + * Your tests are likely going to reside outside the frodo-lib project but + * the recordings must be committed to the frodo-lib project. + */ + +/* +// ForgeOps +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push secrets -D test/e2e/exports/fr-config-manager/forgeops -m cloud +*/ + +import cp from 'child_process'; +import { promisify } from 'util'; +import { getEnv, removeAnsiEscapeCodes } from './utils/TestUtils'; +import { connection as c } from './utils/TestConfig'; + +const exec = promisify(cp.exec); + +process.env['FRODO_MOCK'] = '1'; +const cloudEnv = getEnv(c); + +const allDirectory = "test/e2e/exports/fr-config-manager/forgeops"; + +describe('frodo config-manager push secrets', () => { + test(`"frodo config-manager push secrets -D ${allDirectory} -m cloud": should import the secrets into cloud"`, async () => { + const CMD = `frodo config-manager push secrets -D ${allDirectory} -m cloud`; + const { stdout } = await exec(CMD, cloudEnv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); +}); \ No newline at end of file diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-osaic-fradmin-serviceclient-secret.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-osaic-fradmin-serviceclient-secret.json new file mode 100644 index 000000000..b0cf925f2 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-osaic-fradmin-serviceclient-secret.json @@ -0,0 +1,7 @@ +{ + "_id": "esv-osaic-fradmin-serviceclient-secret", + "description": "Used in OSUserLogin journey. Not sure what this is used for.\n\n1/12/2026 Dylan Berry", + "encoding": "generic", + "useInPlaceholders": true, + "valueBase64": "${ESV_OSAIC_FRADMIN_SERVICECLIENT_SECRET}" +} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-id.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-id.json new file mode 100644 index 000000000..aa8e000f2 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-id.json @@ -0,0 +1,7 @@ +{ + "_id": "esv-push-aws-sns-access-key-id", + "description": "", + "encoding": "generic", + "useInPlaceholders": true, + "valueBase64": "${ESV_PUSH_AWS_SNS_ACCESS_KEY_ID}" +} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-secret.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-secret.json new file mode 100644 index 000000000..fd9682b03 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-secret.json @@ -0,0 +1,7 @@ +{ + "_id": "esv-push-aws-sns-access-key-secret", + "description": "", + "encoding": "generic", + "useInPlaceholders": true, + "valueBase64": "${ESV_PUSH_AWS_SNS_ACCESS_KEY_SECRET}" +} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-id.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-id.json new file mode 100644 index 000000000..5e1c4e7c4 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-id.json @@ -0,0 +1,7 @@ +{ + "_id": "esv-sns-access-key-id", + "description": "", + "encoding": "generic", + "useInPlaceholders": true, + "valueBase64": "${ESV_SNS_ACCESS_KEY_ID}" +} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-secret.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-secret.json new file mode 100644 index 000000000..7f6809c2a --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-secret.json @@ -0,0 +1,7 @@ +{ + "_id": "esv-sns-access-key-secret", + "description": "", + "encoding": "generic", + "useInPlaceholders": true, + "valueBase64": "${ESV_SNS_ACCESS_KEY_SECRET}" +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/am_1076162899/recording.har new file mode 100644 index 000000000..10fad1e7b --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/am_1076162899/recording.har @@ -0,0 +1,631 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_D_m/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-855b2dcb-c346-4ee7-be57-256b8b2782c2" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 370, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 587, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 587, + "text": "{\"_id\":\"*\",\"_rev\":\"2075994313\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"iPlanetDirectoryPro\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"nodeDesignerXuiEnabled\":true}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "587" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"2075994313\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 631, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:32:59.958Z", + "time": 24, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 24 + } + }, + { + "_id": "9f5671275c36a1c0090d0df26ce0e93f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-855b2dcb-c346-4ee7-be57-256b8b2782c2" + }, + { + "name": "accept-api-version", + "value": "resource=2.0, protocol=1.0" + }, + { + "name": "x-openam-username", + "value": "amadmin" + }, + { + "name": "x-openam-password", + "value": "41ghjnKpNFAFU/HXw82HbFbitYNOOJ0g" + }, + { + "name": "content-length", + "value": "2" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 497, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/realms/root/authenticate" + }, + "response": { + "bodySize": 167, + "content": { + "mimeType": "application/json", + "size": 167, + "text": "{\"tokenId\":\"\",\"successUrl\":\"/am/console\",\"realm\":\"/\"}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + }, + { + "httpOnly": true, + "name": "iPlanetDirectoryPro", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + }, + { + "httpOnly": true, + "name": "amlbcookie", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "content-length", + "value": "167" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "iPlanetDirectoryPro=; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "amlbcookie=; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=2.1" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 693, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:32:59.991Z", + "time": 28, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 28 + } + }, + { + "_id": "6a3744385d3fd7416ea7089e610fa7e7", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 128, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-855b2dcb-c346-4ee7-be57-256b8b2782c2" + }, + { + "name": "accept-api-version", + "value": "resource=4.0" + }, + { + "name": "content-length", + "value": "128" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 424, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"tokenId\":\"\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "getSessionInfo" + } + ], + "url": "https://platform.dev.trivir.com/am/json/realms/root/sessions/?_action=getSessionInfo" + }, + "response": { + "bodySize": 291, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 291, + "text": "{\"username\":\"amadmin\",\"universalId\":\"id=amadmin,ou=user,ou=am-config\",\"realm\":\"/\",\"latestAccessTime\":\"2026-03-13T19:32:58Z\",\"maxIdleExpirationTime\":\"2026-03-13T20:02:58Z\",\"maxSessionExpirationTime\":\"2026-03-13T21:32:57Z\",\"properties\":{\"AMCtxId\":\"131ba34f-c775-497f-b770-09af0f2dbef6-51462\"}}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "291" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=4.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 610, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:33:00.030Z", + "time": 10, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 10 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-855b2dcb-c346-4ee7-be57-256b8b2782c2" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 520, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 257, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 257, + "text": "{\"_id\":\"version\",\"_rev\":\"-466575464\",\"version\":\"8.0.1\",\"fullVersion\":\"ForgeRock Access Management 8.0.1 Build b59bc0908346197b0c33afcb9e733d0400feeea1 (2025-April-15 11:37)\",\"revision\":\"b59bc0908346197b0c33afcb9e733d0400feeea1\",\"date\":\"2025-April-15 11:37\"}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "257" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-466575464\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 631, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:33:00.055Z", + "time": 8, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 8 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/environment_1072573434/recording.har new file mode 100644 index 000000000..91b7fa31e --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/environment_1072573434/recording.har @@ -0,0 +1,514 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_D_m/environment", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "816cc699f6f22e5bd145f4c6a4258b9c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 198, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "198" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 422, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"Used in OSUserLogin journey. Not sure what this is used for.\\n\\n1/12/2026 Dylan Berry\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/environment/secrets/esv-osaic-fradmin-serviceclient-secret" + }, + "response": { + "bodySize": 146, + "content": { + "mimeType": "text/html", + "size": 146, + "text": "\r\n404 Not Found\r\n\r\n

404 Not Found

\r\n
nginx
\r\n\r\n\r\n" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "text/html" + }, + { + "name": "content-length", + "value": "146" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 173, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 404, + "statusText": "Not Found" + }, + "startedDateTime": "2026-03-13T19:33:00.146Z", + "time": 2, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 2 + } + }, + { + "_id": "563d49c758720f5b2532c03090d4276e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 414, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/environment/secrets/esv-push-aws-sns-access-key-id" + }, + "response": { + "bodySize": 146, + "content": { + "mimeType": "text/html", + "size": 146, + "text": "\r\n404 Not Found\r\n\r\n

404 Not Found

\r\n
nginx
\r\n\r\n\r\n" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "text/html" + }, + { + "name": "content-length", + "value": "146" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 173, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 404, + "statusText": "Not Found" + }, + "startedDateTime": "2026-03-13T19:33:00.157Z", + "time": 3, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 3 + } + }, + { + "_id": "82a501dce1692c1ac484e6c6ebd1dc31", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 418, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/environment/secrets/esv-push-aws-sns-access-key-secret" + }, + "response": { + "bodySize": 146, + "content": { + "mimeType": "text/html", + "size": 146, + "text": "\r\n404 Not Found\r\n\r\n

404 Not Found

\r\n
nginx
\r\n\r\n\r\n" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "text/html" + }, + { + "name": "content-length", + "value": "146" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 173, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 404, + "statusText": "Not Found" + }, + "startedDateTime": "2026-03-13T19:33:00.167Z", + "time": 3, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 3 + } + }, + { + "_id": "f5e9ea027a198dc9fc57c89b89ca289c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 405, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/environment/secrets/esv-sns-access-key-id" + }, + "response": { + "bodySize": 146, + "content": { + "mimeType": "text/html", + "size": 146, + "text": "\r\n404 Not Found\r\n\r\n

404 Not Found

\r\n
nginx
\r\n\r\n\r\n" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "text/html" + }, + { + "name": "content-length", + "value": "146" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 173, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 404, + "statusText": "Not Found" + }, + "startedDateTime": "2026-03-13T19:33:00.175Z", + "time": 2, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 2 + } + }, + { + "_id": "c72e65b84ca522764db84f0cb2bc59d5", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 409, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/environment/secrets/esv-sns-access-key-secret" + }, + "response": { + "bodySize": 146, + "content": { + "mimeType": "text/html", + "size": 146, + "text": "\r\n404 Not Found\r\n\r\n

404 Not Found

\r\n
nginx
\r\n\r\n\r\n" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "text/html" + }, + { + "name": "content-length", + "value": "146" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 173, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 404, + "statusText": "Not Found" + }, + "startedDateTime": "2026-03-13T19:33:00.184Z", + "time": 2, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 2 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/oauth2_393036114/recording.har new file mode 100644 index 000000000..27af06d35 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_m_314327836/oauth2_393036114/recording.har @@ -0,0 +1,289 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_D_m/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "a684e2f67fd67a4263878c3124af167a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 365, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-855b2dcb-c346-4ee7-be57-256b8b2782c2" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "content-length", + "value": "365" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 565, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&scope=fr:idm:* openid&response_type=code&client_id=idm-admin-ui&csrf=GZqVUEJDU7_myXMg4afwsIkdjJc.*AAJTSQACMDIAAlNLABxxT1FHM1Q3cWNlc0wwUEFVNk9NWjhPN1lZMzQ9AAR0eXBlAANDVFMAAlMxAAIwMQ..*&decision=allow&code_challenge=thuzUVxQXi59AlU229K7jSNb0d6cersukH6m7fF1wl8&code_challenge_method=S256" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/oauth2/authorize" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + }, + { + "expires": "1970-01-01T00:00:00.000Z", + "httpOnly": true, + "name": "OAUTH_REQUEST_ATTRIBUTES", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "OAUTH_REQUEST_ATTRIBUTES=; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "location", + "value": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=wILMmrk-bOAgIAS3LjgDbrMt3uQ&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 673, + "httpVersion": "HTTP/1.1", + "redirectURL": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=wILMmrk-bOAgIAS3LjgDbrMt3uQ&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui", + "status": 302, + "statusText": "Found" + }, + "startedDateTime": "2026-03-13T19:33:00.071Z", + "time": 19, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 19 + } + }, + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 224, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-855b2dcb-c346-4ee7-be57-256b8b2782c2" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "224" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 424, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "client_id=idm-admin-ui&redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&grant_type=authorization_code&code=wILMmrk-bOAgIAS3LjgDbrMt3uQ&code_verifier=b4C_2jMrNKeu94X2uVwIKQus3COwPwSTY6xZuFnetas" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1249, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1249, + "text": "{\"access_token\":\"\",\"scope\":\"openid fr:idm:*\",\"id_token\":\"\",\"token_type\":\"Bearer\",\"expires_in\":239}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:32:58 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1249" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 404, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:33:00.096Z", + "time": 42, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 42 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/default_2470140894/recording.har b/test/e2e/mocks/default_2470140894/recording.har new file mode 100644 index 000000000..5d6e8b817 --- /dev/null +++ b/test/e2e/mocks/default_2470140894/recording.har @@ -0,0 +1,2338 @@ +{ + "log": { + "_recordingName": "default", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a12871e-e915-4c10-ac82-8fe47bb2a05f" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 388, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a12871e-e915-4c10-ac82-8fe47bb2a05f" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 787, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:45.332Z", + "time": 117, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 117 + } + }, + { + "_id": "322b3145be067ea6a89b81f04628602c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1362, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a12871e-e915-4c10-ac82-8fe47bb2a05f" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1362" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 443, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:ws:admin fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:analytics:* fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:dataset:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1884, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1884, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:ws:admin fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:analytics:* fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:dataset:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1884" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a12871e-e915-4c10-ac82-8fe47bb2a05f" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 561, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:45.466Z", + "time": 105, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 105 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a12871e-e915-4c10-ac82-8fe47bb2a05f" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1980, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 280, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 280, + "text": "{\"_id\":\"version\",\"_rev\":\"103025458\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 363328899230d72a7c5f4fdd6cafc3675d109ccd (2026-February-13 10:03)\",\"revision\":\"363328899230d72a7c5f4fdd6cafc3675d109ccd\",\"date\":\"2026-February-13 10:03\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"103025458\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "280" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a12871e-e915-4c10-ac82-8fe47bb2a05f" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 786, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:45.579Z", + "time": 73, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 73 + } + }, + { + "_id": "3631cfb75061a35339b442a95d4f2fb2", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a12871e-e915-4c10-ac82-8fe47bb2a05f" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1992, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/810dd2f4-874b-4aad-9e0a-f8a57789f182?_fields=%2A" + }, + "response": { + "bodySize": 1408, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1408, + "text": "{\"_id\":\"810dd2f4-874b-4aad-9e0a-f8a57789f182\",\"_rev\":\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1773261131370\",\"description\":\"phales@trivir.com's Frodo Service Account\",\"scopes\":[\"fr:am:*\",\"fr:idc:analytics:*\",\"fr:autoaccess:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:cookie-domain:*\",\"fr:idc:custom-domain:*\",\"fr:idc:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\",\"fr:idc:ws:admin\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"GIyq6foAjk7VGtM7NyJQZMEUxtAgSe02sjjgp4ey4go\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"rBa78YjWw5-Hkd2rP8uuY2fikjMf9FVeP2AUabFL2qqgVCJxs035yKQDlMAYAFnKaSUXME0vXhZKNkP5ZsWdYAl_sS-0o8HBO4AQk8dXSB--NnkPd0S-6c-sb01oy5tet1WFiKI8dfhzH9KZ65oy3ouzaSsnTjIpFQNMVaq1qQE3m2gPnmwMoRQZdP_hClkXMTtkdRapTL_cdxw7tYGGwpjFz2IJRX-fjFpE79NZdQ_dUaeWOm3tnoHAHjh01IrFu7qlT0o5Bf7-gDvoXU3eYAy5D9LcZAeXr8DiEqK-2aBltV43JSk-Z119DQhRUOFOVMlfbZzHYcWlMgPHBnneleAzChhaDnTxd3NGfqF329wfxQHUaGdj7-eVlXEEYIxmzVwFOiEK0ogEtyvkrlYqQiarxSGt1teNShBpb2QtKL4UPLh7ufxe6K961QuL-FmCkKbjGFxYY0PTegeIsf3rYTNKJRpADC9rGPDF67c5yuMbbBZU9G_GRq5Lj8yS5vG94oCM7PGmKzxxavS7neBu0BH6cqn_u6kuvbfcLtmszo7JqMnY6SqPIp0PU1wfizkjeXKG0s_6rtqQ57pH5IpZTUYwCrtkqcOLEColrUwort43MY12P-ELDuq-IaZFRxJWn8A9dqplVJzOQViUfHHtTVu5W2KiumLSXsxWUsQTb8E\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:45 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1408" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a12871e-e915-4c10-ac82-8fe47bb2a05f" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:45.628Z", + "time": 126, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 126 + } + }, + { + "_id": "ccc7ec61c2094114d7917814bb19b83b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1931, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/scopes/service-accounts" + }, + "response": { + "bodySize": 1975, + "content": { + "mimeType": "application/json; charset=utf-8", + "size": 1975, + "text": "[{\"scope\":\"fr:am:*\",\"description\":\"All Access Management APIs\"},{\"scope\":\"fr:autoaccess:*\",\"description\":\"All Auto Access APIs\"},{\"scope\":\"fr:idc:analytics:*\",\"description\":\"All Analytics APIs\"},{\"scope\":\"fr:idc:certificate:*\",\"description\":\"All TLS certificate APIs\",\"childScopes\":[{\"scope\":\"fr:idc:certificate:read\",\"description\":\"Read TLS certificates\"}]},{\"scope\":\"fr:idc:content-security-policy:*\",\"description\":\"All content security policy APIs\",\"childScopes\":[{\"scope\":\"fr:idc:content-security-policy:read\",\"description\":\"Read content security policy\"}]},{\"scope\":\"fr:idc:cookie-domain:*\",\"description\":\"All cookie domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:cookie-domain:read\",\"description\":\"Read cookie domains\"}]},{\"scope\":\"fr:idc:custom-domain:*\",\"description\":\"All custom domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:custom-domain:read\",\"description\":\"Read custom domains\"}]},{\"scope\":\"fr:idc:dataset:*\",\"description\":\"All dataset deletion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:dataset:read\",\"description\":\"Read dataset deletions\"}]},{\"scope\":\"fr:idc:esv:*\",\"description\":\"All ESV APIs\",\"childScopes\":[{\"scope\":\"fr:idc:esv:read\",\"description\":\"Read ESVs, excluding values of secrets\"},{\"scope\":\"fr:idc:esv:update\",\"description\":\"Create, modify, and delete ESVs\"},{\"scope\":\"fr:idc:esv:restart\",\"description\":\"Restart workloads that consume ESVs\"}]},{\"scope\":\"fr:idc:promotion:*\",\"description\":\"All configuration promotion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:promotion:read\",\"description\":\"Read configuration promotion\"}]},{\"scope\":\"fr:idc:release:*\",\"description\":\"All product release APIs\",\"childScopes\":[{\"scope\":\"fr:idc:release:read\",\"description\":\"Read product release\"}]},{\"scope\":\"fr:idc:sso-cookie:*\",\"description\":\"All SSO cookie APIs\",\"childScopes\":[{\"scope\":\"fr:idc:sso-cookie:read\",\"description\":\"Read SSO cookie\"}]},{\"scope\":\"fr:idc:ws:admin\",\"description\":\"All PingFederate APIs\"},{\"scope\":\"fr:idm:*\",\"description\":\"All Identity Management APIs\"}]" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "1975" + }, + { + "name": "etag", + "value": "W/\"7b7-9oeZSONSS8Sn+SSr15TXAygvvcE\"" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "05a1c734-314c-499c-b2c5-a27061553c0d" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 413, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:45.660Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "816cc699f6f22e5bd145f4c6a4258b9c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 198, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "198" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1975, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"Used in OSUserLogin journey. Not sure what this is used for.\\n\\n1/12/2026 Dylan Berry\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-osaic-fradmin-serviceclient-secret" + }, + "response": { + "bodySize": 76, + "content": { + "mimeType": "application/json", + "size": 76, + "text": "{\"code\":400,\"message\":\"Failed to create secret, the secret already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:46 GMT" + }, + { + "name": "content-length", + "value": "76" + }, + { + "name": "x-forgerock-transactionid", + "value": "685dea75-4492-4f20-b89b-1b1d8314935e" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 324, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2026-03-13T19:52:45.786Z", + "time": 240, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 240 + } + }, + { + "_id": "68670a919d6931f1dadaf884a0c62966", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 103, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "103" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1999, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"description\":\"Used in OSUserLogin journey. Not sure what this is used for.\\n\\n1/12/2026 Dylan Berry\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "setDescription" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-osaic-fradmin-serviceclient-secret?_action=setDescription" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:46 GMT" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "x-forgerock-transactionid", + "value": "61831c9d-3ab1-4e32-aa31-8642be2fdeb6" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 291, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:46.035Z", + "time": 605, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 605 + } + }, + { + "_id": "5bd7f1b2add5f52266ba9cb4f5b5114c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-osaic-fradmin-serviceclient-secret" + }, + "response": { + "bodySize": 339, + "content": { + "mimeType": "application/json", + "size": 339, + "text": "{\"_id\":\"esv-osaic-fradmin-serviceclient-secret\",\"activeVersion\":\"1\",\"description\":\"Used in OSUserLogin journey. Not sure what this is used for.\\n\\n1/12/2026 Dylan Berry\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-03-13T19:30:38.743047Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":false,\"loadedVersion\":\"\",\"useInPlaceholders\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:46 GMT" + }, + { + "name": "content-length", + "value": "339" + }, + { + "name": "x-forgerock-transactionid", + "value": "a30ba7d3-9877-43b5-b1ea-3cba2052c5b0" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:46.659Z", + "time": 155, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 155 + } + }, + { + "_id": "563d49c758720f5b2532c03090d4276e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1967, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-push-aws-sns-access-key-id" + }, + "response": { + "bodySize": 76, + "content": { + "mimeType": "application/json", + "size": 76, + "text": "{\"code\":400,\"message\":\"Failed to create secret, the secret already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:47 GMT" + }, + { + "name": "content-length", + "value": "76" + }, + { + "name": "x-forgerock-transactionid", + "value": "2f7e5d1e-abc9-4703-844f-0dc0d01525d0" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 324, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2026-03-13T19:52:46.824Z", + "time": 266, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 266 + } + }, + { + "_id": "cfe4b481736e534bfea5f8128119b472", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 18, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "18" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1990, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"description\":\"\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "setDescription" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-push-aws-sns-access-key-id?_action=setDescription" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:47 GMT" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "x-forgerock-transactionid", + "value": "f4168fb7-a2a6-437d-903c-149170150c23" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 291, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:47.113Z", + "time": 431, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 431 + } + }, + { + "_id": "aad1b3818ec0e184fa219a6137a748f0", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1946, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-push-aws-sns-access-key-id" + }, + "response": { + "bodySize": 246, + "content": { + "mimeType": "application/json", + "size": 246, + "text": "{\"_id\":\"esv-push-aws-sns-access-key-id\",\"activeVersion\":\"1\",\"description\":\"\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-03-13T19:30:39.673227Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":false,\"loadedVersion\":\"\",\"useInPlaceholders\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:47 GMT" + }, + { + "name": "content-length", + "value": "246" + }, + { + "name": "x-forgerock-transactionid", + "value": "faeeb37b-5520-4118-8219-d7bd9f0a7821" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:47.560Z", + "time": 151, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 151 + } + }, + { + "_id": "82a501dce1692c1ac484e6c6ebd1dc31", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1971, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-push-aws-sns-access-key-secret" + }, + "response": { + "bodySize": 76, + "content": { + "mimeType": "application/json", + "size": 76, + "text": "{\"code\":400,\"message\":\"Failed to create secret, the secret already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:48 GMT" + }, + { + "name": "content-length", + "value": "76" + }, + { + "name": "x-forgerock-transactionid", + "value": "c72b45c3-c249-486a-b54b-fc58835593aa" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 324, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2026-03-13T19:52:47.723Z", + "time": 296, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 296 + } + }, + { + "_id": "f364e1f67a4357d2bac1314ae6300cd9", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 18, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "18" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1994, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"description\":\"\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "setDescription" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-push-aws-sns-access-key-secret?_action=setDescription" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:48 GMT" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "x-forgerock-transactionid", + "value": "df962dd8-a1cf-4b59-9792-540b2fca8bce" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 291, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:48.033Z", + "time": 465, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 465 + } + }, + { + "_id": "a43c33dc9aa195d4c822f0ebbf960ecd", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1950, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-push-aws-sns-access-key-secret" + }, + "response": { + "bodySize": 250, + "content": { + "mimeType": "application/json", + "size": 250, + "text": "{\"_id\":\"esv-push-aws-sns-access-key-secret\",\"activeVersion\":\"1\",\"description\":\"\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-03-13T19:30:40.637978Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":false,\"loadedVersion\":\"\",\"useInPlaceholders\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:48 GMT" + }, + { + "name": "content-length", + "value": "250" + }, + { + "name": "x-forgerock-transactionid", + "value": "c5ba41a6-d578-473f-9c4e-fdd52432a69b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:48.514Z", + "time": 158, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 158 + } + }, + { + "_id": "f5e9ea027a198dc9fc57c89b89ca289c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1958, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-sns-access-key-id" + }, + "response": { + "bodySize": 76, + "content": { + "mimeType": "application/json", + "size": 76, + "text": "{\"code\":400,\"message\":\"Failed to create secret, the secret already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:48 GMT" + }, + { + "name": "content-length", + "value": "76" + }, + { + "name": "x-forgerock-transactionid", + "value": "e8a8aa7b-36d4-41d7-88bd-8445c899187c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 324, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2026-03-13T19:52:48.677Z", + "time": 252, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 252 + } + }, + { + "_id": "73d0dff5f14a668fd2446cb09da683e0", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 18, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "18" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1981, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"description\":\"\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "setDescription" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-sns-access-key-id?_action=setDescription" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:49 GMT" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "x-forgerock-transactionid", + "value": "a64d742d-7d3a-42dc-9948-c2539bf736fa" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 291, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:48.944Z", + "time": 499, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 499 + } + }, + { + "_id": "f8628163528ed660925b6ea220a47b28", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1937, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-sns-access-key-id" + }, + "response": { + "bodySize": 237, + "content": { + "mimeType": "application/json", + "size": 237, + "text": "{\"_id\":\"esv-sns-access-key-id\",\"activeVersion\":\"1\",\"description\":\"\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-03-13T19:30:41.602432Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":false,\"loadedVersion\":\"\",\"useInPlaceholders\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:49 GMT" + }, + { + "name": "content-length", + "value": "237" + }, + { + "name": "x-forgerock-transactionid", + "value": "0f7e10c0-6e34-4db8-8add-d2e482d3dc01" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:49.464Z", + "time": 150, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 150 + } + }, + { + "_id": "c72e65b84ca522764db84f0cb2bc59d5", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1962, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"cGxhY2Vob2xkZXIgc2VjcmV0IHZhbHVl\",\"description\":\"\",\"encoding\":\"generic\",\"useInPlaceholders\":true}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-sns-access-key-secret" + }, + "response": { + "bodySize": 76, + "content": { + "mimeType": "application/json", + "size": 76, + "text": "{\"code\":400,\"message\":\"Failed to create secret, the secret already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:49 GMT" + }, + { + "name": "content-length", + "value": "76" + }, + { + "name": "x-forgerock-transactionid", + "value": "2ff24644-6b2e-4bf1-970e-7f7a80585fa4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 324, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2026-03-13T19:52:49.631Z", + "time": 236, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 236 + } + }, + { + "_id": "0d4df37c3527862faff9963480cd6514", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 18, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "18" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1985, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"description\":\"\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "setDescription" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-sns-access-key-secret?_action=setDescription" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:50 GMT" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "x-forgerock-transactionid", + "value": "0704a73c-3a50-4367-8d0c-9767940cc68b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 291, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:49.879Z", + "time": 722, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 722 + } + }, + { + "_id": "8d3ec55575ec12059cc0c762c49c4fa2", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1941, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-sns-access-key-secret" + }, + "response": { + "bodySize": 241, + "content": { + "mimeType": "application/json", + "size": 241, + "text": "{\"_id\":\"esv-sns-access-key-secret\",\"activeVersion\":\"1\",\"description\":\"\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-03-13T19:30:42.847978Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":false,\"loadedVersion\":\"\",\"useInPlaceholders\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 13 Mar 2026 19:52:50 GMT" + }, + { + "name": "content-length", + "value": "241" + }, + { + "name": "x-forgerock-transactionid", + "value": "0629d1bc-32f1-4ea2-b7d0-6499222a296f" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-13T19:52:50.618Z", + "time": 149, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 149 + } + } + ], + "pages": [], + "version": "1.2" + } +} From 86a68fa236d128cc08ad5954e173e883ef9b6421 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Tue, 31 Mar 2026 14:46:00 -0600 Subject: [PATCH 2/6] Add test secrets --- .../secrets/esv-osaic-fradmin-serviceclient-secret.json | 7 ------- .../esvs/secrets/esv-push-aws-sns-access-key-id.json | 7 ------- .../esvs/secrets/esv-push-aws-sns-access-key-secret.json | 7 ------- .../forgeops/esvs/secrets/esv-sns-access-key-id.json | 7 ------- .../forgeops/esvs/secrets/esv-sns-access-key-secret.json | 7 ------- .../fr-config-manager/forgeops/esvs/secrets/esv-test.json | 7 +++++++ 6 files changed, 7 insertions(+), 35 deletions(-) delete mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-osaic-fradmin-serviceclient-secret.json delete mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-id.json delete mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-secret.json delete mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-id.json delete mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-secret.json create mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-test.json diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-osaic-fradmin-serviceclient-secret.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-osaic-fradmin-serviceclient-secret.json deleted file mode 100644 index b0cf925f2..000000000 --- a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-osaic-fradmin-serviceclient-secret.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "_id": "esv-osaic-fradmin-serviceclient-secret", - "description": "Used in OSUserLogin journey. Not sure what this is used for.\n\n1/12/2026 Dylan Berry", - "encoding": "generic", - "useInPlaceholders": true, - "valueBase64": "${ESV_OSAIC_FRADMIN_SERVICECLIENT_SECRET}" -} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-id.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-id.json deleted file mode 100644 index aa8e000f2..000000000 --- a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-id.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "_id": "esv-push-aws-sns-access-key-id", - "description": "", - "encoding": "generic", - "useInPlaceholders": true, - "valueBase64": "${ESV_PUSH_AWS_SNS_ACCESS_KEY_ID}" -} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-secret.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-secret.json deleted file mode 100644 index fd9682b03..000000000 --- a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-push-aws-sns-access-key-secret.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "_id": "esv-push-aws-sns-access-key-secret", - "description": "", - "encoding": "generic", - "useInPlaceholders": true, - "valueBase64": "${ESV_PUSH_AWS_SNS_ACCESS_KEY_SECRET}" -} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-id.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-id.json deleted file mode 100644 index 5e1c4e7c4..000000000 --- a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-id.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "_id": "esv-sns-access-key-id", - "description": "", - "encoding": "generic", - "useInPlaceholders": true, - "valueBase64": "${ESV_SNS_ACCESS_KEY_ID}" -} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-secret.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-secret.json deleted file mode 100644 index 7f6809c2a..000000000 --- a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-sns-access-key-secret.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "_id": "esv-sns-access-key-secret", - "description": "", - "encoding": "generic", - "useInPlaceholders": true, - "valueBase64": "${ESV_SNS_ACCESS_KEY_SECRET}" -} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-test.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-test.json new file mode 100644 index 000000000..cad16dc61 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-test.json @@ -0,0 +1,7 @@ +{ + "_id": "esv-test", + "description": "test", + "encoding": "generic", + "useInPlaceholders": true, + "valueBase64": "${ESV_TEST}" +} From 086d9efbace5fb6609961854a36fcd57ca7adf89 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Wed, 10 Jun 2026 10:32:32 -0600 Subject: [PATCH 3/6] Add resolve place holder and support .env files for secret imports --- .../config-manager-push-secrets.ts | 19 +- src/configManagerOps/FrConfigSecretOps.ts | 170 +++++- ...nfig-manager-push-secrets.e2e.test.js.snap | 4 +- .../config-manager-push-secrets.e2e.test.js | 16 +- .../esvs/secrets/esv-fr-test-secret.json | 7 + .../cloud/esvs/secrets/esv-test-secret.json | 7 + .../forgeops/esvs/secrets/esv-test.json | 7 - .../am_1076162899/recording.har | 312 ++++++++++ .../environment_1072573434/recording.har | 565 ++++++++++++++++++ .../oauth2_393036114/recording.har | 146 +++++ .../openidm_3290118515/recording.har | 310 ++++++++++ .../am_1076162899/recording.har | 312 ++++++++++ .../environment_1072573434/recording.har | 345 +++++++++++ .../oauth2_393036114/recording.har | 146 +++++ .../openidm_3290118515/recording.har | 310 ++++++++++ 15 files changed, 2645 insertions(+), 31 deletions(-) create mode 100644 test/e2e/exports/fr-config-manager/cloud/esvs/secrets/esv-fr-test-secret.json create mode 100644 test/e2e/exports/fr-config-manager/cloud/esvs/secrets/esv-test-secret.json delete mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-test.json create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/openidm_3290118515/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/openidm_3290118515/recording.har diff --git a/src/cli/config-manager/config-manager-push/config-manager-push-secrets.ts b/src/cli/config-manager/config-manager-push/config-manager-push-secrets.ts index 3ed2e63c7..6107ca80f 100644 --- a/src/cli/config-manager/config-manager-push/config-manager-push-secrets.ts +++ b/src/cli/config-manager/config-manager-push/config-manager-push-secrets.ts @@ -1,4 +1,5 @@ import { frodo } from '@rockcarver/frodo-lib'; +import { Option } from 'commander'; import { configManagerImportSecrets } from '../../../configManagerOps/FrConfigSecretOps'; import { getTokens } from '../../../ops/AuthenticateOps'; @@ -22,6 +23,19 @@ export default function setup() { program .description('Import secrets.') + .addOption( + new Option( + '-n, --name ', + 'Secret name; import only the specified secret' + ) + ) + .addOption( + new Option( + '-e, --env ', + 'Value to set for the secret. Will override .env files and environment variables.' + ) + ) + .action(async (host, realm, user, password, options, command) => { command.handleDefaultArgsAndOpts( host, @@ -34,7 +48,10 @@ export default function setup() { if (await getTokens(false, true, deploymentTypes)) { verboseMessage('Importing secrets'); - const outcome = await configManagerImportSecrets(); + const outcome = await configManagerImportSecrets( + options.name, + options.env + ); if (!outcome) process.exitCode = 1; } // unrecognized combination of options or no options diff --git a/src/configManagerOps/FrConfigSecretOps.ts b/src/configManagerOps/FrConfigSecretOps.ts index 0573bf412..c1d5d4ab7 100644 --- a/src/configManagerOps/FrConfigSecretOps.ts +++ b/src/configManagerOps/FrConfigSecretOps.ts @@ -1,4 +1,4 @@ -import { frodo } from '@rockcarver/frodo-lib'; +import { frodo, FrodoError } from '@rockcarver/frodo-lib'; import { SecretSkeleton } from '@rockcarver/frodo-lib/types/api/cloud/SecretsApi'; import { SecretsExportInterface } from '@rockcarver/frodo-lib/types/ops/cloud/SecretsOps'; import fs from 'fs'; @@ -11,7 +11,13 @@ import { } from '../utils/Console'; const { getFilePath, saveJsonToFile } = frodo.utils; -const { readSecrets, exportSecret, importSecret } = frodo.cloud.secret; +const { + readSecrets, + exportSecret, + createSecret, + createVersionOfSecret, + readSecret, +} = frodo.cloud.secret; /** * Export all secrets to individual files in fr-config-manager format @@ -89,30 +95,158 @@ export async function configManagerExportSecrets( return false; } -export async function configManagerImportSecrets(): Promise { +export function loadEnvFile(): Record { + const envPath = getFilePath('.env'); + if (!fs.existsSync(envPath)) { + return {}; + } + const out: Record = {}; + const contents = fs.readFileSync(envPath, 'utf8'); + for (const rawLine of contents.split('\n')) { + const line = rawLine.trim(); + if (!line || line.startsWith('#')) { + continue; + } + const eq = line.indexOf('='); + if (eq === -1) { + continue; + } + const key = line.slice(0, eq).trim(); + let value = line.slice(eq + 1).trim(); + if ( + (value.startsWith('"') && value.endsWith('"')) || + (value.startsWith("'") && value.endsWith("'")) + ) { + value = value.slice(1, -1); + } + if (key) { + out[key] = value; + } + } + return out; +} + +export function resolvePlaceholder( + placeholder: string, + envFile: Record = {} +): string { + const match = placeholder.match(/^\$\{(BASE64:)?(.+)\}$/); + if (!match) { + throw new FrodoError(`Invalid placeholder format: ${placeholder}`); + } + const isBase64 = !!match[1]; + const name = match[2]; + + let value: string; + if (name in envFile) { + value = envFile[name]; + } else if (name in process.env) { + value = process.env[name]; + } else { + throw new FrodoError(`No value found for ${name}`); + } + return isBase64 ? value : Buffer.from(value).toString('base64'); +} + +export async function configManagerImportSecrets( + secretName?: string, + value?: string +): Promise { + const errors = []; + const spinnerId = createProgressIndicator( + 'indeterminate', + 0, + `Reading secrets...` + ); + let indicatorId: string; try { - const secretsDir = getFilePath('esvs/secrets'); - const secretsFiles = fs.readdirSync(secretsDir); + const secretsDir = getFilePath(`esvs/secrets/`); + if (!fs.existsSync(secretsDir)) { + stopProgressIndicator(spinnerId, `No secrets found`, 'fail'); + return true; + } - for (const secretsFile of secretsFiles) { - const filePath = `${secretsDir}/${secretsFile}`; - const readFile = fs.readFileSync(filePath, 'utf-8'); - const importData = JSON.parse(readFile); + const files = fs + .readdirSync(secretsDir) + .filter((name) => name.toLowerCase().endsWith('.json')) + .map((name) => + JSON.parse(fs.readFileSync(`${secretsDir}/${name}`, 'utf8')) + ) + .filter((data) => !secretName || data._id === secretName); - const singleSecretImport: SecretsExportInterface = { - secret: { [importData._id]: importData }, - }; + if (files.length === 0) { + stopProgressIndicator( + spinnerId, + secretName + ? `No matching secret found for ${secretName}` + : 'No secrets found to import', + 'fail' + ); + return true; + } + + stopProgressIndicator( + spinnerId, + `Successfully read ${files.length} secrets.`, + 'success' + ); + + const envFile = loadEnvFile(); + indicatorId = createProgressIndicator( + 'determinate', + files.length, + 'Importing secrets' + ); + + for (const importData of files) { try { - await importSecret(importData._id, singleSecretImport, false); - } catch (err) { - printError(err); + let secretValue: string; + if (value) { + secretValue = value; + } else if (importData.valueBase64) { + secretValue = resolvePlaceholder(importData.valueBase64, envFile); + } else { + throw new FrodoError( + `No value provided for secret ${importData._id}` + ); + } + + let exists = true; + try { + await readSecret(importData._id); + } catch { + exists = false; + } + + if (exists) { + await createVersionOfSecret(importData._id, secretValue); + } else { + await createSecret( + importData._id, + secretValue, + importData.description, + importData.encoding, + importData.useInPlaceholders + ); + } + updateProgressIndicator( + indicatorId, + `Imported secret ${importData._id}` + ); + } catch (error) { + errors.push(error); } } - + + if (errors.length > 0) { + throw new FrodoError(`Error importing secrets`, errors); + } + stopProgressIndicator(indicatorId, `${files.length} secrets imported.`); return true; - } catch (err) { - printError(err); + } catch (error) { + stopProgressIndicator(indicatorId, `Error importing secrets`, 'fail'); + printError(error); return false; } } diff --git a/test/e2e/__snapshots__/config-manager-push-secrets.e2e.test.js.snap b/test/e2e/__snapshots__/config-manager-push-secrets.e2e.test.js.snap index 81a71bacd..97d752cdc 100644 --- a/test/e2e/__snapshots__/config-manager-push-secrets.e2e.test.js.snap +++ b/test/e2e/__snapshots__/config-manager-push-secrets.e2e.test.js.snap @@ -1,3 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`frodo config-manager push secrets "frodo config-manager push secrets -D test/e2e/exports/fr-config-manager/forgeops -m cloud": should import the secrets into cloud" 1`] = `""`; +exports[`frodo config-manager push secrets "frodo config-manager push secrets -D test/e2e/exports/fr-config-manager/cloud ": should import the secrets into cloud" 1`] = `""`; + +exports[`frodo config-manager push secrets "frodo config-manager push secrets -n esv-fr-test-secret -e my-test-value test/e2e/exports/fr-config-manager/cloud": should import the specified secret into cloud 1`] = `""`; diff --git a/test/e2e/config-manager-push-secrets.e2e.test.js b/test/e2e/config-manager-push-secrets.e2e.test.js index 1023fa4ec..0ff623f5a 100644 --- a/test/e2e/config-manager-push-secrets.e2e.test.js +++ b/test/e2e/config-manager-push-secrets.e2e.test.js @@ -48,7 +48,10 @@ /* // ForgeOps -FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push secrets -D test/e2e/exports/fr-config-manager/forgeops -m cloud +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push secrets -D test/e2e/exports/fr-config-manager/cloud +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push secrets -n esv-fr-test-secret -e my-test-value -D test/e2e/exports/fr-config-manager/cloud + + */ import cp from 'child_process'; @@ -61,11 +64,16 @@ const exec = promisify(cp.exec); process.env['FRODO_MOCK'] = '1'; const cloudEnv = getEnv(c); -const allDirectory = "test/e2e/exports/fr-config-manager/forgeops"; +const allDirectory = "test/e2e/exports/fr-config-manager/cloud"; describe('frodo config-manager push secrets', () => { - test(`"frodo config-manager push secrets -D ${allDirectory} -m cloud": should import the secrets into cloud"`, async () => { - const CMD = `frodo config-manager push secrets -D ${allDirectory} -m cloud`; + test(`"frodo config-manager push secrets -D ${allDirectory} ": should import the secrets into cloud"`, async () => { + const CMD = `frodo config-manager push secrets -D ${allDirectory} `; + const { stdout } = await exec(CMD, cloudEnv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + test(`"frodo config-manager push secrets -n esv-fr-test-secret -e my-test-value ${allDirectory}": should import the specified secret into cloud`, async () => { + const CMD = `frodo config-manager push secrets -n esv-fr-test-secret -e my-test-value -D ${allDirectory}`; const { stdout } = await exec(CMD, cloudEnv); expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); }); diff --git a/test/e2e/exports/fr-config-manager/cloud/esvs/secrets/esv-fr-test-secret.json b/test/e2e/exports/fr-config-manager/cloud/esvs/secrets/esv-fr-test-secret.json new file mode 100644 index 000000000..89628e2bd --- /dev/null +++ b/test/e2e/exports/fr-config-manager/cloud/esvs/secrets/esv-fr-test-secret.json @@ -0,0 +1,7 @@ +{ + "_id": "esv-fr-test-secret", + "description": "this is a fr-config manager test secret", + "encoding": "generic", + "useInPlaceholders": true, + "valueBase64": "${ESV_FR_TEST_SECRET}" +} diff --git a/test/e2e/exports/fr-config-manager/cloud/esvs/secrets/esv-test-secret.json b/test/e2e/exports/fr-config-manager/cloud/esvs/secrets/esv-test-secret.json new file mode 100644 index 000000000..765387057 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/cloud/esvs/secrets/esv-test-secret.json @@ -0,0 +1,7 @@ +{ + "_id": "esv-test-secret", + "description": "This is a frodo test", + "encoding": "generic", + "useInPlaceholders": true, + "valueBase64": "${ESV_TEST_SECRET}" +} diff --git a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-test.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-test.json deleted file mode 100644 index cad16dc61..000000000 --- a/test/e2e/exports/fr-config-manager/forgeops/esvs/secrets/esv-test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "_id": "esv-test", - "description": "test", - "encoding": "generic", - "useInPlaceholders": true, - "valueBase64": "${ESV_TEST}" -} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/am_1076162899/recording.har new file mode 100644 index 000000000..b7ed1aaa4 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/am_1076162899/recording.har @@ -0,0 +1,312 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_D/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 398, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 614, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 614, + "text": "{\"_id\":\"*\",\"_rev\":\"959929574\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"311468432e97f1f\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true,\"oauth2AIAgentsEnabled\":false}" + }, + "cookies": [], + "headers": [ + { + "name": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"959929574\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "614" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:32 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 779, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:32.476Z", + "time": 153, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 153 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1926, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 273, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 273, + "text": "{\"_id\":\"version\",\"_rev\":\"1245987628\",\"version\":\"9.0.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 9.0.0-SNAPSHOT Build 96952edaffd9295f1b26b1145ff158e577b2ecb0 (2026-June-02 12:57)\",\"revision\":\"96952edaffd9295f1b26b1145ff158e577b2ecb0\",\"date\":\"2026-June-02 12:57\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1245987628\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "273" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:32 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 780, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:32.833Z", + "time": 119, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 119 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/environment_1072573434/recording.har new file mode 100644 index 000000000..c4c4e6c88 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/environment_1072573434/recording.har @@ -0,0 +1,565 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_D/environment", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccc7ec61c2094114d7917814bb19b83b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1877, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/scopes/service-accounts" + }, + "response": { + "bodySize": 1910, + "content": { + "mimeType": "application/json; charset=utf-8", + "size": 1910, + "text": "[{\"scope\":\"fr:am:*\",\"description\":\"All Access Management APIs\"},{\"scope\":\"fr:idc:analytics:*\",\"description\":\"All Analytics APIs\"},{\"scope\":\"fr:idc:certificate:*\",\"description\":\"All TLS certificate APIs\",\"childScopes\":[{\"scope\":\"fr:idc:certificate:read\",\"description\":\"Read TLS certificates\"}]},{\"scope\":\"fr:idc:content-security-policy:*\",\"description\":\"All content security policy APIs\",\"childScopes\":[{\"scope\":\"fr:idc:content-security-policy:read\",\"description\":\"Read content security policy\"}]},{\"scope\":\"fr:idc:cookie-domain:*\",\"description\":\"All cookie domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:cookie-domain:read\",\"description\":\"Read cookie domains\"}]},{\"scope\":\"fr:idc:custom-domain:*\",\"description\":\"All custom domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:custom-domain:read\",\"description\":\"Read custom domains\"}]},{\"scope\":\"fr:idc:dataset:*\",\"description\":\"All dataset deletion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:dataset:read\",\"description\":\"Read dataset deletions\"}]},{\"scope\":\"fr:idc:esv:*\",\"description\":\"All ESV APIs\",\"childScopes\":[{\"scope\":\"fr:idc:esv:read\",\"description\":\"Read ESVs, excluding values of secrets\"},{\"scope\":\"fr:idc:esv:update\",\"description\":\"Create, modify, and delete ESVs\"},{\"scope\":\"fr:idc:esv:restart\",\"description\":\"Restart workloads that consume ESVs\"}]},{\"scope\":\"fr:idc:promotion:*\",\"description\":\"All configuration promotion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:promotion:read\",\"description\":\"Read configuration promotion\"}]},{\"scope\":\"fr:idc:release:*\",\"description\":\"All product release APIs\",\"childScopes\":[{\"scope\":\"fr:idc:release:read\",\"description\":\"Read product release\"}]},{\"scope\":\"fr:idc:sso-cookie:*\",\"description\":\"All SSO cookie APIs\",\"childScopes\":[{\"scope\":\"fr:idc:sso-cookie:read\",\"description\":\"Read SSO cookie\"}]},{\"scope\":\"fr:idm:*\",\"description\":\"All Identity Management APIs\"},{\"scope\":\"fr:iga:*\",\"description\":\"All Identity Governance APIs\"}]" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "1910" + }, + { + "name": "etag", + "value": "W/\"776-b2xCO2Gdrqb/5HdcH8WdC8M9zoM\"" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:33 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "1d58c1b9-ae9a-4d82-924b-3ef1e4652d4e" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 388, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:32.959Z", + "time": 102, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 102 + } + }, + { + "_id": "ad91a46b67f814df834d83a7f8131008", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1880, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/secrets/esv-fr-test-secret" + }, + "response": { + "bodySize": 274, + "content": { + "mimeType": "application/json", + "size": 274, + "text": "{\"_id\":\"esv-fr-test-secret\",\"activeVersion\":\"3\",\"description\":\"this is a fr-config manager test secret\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-06-10T15:28:50.576152Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"loadedVersion\":\"2\",\"useInPlaceholders\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:33 GMT" + }, + { + "name": "content-length", + "value": "274" + }, + { + "name": "x-forgerock-transactionid", + "value": "411059da-570a-4fa2-af5c-a1ee0a9e0252" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 300, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:33.189Z", + "time": 246, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 246 + } + }, + { + "_id": "7b696e2730ae7eb2e4b4a790799e32a7", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 62, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "62" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"YlhrdFpuSXRkR1Z6ZEMxelpXTnlaWFF0ZG1Gc2RXVT0=\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "create" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/secrets/esv-fr-test-secret/versions?_action=create" + }, + "response": { + "bodySize": 93, + "content": { + "mimeType": "application/json", + "size": 93, + "text": "{\"createDate\":\"2026-06-10T15:28:50.429774Z\",\"loaded\":false,\"status\":\"ENABLED\",\"version\":\"3\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:34 GMT" + }, + { + "name": "content-length", + "value": "93" + }, + { + "name": "x-forgerock-transactionid", + "value": "fe3714c6-a53d-4a2b-a5b6-6b3403ea7dda" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 299, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:33.657Z", + "time": 667, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 667 + } + }, + { + "_id": "0b347f3163c26e50f02a2c38a0f934f8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1877, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/secrets/esv-test-secret" + }, + "response": { + "bodySize": 251, + "content": { + "mimeType": "application/json", + "size": 251, + "text": "{\"_id\":\"esv-test-secret\",\"activeVersion\":\"2\",\"description\":\"This is a frodo test\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-06-10T15:28:53.77035Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"loadedVersion\":\"1\",\"useInPlaceholders\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:34 GMT" + }, + { + "name": "content-length", + "value": "251" + }, + { + "name": "x-forgerock-transactionid", + "value": "25a0d24f-2b03-4895-b9e2-f3601e73a676" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 300, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:34.330Z", + "time": 202, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 202 + } + }, + { + "_id": "9391660beec37afba9a79ebc36128427", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 58, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "58" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1922, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"YlhrdGRHVnpkQzF6WldOeVpYUXRkbUZzZFdVPQ==\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "create" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/secrets/esv-test-secret/versions?_action=create" + }, + "response": { + "bodySize": 93, + "content": { + "mimeType": "application/json", + "size": 93, + "text": "{\"createDate\":\"2026-06-10T15:28:53.682355Z\",\"loaded\":false,\"status\":\"ENABLED\",\"version\":\"2\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:35 GMT" + }, + { + "name": "content-length", + "value": "93" + }, + { + "name": "x-forgerock-transactionid", + "value": "43350927-aff5-4054-a3f6-b4612734c99b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 299, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:34.751Z", + "time": 694, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 694 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/oauth2_393036114/recording.har new file mode 100644 index 000000000..c7588e2dd --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/oauth2_393036114/recording.har @@ -0,0 +1,146 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1328, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1328" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 453, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1780, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1780, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "content-security-policy", + "value": "frame-ancestors 'self'" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1780" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:32 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 556, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:32.641Z", + "time": 187, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 187 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/openidm_3290118515/recording.har new file mode 100644 index 000000000..1569dcfc1 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_D/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@trivir.com's Frodo Service Account\",\"scopes\":[\"fr:am:*\",\"fr:idc:analytics:*\",\"fr:autoaccess:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:cookie-domain:*\",\"fr:idc:custom-domain:*\",\"fr:idc:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:32 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 658, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:32.868Z", + "time": 178, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 178 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@trivir.com's Frodo Service Account\",\"scopes\":[\"fr:am:*\",\"fr:idc:analytics:*\",\"fr:autoaccess:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:cookie-domain:*\",\"fr:idc:custom-domain:*\",\"fr:idc:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:58:33 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 658, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:58:33.074Z", + "time": 107, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 107 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/am_1076162899/recording.har new file mode 100644 index 000000000..fb363ab12 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/am_1076162899/recording.har @@ -0,0 +1,312 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_n_e_D/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 398, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 614, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 614, + "text": "{\"_id\":\"*\",\"_rev\":\"959929574\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"311468432e97f1f\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true,\"oauth2AIAgentsEnabled\":false}" + }, + "cookies": [], + "headers": [ + { + "name": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"959929574\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "614" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:59:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 804, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:59:48.114Z", + "time": 152, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 152 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1926, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 273, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 273, + "text": "{\"_id\":\"version\",\"_rev\":\"1245987628\",\"version\":\"9.0.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 9.0.0-SNAPSHOT Build 96952edaffd9295f1b26b1145ff158e577b2ecb0 (2026-June-02 12:57)\",\"revision\":\"96952edaffd9295f1b26b1145ff158e577b2ecb0\",\"date\":\"2026-June-02 12:57\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1245987628\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "273" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:59:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 805, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:59:48.447Z", + "time": 120, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 120 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/environment_1072573434/recording.har new file mode 100644 index 000000000..2847df73e --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/environment_1072573434/recording.har @@ -0,0 +1,345 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_n_e_D/environment", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccc7ec61c2094114d7917814bb19b83b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1877, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/scopes/service-accounts" + }, + "response": { + "bodySize": 1910, + "content": { + "mimeType": "application/json; charset=utf-8", + "size": 1910, + "text": "[{\"scope\":\"fr:am:*\",\"description\":\"All Access Management APIs\"},{\"scope\":\"fr:idc:analytics:*\",\"description\":\"All Analytics APIs\"},{\"scope\":\"fr:idc:certificate:*\",\"description\":\"All TLS certificate APIs\",\"childScopes\":[{\"scope\":\"fr:idc:certificate:read\",\"description\":\"Read TLS certificates\"}]},{\"scope\":\"fr:idc:content-security-policy:*\",\"description\":\"All content security policy APIs\",\"childScopes\":[{\"scope\":\"fr:idc:content-security-policy:read\",\"description\":\"Read content security policy\"}]},{\"scope\":\"fr:idc:cookie-domain:*\",\"description\":\"All cookie domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:cookie-domain:read\",\"description\":\"Read cookie domains\"}]},{\"scope\":\"fr:idc:custom-domain:*\",\"description\":\"All custom domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:custom-domain:read\",\"description\":\"Read custom domains\"}]},{\"scope\":\"fr:idc:dataset:*\",\"description\":\"All dataset deletion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:dataset:read\",\"description\":\"Read dataset deletions\"}]},{\"scope\":\"fr:idc:esv:*\",\"description\":\"All ESV APIs\",\"childScopes\":[{\"scope\":\"fr:idc:esv:read\",\"description\":\"Read ESVs, excluding values of secrets\"},{\"scope\":\"fr:idc:esv:update\",\"description\":\"Create, modify, and delete ESVs\"},{\"scope\":\"fr:idc:esv:restart\",\"description\":\"Restart workloads that consume ESVs\"}]},{\"scope\":\"fr:idc:promotion:*\",\"description\":\"All configuration promotion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:promotion:read\",\"description\":\"Read configuration promotion\"}]},{\"scope\":\"fr:idc:release:*\",\"description\":\"All product release APIs\",\"childScopes\":[{\"scope\":\"fr:idc:release:read\",\"description\":\"Read product release\"}]},{\"scope\":\"fr:idc:sso-cookie:*\",\"description\":\"All SSO cookie APIs\",\"childScopes\":[{\"scope\":\"fr:idc:sso-cookie:read\",\"description\":\"Read SSO cookie\"}]},{\"scope\":\"fr:idm:*\",\"description\":\"All Identity Management APIs\"},{\"scope\":\"fr:iga:*\",\"description\":\"All Identity Governance APIs\"}]" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "1910" + }, + { + "name": "etag", + "value": "W/\"776-b2xCO2Gdrqb/5HdcH8WdC8M9zoM\"" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:59:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "d07e1c02-918d-457f-86a9-3826340d8f52" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 388, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:59:48.573Z", + "time": 103, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 103 + } + }, + { + "_id": "ad91a46b67f814df834d83a7f8131008", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1880, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/secrets/esv-fr-test-secret" + }, + "response": { + "bodySize": 274, + "content": { + "mimeType": "application/json", + "size": 274, + "text": "{\"_id\":\"esv-fr-test-secret\",\"activeVersion\":\"3\",\"description\":\"this is a fr-config manager test secret\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-06-10T15:28:50.576152Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"loadedVersion\":\"2\",\"useInPlaceholders\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:59:49 GMT" + }, + { + "name": "content-length", + "value": "274" + }, + { + "name": "x-forgerock-transactionid", + "value": "2420a527-237d-4293-98c4-01ebfd8ee69e" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:59:48.793Z", + "time": 253, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 253 + } + }, + { + "_id": "92ca3fa364e51f0e112701bfa76a26ec", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 38, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "38" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"bXktdGVzdC12YWx1ZQ==\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "create" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/secrets/esv-fr-test-secret/versions?_action=create" + }, + "response": { + "bodySize": 93, + "content": { + "mimeType": "application/json", + "size": 93, + "text": "{\"createDate\":\"2026-06-10T15:59:50.596941Z\",\"loaded\":false,\"status\":\"ENABLED\",\"version\":\"4\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:59:51 GMT" + }, + { + "name": "content-length", + "value": "93" + }, + { + "name": "x-forgerock-transactionid", + "value": "c02aa0cc-71d4-45cb-a806-f16ef3ab23c9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 324, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:59:49.282Z", + "time": 2099, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 2099 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/oauth2_393036114/recording.har new file mode 100644 index 000000000..5fc277e5c --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/oauth2_393036114/recording.har @@ -0,0 +1,146 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_n_e_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1328, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1328" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 453, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1780, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1780, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "content-security-policy", + "value": "frame-ancestors 'self'" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1780" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:59:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 581, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:59:48.279Z", + "time": 162, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 162 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/openidm_3290118515/recording.har new file mode 100644 index 000000000..168f93c70 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_n_e_D_978558405/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "config-manager/push/secrets/0_n_e_D/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@trivir.com's Frodo Service Account\",\"scopes\":[\"fr:am:*\",\"fr:idc:analytics:*\",\"fr:autoaccess:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:cookie-domain:*\",\"fr:idc:custom-domain:*\",\"fr:idc:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:59:48 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:59:48.481Z", + "time": 181, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 181 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@trivir.com's Frodo Service Account\",\"scopes\":[\"fr:am:*\",\"fr:idc:analytics:*\",\"fr:autoaccess:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:cookie-domain:*\",\"fr:idc:custom-domain:*\",\"fr:idc:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 10 Jun 2026 15:59:48 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ef33b93b-89a5-415a-a75c-ed07a2e9a208" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T15:59:48.685Z", + "time": 100, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 100 + } + } + ], + "pages": [], + "version": "1.2" + } +} From cdd0b30d4aae4a92cdc22ead67103ac199cf8dd6 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Wed, 10 Jun 2026 11:06:54 -0600 Subject: [PATCH 4/6] update tests --- .../config-manager-push-secrets.test.js.snap | 73 +++++-------------- .../config-manager-push.test.js.snap | 2 +- 2 files changed, 19 insertions(+), 56 deletions(-) diff --git a/test/client_cli/en/__snapshots__/config-manager-push-secrets.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push-secrets.test.js.snap index 47775fce0..f4288fd1f 100644 --- a/test/client_cli/en/__snapshots__/config-manager-push-secrets.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-manager-push-secrets.test.js.snap @@ -3,64 +3,27 @@ exports[`CLI help interface for 'config-manager push secrets' should be expected english 1`] = ` "Usage: frodo config-manager push secrets [options] [host] [realm] [username] [password] -Import secrets. +[Experimental] Import secrets. Arguments: - host AM base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring or alias. - realm Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise. (default: "alpha" for Identity Cloud tenants, "/" otherwise.) - username Username to login with. Must be an admin user with appropriate rights to manage authentication journeys/trees. - password Password. + host AM base URL, e.g.: https://cdk.iam.example.com/am. To use + a connection profile, just specify a unique substring or + alias. + realm Realm. Specify realm as '/' for the root realm or 'realm' + or '/parent/child' otherwise. (default: "alpha" for + Identity Cloud tenants, "/" otherwise.) + username Username to login with. Must be an admin user with + appropriate rights to manage authentication + journeys/trees. + password Password. Options: - --curlirize Output all network calls in curl format. - -D, --directory Set the working directory. - --debug Debug output during command execution. If specified, may or may not produce additional output helpful for troubleshooting. - --flush-cache Flush token cache. - -h, --help Help - --idm-host IDM base URL, e.g.: https://cdk.idm.example.com/myidm. Use only if your IDM installation resides in a different domain and/or if the base path differs from the default "/openidm". - -k, --insecure Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://:), in that case the proxy must provide this capability. (default: Don't allow insecure connections) - --login-client-id Specify a custom OAuth2 client id to use a your own oauth2 client for IDM API calls in deployments of type "cloud" or "forgeops". Your custom client must be configured as a public client and allow the authorization code grant using the "openid fr:idm:*" scope. Use the "--redirect-uri" parameter if you have configured a custom redirect uri (default: "/platform/appAuthHelperRedirect.html"). - --login-redirect-uri Specify a custom redirect URI to use with your custom OAuth2 client (efault: "/platform/appAuthHelperRedirect.html"). - -m, --type Override auto-detected deployment type. Valid values for type: - classic: A classic Access Management-only deployment with custom layout and configuration. - cloud: A ForgeRock Identity Cloud environment. - forgeops: A ForgeOps CDK or CDM deployment. - The detected or provided deployment type controls certain behavior like obtaining an Identity Management admin token or not and whether to export/import referenced email templates or how to walk through the tenant admin login flow of Identity Cloud and handle MFA (choices: "classic", "cloud", "forgeops") - --no-cache Disable token cache for this operation. - --passphrase The passphrase for the Amster private key if it is encrypted. - --private-key File containing the private key for authenticating with Amster. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. - --retry Retry failed operations. Valid values for strategy: - everything: Retry all failed operations. - network: Retry only network-related failed operations. - nothing: Do not retry failed operations. - The selected retry strategy controls how the CLI handles failures. (choices: "nothing", "everything", "network", default: Do not retry failed operations.) - --sa-id Service account id. - --sa-jwk-file File containing the JSON Web Key (JWK) associated with the the service account. - --use-realm-prefix-on-managed-objects Set to true if you want to use the realm name as a prefix on managed object configuration, e.g. managed/alpha_user, managed/alpha_application or managed/bravo_organization. When false, the default behaviour of using managed/user etc. is retained. This option is ignored when the deployment type is "cloud". - --verbose Verbose output during command execution. If specified, may or may not produce additional output. - -Environment Variables: - FRODO_HOST: AM base URL. Overridden by 'host' argument. - FRODO_IDM_HOST: IDM base URL. Overridden by '--idm-host' option. - FRODO_REALM: Realm. Overridden by 'realm' argument. - FRODO_USERNAME: Username. Overridden by 'username' argument. - FRODO_PASSWORD: Password. Overridden by 'password' argument. - FRODO_LOGIN_CLIENT_ID: OAuth2 client id for IDM API calls. Overridden by '--login-client-id' option. - FRODO_LOGIN_REDIRECT_URI: Redirect Uri for custom OAuth2 client id. Overridden by '--login-redirect-uri' option. - FRODO_SA_ID: Service account uuid. Overridden by '--sa-id' option. - FRODO_SA_JWK: Service account JWK. Overridden by '--sa-jwk-file' option but takes the actual JWK as a value, not a file name. - FRODO_AMSTER_PASSPHRASE: Passphrase for the Amster private key if it is encrypted. Overridden by '--passphrase' option. - FRODO_AMSTER_PRIVATE_KEY: Amster private key. Overridden by '--private-key' option but takes the actual private key as a value (i.e. the file contents), not a file name. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. - FRODO_NO_CACHE: Disable token cache. Same as '--no-cache' option. - FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'. - FRODO_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'. - FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use. When using an Amster private key, specifies which journey to use for Amster authentication as opposed to the default 'amsterService' journey. - FRODO_AUTHENTICATION_HEADER_OVERRIDES: Map of headers: '{"host":"am.example.com:8081"}'. These headers are sent with all requests and can be used to override default behavior, for example to set a custom host header for Proxy Connect-protected PingOne Advanced Identity Cloud environments. - FRODO_CONFIGURATION_HEADER_OVERRIDES: Map of headers: '{"X-Configuration-Type":"mutable"}'. These headers are sent with all configuration requests and can be used to override default behavior, for example to set a custom configuration header for mutable PingOne Advanced Identity Cloud environments. - FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. - FRODO_IGA: Set to "true" to enable IGA (Identity Governance) endpoints for cloud deployments, or "false" to disable them, overriding auto-detected value. - FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file. - FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH. - + -e, --env Value to set for the secret. Will override .env files and + environment variables. + -n, --name Secret name; import only the specified secret + -h, --help Help + -hh, --help-more Help with all options. + -hhh, --help-all Help with all options, environment variables, and usage + examples. " `; diff --git a/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap index 4cfaa409f..de730fae8 100644 --- a/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap @@ -29,8 +29,8 @@ Commands: org-privileges [Experimental] Import organization privileges config. password-policy [Experimental] Import password-policy objects. schedules [Experimental] Import schedules. + secrets [Experimental] Import secrets. service-objects [Experimental] Import service objects. - secrets Import secrets. terms-and-conditions [Experimental] Import terms and conditions. themes [Experimental] Import themes. ui-config [Experimental] Import UI configuration. From 3b6b0bcb938a062e3f1e2971a8e5424033031c07 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Thu, 18 Jun 2026 12:43:37 -0600 Subject: [PATCH 5/6] update import to use readToJson function. UPdate tests --- src/configManagerOps/FrConfigSecretOps.ts | 31 +++---- .../config-manager-push-secrets.e2e.test.js | 8 +- .../am_1076162899/recording.har | 24 +++--- .../environment_1072573434/recording.har | 86 +++++++++---------- .../oauth2_393036114/recording.har | 12 +-- .../openidm_3290118515/recording.har | 24 +++--- 6 files changed, 93 insertions(+), 92 deletions(-) diff --git a/src/configManagerOps/FrConfigSecretOps.ts b/src/configManagerOps/FrConfigSecretOps.ts index c1d5d4ab7..99ed5c356 100644 --- a/src/configManagerOps/FrConfigSecretOps.ts +++ b/src/configManagerOps/FrConfigSecretOps.ts @@ -10,7 +10,7 @@ import { updateProgressIndicator, } from '../utils/Console'; -const { getFilePath, saveJsonToFile } = frodo.utils; +const { getFilePath, saveJsonToFile, readToJson } = frodo.utils; const { readSecrets, exportSecret, @@ -166,15 +166,12 @@ export async function configManagerImportSecrets( return true; } - const files = fs + const fileNames = fs .readdirSync(secretsDir) .filter((name) => name.toLowerCase().endsWith('.json')) - .map((name) => - JSON.parse(fs.readFileSync(`${secretsDir}/${name}`, 'utf8')) - ) - .filter((data) => !secretName || data._id === secretName); + .filter((name) => !secretName || name === secretName); - if (files.length === 0) { + if (fileNames.length === 0) { stopProgressIndicator( spinnerId, secretName @@ -187,7 +184,7 @@ export async function configManagerImportSecrets( stopProgressIndicator( spinnerId, - `Successfully read ${files.length} secrets.`, + `Successfully read ${fileNames.length} secrets.`, 'success' ); @@ -195,21 +192,19 @@ export async function configManagerImportSecrets( indicatorId = createProgressIndicator( 'determinate', - files.length, + fileNames.length, 'Importing secrets' ); - for (const importData of files) { + for (const fileName of fileNames) { try { - let secretValue: string; - if (value) { - secretValue = value; - } else if (importData.valueBase64) { - secretValue = resolvePlaceholder(importData.valueBase64, envFile); - } else { + const importData = readToJson(`${secretsDir}/${fileName}`, {overrideValue: value, envFile, base64Encode: false}) + const secretValue = importData.valueBase64 + + if (!secretValue){ throw new FrodoError( `No value provided for secret ${importData._id}` - ); + ) } let exists = true; @@ -242,7 +237,7 @@ export async function configManagerImportSecrets( if (errors.length > 0) { throw new FrodoError(`Error importing secrets`, errors); } - stopProgressIndicator(indicatorId, `${files.length} secrets imported.`); + stopProgressIndicator(indicatorId, `${fileNames.length} secrets imported.`); return true; } catch (error) { stopProgressIndicator(indicatorId, `Error importing secrets`, 'fail'); diff --git a/test/e2e/config-manager-push-secrets.e2e.test.js b/test/e2e/config-manager-push-secrets.e2e.test.js index 0ff623f5a..398421a19 100644 --- a/test/e2e/config-manager-push-secrets.e2e.test.js +++ b/test/e2e/config-manager-push-secrets.e2e.test.js @@ -69,7 +69,13 @@ const allDirectory = "test/e2e/exports/fr-config-manager/cloud"; describe('frodo config-manager push secrets', () => { test(`"frodo config-manager push secrets -D ${allDirectory} ": should import the secrets into cloud"`, async () => { const CMD = `frodo config-manager push secrets -D ${allDirectory} `; - const { stdout } = await exec(CMD, cloudEnv); + const { stdout, stderr } = await exec(CMD, { + env: { + ...cloudEnv.env, + ESV_FR_TEST_SECRET: "my-fr-test-secret-value", + ESV_TEST_SECRET: "my-test-secret-value" + } + }); expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); }); test(`"frodo config-manager push secrets -n esv-fr-test-secret -e my-test-value ${allDirectory}": should import the specified secret into cloud`, async () => { diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/am_1076162899/recording.har index b7ed1aaa4..af2a2e15b 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/am_1076162899/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/am_1076162899/recording.har @@ -29,7 +29,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "accept-api-version", @@ -113,11 +113,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:32 GMT" + "value": "Thu, 18 Jun 2026 18:06:59 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "strict-transport-security", @@ -142,8 +142,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:32.476Z", - "time": 153, + "startedDateTime": "2026-06-18T18:06:59.302Z", + "time": 174, "timings": { "blocked": -1, "connect": -1, @@ -151,7 +151,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 153 + "wait": 174 } }, { @@ -176,7 +176,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "accept-api-version", @@ -264,11 +264,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:32 GMT" + "value": "Thu, 18 Jun 2026 18:06:59 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "strict-transport-security", @@ -293,8 +293,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:32.833Z", - "time": 119, + "startedDateTime": "2026-06-18T18:06:59.726Z", + "time": 138, "timings": { "blocked": -1, "connect": -1, @@ -302,7 +302,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 119 + "wait": 138 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/environment_1072573434/recording.har index c4c4e6c88..79bb29ea4 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/environment_1072573434/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/environment_1072573434/recording.har @@ -77,11 +77,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:33 GMT" + "value": "Thu, 18 Jun 2026 18:07:00 GMT" }, { "name": "x-forgerock-transactionid", - "value": "1d58c1b9-ae9a-4d82-924b-3ef1e4652d4e" + "value": "e0004780-0ddd-47ad-900b-be5e783b8bc6" }, { "name": "strict-transport-security", @@ -106,8 +106,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:32.959Z", - "time": 102, + "startedDateTime": "2026-06-18T18:06:59.871Z", + "time": 202, "timings": { "blocked": -1, "connect": -1, @@ -115,7 +115,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 102 + "wait": 202 } }, { @@ -162,11 +162,11 @@ "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/secrets/esv-fr-test-secret" }, "response": { - "bodySize": 274, + "bodySize": 273, "content": { "mimeType": "application/json", - "size": 274, - "text": "{\"_id\":\"esv-fr-test-secret\",\"activeVersion\":\"3\",\"description\":\"this is a fr-config manager test secret\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-06-10T15:28:50.576152Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"loadedVersion\":\"2\",\"useInPlaceholders\":true}" + "size": 273, + "text": "{\"_id\":\"esv-fr-test-secret\",\"activeVersion\":\"5\",\"description\":\"this is a fr-config manager test secret\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-06-10T16:24:38.791731Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":true,\"loadedVersion\":\"5\",\"useInPlaceholders\":true}" }, "cookies": [], "headers": [ @@ -176,15 +176,15 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:33 GMT" + "value": "Thu, 18 Jun 2026 18:07:00 GMT" }, { "name": "content-length", - "value": "274" + "value": "273" }, { "name": "x-forgerock-transactionid", - "value": "411059da-570a-4fa2-af5c-a1ee0a9e0252" + "value": "f099d0df-ad43-43bc-9be4-3fe8408fa72f" }, { "name": "strict-transport-security", @@ -209,8 +209,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:33.189Z", - "time": 246, + "startedDateTime": "2026-06-18T18:07:00.298Z", + "time": 311, "timings": { "blocked": -1, "connect": -1, @@ -218,15 +218,15 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 246 + "wait": 311 } }, { - "_id": "7b696e2730ae7eb2e4b4a790799e32a7", + "_id": "de017a59d6965d89d9fbcdb39793985d", "_order": 0, "cache": {}, "request": { - "bodySize": 62, + "bodySize": 50, "cookies": [], "headers": [ { @@ -251,7 +251,7 @@ }, { "name": "content-length", - "value": "62" + "value": "50" }, { "name": "accept-encoding", @@ -268,7 +268,7 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"valueBase64\":\"YlhrdFpuSXRkR1Z6ZEMxelpXTnlaWFF0ZG1Gc2RXVT0=\"}" + "text": "{\"valueBase64\":\"bXktZnItdGVzdC1zZWNyZXQtdmFsdWU=\"}" }, "queryString": [ { @@ -283,7 +283,7 @@ "content": { "mimeType": "application/json", "size": 93, - "text": "{\"createDate\":\"2026-06-10T15:28:50.429774Z\",\"loaded\":false,\"status\":\"ENABLED\",\"version\":\"3\"}" + "text": "{\"createDate\":\"2026-06-18T18:07:02.407747Z\",\"loaded\":false,\"status\":\"ENABLED\",\"version\":\"6\"}" }, "cookies": [], "headers": [ @@ -293,7 +293,7 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:34 GMT" + "value": "Thu, 18 Jun 2026 18:07:03 GMT" }, { "name": "content-length", @@ -301,7 +301,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "fe3714c6-a53d-4a2b-a5b6-6b3403ea7dda" + "value": "ed861653-07ea-40f4-b227-691bfbe2e1a8" }, { "name": "strict-transport-security", @@ -326,8 +326,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:33.657Z", - "time": 667, + "startedDateTime": "2026-06-18T18:07:00.925Z", + "time": 2538, "timings": { "blocked": -1, "connect": -1, @@ -335,7 +335,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 667 + "wait": 2538 } }, { @@ -382,11 +382,11 @@ "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/secrets/esv-test-secret" }, "response": { - "bodySize": 251, + "bodySize": 250, "content": { "mimeType": "application/json", - "size": 251, - "text": "{\"_id\":\"esv-test-secret\",\"activeVersion\":\"2\",\"description\":\"This is a frodo test\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-06-10T15:28:53.77035Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"loadedVersion\":\"1\",\"useInPlaceholders\":true}" + "size": 250, + "text": "{\"_id\":\"esv-test-secret\",\"activeVersion\":\"2\",\"description\":\"This is a frodo test\",\"encoding\":\"generic\",\"lastChangeDate\":\"2026-06-10T15:28:53.77035Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":true,\"loadedVersion\":\"2\",\"useInPlaceholders\":true}" }, "cookies": [], "headers": [ @@ -396,15 +396,15 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:34 GMT" + "value": "Thu, 18 Jun 2026 18:07:03 GMT" }, { "name": "content-length", - "value": "251" + "value": "250" }, { "name": "x-forgerock-transactionid", - "value": "25a0d24f-2b03-4895-b9e2-f3601e73a676" + "value": "71af2d40-374e-492b-a01c-51312e243907" }, { "name": "strict-transport-security", @@ -429,8 +429,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:34.330Z", - "time": 202, + "startedDateTime": "2026-06-18T18:07:03.469Z", + "time": 223, "timings": { "blocked": -1, "connect": -1, @@ -438,15 +438,15 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 202 + "wait": 223 } }, { - "_id": "9391660beec37afba9a79ebc36128427", + "_id": "ab1e41089a12f86190cfce126358596d", "_order": 0, "cache": {}, "request": { - "bodySize": 58, + "bodySize": 46, "cookies": [], "headers": [ { @@ -471,7 +471,7 @@ }, { "name": "content-length", - "value": "58" + "value": "46" }, { "name": "accept-encoding", @@ -488,7 +488,7 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"valueBase64\":\"YlhrdGRHVnpkQzF6WldOeVpYUXRkbUZzZFdVPQ==\"}" + "text": "{\"valueBase64\":\"bXktdGVzdC1zZWNyZXQtdmFsdWU=\"}" }, "queryString": [ { @@ -503,7 +503,7 @@ "content": { "mimeType": "application/json", "size": 93, - "text": "{\"createDate\":\"2026-06-10T15:28:53.682355Z\",\"loaded\":false,\"status\":\"ENABLED\",\"version\":\"2\"}" + "text": "{\"createDate\":\"2026-06-18T18:07:05.112565Z\",\"loaded\":false,\"status\":\"ENABLED\",\"version\":\"3\"}" }, "cookies": [], "headers": [ @@ -513,7 +513,7 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:35 GMT" + "value": "Thu, 18 Jun 2026 18:07:05 GMT" }, { "name": "content-length", @@ -521,7 +521,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "43350927-aff5-4054-a3f6-b4612734c99b" + "value": "7af7c8ac-b0a2-4b98-ab7f-c1804774e6ce" }, { "name": "strict-transport-security", @@ -546,8 +546,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:34.751Z", - "time": 694, + "startedDateTime": "2026-06-18T18:07:03.944Z", + "time": 2027, "timings": { "blocked": -1, "connect": -1, @@ -555,7 +555,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 694 + "wait": 2027 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/oauth2_393036114/recording.har index c7588e2dd..ea1944dd5 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/oauth2_393036114/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/oauth2_393036114/recording.har @@ -29,7 +29,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "accept-api-version", @@ -98,11 +98,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:32 GMT" + "value": "Thu, 18 Jun 2026 18:06:59 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "strict-transport-security", @@ -127,8 +127,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:32.641Z", - "time": 187, + "startedDateTime": "2026-06-18T18:06:59.493Z", + "time": 226, "timings": { "blocked": -1, "connect": -1, @@ -136,7 +136,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 187 + "wait": 226 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/openidm_3290118515/recording.har index 1569dcfc1..c2e050f0f 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/openidm_3290118515/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/secrets_3084510534/0_D_2157136892/openidm_3290118515/recording.har @@ -29,7 +29,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "authorization", @@ -66,7 +66,7 @@ "headers": [ { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:32 GMT" + "value": "Thu, 18 Jun 2026 18:06:59 GMT" }, { "name": "vary", @@ -118,7 +118,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "strict-transport-security", @@ -143,8 +143,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:32.868Z", - "time": 178, + "startedDateTime": "2026-06-18T18:06:59.767Z", + "time": 273, "timings": { "blocked": -1, "connect": -1, @@ -152,7 +152,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 178 + "wait": 273 } }, { @@ -177,7 +177,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "authorization", @@ -214,7 +214,7 @@ "headers": [ { "name": "date", - "value": "Wed, 10 Jun 2026 15:58:33 GMT" + "value": "Thu, 18 Jun 2026 18:07:00 GMT" }, { "name": "vary", @@ -266,7 +266,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-58d41fa9-5f4b-4472-8db9-5133c4a8cd97" + "value": "frodo-02e4dfe9-c45d-4239-9c8f-885483d80dd8" }, { "name": "strict-transport-security", @@ -291,8 +291,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T15:58:33.074Z", - "time": 107, + "startedDateTime": "2026-06-18T18:07:00.080Z", + "time": 210, "timings": { "blocked": -1, "connect": -1, @@ -300,7 +300,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 107 + "wait": 210 } } ], From 681d71b3b7007a66e0d52afbf68c7eeedae69c35 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Thu, 18 Jun 2026 14:33:33 -0600 Subject: [PATCH 6/6] update FrConfigSecretOps to use loadEnvFile from frodo-lib --- src/configManagerOps/FrConfigSecretOps.ts | 33 +---------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/src/configManagerOps/FrConfigSecretOps.ts b/src/configManagerOps/FrConfigSecretOps.ts index 99ed5c356..4c4de95f2 100644 --- a/src/configManagerOps/FrConfigSecretOps.ts +++ b/src/configManagerOps/FrConfigSecretOps.ts @@ -10,7 +10,7 @@ import { updateProgressIndicator, } from '../utils/Console'; -const { getFilePath, saveJsonToFile, readToJson } = frodo.utils; +const { getFilePath, saveJsonToFile, readToJson, loadEnvFile } = frodo.utils; const { readSecrets, exportSecret, @@ -95,37 +95,6 @@ export async function configManagerExportSecrets( return false; } -export function loadEnvFile(): Record { - const envPath = getFilePath('.env'); - if (!fs.existsSync(envPath)) { - return {}; - } - const out: Record = {}; - const contents = fs.readFileSync(envPath, 'utf8'); - for (const rawLine of contents.split('\n')) { - const line = rawLine.trim(); - if (!line || line.startsWith('#')) { - continue; - } - const eq = line.indexOf('='); - if (eq === -1) { - continue; - } - const key = line.slice(0, eq).trim(); - let value = line.slice(eq + 1).trim(); - if ( - (value.startsWith('"') && value.endsWith('"')) || - (value.startsWith("'") && value.endsWith("'")) - ) { - value = value.slice(1, -1); - } - if (key) { - out[key] = value; - } - } - return out; -} - export function resolvePlaceholder( placeholder: string, envFile: Record = {}