@rockcarver/frodo-cli 2.0.0-29 → 2.0.0-30

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
@@ -9,6 +9,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ### Added
11
11
 
12
+ - \#283: Support for authentication settings:
13
+
14
+ - `frodo authn` Manage authentication setting.
15
+ - `describe` List authentication settings.
16
+ - `export` Export authentication settings.
17
+ - `import` Import authentication settings.
18
+
19
+ Examples:
20
+
21
+ - Describe authentication settings:<br>
22
+ `frodo authn describe <myTenant> <realm>`
23
+
24
+ `frodo authn describe --json <myTenant> <realm>`
25
+
26
+ `frodo authn describe <myTenant> <username> <password>`
27
+ - Describe authentication settings in machine-readable format (json):<br>
28
+ `frodo authn describe --json <myTenant> <realm>`
29
+
30
+ `frodo authn describe --json <myTenant> <realm> <username> <password>`
31
+ - Export authentication settings to file:<br>
32
+ `frodo authn export <myTenant> <realm>`
33
+
34
+ `frodo authn export <myTenant> <realm> <username> <password>`
35
+ - Import authentication settings from file:<br>
36
+ `frodo authn import -f alphaRealm.authentication.settings.json <myTenant> <realm>`
37
+
38
+ `frodo authn import -f alphaRealm.authentication.settings.json <myTenant> <realm> <username> <password>`<br>
39
+
40
+ - \#217: Support `--json` with `frodo esv variable describe`.
41
+
42
+ ## [2.0.0-29] - 2023-11-02
43
+
44
+ ### Added
45
+
12
46
  - rockcarver/frodo-lib#53: Frodo Library now uses a file-based secure token cache to persist session and access tokens for re-use. The cached tokens are protected by the credential that was used to obtain them. Session tokens are encrypted using the hashed password as the master key, access tokens are encrypted using the hashed JWK private key as the master key. Therefore only users and processes with the correct credentials can access the tokens in the cache.
13
47
 
14
48
  - The new default behavior is for Frodo CLI to use the new token cache for all applicable commands.
@@ -1388,7 +1422,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1388
1422
  - Fixed problem with adding connection profiles
1389
1423
  - Miscellaneous bug fixes
1390
1424
 
1391
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-28...HEAD
1425
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-29...HEAD
1426
+
1427
+ [2.0.0-29]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-28...v2.0.0-29
1392
1428
 
1393
1429
  [2.0.0-28]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-27...v2.0.0-28
1394
1430
 
package/esm/app.js CHANGED
@@ -5,6 +5,7 @@ import { Command } from 'commander';
5
5
  import admin from './cli/admin/admin';
6
6
  import agent from './cli/agent/agent';
7
7
  import app from './cli/app/app';
8
+ import authn from './cli/authn/authn';
8
9
  import authz from './cli/authz/authz';
9
10
  import conn from './cli/conn/conn';
10
11
  import email from './cli/email/email';
@@ -39,6 +40,7 @@ const {
39
40
  await initTokenCache();
40
41
  program.addCommand(admin());
41
42
  program.addCommand(agent());
43
+ program.addCommand(authn());
42
44
  program.addCommand(authz());
43
45
  program.addCommand(app());
44
46
  program.addCommand(conn());
package/esm/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","names":["frodo","Command","admin","agent","app","authz","conn","email","esv","idm","idp","info","journey","log","oauth","realm","saml","script","service","shell","theme","printMessage","getVersions","initConnectionProfiles","initTokenCache","cache","program","version","addCommand","showHelpAfterError","enablePositionalOptions","parse","e","process","exitCode","stack"],"sources":["../src/app.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\n\n// commands\nimport admin from './cli/admin/admin';\nimport agent from './cli/agent/agent';\nimport app from './cli/app/app';\nimport authz from './cli/authz/authz';\nimport conn from './cli/conn/conn';\nimport email from './cli/email/email';\nimport esv from './cli/esv/esv';\nimport idm from './cli/idm/idm';\nimport idp from './cli/idp/idp';\nimport info from './cli/info/info';\nimport journey from './cli/journey/journey';\nimport log from './cli/log/log';\nimport oauth from './cli/oauth/oauth';\nimport realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport service from './cli/service/service';\nimport shell from './cli/shell/shell';\n// enable sample command template.\n// import something from './cli/_template/something';\nimport theme from './cli/theme/theme';\nimport { printMessage } from './utils/Console';\nimport { getVersions } from './utils/Version';\n\nconst { initConnectionProfiles } = frodo.conn;\nconst { initTokenCache } = frodo.cache;\n\n(async () => {\n try {\n const program = new Command('frodo').version(\n await getVersions(false),\n '-v, --version'\n );\n\n printMessage(await getVersions(true), 'text', false);\n\n await initConnectionProfiles();\n await initTokenCache();\n\n program.addCommand(admin());\n program.addCommand(agent());\n program.addCommand(authz());\n program.addCommand(app());\n program.addCommand(conn());\n program.addCommand(email());\n program.addCommand(esv());\n program.addCommand(idm());\n program.addCommand(idp());\n program.addCommand(info());\n program.addCommand(journey());\n program.addCommand(log());\n program.addCommand(oauth());\n program.addCommand(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(service());\n program.addCommand(shell());\n program.addCommand(theme());\n // enable sample command template.\n // program.addCommand(something());\n\n program.showHelpAfterError();\n program.enablePositionalOptions();\n program.parse();\n } catch (e) {\n process.exitCode = 1;\n printMessage(`ERROR: exception running frodo - ${e}`, 'error');\n printMessage(e.stack, 'error');\n }\n})();\n"],"mappings":"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"}
1
+ {"version":3,"file":"app.js","names":["frodo","Command","admin","agent","app","authn","authz","conn","email","esv","idm","idp","info","journey","log","oauth","realm","saml","script","service","shell","theme","printMessage","getVersions","initConnectionProfiles","initTokenCache","cache","program","version","addCommand","showHelpAfterError","enablePositionalOptions","parse","e","process","exitCode","stack"],"sources":["../src/app.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\n\n// commands\nimport admin from './cli/admin/admin';\nimport agent from './cli/agent/agent';\nimport app from './cli/app/app';\nimport authn from './cli/authn/authn';\nimport authz from './cli/authz/authz';\nimport conn from './cli/conn/conn';\nimport email from './cli/email/email';\nimport esv from './cli/esv/esv';\nimport idm from './cli/idm/idm';\nimport idp from './cli/idp/idp';\nimport info from './cli/info/info';\nimport journey from './cli/journey/journey';\nimport log from './cli/log/log';\nimport oauth from './cli/oauth/oauth';\nimport realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport service from './cli/service/service';\nimport shell from './cli/shell/shell';\n// enable sample command template.\n// import something from './cli/_template/something';\nimport theme from './cli/theme/theme';\nimport { printMessage } from './utils/Console';\nimport { getVersions } from './utils/Version';\n\nconst { initConnectionProfiles } = frodo.conn;\nconst { initTokenCache } = frodo.cache;\n\n(async () => {\n try {\n const program = new Command('frodo').version(\n await getVersions(false),\n '-v, --version'\n );\n\n printMessage(await getVersions(true), 'text', false);\n\n await initConnectionProfiles();\n await initTokenCache();\n\n program.addCommand(admin());\n program.addCommand(agent());\n program.addCommand(authn());\n program.addCommand(authz());\n program.addCommand(app());\n program.addCommand(conn());\n program.addCommand(email());\n program.addCommand(esv());\n program.addCommand(idm());\n program.addCommand(idp());\n program.addCommand(info());\n program.addCommand(journey());\n program.addCommand(log());\n program.addCommand(oauth());\n program.addCommand(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(service());\n program.addCommand(shell());\n program.addCommand(theme());\n // enable sample command template.\n // program.addCommand(something());\n\n program.showHelpAfterError();\n program.enablePositionalOptions();\n program.parse();\n } catch (e) {\n process.exitCode = 1;\n printMessage(`ERROR: exception running frodo - ${e}`, 'error');\n printMessage(e.stack, 'error');\n }\n})();\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { frodo } from '@rockcarver/frodo-lib';
2
+ import { Option } from 'commander';
3
+ import { describeAuthenticationSettings } from '../../ops/AuthenticationSettingsOps';
4
+ import { verboseMessage } from '../../utils/Console';
5
+ import { FrodoCommand } from '../FrodoCommand';
6
+ const {
7
+ getTokens
8
+ } = frodo.login;
9
+ const program = new FrodoCommand('frodo authn describe');
10
+ program.description('Describe authentication settings.').addOption(new Option('--json', 'Output in JSON format.')).action(
11
+ // implement command logic inside action handler
12
+ async (host, realm, user, password, options, command) => {
13
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
14
+ if (await getTokens()) {
15
+ verboseMessage(`Describing authentication settings...`);
16
+ const outcome = await describeAuthenticationSettings(options.json);
17
+ if (!outcome) process.exitCode = 1;
18
+ }
19
+ // unrecognized combination of options or no options
20
+ else {
21
+ verboseMessage('Unrecognized combination of options or no options...');
22
+ program.help();
23
+ process.exitCode = 1;
24
+ }
25
+ }
26
+ // end command logic inside action handler
27
+ );
28
+
29
+ program.parse();
30
+ //# sourceMappingURL=authn-describe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authn-describe.js","names":["frodo","Option","describeAuthenticationSettings","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outcome","json","process","exitCode","help","parse"],"sources":["../../../src/cli/authn/authn-describe.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { describeAuthenticationSettings } from '../../ops/AuthenticationSettingsOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authn describe');\n\nprogram\n .description('Describe authentication settings.')\n .addOption(new Option('--json', 'Output in JSON format.'))\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(`Describing authentication settings...`);\n const outcome = await describeAuthenticationSettings(options.json);\n if (!outcome) process.exitCode = 1;\n }\n // unrecognized combination of options or no options\n else {\n verboseMessage('Unrecognized combination of options or no options...');\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,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,8BAA8B,QAAQ,qCAAqC;AACpF,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,sBAAsB,CAAC;AAExDG,OAAO,CACJC,WAAW,CAAC,mCAAmC,CAAC,CAChDC,SAAS,CAAC,IAAIR,MAAM,CAAC,QAAQ,EAAE,wBAAwB,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,CAAE,uCAAsC,CAAC;IACvD,MAAMe,OAAO,GAAG,MAAMhB,8BAA8B,CAACa,OAAO,CAACI,IAAI,CAAC;IAClE,IAAI,CAACD,OAAO,EAAEE,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC;EACA;EAAA,KACK;IACHlB,cAAc,CAAC,sDAAsD,CAAC;IACtEI,OAAO,CAACe,IAAI,CAAC,CAAC;IACdF,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACgB,KAAK,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { frodo } from '@rockcarver/frodo-lib';
2
+ import { Option } from 'commander';
3
+ import { exportAuthenticationSettingsToFile } from '../../ops/AuthenticationSettingsOps';
4
+ import { verboseMessage } from '../../utils/Console';
5
+ import { FrodoCommand } from '../FrodoCommand';
6
+ const {
7
+ getTokens
8
+ } = frodo.login;
9
+ const program = new FrodoCommand('frodo authn export');
10
+ program.description('Export authentication settings.').addOption(new Option('-f, --file <file>', 'Name of the export file.')).action(
11
+ // implement command logic inside action handler
12
+ async (host, realm, user, password, options, command) => {
13
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
14
+ if (await getTokens()) {
15
+ verboseMessage('Exporting authentication settings to file...');
16
+ const outcome = exportAuthenticationSettingsToFile(options.file);
17
+ if (!outcome) process.exitCode = 1;
18
+ } else {
19
+ process.exitCode = 1;
20
+ }
21
+ }
22
+ // end command logic inside action handler
23
+ );
24
+
25
+ program.parse();
26
+ //# sourceMappingURL=authn-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authn-export.js","names":["frodo","Option","exportAuthenticationSettingsToFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outcome","file","process","exitCode","parse"],"sources":["../../../src/cli/authn/authn-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { exportAuthenticationSettingsToFile } from '../../ops/AuthenticationSettingsOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authn export');\n\nprogram\n .description('Export authentication settings.')\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\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('Exporting authentication settings to file...');\n const outcome = exportAuthenticationSettingsToFile(options.file);\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,kCAAkC,QAAQ,qCAAqC;AACxF,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,oBAAoB,CAAC;AAEtDG,OAAO,CACJC,WAAW,CAAC,iCAAiC,CAAC,CAC9CC,SAAS,CAAC,IAAIR,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,CACtES,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,8CAA8C,CAAC;IAC9D,MAAMe,OAAO,GAAGhB,kCAAkC,CAACa,OAAO,CAACI,IAAI,CAAC;IAChE,IAAI,CAACD,OAAO,EAAEE,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACe,KAAK,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { frodo } from '@rockcarver/frodo-lib';
2
+ import { Option } from 'commander';
3
+ import { importAuthenticationSettingsFromFile } from '../../ops/AuthenticationSettingsOps';
4
+ import { verboseMessage } from '../../utils/Console';
5
+ import { FrodoCommand } from '../FrodoCommand';
6
+ const {
7
+ getTokens
8
+ } = frodo.login;
9
+ const program = new FrodoCommand('frodo authn import');
10
+ program.description('Import authentication settings.').addOption(new Option('-f, --file <file>', 'Name of the file to import.')).action(
11
+ // implement command logic inside action handler
12
+ async (host, realm, user, password, options, command) => {
13
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
14
+ if (await getTokens()) {
15
+ verboseMessage('Importing authentication settings from file...');
16
+ const outcome = importAuthenticationSettingsFromFile(options.file);
17
+ if (!outcome) process.exitCode = 1;
18
+ } else {
19
+ process.exitCode = 1;
20
+ }
21
+ }
22
+ // end command logic inside action handler
23
+ );
24
+
25
+ program.parse();
26
+ //# sourceMappingURL=authn-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authn-import.js","names":["frodo","Option","importAuthenticationSettingsFromFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outcome","file","process","exitCode","parse"],"sources":["../../../src/cli/authn/authn-import.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { importAuthenticationSettingsFromFile } from '../../ops/AuthenticationSettingsOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authn import');\n\nprogram\n .description('Import authentication settings.')\n .addOption(new Option('-f, --file <file>', 'Name of the file to import.'))\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('Importing authentication settings from file...');\n const outcome = importAuthenticationSettingsFromFile(options.file);\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,oCAAoC,QAAQ,qCAAqC;AAC1F,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,oBAAoB,CAAC;AAEtDG,OAAO,CACJC,WAAW,CAAC,iCAAiC,CAAC,CAC9CC,SAAS,CAAC,IAAIR,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC,CAAC,CACzES,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,gDAAgD,CAAC;IAChE,MAAMe,OAAO,GAAGhB,oCAAoC,CAACa,OAAO,CAACI,IAAI,CAAC;IAClE,IAAI,CAACD,OAAO,EAAEE,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACe,KAAK,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import { FrodoStubCommand } from '../FrodoCommand';
4
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
5
+ export default function setup() {
6
+ const program = new FrodoStubCommand('authn').description('Manage authentication settings.').executableDir(__dirname);
7
+ program.command('describe', 'Describe authentication settings.');
8
+ program.command('export', 'Export authentication settings.');
9
+ program.command('import', 'Import authentication settings.');
10
+ return program;
11
+ }
12
+ //# sourceMappingURL=authn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authn.js","names":["path","fileURLToPath","FrodoStubCommand","__dirname","dirname","import","meta","url","setup","program","description","executableDir","command"],"sources":["../../../src/cli/authn/authn.ts"],"sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport { FrodoStubCommand } from '../FrodoCommand';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport default function setup() {\n const program = new FrodoStubCommand('authn')\n .description('Manage authentication settings.')\n .executableDir(__dirname);\n\n program.command('describe', 'Describe authentication settings.');\n\n program.command('export', 'Export authentication settings.');\n\n program.command('import', 'Import authentication settings.');\n\n return program;\n}\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AACvB,SAASC,aAAa,QAAQ,KAAK;AAEnC,SAASC,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,SAAS,GAAGH,IAAI,CAACI,OAAO,CAACH,aAAa,CAACI,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC;AAE9D,eAAe,SAASC,KAAKA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAG,IAAIP,gBAAgB,CAAC,OAAO,CAAC,CAC1CQ,WAAW,CAAC,iCAAiC,CAAC,CAC9CC,aAAa,CAACR,SAAS,CAAC;EAE3BM,OAAO,CAACG,OAAO,CAAC,UAAU,EAAE,mCAAmC,CAAC;EAEhEH,OAAO,CAACG,OAAO,CAAC,QAAQ,EAAE,iCAAiC,CAAC;EAE5DH,OAAO,CAACG,OAAO,CAAC,QAAQ,EAAE,iCAAiC,CAAC;EAE5D,OAAOH,OAAO;AAChB"}
@@ -7,13 +7,13 @@ const {
7
7
  getTokens
8
8
  } = frodo.login;
9
9
  const program = new FrodoCommand('frodo esv variable describe');
10
- program.description('Describe variables.').addOption(new Option('-i, --variable-id <variable-id>', 'Variable id.').makeOptionMandatory()).action(
10
+ program.description('Describe variables.').addOption(new Option('-i, --variable-id <variable-id>', 'Variable id.').makeOptionMandatory()).addOption(new Option('--json', 'Output in JSON format.')).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(`Describing variable ${options.variableId}...`);
16
- describeVariable(options.variableId);
16
+ describeVariable(options.variableId, options.json);
17
17
  } else {
18
18
  process.exitCode = 1;
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"esv-variable-describe.js","names":["frodo","Option","describeVariable","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","makeOptionMandatory","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","variableId","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-variable-describe.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { describeVariable } from '../../ops/VariablesOps';\nimport { verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo esv variable describe');\n\nprogram\n .description('Describe variables.')\n .addOption(\n new Option(\n '-i, --variable-id <variable-id>',\n 'Variable id.'\n ).makeOptionMandatory()\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(`Describing variable ${options.variableId}...`);\n describeVariable(options.variableId);\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,gBAAgB,QAAQ,wBAAwB;AACzD,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,6BAA6B,CAAC;AAE/DG,OAAO,CACJC,WAAW,CAAC,qBAAqB,CAAC,CAClCC,SAAS,CACR,IAAIR,MAAM,CACR,iCAAiC,EACjC,cACF,CAAC,CAACS,mBAAmB,CAAC,CACxB,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,MAAMZ,SAAS,CAAC,CAAC,EAAE;IACrBF,cAAc,CAAE,uBAAsBa,OAAO,CAACG,UAAW,KAAI,CAAC;IAC9DjB,gBAAgB,CAACc,OAAO,CAACG,UAAU,CAAC;EACtC,CAAC,MAAM;IACLC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACe,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"esv-variable-describe.js","names":["frodo","Option","describeVariable","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","makeOptionMandatory","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","variableId","json","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-variable-describe.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { describeVariable } from '../../ops/VariablesOps';\nimport { verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo esv variable describe');\n\nprogram\n .description('Describe variables.')\n .addOption(\n new Option(\n '-i, --variable-id <variable-id>',\n 'Variable id.'\n ).makeOptionMandatory()\n )\n .addOption(new Option('--json', 'Output in JSON format.'))\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(`Describing variable ${options.variableId}...`);\n describeVariable(options.variableId, options.json);\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,gBAAgB,QAAQ,wBAAwB;AACzD,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,6BAA6B,CAAC;AAE/DG,OAAO,CACJC,WAAW,CAAC,qBAAqB,CAAC,CAClCC,SAAS,CACR,IAAIR,MAAM,CACR,iCAAiC,EACjC,cACF,CAAC,CAACS,mBAAmB,CAAC,CACxB,CAAC,CACAD,SAAS,CAAC,IAAIR,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CACzDU,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,MAAMZ,SAAS,CAAC,CAAC,EAAE;IACrBF,cAAc,CAAE,uBAAsBa,OAAO,CAACG,UAAW,KAAI,CAAC;IAC9DjB,gBAAgB,CAACc,OAAO,CAACG,UAAU,EAAEH,OAAO,CAACI,IAAI,CAAC;EACpD,CAAC,MAAM;IACLC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHf,OAAO,CAACgB,KAAK,CAAC,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
2
+ import fs from 'fs';
3
+ import { createObjectTable, debugMessage, failSpinner, printMessage, showSpinner, succeedSpinner } from '../utils/Console';
4
+ import { saveJsonToFile } from '../utils/ExportImportUtils';
5
+ const {
6
+ getTypedFilename,
7
+ getFilePath
8
+ } = frodo.utils;
9
+ const {
10
+ exportAuthenticationSettings: _exportAuthenticationSettings,
11
+ importAuthenticationSettings: _importAuthenticationSettings,
12
+ readAuthenticationSettings: _readAuthenticationSettings
13
+ } = frodo.authn.settings;
14
+
15
+ /**
16
+ * Export authentication settings to file
17
+ * @param {string} file file name
18
+ * @returns {Promise<boolean>} true if successful, false otherwise
19
+ */
20
+ export async function exportAuthenticationSettingsToFile(file) {
21
+ let outcome = false;
22
+ debugMessage(`cli.AuthenticationSettingsOps.exportAuthenticationSettingsToFile: begin`);
23
+ showSpinner(`Exporting ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings...`);
24
+ try {
25
+ let fileName = getTypedFilename(`${frodo.utils.getRealmName(state.getRealm())}Realm`, 'authentication.settings');
26
+ if (file) {
27
+ fileName = file;
28
+ }
29
+ const filePath = getFilePath(fileName, true);
30
+ const exportData = await _exportAuthenticationSettings();
31
+ saveJsonToFile(exportData, filePath);
32
+ succeedSpinner(`Exported ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings to ${filePath}.`);
33
+ outcome = true;
34
+ } catch (error) {
35
+ failSpinner(`Error exporting ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings: ${error.message}`);
36
+ }
37
+ debugMessage(`cli.AuthenticationSettingsOps.exportAuthenticationSettingsToFile: end`);
38
+ return outcome;
39
+ }
40
+
41
+ /**
42
+ * Import authentication settings from file
43
+ * @param {string} file file name
44
+ * @returns {Promise<boolean>} true if successful, false otherwise
45
+ */
46
+ export async function importAuthenticationSettingsFromFile(file) {
47
+ let outcome = false;
48
+ debugMessage(`cli.AuthenticationSettingsOps.importAuthenticationSettingsFromFile: begin`);
49
+ showSpinner(`Importing ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings...`);
50
+ try {
51
+ const data = fs.readFileSync(getFilePath(file), 'utf8');
52
+ const fileData = JSON.parse(data);
53
+ await _importAuthenticationSettings(fileData);
54
+ outcome = true;
55
+ succeedSpinner(`Imported ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings.`);
56
+ } catch (error) {
57
+ failSpinner(`Error importing ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings.`);
58
+ printMessage(error, 'error');
59
+ }
60
+ debugMessage(`cli.AuthenticationSettingsOps.importAuthenticationSettingsFromFile: end`);
61
+ return outcome;
62
+ }
63
+
64
+ /**
65
+ * Describe authentication settings
66
+ * @param {boolean} json JSON output
67
+ * @returns {Promise<boolean>} true if successful, false otherwise
68
+ */
69
+ export async function describeAuthenticationSettings(json = false) {
70
+ let outcome = false;
71
+ try {
72
+ const settings = await _readAuthenticationSettings();
73
+ delete settings._id;
74
+ delete settings._rev;
75
+ delete settings._type;
76
+ if (json) {
77
+ printMessage(settings, 'data');
78
+ outcome = true;
79
+ } else {
80
+ const table = createObjectTable(settings);
81
+ printMessage(table.toString(), 'data');
82
+ outcome = true;
83
+ }
84
+ } catch (error) {
85
+ printMessage(error.message, 'error');
86
+ }
87
+ return outcome;
88
+ }
89
+ //# sourceMappingURL=AuthenticationSettingsOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationSettingsOps.js","names":["frodo","state","fs","createObjectTable","debugMessage","failSpinner","printMessage","showSpinner","succeedSpinner","saveJsonToFile","getTypedFilename","getFilePath","utils","exportAuthenticationSettings","_exportAuthenticationSettings","importAuthenticationSettings","_importAuthenticationSettings","readAuthenticationSettings","_readAuthenticationSettings","authn","settings","exportAuthenticationSettingsToFile","file","outcome","getRealmName","getRealm","fileName","filePath","exportData","error","message","importAuthenticationSettingsFromFile","data","readFileSync","fileData","JSON","parse","describeAuthenticationSettings","json","_id","_rev","_type","table","toString"],"sources":["../../src/ops/AuthenticationSettingsOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n succeedSpinner,\n} from '../utils/Console';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\n\nconst { getTypedFilename, getFilePath } = frodo.utils;\nconst {\n exportAuthenticationSettings: _exportAuthenticationSettings,\n importAuthenticationSettings: _importAuthenticationSettings,\n readAuthenticationSettings: _readAuthenticationSettings,\n} = frodo.authn.settings;\n\n/**\n * Export authentication settings to file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportAuthenticationSettingsToFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(\n `cli.AuthenticationSettingsOps.exportAuthenticationSettingsToFile: begin`\n );\n showSpinner(\n `Exporting ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings...`\n );\n try {\n let fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await _exportAuthenticationSettings();\n saveJsonToFile(exportData, filePath);\n succeedSpinner(\n `Exported ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings to ${filePath}.`\n );\n outcome = true;\n } catch (error) {\n failSpinner(\n `Error exporting ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings: ${error.message}`\n );\n }\n debugMessage(\n `cli.AuthenticationSettingsOps.exportAuthenticationSettingsToFile: end`\n );\n return outcome;\n}\n\n/**\n * Import authentication settings from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importAuthenticationSettingsFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(\n `cli.AuthenticationSettingsOps.importAuthenticationSettingsFromFile: begin`\n );\n showSpinner(\n `Importing ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings...`\n );\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await _importAuthenticationSettings(fileData);\n outcome = true;\n succeedSpinner(\n `Imported ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings.`\n );\n } catch (error) {\n failSpinner(\n `Error importing ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings.`\n );\n printMessage(error, 'error');\n }\n debugMessage(\n `cli.AuthenticationSettingsOps.importAuthenticationSettingsFromFile: end`\n );\n return outcome;\n}\n\n/**\n * Describe authentication settings\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeAuthenticationSettings(\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const settings = await _readAuthenticationSettings();\n delete settings._id;\n delete settings._rev;\n delete settings._type;\n if (json) {\n printMessage(settings, 'data');\n outcome = true;\n } else {\n const table = createObjectTable(settings);\n printMessage(table.toString(), 'data');\n outcome = true;\n }\n } catch (error) {\n printMessage(error.message, 'error');\n }\n return outcome;\n}\n"],"mappings":"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"}
@@ -7,7 +7,7 @@ const {
7
7
  getFilePath
8
8
  } = frodo.utils;
9
9
  const {
10
- resolveUserName
10
+ resolvePerpetratorUuid
11
11
  } = frodo.idm.managed;
12
12
  const {
13
13
  readVariables,
@@ -35,7 +35,7 @@ export async function listVariables(long) {
35
35
  if (long) {
36
36
  const table = createTable(['Id'['brightCyan'], 'Value'['brightCyan'], 'Status'['brightCyan'], 'Description'['brightCyan'], 'Modifier'['brightCyan'], 'Modified (UTC)'['brightCyan']]);
37
37
  for (const variable of variables) {
38
- table.push([variable._id, wordwrap(decodeBase64(variable.valueBase64), 40), variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'], wordwrap(variable.description, 40), state.getUseBearerTokenForAmApis() ? variable.lastChangedBy : await resolveUserName('teammember', variable.lastChangedBy), new Date(variable.lastChangeDate).toUTCString()]);
38
+ table.push([variable._id, wordwrap(decodeBase64(variable.valueBase64), 40), variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'], wordwrap(variable.description, 40), state.getUseBearerTokenForAmApis() ? variable.lastChangedBy : await resolvePerpetratorUuid(variable.lastChangedBy), new Date(variable.lastChangeDate).toUTCString()]);
39
39
  }
40
40
  printMessage(table.toString(), 'data');
41
41
  } else {
@@ -133,17 +133,25 @@ export async function deleteVariables() {
133
133
  * Describe a variable
134
134
  * @param {string} variableId variable id
135
135
  */
136
- export async function describeVariable(variableId) {
136
+ export async function describeVariable(variableId, json = false) {
137
137
  const variable = await readVariable(variableId);
138
- const table = createKeyValueTable();
139
- table.push(['Name'['brightCyan'], variable._id]);
140
- table.push(['Value'['brightCyan'], wordwrap(decodeBase64(variable.valueBase64), 40)]);
141
- table.push(['Status'['brightCyan'], variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed']]);
142
- table.push(['Description'['brightCyan'], wordwrap(variable.description, 60)]);
143
- table.push(['Modified'['brightCyan'], new Date(variable.lastChangeDate).toLocaleString()]);
144
- table.push(['Modifier'['brightCyan'], await resolveUserName('teammember', variable.lastChangedBy)]);
145
- table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);
146
- printMessage(table.toString(), 'data');
138
+ if (json) {
139
+ printMessage(variable, 'data');
140
+ } else {
141
+ const table = createKeyValueTable();
142
+ table.push(['Name'['brightCyan'], variable._id]);
143
+ table.push(['Value'['brightCyan'], wordwrap(decodeBase64(variable.valueBase64), 40)]);
144
+ table.push(['Type'['brightCyan'], variable.expressionType]);
145
+ table.push(['Status'['brightCyan'], variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed']]);
146
+ table.push(['Description'['brightCyan'], wordwrap(variable.description, 60)]);
147
+ table.push(['Modified'['brightCyan'], new Date(variable.lastChangeDate).toLocaleString()]);
148
+ const modifierName = await resolvePerpetratorUuid(variable.lastChangedBy);
149
+ if (modifierName && modifierName !== variable.lastChangedBy) {
150
+ table.push(['Modifier'['brightCyan'], modifierName]);
151
+ }
152
+ table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);
153
+ printMessage(table.toString(), 'data');
154
+ }
147
155
  }
148
156
 
149
157
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"VariablesOps.js","names":["frodo","state","createKeyValueTable","createProgressBar","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","stopProgressIndicator","succeedSpinner","updateProgressBar","updateProgressIndicator","getTypedFilename","saveJsonToFile","saveToFile","titleCase","wordwrap","decodeBase64","getFilePath","utils","resolveUserName","idm","managed","readVariables","readVariable","exportVariable","exportVariables","deleteVariable","updateVariableDescription","updateVariable","_updateVariable","cloud","variable","listVariables","long","variables","sort","a","b","_id","localeCompare","error","message","response","data","table","push","valueBase64","loaded","description","getUseBearerTokenForAmApis","lastChangedBy","Date","lastChangeDate","toUTCString","toString","forEach","createVariable","variableId","value","type","code","setVariableDescription","deleteVariableById","deleteVariables","length","describeVariable","toLocaleString","exportVariableToFile","file","noDecode","fileName","filePath","fileData","brightCyan","err","exportVariablesToFile","getRealm","variablesExport","_error$response","status","exportVariablesToFiles","variableList"],"sources":["../../src/ops/VariablesOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { VariableExpressionType } from '@rockcarver/frodo-lib/types/api/cloud/VariablesApi';\n\nimport {\n createKeyValueTable,\n createProgressBar,\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressBar,\n updateProgressIndicator,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { decodeBase64, getFilePath } = frodo.utils;\nconst { resolveUserName } = frodo.idm.managed;\nconst {\n readVariables,\n readVariable,\n exportVariable,\n exportVariables,\n deleteVariable,\n updateVariableDescription,\n updateVariable: _updateVariable,\n} = frodo.cloud.variable;\n\n/**\n * List variables\n * @param {boolean} long Long version, all the fields\n */\nexport async function listVariables(long) {\n let variables = [];\n try {\n variables = await readVariables();\n variables.sort((a, b) => a._id.localeCompare(b._id));\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\n }\n if (long) {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Value'['brightCyan'],\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]);\n for (const variable of variables) {\n table.push([\n variable._id,\n wordwrap(decodeBase64(variable.valueBase64), 40),\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(variable.description, 40),\n state.getUseBearerTokenForAmApis()\n ? variable.lastChangedBy\n : await resolveUserName('teammember', variable.lastChangedBy),\n new Date(variable.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n variables.forEach((variable) => {\n printMessage(variable._id, 'data');\n });\n }\n}\n\n/**\n * Create variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n * @param {VariableExpressionType} type variable type\n */\nexport async function createVariable(\n variableId: string,\n value: string,\n description: string,\n type: VariableExpressionType = 'string'\n) {\n showSpinner(`Creating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description, type);\n succeedSpinner(`Created variable ${variableId}`);\n } catch (error) {\n failSpinner(\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error\n );\n }\n}\n\n/**\n * Update variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n */\nexport async function updateVariable(variableId, value, description) {\n showSpinner(`Updating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description);\n succeedSpinner(`Updated variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Set description of variable\n * @param {string} variableId variable id\n * @param {string} description variable description\n */\nexport async function setVariableDescription(variableId, description) {\n showSpinner(`Setting description of variable ${variableId}...`);\n try {\n await updateVariableDescription(variableId, description);\n succeedSpinner(`Set description of variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete a variable\n * @param {string} variableId variable id\n */\nexport async function deleteVariableById(variableId) {\n showSpinner(`Deleting variable ${variableId}...`);\n try {\n await deleteVariable(variableId);\n succeedSpinner(`Deleted variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete all variables\n */\nexport async function deleteVariables() {\n try {\n const variables = await readVariables();\n createProgressBar(variables.length, `Deleting variable...`);\n for (const variable of variables) {\n try {\n await deleteVariable(variable._id);\n updateProgressBar(`Deleted variable ${variable._id}`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressBar(`Variables deleted.`);\n } catch (error) {\n stopProgressBar(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n}\n\n/**\n * Describe a variable\n * @param {string} variableId variable id\n */\nexport async function describeVariable(variableId) {\n const variable = await readVariable(variableId);\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], variable._id]);\n table.push([\n 'Value'['brightCyan'],\n wordwrap(decodeBase64(variable.valueBase64), 40),\n ]);\n table.push([\n 'Status'['brightCyan'],\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push(['Description'['brightCyan'], wordwrap(variable.description, 60)]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(variable.lastChangeDate).toLocaleString(),\n ]);\n table.push([\n 'Modifier'['brightCyan'],\n await resolveUserName('teammember', variable.lastChangedBy),\n ]);\n table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);\n printMessage(table.toString(), 'data');\n}\n\n/**\n * Export a single variable to file\n * @param {String} variableId Variable id\n * @param {String} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariableToFile(\n variableId: string,\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: start [variableId=${variableId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(variableId, 'variable');\n }\n const filePath = getFilePath(fileName, true);\n try {\n createProgressBar(1, `Exporting variable ${variableId}`);\n const fileData = await exportVariable(variableId, noDecode);\n saveJsonToFile(fileData, filePath);\n updateProgressBar(`Exported variable ${variableId}`);\n stopProgressBar(\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${variableId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: end [variableId=${variableId}, file=${file}]`\n );\n}\n\n/**\n * Export all variables to single file\n * @param {string} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariablesToFile(\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Variables`,\n 'variable'\n );\n }\n try {\n const variablesExport = await exportVariables(noDecode);\n saveJsonToFile(variablesExport, getFilePath(fileName, true));\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportVariablesToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: end [file=${file}]`);\n}\n\n/**\n * Export all variables to seperate files\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariablesToFiles(noDecode: boolean) {\n const variableList = await readVariables();\n createProgressIndicator(\n 'determinate',\n variableList.length,\n 'Exporting variables'\n );\n for (const variable of variableList) {\n if (!noDecode) {\n variable.value = decodeBase64(variable.valueBase64);\n }\n updateProgressIndicator(`Writing variable ${variable._id}`);\n const fileName = getTypedFilename(variable._id, 'variable');\n saveToFile('variable', variable, '_id', getFilePath(fileName, true));\n }\n stopProgressIndicator(`${variableList.length} variables exported`);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VariablesOps.js","names":["frodo","state","createKeyValueTable","createProgressBar","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","stopProgressIndicator","succeedSpinner","updateProgressBar","updateProgressIndicator","getTypedFilename","saveJsonToFile","saveToFile","titleCase","wordwrap","decodeBase64","getFilePath","utils","resolvePerpetratorUuid","idm","managed","readVariables","readVariable","exportVariable","exportVariables","deleteVariable","updateVariableDescription","updateVariable","_updateVariable","cloud","variable","listVariables","long","variables","sort","a","b","_id","localeCompare","error","message","response","data","table","push","valueBase64","loaded","description","getUseBearerTokenForAmApis","lastChangedBy","Date","lastChangeDate","toUTCString","toString","forEach","createVariable","variableId","value","type","code","setVariableDescription","deleteVariableById","deleteVariables","length","describeVariable","json","expressionType","toLocaleString","modifierName","exportVariableToFile","file","noDecode","fileName","filePath","fileData","brightCyan","err","exportVariablesToFile","getRealm","variablesExport","_error$response","status","exportVariablesToFiles","variableList"],"sources":["../../src/ops/VariablesOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { VariableExpressionType } from '@rockcarver/frodo-lib/types/api/cloud/VariablesApi';\n\nimport {\n createKeyValueTable,\n createProgressBar,\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressBar,\n updateProgressIndicator,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { decodeBase64, getFilePath } = frodo.utils;\nconst { resolvePerpetratorUuid } = frodo.idm.managed;\nconst {\n readVariables,\n readVariable,\n exportVariable,\n exportVariables,\n deleteVariable,\n updateVariableDescription,\n updateVariable: _updateVariable,\n} = frodo.cloud.variable;\n\n/**\n * List variables\n * @param {boolean} long Long version, all the fields\n */\nexport async function listVariables(long) {\n let variables = [];\n try {\n variables = await readVariables();\n variables.sort((a, b) => a._id.localeCompare(b._id));\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\n }\n if (long) {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Value'['brightCyan'],\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]);\n for (const variable of variables) {\n table.push([\n variable._id,\n wordwrap(decodeBase64(variable.valueBase64), 40),\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(variable.description, 40),\n state.getUseBearerTokenForAmApis()\n ? variable.lastChangedBy\n : await resolvePerpetratorUuid(variable.lastChangedBy),\n new Date(variable.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n variables.forEach((variable) => {\n printMessage(variable._id, 'data');\n });\n }\n}\n\n/**\n * Create variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n * @param {VariableExpressionType} type variable type\n */\nexport async function createVariable(\n variableId: string,\n value: string,\n description: string,\n type: VariableExpressionType = 'string'\n) {\n showSpinner(`Creating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description, type);\n succeedSpinner(`Created variable ${variableId}`);\n } catch (error) {\n failSpinner(\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error\n );\n }\n}\n\n/**\n * Update variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n */\nexport async function updateVariable(variableId, value, description) {\n showSpinner(`Updating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description);\n succeedSpinner(`Updated variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Set description of variable\n * @param {string} variableId variable id\n * @param {string} description variable description\n */\nexport async function setVariableDescription(variableId, description) {\n showSpinner(`Setting description of variable ${variableId}...`);\n try {\n await updateVariableDescription(variableId, description);\n succeedSpinner(`Set description of variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete a variable\n * @param {string} variableId variable id\n */\nexport async function deleteVariableById(variableId) {\n showSpinner(`Deleting variable ${variableId}...`);\n try {\n await deleteVariable(variableId);\n succeedSpinner(`Deleted variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete all variables\n */\nexport async function deleteVariables() {\n try {\n const variables = await readVariables();\n createProgressBar(variables.length, `Deleting variable...`);\n for (const variable of variables) {\n try {\n await deleteVariable(variable._id);\n updateProgressBar(`Deleted variable ${variable._id}`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressBar(`Variables deleted.`);\n } catch (error) {\n stopProgressBar(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n}\n\n/**\n * Describe a variable\n * @param {string} variableId variable id\n */\nexport async function describeVariable(variableId, json = false) {\n const variable = await readVariable(variableId);\n if (json) {\n printMessage(variable, 'data');\n } else {\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], variable._id]);\n table.push([\n 'Value'['brightCyan'],\n wordwrap(decodeBase64(variable.valueBase64), 40),\n ]);\n table.push(['Type'['brightCyan'], variable.expressionType]);\n table.push([\n 'Status'['brightCyan'],\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push([\n 'Description'['brightCyan'],\n wordwrap(variable.description, 60),\n ]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(variable.lastChangeDate).toLocaleString(),\n ]);\n const modifierName = await resolvePerpetratorUuid(variable.lastChangedBy);\n if (modifierName && modifierName !== variable.lastChangedBy) {\n table.push(['Modifier'['brightCyan'], modifierName]);\n }\n table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Export a single variable to file\n * @param {String} variableId Variable id\n * @param {String} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariableToFile(\n variableId: string,\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: start [variableId=${variableId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(variableId, 'variable');\n }\n const filePath = getFilePath(fileName, true);\n try {\n createProgressBar(1, `Exporting variable ${variableId}`);\n const fileData = await exportVariable(variableId, noDecode);\n saveJsonToFile(fileData, filePath);\n updateProgressBar(`Exported variable ${variableId}`);\n stopProgressBar(\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${variableId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: end [variableId=${variableId}, file=${file}]`\n );\n}\n\n/**\n * Export all variables to single file\n * @param {string} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariablesToFile(\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Variables`,\n 'variable'\n );\n }\n try {\n const variablesExport = await exportVariables(noDecode);\n saveJsonToFile(variablesExport, getFilePath(fileName, true));\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportVariablesToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: end [file=${file}]`);\n}\n\n/**\n * Export all variables to seperate files\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariablesToFiles(noDecode: boolean) {\n const variableList = await readVariables();\n createProgressIndicator(\n 'determinate',\n variableList.length,\n 'Exporting variables'\n );\n for (const variable of variableList) {\n if (!noDecode) {\n variable.value = decodeBase64(variable.valueBase64);\n }\n updateProgressIndicator(`Writing variable ${variable._id}`);\n const fileName = getTypedFilename(variable._id, 'variable');\n saveToFile('variable', variable, '_id', getFilePath(fileName, true));\n }\n stopProgressIndicator(`${variableList.length} variables exported`);\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-29",
3
+ "version": "2.0.0-30",
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": [
@@ -108,7 +108,7 @@
108
108
  ]
109
109
  },
110
110
  "dependencies": {
111
- "@rockcarver/frodo-lib": "2.0.0-47",
111
+ "@rockcarver/frodo-lib": "2.0.0-48",
112
112
  "chokidar": "^3.5.3",
113
113
  "cli-progress": "^3.11.2",
114
114
  "cli-table3": "^0.6.3",