@rockcarver/frodo-cli 2.0.0-44 → 2.0.0-46

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 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
+ ## [2.0.0-45] - 2024-01-16
11
+
12
+ ### Added
13
+
14
+ - pem and base64hmac encoded ESV secret creation
15
+
16
+ ## [2.0.0-44] - 2024-01-11
17
+
10
18
  ## [2.0.0-43] - 2024-01-05
11
19
 
12
20
  ## [2.0.0-42] - 2024-01-04
@@ -1453,7 +1461,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1453
1461
  - Fixed problem with adding connection profiles
1454
1462
  - Miscellaneous bug fixes
1455
1463
 
1456
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-43...HEAD
1464
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-45...HEAD
1465
+
1466
+ [2.0.0-45]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-44...v2.0.0-45
1467
+
1468
+ [2.0.0-44]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-43...v2.0.0-44
1457
1469
 
1458
1470
  [2.0.0-43]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-42...v2.0.0-43
1459
1471
 
@@ -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.').requiredOption('--value <value>', 'Secret value.').option('--description [description]', 'Secret description.').addOption(new Option('--encoding [encoding]', 'Secret encoding. Must be one of "generic", "pem", "base64hmac"').default('generic', 'generic')).addOption(new Option('--no-use-in-placeholders', 'Secret cannot be used in placeholders.')).action(
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
- const outcome = await createSecret(options.secretId, options.value, options.description, options.encoding, options.useInPlaceholders);
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","secretId","value","encoding","useInPlaceholders","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 } 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 .requiredOption('--value <value>', 'Secret value.')\n .option('--description [description]', 'Secret description.')\n .addOption(\n new Option(\n '--encoding [encoding]',\n 'Secret encoding. Must be one of \"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 const outcome = await createSecret(\n options.secretId,\n options.value,\n options.description,\n options.encoding,\n options.useInPlaceholders\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,QAAQ,sBAAsB;AACnD,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,yBAAyB,CAAC;AAE3DG,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,cAAc,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAC3DA,cAAc,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAClDC,MAAM,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,CAC5DC,SAAS,CACR,IAAIV,MAAM,CACR,uBAAuB,EACvB,gEACF,CAAC,CAACW,OAAO,CAAC,SAAS,EAAE,SAAS,CAChC,CAAC,CACAD,SAAS,CACR,IAAIV,MAAM,CACR,0BAA0B,EAC1B,wCACF,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,IAAI,MAAMd,SAAS,CAAC,CAAC,EAAE;IACrBF,cAAc,CAAC,oBAAoB,CAAC;IACpC,MAAMkB,OAAO,GAAG,MAAMnB,YAAY,CAChCgB,OAAO,CAACI,QAAQ,EAChBJ,OAAO,CAACK,KAAK,EACbL,OAAO,CAACV,WAAW,EACnBU,OAAO,CAACM,QAAQ,EAChBN,OAAO,CAACO,iBACV,CAAC;IACD,IAAI,CAACJ,OAAO,EAAEK,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;AAEHpB,OAAO,CAACqB,KAAK,CAAC,CAAC"}
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"}
@@ -1,19 +1,24 @@
1
1
  import { frodo } from '@rockcarver/frodo-lib';
2
2
  import { Option } from 'commander';
3
- import { createVersionOfSecret } from '../../ops/SecretsOps';
3
+ import { createVersionOfSecret, createVersionOfSecretFromFile } 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 version create');
10
- program.description('Create new version of secret.').addOption(new Option('-i, --secret-id <secret-id>', 'Secret id.')).addOption(new Option('--value <value>', 'Secret value.')).action(
10
+ program.description('Create new version of secret.').addOption(new Option('-i, --secret-id <secret-id>', 'Secret id.')).addOption(new Option('--value <value>', 'Secret value.')).addOption(new Option('-f, --file [file]', 'Name of the file to read pem or base64hmac encoded secret from. Ignored if --value is specified')).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 new version of secret...');
16
- const outcome = await createVersionOfSecret(options.secretId, options.value);
16
+ let outcome = null;
17
+ if (options.value) {
18
+ outcome = await createVersionOfSecret(options.secretId, options.value);
19
+ } else {
20
+ outcome = await createVersionOfSecretFromFile(options.secretId, options.file);
21
+ }
17
22
  if (!outcome) process.exitCode = 1;
18
23
  } else {
19
24
  process.exitCode = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"esv-secret-version-create.js","names":["frodo","Option","createVersionOfSecret","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outcome","secretId","value","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-secret-version-create.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { createVersionOfSecret } 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 version create');\n\nprogram\n .description('Create new version of secret.')\n .addOption(new Option('-i, --secret-id <secret-id>', 'Secret id.'))\n .addOption(new Option('--value <value>', 'Secret value.'))\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 new version of secret...');\n const outcome = await createVersionOfSecret(\n options.secretId,\n options.value\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,qBAAqB,QAAQ,sBAAsB;AAC5D,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,iCAAiC,CAAC;AAEnEG,OAAO,CACJC,WAAW,CAAC,+BAA+B,CAAC,CAC5CC,SAAS,CAAC,IAAIR,MAAM,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC,CAClEQ,SAAS,CAAC,IAAIR,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CACzDS,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,MAAMX,SAAS,CAAC,CAAC,EAAE;IACrBF,cAAc,CAAC,mCAAmC,CAAC;IACnD,MAAMe,OAAO,GAAG,MAAMhB,qBAAqB,CACzCa,OAAO,CAACI,QAAQ,EAChBJ,OAAO,CAACK,KACV,CAAC;IACD,IAAI,CAACF,OAAO,EAAEG,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;AAEHf,OAAO,CAACgB,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"esv-secret-version-create.js","names":["frodo","Option","createVersionOfSecret","createVersionOfSecretFromFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outcome","value","secretId","file","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-secret-version-create.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { createVersionOfSecret, createVersionOfSecretFromFile } 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 version create');\n\nprogram\n .description('Create new version of secret.')\n .addOption(new Option('-i, --secret-id <secret-id>', 'Secret id.'))\n .addOption(new Option('--value <value>', 'Secret value.'))\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 .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 new version of secret...');\n let outcome = null;\n if (options.value) {\n outcome = await createVersionOfSecret(\n options.secretId,\n options.value\n );\n } else {\n outcome = await createVersionOfSecretFromFile(\n options.secretId,\n options.file\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,qBAAqB,EAAEC,6BAA6B,QAAQ,sBAAsB;AAC3F,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,iCAAiC,CAAC;AAEnEG,OAAO,CACJC,WAAW,CAAC,+BAA+B,CAAC,CAC5CC,SAAS,CAAC,IAAIT,MAAM,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC,CAClES,SAAS,CAAC,IAAIT,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CACzDS,SAAS,CACR,IAAIT,MAAM,CACR,mBAAmB,EACnB,iGACF,CACF,CAAC,CACAU,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,MAAMX,SAAS,CAAC,CAAC,EAAE;IACrBF,cAAc,CAAC,mCAAmC,CAAC;IACnD,IAAIe,OAAO,GAAG,IAAI;IAClB,IAAIH,OAAO,CAACI,KAAK,EAAE;MACjBD,OAAO,GAAG,MAAMjB,qBAAqB,CACnCc,OAAO,CAACK,QAAQ,EAChBL,OAAO,CAACI,KACV,CAAC;IACH,CAAC,MAAM;MACLD,OAAO,GAAG,MAAMhB,6BAA6B,CAC3Ca,OAAO,CAACK,QAAQ,EAChBL,OAAO,CAACM,IACV,CAAC;IACH;IACA,IAAI,CAACH,OAAO,EAAEI,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;AAEHhB,OAAO,CAACiB,KAAK,CAAC,CAAC"}
@@ -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 secret from file (pem / base64hmac)
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
@@ -374,6 +398,26 @@ export async function createVersionOfSecret(secretId, value) {
374
398
  return outcome;
375
399
  }
376
400
 
401
+ /**
402
+ * Create new version of secret from file
403
+ * @param {string} secretId secret id
404
+ * @param {string} file filename
405
+ * @returns {Promise<boolean>} true if successful, false otherwise
406
+ */
407
+ export async function createVersionOfSecretFromFile(secretId, file) {
408
+ let outcome = false;
409
+ const value = fs.readFileSync(getFilePath(file), 'utf8');
410
+ const spinnerId = createProgressIndicator('indeterminate', 0, `Creating new version of secret ${secretId}...`);
411
+ try {
412
+ const version = await _createVersionOfSecret(secretId, value);
413
+ stopProgressIndicator(spinnerId, `Created version ${version.version} of secret ${secretId}`, 'success');
414
+ outcome = true;
415
+ } catch (error) {
416
+ stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
417
+ }
418
+ return outcome;
419
+ }
420
+
377
421
  /**
378
422
  * Activate a version of a secret
379
423
  * @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","createVersionOfSecretFromFile","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 secret from file (pem / base64hmac)\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 * Create new version of secret from file\n * @param {string} secretId secret id\n * @param {string} file filename\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createVersionOfSecretFromFile(\n secretId: string,\n file: string\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 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-44",
3
+ "version": "2.0.0-46",
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-60",
119
+ "@rockcarver/frodo-lib": "2.0.0-66",
120
120
  "chokidar": "^3.5.3",
121
121
  "cli-progress": "^3.11.2",
122
122
  "cli-table3": "^0.6.3",