@rockcarver/frodo-cli 2.0.0-43 → 2.0.0-45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -1
- package/esm/cli/esv/esv-secret-create.js +8 -3
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/saml/saml-export.js +10 -4
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/ops/Saml2Ops.js +12 -6
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/SecretsOps.js +24 -0
- package/esm/ops/SecretsOps.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- pem and base64hmac encoded ESV secret creation
|
|
13
|
+
|
|
14
|
+
## [2.0.0-44] - 2024-01-11
|
|
15
|
+
|
|
16
|
+
## [2.0.0-43] - 2024-01-05
|
|
17
|
+
|
|
10
18
|
## [2.0.0-42] - 2024-01-04
|
|
11
19
|
|
|
12
20
|
## [2.0.0-41] - 2023-12-23
|
|
@@ -1451,7 +1459,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1451
1459
|
- Fixed problem with adding connection profiles
|
|
1452
1460
|
- Miscellaneous bug fixes
|
|
1453
1461
|
|
|
1454
|
-
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-
|
|
1462
|
+
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-44...HEAD
|
|
1463
|
+
|
|
1464
|
+
[2.0.0-44]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-43...v2.0.0-44
|
|
1465
|
+
|
|
1466
|
+
[2.0.0-43]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-42...v2.0.0-43
|
|
1455
1467
|
|
|
1456
1468
|
[2.0.0-42]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-41...v2.0.0-42
|
|
1457
1469
|
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
import { frodo } from '@rockcarver/frodo-lib';
|
|
2
2
|
import { Option } from 'commander';
|
|
3
|
-
import { createSecret } from '../../ops/SecretsOps';
|
|
3
|
+
import { createSecret, createSecretFromFile } from '../../ops/SecretsOps';
|
|
4
4
|
import { verboseMessage } from '../../utils/Console.js';
|
|
5
5
|
import { FrodoCommand } from '../FrodoCommand';
|
|
6
6
|
const {
|
|
7
7
|
getTokens
|
|
8
8
|
} = frodo.login;
|
|
9
9
|
const program = new FrodoCommand('frodo esv secret create');
|
|
10
|
-
program.description('Create secrets.').requiredOption('-i, --secret-id <secret-id>', 'Secret id.').
|
|
10
|
+
program.description('Create secrets.').requiredOption('-i, --secret-id <secret-id>', 'Secret id.').option('--value <value>', 'Secret value. Overrides "--file"').addOption(new Option('-f, --file [file]', 'Name of the file to read pem or base64hmac encoded secret from. Ignored if --value is specified')).option('--description [description]', 'Secret description.').addOption(new Option('--encoding [encoding]', 'Secret encoding').choices(['generic', 'pem', 'base64hmac']).default('generic', 'generic')).addOption(new Option('--no-use-in-placeholders', 'Secret cannot be used in placeholders.')).action(
|
|
11
11
|
// implement command logic inside action handler
|
|
12
12
|
async (host, realm, user, password, options, command) => {
|
|
13
13
|
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
14
14
|
if (await getTokens()) {
|
|
15
15
|
verboseMessage('Creating secret...');
|
|
16
|
-
|
|
16
|
+
let outcome = null;
|
|
17
|
+
if (options.value) {
|
|
18
|
+
outcome = await createSecret(options.secretId, options.value, options.description, options.encoding, options.useInPlaceholders);
|
|
19
|
+
} else {
|
|
20
|
+
outcome = await createSecretFromFile(options.secretId, options.file, options.description, options.encoding, options.useInPlaceholders);
|
|
21
|
+
}
|
|
17
22
|
if (!outcome) process.exitCode = 1;
|
|
18
23
|
} else {
|
|
19
24
|
process.exitCode = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esv-secret-create.js","names":["frodo","Option","createSecret","verboseMessage","FrodoCommand","getTokens","login","program","description","requiredOption","option","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outcome","
|
|
1
|
+
{"version":3,"file":"esv-secret-create.js","names":["frodo","Option","createSecret","createSecretFromFile","verboseMessage","FrodoCommand","getTokens","login","program","description","requiredOption","option","addOption","choices","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outcome","value","secretId","encoding","useInPlaceholders","file","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-secret-create.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { createSecret, createSecretFromFile } from '../../ops/SecretsOps';\nimport { verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo esv secret create');\n\nprogram\n .description('Create secrets.')\n .requiredOption('-i, --secret-id <secret-id>', 'Secret id.')\n .option('--value <value>', 'Secret value. Overrides \"--file\"')\n .addOption(\n new Option(\n '-f, --file [file]',\n 'Name of the file to read pem or base64hmac encoded secret from. Ignored if --value is specified'\n )\n )\n .option('--description [description]', 'Secret description.')\n .addOption(\n new Option('--encoding [encoding]', 'Secret encoding')\n .choices(['generic', 'pem', 'base64hmac'])\n .default('generic', 'generic')\n )\n .addOption(\n new Option(\n '--no-use-in-placeholders',\n 'Secret cannot be used in placeholders.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n verboseMessage('Creating secret...');\n let outcome = null;\n if (options.value) {\n outcome = await createSecret(\n options.secretId,\n options.value,\n options.description,\n options.encoding,\n options.useInPlaceholders\n );\n } else {\n outcome = await createSecretFromFile(\n options.secretId,\n options.file,\n options.description,\n options.encoding,\n options.useInPlaceholders\n );\n }\n if (!outcome) process.exitCode = 1;\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,EAAEC,oBAAoB,QAAQ,sBAAsB;AACzE,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGN,KAAK,CAACO,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,yBAAyB,CAAC;AAE3DG,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,cAAc,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAC3DC,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAC7DC,SAAS,CACR,IAAIX,MAAM,CACR,mBAAmB,EACnB,iGACF,CACF,CAAC,CACAU,MAAM,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,CAC5DC,SAAS,CACR,IAAIX,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,CACnDY,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CACzCC,OAAO,CAAC,SAAS,EAAE,SAAS,CACjC,CAAC,CACAF,SAAS,CACR,IAAIX,MAAM,CACR,0BAA0B,EAC1B,wCACF,CACF,CAAC,CACAc,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMf,SAAS,CAAC,CAAC,EAAE;IACrBF,cAAc,CAAC,oBAAoB,CAAC;IACpC,IAAImB,OAAO,GAAG,IAAI;IAClB,IAAIH,OAAO,CAACI,KAAK,EAAE;MACjBD,OAAO,GAAG,MAAMrB,YAAY,CAC1BkB,OAAO,CAACK,QAAQ,EAChBL,OAAO,CAACI,KAAK,EACbJ,OAAO,CAACX,WAAW,EACnBW,OAAO,CAACM,QAAQ,EAChBN,OAAO,CAACO,iBACV,CAAC;IACH,CAAC,MAAM;MACLJ,OAAO,GAAG,MAAMpB,oBAAoB,CAClCiB,OAAO,CAACK,QAAQ,EAChBL,OAAO,CAACQ,IAAI,EACZR,OAAO,CAACX,WAAW,EACnBW,OAAO,CAACM,QAAQ,EAChBN,OAAO,CAACO,iBACV,CAAC;IACH;IACA,IAAI,CAACJ,OAAO,EAAEM,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;AAEHtB,OAAO,CAACuB,KAAK,CAAC,CAAC"}
|
|
@@ -7,24 +7,30 @@ const {
|
|
|
7
7
|
getTokens
|
|
8
8
|
} = frodo.login;
|
|
9
9
|
const program = new FrodoCommand('frodo saml export');
|
|
10
|
-
program.description('Export SAML entity providers.').addOption(new Option('-i, --entity-id <entity-id>', 'Entity id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file [file]', 'Name of the file to write the exported provider(s) to. Ignored with -A. If not specified, the export file is named <id>.saml.json.')).addOption(new Option('-a, --all', 'Export all the providers in a realm to a single file. Ignored with -t and -i.')).addOption(new Option('-A, --all-separate', 'Export all the providers in a realm as separate files <provider name>.saml.json. Ignored with -t, -i, and -a.')).addOption(new Option('-N, --no-metadata', 'Does not include metadata in the export file.')).action(
|
|
10
|
+
program.description('Export SAML entity providers.').addOption(new Option('-i, --entity-id <entity-id>', 'Entity id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file [file]', 'Name of the file to write the exported provider(s) to. Ignored with -A. If not specified, the export file is named <id>.saml.json.')).addOption(new Option('-a, --all', 'Export all the providers in a realm to a single file. Ignored with -t and -i.')).addOption(new Option('-A, --all-separate', 'Export all the providers in a realm as separate files <provider name>.saml.json. Ignored with -t, -i, and -a.')).addOption(new Option('-N, --no-metadata', 'Does not include metadata in the export file.')).addOption(new Option('--no-deps', 'Do not include any dependencies (scripts).')).action(
|
|
11
11
|
// implement command logic inside action handler
|
|
12
12
|
async (host, realm, user, password, options, command) => {
|
|
13
13
|
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
14
14
|
// export by id/name
|
|
15
15
|
if (options.entityId && (await getTokens())) {
|
|
16
16
|
verboseMessage(`Exporting provider "${options.entityId}" from realm "${state.getRealm()}"...`);
|
|
17
|
-
await exportSaml2ProviderToFile(options.entityId, options.file, options.metadata
|
|
17
|
+
await exportSaml2ProviderToFile(options.entityId, options.file, options.metadata, {
|
|
18
|
+
deps: options.deps
|
|
19
|
+
});
|
|
18
20
|
}
|
|
19
21
|
// --all -a
|
|
20
22
|
else if (options.all && (await getTokens())) {
|
|
21
23
|
verboseMessage('Exporting all providers to a single file...');
|
|
22
|
-
await exportSaml2ProvidersToFile(options.file, options.metadata
|
|
24
|
+
await exportSaml2ProvidersToFile(options.file, options.metadata, {
|
|
25
|
+
deps: options.deps
|
|
26
|
+
});
|
|
23
27
|
}
|
|
24
28
|
// --all-separate -A
|
|
25
29
|
else if (options.allSeparate && (await getTokens())) {
|
|
26
30
|
verboseMessage('Exporting all providers to separate files...');
|
|
27
|
-
await exportSaml2ProvidersToFiles(options.metadata
|
|
31
|
+
await exportSaml2ProvidersToFiles(options.metadata, {
|
|
32
|
+
deps: options.deps
|
|
33
|
+
});
|
|
28
34
|
}
|
|
29
35
|
// unrecognized combination of options or no options
|
|
30
36
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saml-export.js","names":["frodo","state","Option","exportSaml2ProvidersToFile","exportSaml2ProvidersToFiles","exportSaml2ProviderToFile","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","entityId","getRealm","file","metadata","all","allSeparate","help","process","exitCode","parse"],"sources":["../../../src/cli/saml/saml-export.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportSaml2ProvidersToFile,\n exportSaml2ProvidersToFiles,\n exportSaml2ProviderToFile,\n} from '../../ops/Saml2Ops';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo saml export');\n\nprogram\n .description('Export SAML entity providers.')\n .addOption(\n new Option(\n '-i, --entity-id <entity-id>',\n 'Entity id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-f, --file [file]',\n 'Name of the file to write the exported provider(s) to. Ignored with -A. If not specified, the export file is named <id>.saml.json.'\n )\n )\n .addOption(\n new Option(\n '-a, --all',\n 'Export all the providers in a realm to a single file. Ignored with -t and -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all the providers in a realm as separate files <provider name>.saml.json. Ignored with -t, -i, and -a.'\n )\n )\n .addOption(\n new Option(\n '-N, --no-metadata',\n 'Does not include metadata in the export file.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export by id/name\n if (options.entityId && (await getTokens())) {\n verboseMessage(\n `Exporting provider \"${\n options.entityId\n }\" from realm \"${state.getRealm()}\"...`\n );\n await exportSaml2ProviderToFile(\n options.entityId,\n options.file,\n options.metadata\n );\n }\n // --all -a\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all providers to a single file...');\n await exportSaml2ProvidersToFile(options.file, options.metadata);\n }\n // --all-separate -A\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all providers to separate files...');\n await exportSaml2ProvidersToFiles(options.metadata);\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,yBAAyB,QACpB,oBAAoB;AAC3B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGT,KAAK,CAACU,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,mBAAmB,CAAC;AAErDG,OAAO,CACJC,WAAW,CAAC,+BAA+B,CAAC,CAC5CC,SAAS,CACR,IAAIX,MAAM,CACR,6BAA6B,EAC7B,iDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,mBAAmB,EACnB,oIACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,WAAW,EACX,+EACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,oBAAoB,EACpB,+GACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,mBAAmB,EACnB,+CACF,CACF,CAAC,CACAY,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD;EACA,IAAID,OAAO,CAACG,QAAQ,KAAK,MAAMb,SAAS,CAAC,CAAC,CAAC,EAAE;IAC3CF,cAAc,CACX,uBACCY,OAAO,CAACG,QACT,iBAAgBrB,KAAK,CAACsB,QAAQ,CAAC,CAAE,MACpC,CAAC;IACD,MAAMlB,yBAAyB,CAC7Bc,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACK,IAAI,EACZL,OAAO,CAACM,
|
|
1
|
+
{"version":3,"file":"saml-export.js","names":["frodo","state","Option","exportSaml2ProvidersToFile","exportSaml2ProvidersToFiles","exportSaml2ProviderToFile","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","entityId","getRealm","file","metadata","deps","all","allSeparate","help","process","exitCode","parse"],"sources":["../../../src/cli/saml/saml-export.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportSaml2ProvidersToFile,\n exportSaml2ProvidersToFiles,\n exportSaml2ProviderToFile,\n} from '../../ops/Saml2Ops';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo saml export');\n\nprogram\n .description('Export SAML entity providers.')\n .addOption(\n new Option(\n '-i, --entity-id <entity-id>',\n 'Entity id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-f, --file [file]',\n 'Name of the file to write the exported provider(s) to. Ignored with -A. If not specified, the export file is named <id>.saml.json.'\n )\n )\n .addOption(\n new Option(\n '-a, --all',\n 'Export all the providers in a realm to a single file. Ignored with -t and -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all the providers in a realm as separate files <provider name>.saml.json. Ignored with -t, -i, and -a.'\n )\n )\n .addOption(\n new Option(\n '-N, --no-metadata',\n 'Does not include metadata in the export file.'\n )\n )\n .addOption(\n new Option('--no-deps', 'Do not include any dependencies (scripts).')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export by id/name\n if (options.entityId && (await getTokens())) {\n verboseMessage(\n `Exporting provider \"${\n options.entityId\n }\" from realm \"${state.getRealm()}\"...`\n );\n await exportSaml2ProviderToFile(\n options.entityId,\n options.file,\n options.metadata,\n {\n deps: options.deps,\n }\n );\n }\n // --all -a\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all providers to a single file...');\n await exportSaml2ProvidersToFile(options.file, options.metadata, {\n deps: options.deps,\n });\n }\n // --all-separate -A\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all providers to separate files...');\n await exportSaml2ProvidersToFiles(options.metadata, {\n deps: options.deps,\n });\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,yBAAyB,QACpB,oBAAoB;AAC3B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGT,KAAK,CAACU,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,mBAAmB,CAAC;AAErDG,OAAO,CACJC,WAAW,CAAC,+BAA+B,CAAC,CAC5CC,SAAS,CACR,IAAIX,MAAM,CACR,6BAA6B,EAC7B,iDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,mBAAmB,EACnB,oIACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,WAAW,EACX,+EACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,oBAAoB,EACpB,+GACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,mBAAmB,EACnB,+CACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CAAC,WAAW,EAAE,4CAA4C,CACtE,CAAC,CACAY,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD;EACA,IAAID,OAAO,CAACG,QAAQ,KAAK,MAAMb,SAAS,CAAC,CAAC,CAAC,EAAE;IAC3CF,cAAc,CACX,uBACCY,OAAO,CAACG,QACT,iBAAgBrB,KAAK,CAACsB,QAAQ,CAAC,CAAE,MACpC,CAAC;IACD,MAAMlB,yBAAyB,CAC7Bc,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACK,IAAI,EACZL,OAAO,CAACM,QAAQ,EAChB;MACEC,IAAI,EAAEP,OAAO,CAACO;IAChB,CACF,CAAC;EACH;EACA;EAAA,KACK,IAAIP,OAAO,CAACQ,GAAG,KAAK,MAAMlB,SAAS,CAAC,CAAC,CAAC,EAAE;IAC3CF,cAAc,CAAC,6CAA6C,CAAC;IAC7D,MAAMJ,0BAA0B,CAACgB,OAAO,CAACK,IAAI,EAAEL,OAAO,CAACM,QAAQ,EAAE;MAC/DC,IAAI,EAAEP,OAAO,CAACO;IAChB,CAAC,CAAC;EACJ;EACA;EAAA,KACK,IAAIP,OAAO,CAACS,WAAW,KAAK,MAAMnB,SAAS,CAAC,CAAC,CAAC,EAAE;IACnDF,cAAc,CAAC,8CAA8C,CAAC;IAC9D,MAAMH,2BAA2B,CAACe,OAAO,CAACM,QAAQ,EAAE;MAClDC,IAAI,EAAEP,OAAO,CAACO;IAChB,CAAC,CAAC;EACJ;EACA;EAAA,KACK;IACHpB,YAAY,CACV,sDAAsD,EACtD,OACF,CAAC;IACDK,OAAO,CAACkB,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;AAEHpB,OAAO,CAACqB,KAAK,CAAC,CAAC"}
|
package/esm/ops/Saml2Ops.js
CHANGED
|
@@ -149,7 +149,9 @@ export async function exportSaml2MetadataToFile(entityId, file = null) {
|
|
|
149
149
|
* @param {String} file Optional filename
|
|
150
150
|
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
151
151
|
*/
|
|
152
|
-
export async function exportSaml2ProviderToFile(entityId, file = null, includeMeta = true
|
|
152
|
+
export async function exportSaml2ProviderToFile(entityId, file = null, includeMeta = true, options = {
|
|
153
|
+
deps: true
|
|
154
|
+
}) {
|
|
153
155
|
debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`);
|
|
154
156
|
if (!file) {
|
|
155
157
|
file = getTypedFilename(entityId, 'saml');
|
|
@@ -158,7 +160,7 @@ export async function exportSaml2ProviderToFile(entityId, file = null, includeMe
|
|
|
158
160
|
let indicatorId;
|
|
159
161
|
try {
|
|
160
162
|
indicatorId = createProgressIndicator('determinate', 1, `Exporting provider ${entityId}`);
|
|
161
|
-
const fileData = await exportSaml2Provider(entityId);
|
|
163
|
+
const fileData = await exportSaml2Provider(entityId, options);
|
|
162
164
|
saveJsonToFile(fileData, filePath, includeMeta);
|
|
163
165
|
updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);
|
|
164
166
|
stopProgressIndicator(indicatorId,
|
|
@@ -176,13 +178,15 @@ export async function exportSaml2ProviderToFile(entityId, file = null, includeMe
|
|
|
176
178
|
* @param {String} file Optional filename
|
|
177
179
|
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
178
180
|
*/
|
|
179
|
-
export async function exportSaml2ProvidersToFile(file = null, includeMeta = true
|
|
181
|
+
export async function exportSaml2ProvidersToFile(file = null, includeMeta = true, options = {
|
|
182
|
+
deps: true
|
|
183
|
+
}) {
|
|
180
184
|
debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);
|
|
181
185
|
if (!file) {
|
|
182
186
|
file = getTypedFilename(`all${getRealmString()}Providers`, 'saml');
|
|
183
187
|
}
|
|
184
188
|
try {
|
|
185
|
-
const exportData = await exportSaml2Providers();
|
|
189
|
+
const exportData = await exportSaml2Providers(options);
|
|
186
190
|
saveJsonToFile(exportData, getFilePath(file, true), includeMeta);
|
|
187
191
|
} catch (error) {
|
|
188
192
|
var _error$response;
|
|
@@ -196,13 +200,15 @@ export async function exportSaml2ProvidersToFile(file = null, includeMeta = true
|
|
|
196
200
|
* Export all entity providers to individual files
|
|
197
201
|
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
198
202
|
*/
|
|
199
|
-
export async function exportSaml2ProvidersToFiles(includeMeta = true
|
|
203
|
+
export async function exportSaml2ProvidersToFiles(includeMeta = true, options = {
|
|
204
|
+
deps: true
|
|
205
|
+
}) {
|
|
200
206
|
const stubs = await readSaml2ProviderStubs();
|
|
201
207
|
if (stubs.length > 0) {
|
|
202
208
|
const indicatorId = createProgressIndicator('determinate', stubs.length, 'Exporting providers');
|
|
203
209
|
for (const stub of stubs) {
|
|
204
210
|
const file = getFilePath(getTypedFilename(stub.entityId, 'saml'), true);
|
|
205
|
-
const fileData = await exportSaml2Provider(stub.entityId);
|
|
211
|
+
const fileData = await exportSaml2Provider(stub.entityId, options);
|
|
206
212
|
saveJsonToFile(fileData, file, includeMeta);
|
|
207
213
|
updateProgressIndicator(indicatorId, `Exported provider ${stub.entityId}`);
|
|
208
214
|
}
|
package/esm/ops/Saml2Ops.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saml2Ops.js","names":["frodo","fs","createObjectTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","decodeBase64","saveTextToFile","getFilePath","getWorkingDirectory","utils","getTypedFilename","saveJsonToFile","getRealmString","validateImport","readSaml2ProviderStubs","readSaml2Provider","readSaml2ProviderStub","getSaml2ProviderMetadataUrl","getSaml2ProviderMetadata","exportSaml2Provider","exportSaml2Providers","importSaml2Provider","importSaml2Providers","saml2","entityProvider","roleMap","identityProvider","serviceProvider","attributeQueryProvider","xacmlPolicyEnforcementPoint","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","filePath","indicatorId","metaData","brightCyan","exportSaml2ProviderToFile","includeMeta","fileData","err","exportSaml2ProvidersToFile","exportData","_error$response","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","options","deps","data","readFileSync","JSON","parse","importFirstSaml2ProviderFromFile","entityId64","keys","saml","remote","hosted","importSaml2ProvidersFromFile","meta","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","total","result"],"sources":["../../src/ops/Saml2Ops.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { type Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/Saml2Api';\nimport {\n type Saml2ExportInterface,\n type Saml2ProviderImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/Saml2Ops';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\n\nconst { decodeBase64, saveTextToFile, getFilePath, getWorkingDirectory } =\n frodo.utils;\nconst { getTypedFilename, saveJsonToFile, getRealmString, validateImport } =\n frodo.utils;\nconst {\n readSaml2ProviderStubs,\n readSaml2Provider,\n readSaml2ProviderStub,\n getSaml2ProviderMetadataUrl,\n getSaml2ProviderMetadata,\n exportSaml2Provider,\n exportSaml2Providers,\n importSaml2Provider,\n importSaml2Providers,\n} = frodo.saml2.entityProvider;\n\nconst roleMap = {\n identityProvider: 'IDP',\n serviceProvider: 'SP',\n attributeQueryProvider: 'AttrQuery',\n xacmlPolicyEnforcementPoint: 'XACML PEP',\n};\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await readSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await readSaml2ProviderStub(entityId);\n const { location } = stub;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await readSaml2Provider(entityId);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getSaml2ProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString(), 'data');\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n if (!file) {\n file = getTypedFilename(entityId, 'metadata', 'xml');\n }\n const filePath = getFilePath(file, true);\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting metadata for: ${entityId}`\n );\n try {\n updateProgressIndicator(indicatorId, `Writing file ${filePath}`);\n const metaData = await getSaml2ProviderMetadata(entityId);\n saveTextToFile(metaData, filePath);\n updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${entityId.brightCyan} metadata to ${filePath.brightCyan}.`\n );\n } catch (error) {\n stopProgressIndicator(indicatorId, `${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProviderToFile(\n entityId,\n file = null,\n includeMeta = true\n) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n if (!file) {\n file = getTypedFilename(entityId, 'saml');\n }\n const filePath = getFilePath(file, true);\n let indicatorId: string;\n try {\n indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting provider ${entityId}`\n );\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, filePath, includeMeta);\n updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${entityId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${filePath}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProvidersToFile(\n file = null,\n includeMeta = true\n) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProvidersToFiles(includeMeta = true) {\n const stubs = await readSaml2ProviderStubs();\n if (stubs.length > 0) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n stubs.length,\n 'Exporting providers'\n );\n for (const stub of stubs) {\n const file = getFilePath(getTypedFilename(stub.entityId, 'saml'), true);\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, file, includeMeta);\n updateProgressIndicator(\n indicatorId,\n `Exported provider ${stub.entityId}`\n );\n }\n stopProgressIndicator(indicatorId, `${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string,\n options: Saml2ProviderImportOptions = { deps: true }\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${entityId}...`\n );\n try {\n await importSaml2Provider(entityId, fileData, options);\n stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing ${entityId}: ${error.message}`,\n 'fail'\n );\n }\n } catch (error) {\n printMessage(\n `Error importing saml2 provider ${entityId}: ${error}`,\n 'error'\n );\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importFirstSaml2ProviderFromFile(\n file: string,\n options: Saml2ProviderImportOptions = { deps: true }\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId64 =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n const entityId = decodeBase64(entityId64);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${entityId}...`\n );\n try {\n await importSaml2Provider(entityId, fileData, options);\n stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing ${entityId}: ${error.message}`,\n 'fail'\n );\n }\n } catch (error) {\n printMessage(`Error importing first saml2 provider: ${error}`, 'error');\n }\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProvidersFromFile(\n file: string,\n options: Saml2ProviderImportOptions = { deps: true }\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n await importSaml2Providers(fileData, options);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n } catch (error) {\n printMessage(`Error importing saml2 providers: ${error}`, 'error');\n }\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProvidersFromFiles(\n options: Saml2ProviderImportOptions = { deps: true }\n) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.saml.json'))\n .map((name) => getFilePath(name));\n const indicatorId = createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing providers...'\n );\n let total = 0;\n for (const file of jsonFiles) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const result = await importSaml2Providers(fileData, options);\n total += result.length;\n updateProgressIndicator(\n indicatorId,\n `Imported ${result.length} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n } catch (error) {\n printMessage(\n `Error importing providers from ${file}: ${error.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Imported ${total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Saml2Ops.js","names":["frodo","fs","createObjectTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","decodeBase64","saveTextToFile","getFilePath","getWorkingDirectory","utils","getTypedFilename","saveJsonToFile","getRealmString","validateImport","readSaml2ProviderStubs","readSaml2Provider","readSaml2ProviderStub","getSaml2ProviderMetadataUrl","getSaml2ProviderMetadata","exportSaml2Provider","exportSaml2Providers","importSaml2Provider","importSaml2Providers","saml2","entityProvider","roleMap","identityProvider","serviceProvider","attributeQueryProvider","xacmlPolicyEnforcementPoint","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","filePath","indicatorId","metaData","brightCyan","exportSaml2ProviderToFile","includeMeta","options","deps","fileData","err","exportSaml2ProvidersToFile","exportData","_error$response","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","data","readFileSync","JSON","parse","importFirstSaml2ProviderFromFile","entityId64","keys","saml","remote","hosted","importSaml2ProvidersFromFile","meta","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","total","result"],"sources":["../../src/ops/Saml2Ops.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { type Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/Saml2Api';\nimport type {\n Saml2EntitiesExportOptions,\n Saml2EntitiesImportOptions,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/Saml2Ops';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\n\nconst { decodeBase64, saveTextToFile, getFilePath, getWorkingDirectory } =\n frodo.utils;\nconst { getTypedFilename, saveJsonToFile, getRealmString, validateImport } =\n frodo.utils;\nconst {\n readSaml2ProviderStubs,\n readSaml2Provider,\n readSaml2ProviderStub,\n getSaml2ProviderMetadataUrl,\n getSaml2ProviderMetadata,\n exportSaml2Provider,\n exportSaml2Providers,\n importSaml2Provider,\n importSaml2Providers,\n} = frodo.saml2.entityProvider;\n\nconst roleMap = {\n identityProvider: 'IDP',\n serviceProvider: 'SP',\n attributeQueryProvider: 'AttrQuery',\n xacmlPolicyEnforcementPoint: 'XACML PEP',\n};\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await readSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await readSaml2ProviderStub(entityId);\n const { location } = stub;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await readSaml2Provider(entityId);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getSaml2ProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString(), 'data');\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n if (!file) {\n file = getTypedFilename(entityId, 'metadata', 'xml');\n }\n const filePath = getFilePath(file, true);\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting metadata for: ${entityId}`\n );\n try {\n updateProgressIndicator(indicatorId, `Writing file ${filePath}`);\n const metaData = await getSaml2ProviderMetadata(entityId);\n saveTextToFile(metaData, filePath);\n updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${entityId.brightCyan} metadata to ${filePath.brightCyan}.`\n );\n } catch (error) {\n stopProgressIndicator(indicatorId, `${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProviderToFile(\n entityId: string,\n file: string = null,\n includeMeta = true,\n options: Saml2EntitiesExportOptions = { deps: true }\n) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n if (!file) {\n file = getTypedFilename(entityId, 'saml');\n }\n const filePath = getFilePath(file, true);\n let indicatorId: string;\n try {\n indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting provider ${entityId}`\n );\n const fileData = await exportSaml2Provider(entityId, options);\n saveJsonToFile(fileData, filePath, includeMeta);\n updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${entityId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${filePath}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProvidersToFile(\n file: string = null,\n includeMeta = true,\n options: Saml2EntitiesExportOptions = { deps: true }\n) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers(options);\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProvidersToFiles(\n includeMeta = true,\n options: Saml2EntitiesExportOptions = { deps: true }\n) {\n const stubs = await readSaml2ProviderStubs();\n if (stubs.length > 0) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n stubs.length,\n 'Exporting providers'\n );\n for (const stub of stubs) {\n const file = getFilePath(getTypedFilename(stub.entityId, 'saml'), true);\n const fileData = await exportSaml2Provider(stub.entityId, options);\n saveJsonToFile(fileData, file, includeMeta);\n updateProgressIndicator(\n indicatorId,\n `Exported provider ${stub.entityId}`\n );\n }\n stopProgressIndicator(indicatorId, `${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string,\n options: Saml2EntitiesImportOptions = { deps: true }\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${entityId}...`\n );\n try {\n await importSaml2Provider(entityId, fileData, options);\n stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing ${entityId}: ${error.message}`,\n 'fail'\n );\n }\n } catch (error) {\n printMessage(\n `Error importing saml2 provider ${entityId}: ${error}`,\n 'error'\n );\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importFirstSaml2ProviderFromFile(\n file: string, \n options: Saml2EntitiesImportOptions = { deps: true }) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId64 =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n const entityId = decodeBase64(entityId64);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${entityId}...`\n );\n try {\n await importSaml2Provider(entityId, fileData, options);\n stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing ${entityId}: ${error.message}`,\n 'fail'\n );\n }\n } catch (error) {\n printMessage(`Error importing first saml2 provider: ${error}`, 'error');\n }\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProvidersFromFile(\n file: string,\n options: Saml2EntitiesImportOptions = { deps: true }\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n await importSaml2Providers(fileData, options);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n } catch (error) {\n printMessage(`Error importing saml2 providers: ${error}`, 'error');\n }\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProvidersFromFiles(\n options: Saml2EntitiesImportOptions = { deps: true }\n) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.saml.json'))\n .map((name) => getFilePath(name));\n const indicatorId = createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing providers...'\n );\n let total = 0;\n for (const file of jsonFiles) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const result = await importSaml2Providers(fileData, options);\n total += result.length;\n updateProgressIndicator(\n indicatorId,\n `Imported ${result.length} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n } catch (error) {\n printMessage(\n `Error importing providers from ${file}: ${error.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Imported ${total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"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"}
|
package/esm/ops/SecretsOps.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
|
+
import fs from 'fs';
|
|
2
3
|
import { getFullExportConfig, isIdUsed } from '../utils/Config';
|
|
3
4
|
import { createKeyValueTable, createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
|
|
4
5
|
import wordwrap from './utils/Wordwrap';
|
|
@@ -122,6 +123,29 @@ export async function createSecret(id, value, description, encoding, useInPlaceh
|
|
|
122
123
|
return outcome;
|
|
123
124
|
}
|
|
124
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Create PEM certificate from file
|
|
128
|
+
* @param {string} id secret id
|
|
129
|
+
* @param {string} file certificate file name
|
|
130
|
+
* @param {string} description secret description
|
|
131
|
+
* @param {SecretEncodingType} encoding secret encoding
|
|
132
|
+
* @param {boolean} useInPlaceholders use secret in placeholders
|
|
133
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
134
|
+
*/
|
|
135
|
+
export async function createSecretFromFile(id, file, description, encoding, useInPlaceholders) {
|
|
136
|
+
let outcome = false;
|
|
137
|
+
const value = fs.readFileSync(getFilePath(file), 'utf8');
|
|
138
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Creating secret ${id}...`);
|
|
139
|
+
try {
|
|
140
|
+
await _createSecret(id, value, description, encoding, useInPlaceholders);
|
|
141
|
+
stopProgressIndicator(spinnerId, `Created secret ${id}`, 'success');
|
|
142
|
+
outcome = true;
|
|
143
|
+
} catch (error) {
|
|
144
|
+
stopProgressIndicator(spinnerId, error.response ? `Error: ${error.response.data.code} - ${error.response.data.message}` : error, 'fail');
|
|
145
|
+
}
|
|
146
|
+
return outcome;
|
|
147
|
+
}
|
|
148
|
+
|
|
125
149
|
/**
|
|
126
150
|
* Set description of secret
|
|
127
151
|
* @param {string} secretId secret id
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretsOps.js","names":["frodo","state","getFullExportConfig","isIdUsed","createKeyValueTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","wordwrap","resolveUserName","idm","managed","readSecrets","createSecret","_createSecret","readVersionsOfSecret","readSecret","exportSecret","exportSecrets","enableVersionOfSecret","disableVersionOfSecret","createVersionOfSecret","_createVersionOfSecret","updateSecretDescription","deleteSecret","_deleteSecret","deleteVersionOfSecret","_deleteVersionOfSecret","cloud","secret","getFilePath","getTypedFilename","saveJsonToFile","saveToFile","titleCase","utils","listSecrets","long","usage","file","spinnerId","secrets","sort","a","b","_id","localeCompare","length","error","_error$response","response","data","message","forEach","variable","fullExport","headers","hAlign","content","_error$response2","push","table","lastChangedBy","getUseBearerTokenForAmApis","values","activeVersion","loadedVersion","loaded","description","Date","lastChangeDate","toUTCString","isEsvUsed","used","location","toString","id","value","encoding","useInPlaceholders","outcome","code","setSecretDescription","secretId","deleteSecrets","_error$response3","indicatorId","listSecretVersions","versions","_error$response4","statusMap","ENABLED","DISABLED","DESTROYED","version","status","createDate","toLocaleString","describeSecret","_error$response5","exportSecretToFile","includeMeta","fileName","filePath","fileData","_error$response6","exportSecretsToFile","getRealm","secretsExport","_error$response7","exportSecretsToFiles","_error$response8","activateVersionOfSecret","deactivateVersionOfSecret"],"sources":["../../src/ops/SecretsOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n SecretEncodingType,\n SecretSkeleton,\n VersionOfSecretSkeleton,\n} from '@rockcarver/frodo-lib/types/api/cloud/SecretsApi';\n\nimport { getFullExportConfig, isIdUsed } from '../utils/Config';\nimport {\n createKeyValueTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\n\nconst { resolveUserName } = frodo.idm.managed;\nconst {\n readSecrets,\n createSecret: _createSecret,\n readVersionsOfSecret,\n readSecret,\n exportSecret,\n exportSecrets,\n enableVersionOfSecret,\n disableVersionOfSecret,\n createVersionOfSecret: _createVersionOfSecret,\n updateSecretDescription,\n deleteSecret: _deleteSecret,\n deleteVersionOfSecret: _deleteVersionOfSecret,\n} = frodo.cloud.secret;\n\nconst { getFilePath, getTypedFilename, saveJsonToFile, saveToFile, titleCase } =\n frodo.utils;\n\n/**\n * List secrets\n * @param {boolean} long Long version, all the fields besides usage\n * @param {boolean} usage Display usage field\n * @param {String | null} file Optional filename to determine usage\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listSecrets(\n long: boolean = false,\n usage: boolean = false,\n file: string | null = null\n): Promise<boolean> {\n let spinnerId: string;\n let secrets: SecretSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n return false;\n }\n if (!long && !usage) {\n secrets.forEach((variable) => {\n printMessage(variable._id, 'data');\n });\n return true;\n }\n let fullExport = null;\n const headers = long\n ? [\n 'Id'['brightCyan'],\n { hAlign: 'right', content: 'Active\\nVersion'['brightCyan'] },\n { hAlign: 'right', content: 'Loaded\\nVersion'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]\n : ['Id'['brightCyan']];\n if (usage) {\n try {\n fullExport = await getFullExportConfig(file);\n } catch (error) {\n printMessage(\n `Error getting full export: ${error.response?.data || error.message}`,\n 'error'\n );\n return false;\n }\n //Delete secrets from full export so they aren't mistakenly used for determining usage\n delete fullExport.secrets;\n headers.push('Used'['brightCyan']);\n }\n const table = createTable(headers);\n for (const secret of secrets) {\n let lastChangedBy = secret.lastChangedBy;\n if (long) {\n try {\n lastChangedBy = state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy);\n } catch (error) {\n // ignore\n }\n }\n const values = long\n ? [\n secret._id,\n { hAlign: 'right', content: secret.activeVersion },\n { hAlign: 'right', content: secret.loadedVersion },\n secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(secret.description, 40),\n lastChangedBy,\n new Date(secret.lastChangeDate).toUTCString(),\n ]\n : [secret._id];\n if (usage) {\n const isEsvUsed = isIdUsed(fullExport, secret._id, true);\n values.push(\n isEsvUsed.used\n ? `${'yes'['brightGreen']} (at ${isEsvUsed.location})`\n : 'no'['brightRed']\n );\n }\n table.push(values);\n }\n printMessage(table.toString(), 'data');\n return true;\n}\n\n/**\n * Create secret\n * @param {string} id secret id\n * @param {string} value secret value\n * @param {string} description secret description\n * @param {SecretEncodingType} encoding secret encoding\n * @param {boolean} useInPlaceholders use secret in placeholders\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createSecret(\n id: string,\n value: string,\n description: string,\n encoding: SecretEncodingType,\n useInPlaceholders: boolean\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating secret ${id}...`\n );\n try {\n await _createSecret(id, value, description, encoding, useInPlaceholders);\n stopProgressIndicator(spinnerId, `Created secret ${id}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Set description of secret\n * @param {string} secretId secret id\n * @param {string} description secret description\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function setSecretDescription(\n secretId: string,\n description: string\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Setting description of secret ${secretId}...`\n );\n try {\n await updateSecretDescription(secretId, description);\n stopProgressIndicator(\n spinnerId,\n `Set description of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete a secret\n * @param {string} secretId secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteSecret(secretId: string): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting secret ${secretId}...`\n );\n try {\n await _deleteSecret(secretId);\n stopProgressIndicator(spinnerId, `Deleted secret ${secretId}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete all secrets\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteSecrets(): Promise<boolean> {\n let outcome = false;\n let secrets: SecretSkeleton[] = [];\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const indicatorId = createProgressIndicator(\n 'determinate',\n secrets.length,\n `Deleting secrets...`\n );\n try {\n for (const secret of secrets) {\n try {\n await _deleteSecret(secret._id);\n updateProgressIndicator(indicatorId, `Deleted secret ${secret._id}`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(indicatorId, `Secrets deleted.`);\n outcome = true;\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n return outcome;\n}\n\n/**\n * List all the versions of the secret\n * @param {String} secretId secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listSecretVersions(secretId): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let versions: VersionOfSecretSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secret versions...`\n );\n versions = await readVersionsOfSecret(secretId);\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${versions.length} secret versions.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secret versions: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const table = createTable([\n { hAlign: 'right', content: 'Version'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Loaded'['brightCyan'],\n 'Created'['brightCyan'],\n ]);\n const statusMap = {\n ENABLED: 'active'['brightGreen'],\n DISABLED: 'inactive'['brightRed'],\n DESTROYED: 'deleted'['brightRed'],\n };\n for (const version of versions) {\n table.push([\n { hAlign: 'right', content: version.version },\n statusMap[version.status],\n version.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n new Date(version.createDate).toLocaleString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n outcome = true;\n return outcome;\n}\n\n/**\n * Describe a secret\n * @param {string} secretId Secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeSecret(secretId: string): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let secret: SecretSkeleton = null;\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secret ${secretId}...`\n );\n secret = await readSecret(secretId);\n stopProgressIndicator(\n spinnerId,\n `Successfully read secret ${secretId}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secret ${secretId}: ${\n error.response?.data || error.message\n }`,\n 'fail'\n );\n }\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], secret._id]);\n table.push(['Active Version'['brightCyan'], secret.activeVersion]);\n table.push(['Loaded Version'['brightCyan'], secret.loadedVersion]);\n table.push([\n 'Status'['brightCyan'],\n secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push(['Description'['brightCyan'], wordwrap(secret.description, 60)]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(secret.lastChangeDate).toLocaleString(),\n ]);\n let lastChangedBy = secret.lastChangedBy;\n try {\n lastChangedBy = state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy);\n } catch (error) {\n // ignore\n }\n table.push(['Modifier'['brightCyan'], lastChangedBy]);\n table.push(['Modifier UUID'['brightCyan'], secret.lastChangedBy]);\n table.push(['Encoding'['brightCyan'], secret.encoding]);\n table.push(['Use In Placeholders'['brightCyan'], secret.useInPlaceholders]);\n printMessage(table.toString(), 'data');\n printMessage('\\nSecret Versions:', 'data');\n await listSecretVersions(secretId);\n outcome = true;\n return outcome;\n}\n\n/**\n * Export a single secret to file\n * @param {String} secretId Secret id\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretToFile(\n secretId: string,\n file: string | null,\n includeMeta: boolean\n): Promise<boolean> {\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: start [secretId=${secretId}, file=${file}]`\n );\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(secretId, 'secret');\n }\n const filePath = getFilePath(fileName, true);\n let spinnerId: string;\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting secret ${secretId}`\n );\n const fileData = await exportSecret(secretId);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${secretId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error exporting secret: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: end [outcome=${outcome}, secretId=${secretId}, file=${file}]`\n );\n return outcome;\n}\n\n/**\n * Export all secrets to single file\n * @param {string} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretsToFile(\n file: string,\n includeMeta: boolean\n): Promise<boolean> {\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: start [file=${file}]`);\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Secrets`,\n 'secret'\n );\n }\n try {\n const secretsExport = await exportSecrets();\n saveJsonToFile(secretsExport, getFilePath(fileName, true), includeMeta);\n outcome = true;\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportSecretsToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: end [file=${file}]`);\n return outcome;\n}\n\n/**\n * Export all secrets to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretsToFiles(\n includeMeta: boolean\n): Promise<boolean> {\n let outcome = false;\n let secrets: SecretSkeleton[] = [];\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const indicatorId = createProgressIndicator(\n 'determinate',\n secrets.length,\n 'Exporting secrets'\n );\n for (const secret of secrets) {\n updateProgressIndicator(indicatorId, `Writing secret ${secret._id}`);\n const fileName = getTypedFilename(secret._id, 'secret');\n saveToFile(\n 'secret',\n secret,\n '_id',\n getFilePath(fileName, true),\n includeMeta\n );\n }\n stopProgressIndicator(indicatorId, `${secrets.length} secrets exported.`);\n outcome = true;\n return outcome;\n}\n\n/**\n * Create new version of secret\n * @param {string} secretId secret id\n * @param {string} value secret value\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createVersionOfSecret(\n secretId: string,\n value: string\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating new version of secret ${secretId}...`\n );\n try {\n const version = await _createVersionOfSecret(secretId, value);\n stopProgressIndicator(\n spinnerId,\n `Created version ${version.version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Activate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function activateVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Activating version ${version} of secret ${secretId}...`\n );\n try {\n await enableVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Activated version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Deactivate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deactivateVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deactivating version ${version} of secret ${secretId}...`\n );\n try {\n await disableVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Deactivated version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete version of secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting version ${version} of secret ${secretId}...`\n );\n try {\n await _deleteVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Deleted version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SecretsOps.js","names":["frodo","state","fs","getFullExportConfig","isIdUsed","createKeyValueTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","wordwrap","resolveUserName","idm","managed","readSecrets","createSecret","_createSecret","readVersionsOfSecret","readSecret","exportSecret","exportSecrets","enableVersionOfSecret","disableVersionOfSecret","createVersionOfSecret","_createVersionOfSecret","updateSecretDescription","deleteSecret","_deleteSecret","deleteVersionOfSecret","_deleteVersionOfSecret","cloud","secret","getFilePath","getTypedFilename","saveJsonToFile","saveToFile","titleCase","utils","listSecrets","long","usage","file","spinnerId","secrets","sort","a","b","_id","localeCompare","length","error","_error$response","response","data","message","forEach","variable","fullExport","headers","hAlign","content","_error$response2","push","table","lastChangedBy","getUseBearerTokenForAmApis","values","activeVersion","loadedVersion","loaded","description","Date","lastChangeDate","toUTCString","isEsvUsed","used","location","toString","id","value","encoding","useInPlaceholders","outcome","code","createSecretFromFile","readFileSync","setSecretDescription","secretId","deleteSecrets","_error$response3","indicatorId","listSecretVersions","versions","_error$response4","statusMap","ENABLED","DISABLED","DESTROYED","version","status","createDate","toLocaleString","describeSecret","_error$response5","exportSecretToFile","includeMeta","fileName","filePath","fileData","_error$response6","exportSecretsToFile","getRealm","secretsExport","_error$response7","exportSecretsToFiles","_error$response8","activateVersionOfSecret","deactivateVersionOfSecret"],"sources":["../../src/ops/SecretsOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n SecretEncodingType,\n SecretSkeleton,\n VersionOfSecretSkeleton,\n} from '@rockcarver/frodo-lib/types/api/cloud/SecretsApi';\nimport fs from 'fs';\n\nimport { getFullExportConfig, isIdUsed } from '../utils/Config';\nimport {\n createKeyValueTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\n\nconst { resolveUserName } = frodo.idm.managed;\nconst {\n readSecrets,\n createSecret: _createSecret,\n readVersionsOfSecret,\n readSecret,\n exportSecret,\n exportSecrets,\n enableVersionOfSecret,\n disableVersionOfSecret,\n createVersionOfSecret: _createVersionOfSecret,\n updateSecretDescription,\n deleteSecret: _deleteSecret,\n deleteVersionOfSecret: _deleteVersionOfSecret,\n} = frodo.cloud.secret;\n\nconst { getFilePath, getTypedFilename, saveJsonToFile, saveToFile, titleCase } =\n frodo.utils;\n\n/**\n * List secrets\n * @param {boolean} long Long version, all the fields besides usage\n * @param {boolean} usage Display usage field\n * @param {String | null} file Optional filename to determine usage\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listSecrets(\n long: boolean = false,\n usage: boolean = false,\n file: string | null = null\n): Promise<boolean> {\n let spinnerId: string;\n let secrets: SecretSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n return false;\n }\n if (!long && !usage) {\n secrets.forEach((variable) => {\n printMessage(variable._id, 'data');\n });\n return true;\n }\n let fullExport = null;\n const headers = long\n ? [\n 'Id'['brightCyan'],\n { hAlign: 'right', content: 'Active\\nVersion'['brightCyan'] },\n { hAlign: 'right', content: 'Loaded\\nVersion'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]\n : ['Id'['brightCyan']];\n if (usage) {\n try {\n fullExport = await getFullExportConfig(file);\n } catch (error) {\n printMessage(\n `Error getting full export: ${error.response?.data || error.message}`,\n 'error'\n );\n return false;\n }\n //Delete secrets from full export so they aren't mistakenly used for determining usage\n delete fullExport.secrets;\n headers.push('Used'['brightCyan']);\n }\n const table = createTable(headers);\n for (const secret of secrets) {\n let lastChangedBy = secret.lastChangedBy;\n if (long) {\n try {\n lastChangedBy = state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy);\n } catch (error) {\n // ignore\n }\n }\n const values = long\n ? [\n secret._id,\n { hAlign: 'right', content: secret.activeVersion },\n { hAlign: 'right', content: secret.loadedVersion },\n secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(secret.description, 40),\n lastChangedBy,\n new Date(secret.lastChangeDate).toUTCString(),\n ]\n : [secret._id];\n if (usage) {\n const isEsvUsed = isIdUsed(fullExport, secret._id, true);\n values.push(\n isEsvUsed.used\n ? `${'yes'['brightGreen']} (at ${isEsvUsed.location})`\n : 'no'['brightRed']\n );\n }\n table.push(values);\n }\n printMessage(table.toString(), 'data');\n return true;\n}\n\n/**\n * Create secret\n * @param {string} id secret id\n * @param {string} value secret value\n * @param {string} description secret description\n * @param {SecretEncodingType} encoding secret encoding\n * @param {boolean} useInPlaceholders use secret in placeholders\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createSecret(\n id: string,\n value: string,\n description: string,\n encoding: SecretEncodingType,\n useInPlaceholders: boolean\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating secret ${id}...`\n );\n try {\n await _createSecret(id, value, description, encoding, useInPlaceholders);\n stopProgressIndicator(spinnerId, `Created secret ${id}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Create PEM certificate from file\n * @param {string} id secret id\n * @param {string} file certificate file name\n * @param {string} description secret description\n * @param {SecretEncodingType} encoding secret encoding\n * @param {boolean} useInPlaceholders use secret in placeholders\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createSecretFromFile(\n id: string,\n file: string,\n description: string,\n encoding: SecretEncodingType,\n useInPlaceholders: boolean\n): Promise<boolean> {\n let outcome = false;\n const value = fs.readFileSync(getFilePath(file), 'utf8');\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating secret ${id}...`\n );\n try {\n await _createSecret(id, value, description, encoding, useInPlaceholders);\n stopProgressIndicator(spinnerId, `Created secret ${id}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Set description of secret\n * @param {string} secretId secret id\n * @param {string} description secret description\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function setSecretDescription(\n secretId: string,\n description: string\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Setting description of secret ${secretId}...`\n );\n try {\n await updateSecretDescription(secretId, description);\n stopProgressIndicator(\n spinnerId,\n `Set description of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete a secret\n * @param {string} secretId secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteSecret(secretId: string): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting secret ${secretId}...`\n );\n try {\n await _deleteSecret(secretId);\n stopProgressIndicator(spinnerId, `Deleted secret ${secretId}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete all secrets\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteSecrets(): Promise<boolean> {\n let outcome = false;\n let secrets: SecretSkeleton[] = [];\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const indicatorId = createProgressIndicator(\n 'determinate',\n secrets.length,\n `Deleting secrets...`\n );\n try {\n for (const secret of secrets) {\n try {\n await _deleteSecret(secret._id);\n updateProgressIndicator(indicatorId, `Deleted secret ${secret._id}`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(indicatorId, `Secrets deleted.`);\n outcome = true;\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n return outcome;\n}\n\n/**\n * List all the versions of the secret\n * @param {String} secretId secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listSecretVersions(secretId): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let versions: VersionOfSecretSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secret versions...`\n );\n versions = await readVersionsOfSecret(secretId);\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${versions.length} secret versions.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secret versions: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const table = createTable([\n { hAlign: 'right', content: 'Version'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Loaded'['brightCyan'],\n 'Created'['brightCyan'],\n ]);\n const statusMap = {\n ENABLED: 'active'['brightGreen'],\n DISABLED: 'inactive'['brightRed'],\n DESTROYED: 'deleted'['brightRed'],\n };\n for (const version of versions) {\n table.push([\n { hAlign: 'right', content: version.version },\n statusMap[version.status],\n version.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n new Date(version.createDate).toLocaleString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n outcome = true;\n return outcome;\n}\n\n/**\n * Describe a secret\n * @param {string} secretId Secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeSecret(secretId: string): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let secret: SecretSkeleton = null;\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secret ${secretId}...`\n );\n secret = await readSecret(secretId);\n stopProgressIndicator(\n spinnerId,\n `Successfully read secret ${secretId}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secret ${secretId}: ${\n error.response?.data || error.message\n }`,\n 'fail'\n );\n }\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], secret._id]);\n table.push(['Active Version'['brightCyan'], secret.activeVersion]);\n table.push(['Loaded Version'['brightCyan'], secret.loadedVersion]);\n table.push([\n 'Status'['brightCyan'],\n secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push(['Description'['brightCyan'], wordwrap(secret.description, 60)]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(secret.lastChangeDate).toLocaleString(),\n ]);\n let lastChangedBy = secret.lastChangedBy;\n try {\n lastChangedBy = state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy);\n } catch (error) {\n // ignore\n }\n table.push(['Modifier'['brightCyan'], lastChangedBy]);\n table.push(['Modifier UUID'['brightCyan'], secret.lastChangedBy]);\n table.push(['Encoding'['brightCyan'], secret.encoding]);\n table.push(['Use In Placeholders'['brightCyan'], secret.useInPlaceholders]);\n printMessage(table.toString(), 'data');\n printMessage('\\nSecret Versions:', 'data');\n await listSecretVersions(secretId);\n outcome = true;\n return outcome;\n}\n\n/**\n * Export a single secret to file\n * @param {String} secretId Secret id\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretToFile(\n secretId: string,\n file: string | null,\n includeMeta: boolean\n): Promise<boolean> {\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: start [secretId=${secretId}, file=${file}]`\n );\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(secretId, 'secret');\n }\n const filePath = getFilePath(fileName, true);\n let spinnerId: string;\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting secret ${secretId}`\n );\n const fileData = await exportSecret(secretId);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${secretId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error exporting secret: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: end [outcome=${outcome}, secretId=${secretId}, file=${file}]`\n );\n return outcome;\n}\n\n/**\n * Export all secrets to single file\n * @param {string} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretsToFile(\n file: string,\n includeMeta: boolean\n): Promise<boolean> {\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: start [file=${file}]`);\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Secrets`,\n 'secret'\n );\n }\n try {\n const secretsExport = await exportSecrets();\n saveJsonToFile(secretsExport, getFilePath(fileName, true), includeMeta);\n outcome = true;\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportSecretsToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: end [file=${file}]`);\n return outcome;\n}\n\n/**\n * Export all secrets to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretsToFiles(\n includeMeta: boolean\n): Promise<boolean> {\n let outcome = false;\n let secrets: SecretSkeleton[] = [];\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const indicatorId = createProgressIndicator(\n 'determinate',\n secrets.length,\n 'Exporting secrets'\n );\n for (const secret of secrets) {\n updateProgressIndicator(indicatorId, `Writing secret ${secret._id}`);\n const fileName = getTypedFilename(secret._id, 'secret');\n saveToFile(\n 'secret',\n secret,\n '_id',\n getFilePath(fileName, true),\n includeMeta\n );\n }\n stopProgressIndicator(indicatorId, `${secrets.length} secrets exported.`);\n outcome = true;\n return outcome;\n}\n\n/**\n * Create new version of secret\n * @param {string} secretId secret id\n * @param {string} value secret value\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createVersionOfSecret(\n secretId: string,\n value: string\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating new version of secret ${secretId}...`\n );\n try {\n const version = await _createVersionOfSecret(secretId, value);\n stopProgressIndicator(\n spinnerId,\n `Created version ${version.version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Activate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function activateVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Activating version ${version} of secret ${secretId}...`\n );\n try {\n await enableVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Activated version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Deactivate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deactivateVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deactivating version ${version} of secret ${secretId}...`\n );\n try {\n await disableVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Deactivated version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete version of secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting version ${version} of secret ${secretId}...`\n );\n try {\n await _deleteVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Deleted version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rockcarver/frodo-cli",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-45",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
|
|
6
6
|
"keywords": [
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
]
|
|
117
117
|
},
|
|
118
118
|
"dependencies": {
|
|
119
|
-
"@rockcarver/frodo-lib": "2.0.0-
|
|
119
|
+
"@rockcarver/frodo-lib": "2.0.0-64",
|
|
120
120
|
"chokidar": "^3.5.3",
|
|
121
121
|
"cli-progress": "^3.11.2",
|
|
122
122
|
"cli-table3": "^0.6.3",
|