@rockcarver/frodo-cli 2.0.0-3 → 2.0.0-5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- package/esm/app.js +2 -2
- package/esm/app.js.map +1 -1
- package/esm/cli/FrodoCommand.js +3 -0
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/conn/conn-save.js +6 -3
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/info/info.js +5 -5
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +3 -3
- package/esm/cli/log/log-fetch.js.map +1 -0
- package/esm/cli/log/log-key-delete.js +32 -0
- package/esm/cli/log/log-key-delete.js.map +1 -0
- package/esm/cli/log/log-key-describe.js +19 -0
- package/esm/cli/log/log-key-describe.js.map +1 -0
- package/esm/cli/log/log-key-list.js +23 -0
- package/esm/cli/log/log-key-list.js.map +1 -0
- package/esm/cli/log/log-key.js +8 -0
- package/esm/cli/log/log-key.js.map +1 -0
- package/esm/cli/{logging/logs-list.js → log/log-list.js} +2 -2
- package/esm/cli/log/log-list.js.map +1 -0
- package/esm/cli/{logging/logs-tail.js → log/log-tail.js} +3 -3
- package/esm/cli/log/log-tail.js.map +1 -0
- package/esm/cli/{logging/logs.js → log/log.js} +5 -2
- package/esm/cli/log/log.js.map +1 -0
- package/esm/help/SampleData.js +7 -0
- package/esm/help/SampleData.js.map +1 -0
- package/esm/ops/ConnectionProfileOps.js +1 -1
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/IdpOps.js +22 -10
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +10 -10
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +77 -25
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/RealmOps.js +6 -4
- package/esm/ops/RealmOps.js.map +1 -1
- package/package.json +2 -2
- package/esm/cli/logging/logs-fetch.js.map +0 -1
- package/esm/cli/logging/logs-list.js.map +0 -1
- package/esm/cli/logging/logs-tail.js.map +0 -1
- package/esm/cli/logging/logs.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,10 @@ 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-5] - 2023-06-21
|
|
11
|
+
|
|
12
|
+
## [2.0.0-4] - 2023-06-16
|
|
13
|
+
|
|
10
14
|
## [2.0.0-3] - 2023-06-15
|
|
11
15
|
|
|
12
16
|
## [2.0.0-2] - 2023-06-15
|
|
@@ -1206,7 +1210,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1206
1210
|
- Fixed problem with adding connection profiles
|
|
1207
1211
|
- Miscellaneous bug fixes
|
|
1208
1212
|
|
|
1209
|
-
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-
|
|
1213
|
+
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-5...HEAD
|
|
1214
|
+
|
|
1215
|
+
[2.0.0-5]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-4...v2.0.0-5
|
|
1216
|
+
|
|
1217
|
+
[2.0.0-4]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-3...v2.0.0-4
|
|
1210
1218
|
|
|
1211
1219
|
[2.0.0-3]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-2...v2.0.0-3
|
|
1212
1220
|
|
package/esm/app.js
CHANGED
|
@@ -13,7 +13,7 @@ import idm from './cli/idm/idm';
|
|
|
13
13
|
import idp from './cli/idp/idp';
|
|
14
14
|
import info from './cli/info/info';
|
|
15
15
|
import journey from './cli/journey/journey';
|
|
16
|
-
import
|
|
16
|
+
import log from './cli/log/log';
|
|
17
17
|
import realm from './cli/realm/realm';
|
|
18
18
|
import saml from './cli/saml/saml';
|
|
19
19
|
import script from './cli/script/script';
|
|
@@ -39,7 +39,7 @@ import { getVersions } from './utils/Version';
|
|
|
39
39
|
program.addCommand(idp());
|
|
40
40
|
program.addCommand(info());
|
|
41
41
|
program.addCommand(journey());
|
|
42
|
-
program.addCommand(
|
|
42
|
+
program.addCommand(log());
|
|
43
43
|
program.addCommand(realm());
|
|
44
44
|
program.addCommand(saml());
|
|
45
45
|
program.addCommand(script());
|
package/esm/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","names":["frodo","Command","admin","agent","authz","app","conn","email","esv","idm","idp","info","journey","
|
|
1
|
+
{"version":3,"file":"app.js","names":["frodo","Command","admin","agent","authz","app","conn","email","esv","idm","idp","info","journey","log","realm","saml","script","service","theme","printMessage","getVersions","program","version","initConnectionProfiles","addCommand","showHelpAfterError","enablePositionalOptions","parse","e"],"sources":["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 authz from './cli/authz/authz';\nimport app from './cli/app/app';\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 realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport service from './cli/service/service';\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\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 frodo.conn.initConnectionProfiles();\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(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(service());\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 printMessage(`ERROR: exception running frodo - ${e}`, 'error');\n }\n})();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,OAAO,QAAQ,WAAW;;AAEnC;AACA,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,OAAO,MAAM,uBAAuB;AAC3C,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,MAAM,MAAM,qBAAqB;AACxC,OAAOC,OAAO,MAAM,uBAAuB;AAC3C;AACA;AACA,OAAOC,KAAK,MAAM,mBAAmB;AACrC,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,WAAW,QAAQ,iBAAiB;AAE7C,CAAC,YAAY;EACX,IAAI;IACF,MAAMC,OAAO,GAAG,IAAIpB,OAAO,CAAC,OAAO,CAAC,CAACqB,OAAO,CAC1C,MAAMF,WAAW,CAAC,KAAK,CAAC,EACxB,eACF,CAAC;IAEDD,YAAY,CAAC,MAAMC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;IAEpD,MAAMpB,KAAK,CAACM,IAAI,CAACiB,sBAAsB,CAAC,CAAC;IAEzCF,OAAO,CAACG,UAAU,CAACtB,KAAK,CAAC,CAAC,CAAC;IAC3BmB,OAAO,CAACG,UAAU,CAACrB,KAAK,CAAC,CAAC,CAAC;IAC3BkB,OAAO,CAACG,UAAU,CAACpB,KAAK,CAAC,CAAC,CAAC;IAC3BiB,OAAO,CAACG,UAAU,CAACnB,GAAG,CAAC,CAAC,CAAC;IACzBgB,OAAO,CAACG,UAAU,CAAClB,IAAI,CAAC,CAAC,CAAC;IAC1Be,OAAO,CAACG,UAAU,CAACjB,KAAK,CAAC,CAAC,CAAC;IAC3Bc,OAAO,CAACG,UAAU,CAAChB,GAAG,CAAC,CAAC,CAAC;IACzBa,OAAO,CAACG,UAAU,CAACf,GAAG,CAAC,CAAC,CAAC;IACzBY,OAAO,CAACG,UAAU,CAACd,GAAG,CAAC,CAAC,CAAC;IACzBW,OAAO,CAACG,UAAU,CAACb,IAAI,CAAC,CAAC,CAAC;IAC1BU,OAAO,CAACG,UAAU,CAACZ,OAAO,CAAC,CAAC,CAAC;IAC7BS,OAAO,CAACG,UAAU,CAACX,GAAG,CAAC,CAAC,CAAC;IACzBQ,OAAO,CAACG,UAAU,CAACV,KAAK,CAAC,CAAC,CAAC;IAC3BO,OAAO,CAACG,UAAU,CAACT,IAAI,CAAC,CAAC,CAAC;IAC1BM,OAAO,CAACG,UAAU,CAACR,MAAM,CAAC,CAAC,CAAC;IAC5BK,OAAO,CAACG,UAAU,CAACP,OAAO,CAAC,CAAC,CAAC;IAC7BI,OAAO,CAACG,UAAU,CAACN,KAAK,CAAC,CAAC,CAAC;IAC3B;IACA;;IAEAG,OAAO,CAACI,kBAAkB,CAAC,CAAC;IAC5BJ,OAAO,CAACK,uBAAuB,CAAC,CAAC;IACjCL,OAAO,CAACM,KAAK,CAAC,CAAC;EACjB,CAAC,CAAC,OAAOC,CAAC,EAAE;IACVT,YAAY,CAAE,oCAAmCS,CAAE,EAAC,EAAE,OAAO,CAAC;EAChE;AACF,CAAC,EAAE,CAAC"}
|
package/esm/cli/FrodoCommand.js
CHANGED
|
@@ -98,6 +98,9 @@ export class FrodoCommand extends FrodoStubCommand {
|
|
|
98
98
|
for (const opt of defaultOpts) {
|
|
99
99
|
if (!omits.includes(opt.name())) this.addOption(opt);
|
|
100
100
|
}
|
|
101
|
+
|
|
102
|
+
// additional help
|
|
103
|
+
this.addHelpText('after', `\nEvironment Variables:\n` + ` FRODO_HOST: Access Management base URL. Overrides 'host' argument.\n` + ` FRODO_REALM: Realm. Overrides 'realm' argument.\n` + ` FRODO_USERNAME: Username. Overrides 'username' argument.\n` + ` FRODO_PASSWORD: Password. Overrides 'password' argument.\n` + ` FRODO_SA_ID: Service account uuid. Overrides '--sa-id' option.\n` + ` FRODO_SA_JWK: Service account JWK. Overrides '--sa-jwk-file' option but takes the actual JWK as a value, not a file name.\n` + ('frodo conn save' === this.name() ? ` FRODO_LOG_KEY: Log API key. Overrides '--log-api-key' option.\n` + ` FRODO_LOG_SECRET: Log API secret. Overrides '--log-api-secret' option.\n` : ``) + (this.name().startsWith('frodo logs') ? ` FRODO_LOG_KEY: Log API key. Overrides 'username' argument.\n` + ` FRODO_LOG_SECRET: Log API secret. Overrides 'password' argument.\n` : ``) + ` FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use.\n` + ` FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'.\n`);
|
|
101
104
|
}
|
|
102
105
|
|
|
103
106
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrodoCommand.js","names":["Argument","Command","Option","globalConfig","state","fs","printMessage","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","verboseMessage","debugMessage","curlirizeMessage","hostArgument","realmArgument","default","process","env","FRODO_REALM","DEFAULT_REALM_KEY","usernameArgument","passwordArgument","serviceAccountIdOption","serviceAccountJwkFileOption","deploymentOption","choices","DEPLOYMENT_TYPES","insecureOption","verboseOption","debugOption","curlirizeOption","defaultArgs","defaultOpts","stateMap","name","host","setHost","realm","setRealm","username","setUsername","password","setPassword","attributeName","saId","setServiceAccountId","file","data","readFileSync","jwk","JSON","parse","toString","setServiceAccountJwk","error","message","type","setDeploymentType","insecure","setAllowInsecureConnection","verbose","setVerbose","debug","setDebug","curlirize","setCurlirize","FrodoStubCommand","constructor","helpOption","showHelpAfterError","configureHelp","sortSubcommands","sortOptions","setPrintHandler","setVerboseHandler","setDebugHandler","setCurlirizeHandler","setCreateProgressHandler","setUpdateProgressHandler","setStopProgressHandler","FrodoCommand","omits","arg","includes","addArgument","opt","addOption","handleDefaultArgsAndOpts","args","command","pop","options","i","v","entries","_args","length","Object","keys","handler","k"],"sources":["cli/FrodoCommand.ts"],"sourcesContent":["import { Argument, Command, Option } from 'commander';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n verboseMessage,\n debugMessage,\n curlirizeMessage,\n} from '../utils/Console.js';\n\nconst hostArgument = new Argument(\n '[host]',\n 'Access Management base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring.'\n);\n\nconst realmArgument = new Argument(\n '[realm]',\n \"Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise.\"\n).default(\n // must check for FRODO_REALM env variable here because otherwise cli will overwrite realm with default value\n process.env.FRODO_REALM || globalConfig.DEFAULT_REALM_KEY,\n '\"alpha\" for Identity Cloud tenants, \"/\" otherwise.'\n);\n\nconst usernameArgument = new Argument(\n '[username]',\n 'Username to login with. Must be an admin user with appropriate rights to manage authentication journeys/trees.'\n);\n\nconst passwordArgument = new Argument('[password]', 'Password.');\n\nconst serviceAccountIdOption = new Option(\n '--sa-id <sa-id>',\n 'Service account id.'\n);\n\nconst serviceAccountJwkFileOption = new Option(\n '--sa-jwk-file <file>',\n 'File containing the JSON Web Key (JWK) associated with the the service account.'\n);\n\nconst deploymentOption = new Option(\n '-m, --type <type>',\n 'Override auto-detected deployment type. Valid values for type: \\n\\\nclassic: A classic Access Management-only deployment with custom layout and configuration. \\n\\\ncloud: A ForgeRock Identity Cloud environment. \\n\\\nforgeops: A ForgeOps CDK or CDM deployment. \\n\\\nThe detected or provided deployment type controls certain behavior like obtaining an Identity \\\nManagement admin token or not and whether to export/import referenced email templates or how \\\nto walk through the tenant admin login flow of Identity Cloud and handle MFA'\n).choices(globalConfig.DEPLOYMENT_TYPES);\n\nconst insecureOption = new Option(\n '-k, --insecure',\n 'Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://<host>:<port>), in that case the proxy must provide this capability.'\n).default(false, \"Don't allow insecure connections\");\n\nconst verboseOption = new Option(\n '--verbose',\n 'Verbose output during command execution. If specified, may or may not produce additional output.'\n);\n\nconst debugOption = new Option(\n '--debug',\n 'Debug output during command execution. If specified, may or may not produce additional output helpful for troubleshooting.'\n);\n\nconst curlirizeOption = new Option(\n '--curlirize',\n 'Output all network calls in curl format.'\n);\n\nconst defaultArgs = [\n hostArgument,\n realmArgument,\n usernameArgument,\n passwordArgument,\n];\n\nconst defaultOpts = [\n serviceAccountIdOption,\n serviceAccountJwkFileOption,\n deploymentOption,\n insecureOption,\n verboseOption,\n debugOption,\n curlirizeOption,\n];\n\nconst stateMap = {\n [hostArgument.name()]: (host: string) => state.setHost(host),\n [realmArgument.name()]: (realm: string) => state.setRealm(realm),\n [usernameArgument.name()]: (username: string) => state.setUsername(username),\n [passwordArgument.name()]: (password: string) => state.setPassword(password),\n [serviceAccountIdOption.attributeName()]: (saId: string) =>\n state.setServiceAccountId(saId),\n [serviceAccountJwkFileOption.attributeName()]: (file: string) => {\n try {\n const data = fs.readFileSync(file);\n const jwk = JSON.parse(data.toString());\n state.setServiceAccountJwk(jwk);\n } catch (error) {\n printMessage(\n `Error parsing JWK from file ${file}: ${error.message}`,\n 'error'\n );\n }\n },\n [deploymentOption.attributeName()]: (type: string) =>\n state.setDeploymentType(type),\n [insecureOption.attributeName()]: (insecure: boolean) =>\n state.setAllowInsecureConnection(insecure),\n [verboseOption.attributeName()]: (verbose: boolean) =>\n state.setVerbose(verbose),\n [debugOption.attributeName()]: (debug: boolean) => state.setDebug(debug),\n [curlirizeOption.attributeName()]: (curlirize: boolean) =>\n state.setCurlirize(curlirize),\n};\n\n/**\n * Command with default options\n */\nexport class FrodoStubCommand extends Command {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string) {\n super(name);\n\n // other default settings\n this.helpOption('-h, --help', 'Help');\n this.showHelpAfterError();\n this.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n });\n\n // register default handlers\n state.setPrintHandler(printMessage);\n state.setVerboseHandler(verboseMessage);\n state.setDebugHandler(debugMessage);\n state.setCurlirizeHandler(curlirizeMessage);\n state.setCreateProgressHandler(createProgressIndicator);\n state.setUpdateProgressHandler(updateProgressIndicator);\n state.setStopProgressHandler(stopProgressIndicator);\n }\n}\n\n/**\n * Command with default options\n */\nexport class FrodoCommand extends FrodoStubCommand {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string, omits: string[] = []) {\n super(name);\n\n // register default arguments\n for (const arg of defaultArgs) {\n if (!omits.includes(arg.name())) this.addArgument(arg);\n }\n\n // register default options\n for (const opt of defaultOpts) {\n if (!omits.includes(opt.name())) this.addOption(opt);\n }\n }\n\n /**\n *\n * @param args\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleDefaultArgsAndOpts(...args: any) {\n const command = args.pop();\n const options = args.pop();\n\n // handle arguments first\n for (const [i, v] of command.args.entries()) {\n if (!command._args[i]) {\n printMessage(\n `${command.args.length} arguments supplied but command only supports ${command._args.length}.`,\n 'warn'\n );\n break;\n }\n const arg = command._args[i].name();\n // handle only default arguments\n if (Object.keys(stateMap).includes(arg)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default argument '${arg}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[arg];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default argument '${arg}'.`\n );\n }\n }\n\n // handle options\n for (const [k, v] of Object.entries(options)) {\n // handle only default options\n if (Object.keys(stateMap).includes(k)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default option '${k}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[k];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default option '${k}'.`\n );\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FrodoCommand.js","names":["Argument","Command","Option","globalConfig","state","fs","printMessage","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","verboseMessage","debugMessage","curlirizeMessage","hostArgument","realmArgument","default","process","env","FRODO_REALM","DEFAULT_REALM_KEY","usernameArgument","passwordArgument","serviceAccountIdOption","serviceAccountJwkFileOption","deploymentOption","choices","DEPLOYMENT_TYPES","insecureOption","verboseOption","debugOption","curlirizeOption","defaultArgs","defaultOpts","stateMap","name","host","setHost","realm","setRealm","username","setUsername","password","setPassword","attributeName","saId","setServiceAccountId","file","data","readFileSync","jwk","JSON","parse","toString","setServiceAccountJwk","error","message","type","setDeploymentType","insecure","setAllowInsecureConnection","verbose","setVerbose","debug","setDebug","curlirize","setCurlirize","FrodoStubCommand","constructor","helpOption","showHelpAfterError","configureHelp","sortSubcommands","sortOptions","setPrintHandler","setVerboseHandler","setDebugHandler","setCurlirizeHandler","setCreateProgressHandler","setUpdateProgressHandler","setStopProgressHandler","FrodoCommand","omits","arg","includes","addArgument","opt","addOption","addHelpText","startsWith","handleDefaultArgsAndOpts","args","command","pop","options","i","v","entries","_args","length","Object","keys","handler","k"],"sources":["cli/FrodoCommand.ts"],"sourcesContent":["import { Argument, Command, Option } from 'commander';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n verboseMessage,\n debugMessage,\n curlirizeMessage,\n} from '../utils/Console.js';\n\nconst hostArgument = new Argument(\n '[host]',\n 'Access Management base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring.'\n);\n\nconst realmArgument = new Argument(\n '[realm]',\n \"Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise.\"\n).default(\n // must check for FRODO_REALM env variable here because otherwise cli will overwrite realm with default value\n process.env.FRODO_REALM || globalConfig.DEFAULT_REALM_KEY,\n '\"alpha\" for Identity Cloud tenants, \"/\" otherwise.'\n);\n\nconst usernameArgument = new Argument(\n '[username]',\n 'Username to login with. Must be an admin user with appropriate rights to manage authentication journeys/trees.'\n);\n\nconst passwordArgument = new Argument('[password]', 'Password.');\n\nconst serviceAccountIdOption = new Option(\n '--sa-id <sa-id>',\n 'Service account id.'\n);\n\nconst serviceAccountJwkFileOption = new Option(\n '--sa-jwk-file <file>',\n 'File containing the JSON Web Key (JWK) associated with the the service account.'\n);\n\nconst deploymentOption = new Option(\n '-m, --type <type>',\n 'Override auto-detected deployment type. Valid values for type: \\n\\\nclassic: A classic Access Management-only deployment with custom layout and configuration. \\n\\\ncloud: A ForgeRock Identity Cloud environment. \\n\\\nforgeops: A ForgeOps CDK or CDM deployment. \\n\\\nThe detected or provided deployment type controls certain behavior like obtaining an Identity \\\nManagement admin token or not and whether to export/import referenced email templates or how \\\nto walk through the tenant admin login flow of Identity Cloud and handle MFA'\n).choices(globalConfig.DEPLOYMENT_TYPES);\n\nconst insecureOption = new Option(\n '-k, --insecure',\n 'Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://<host>:<port>), in that case the proxy must provide this capability.'\n).default(false, \"Don't allow insecure connections\");\n\nconst verboseOption = new Option(\n '--verbose',\n 'Verbose output during command execution. If specified, may or may not produce additional output.'\n);\n\nconst debugOption = new Option(\n '--debug',\n 'Debug output during command execution. If specified, may or may not produce additional output helpful for troubleshooting.'\n);\n\nconst curlirizeOption = new Option(\n '--curlirize',\n 'Output all network calls in curl format.'\n);\n\nconst defaultArgs = [\n hostArgument,\n realmArgument,\n usernameArgument,\n passwordArgument,\n];\n\nconst defaultOpts = [\n serviceAccountIdOption,\n serviceAccountJwkFileOption,\n deploymentOption,\n insecureOption,\n verboseOption,\n debugOption,\n curlirizeOption,\n];\n\nconst stateMap = {\n [hostArgument.name()]: (host: string) => state.setHost(host),\n [realmArgument.name()]: (realm: string) => state.setRealm(realm),\n [usernameArgument.name()]: (username: string) => state.setUsername(username),\n [passwordArgument.name()]: (password: string) => state.setPassword(password),\n [serviceAccountIdOption.attributeName()]: (saId: string) =>\n state.setServiceAccountId(saId),\n [serviceAccountJwkFileOption.attributeName()]: (file: string) => {\n try {\n const data = fs.readFileSync(file);\n const jwk = JSON.parse(data.toString());\n state.setServiceAccountJwk(jwk);\n } catch (error) {\n printMessage(\n `Error parsing JWK from file ${file}: ${error.message}`,\n 'error'\n );\n }\n },\n [deploymentOption.attributeName()]: (type: string) =>\n state.setDeploymentType(type),\n [insecureOption.attributeName()]: (insecure: boolean) =>\n state.setAllowInsecureConnection(insecure),\n [verboseOption.attributeName()]: (verbose: boolean) =>\n state.setVerbose(verbose),\n [debugOption.attributeName()]: (debug: boolean) => state.setDebug(debug),\n [curlirizeOption.attributeName()]: (curlirize: boolean) =>\n state.setCurlirize(curlirize),\n};\n\n/**\n * Command with default options\n */\nexport class FrodoStubCommand extends Command {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string) {\n super(name);\n\n // other default settings\n this.helpOption('-h, --help', 'Help');\n this.showHelpAfterError();\n this.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n });\n\n // register default handlers\n state.setPrintHandler(printMessage);\n state.setVerboseHandler(verboseMessage);\n state.setDebugHandler(debugMessage);\n state.setCurlirizeHandler(curlirizeMessage);\n state.setCreateProgressHandler(createProgressIndicator);\n state.setUpdateProgressHandler(updateProgressIndicator);\n state.setStopProgressHandler(stopProgressIndicator);\n }\n}\n\n/**\n * Command with default options\n */\nexport class FrodoCommand extends FrodoStubCommand {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string, omits: string[] = []) {\n super(name);\n\n // register default arguments\n for (const arg of defaultArgs) {\n if (!omits.includes(arg.name())) this.addArgument(arg);\n }\n\n // register default options\n for (const opt of defaultOpts) {\n if (!omits.includes(opt.name())) this.addOption(opt);\n }\n\n // additional help\n this.addHelpText(\n 'after',\n `\\nEvironment Variables:\\n` +\n ` FRODO_HOST: Access Management base URL. Overrides 'host' argument.\\n` +\n ` FRODO_REALM: Realm. Overrides 'realm' argument.\\n` +\n ` FRODO_USERNAME: Username. Overrides 'username' argument.\\n` +\n ` FRODO_PASSWORD: Password. Overrides 'password' argument.\\n` +\n ` FRODO_SA_ID: Service account uuid. Overrides '--sa-id' option.\\n` +\n ` FRODO_SA_JWK: Service account JWK. Overrides '--sa-jwk-file' option but takes the actual JWK as a value, not a file name.\\n` +\n ('frodo conn save' === this.name()\n ? ` FRODO_LOG_KEY: Log API key. Overrides '--log-api-key' option.\\n` +\n ` FRODO_LOG_SECRET: Log API secret. Overrides '--log-api-secret' option.\\n`\n : ``) +\n (this.name().startsWith('frodo logs')\n ? ` FRODO_LOG_KEY: Log API key. Overrides 'username' argument.\\n` +\n ` FRODO_LOG_SECRET: Log API secret. Overrides 'password' argument.\\n`\n : ``) +\n ` FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use.\\n` +\n ` FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'.\\n`\n );\n }\n\n /**\n *\n * @param args\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleDefaultArgsAndOpts(...args: any) {\n const command = args.pop();\n const options = args.pop();\n\n // handle arguments first\n for (const [i, v] of command.args.entries()) {\n if (!command._args[i]) {\n printMessage(\n `${command.args.length} arguments supplied but command only supports ${command._args.length}.`,\n 'warn'\n );\n break;\n }\n const arg = command._args[i].name();\n // handle only default arguments\n if (Object.keys(stateMap).includes(arg)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default argument '${arg}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[arg];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default argument '${arg}'.`\n );\n }\n }\n\n // handle options\n for (const [k, v] of Object.entries(options)) {\n // handle only default options\n if (Object.keys(stateMap).includes(k)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default option '${k}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[k];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default option '${k}'.`\n );\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -4,8 +4,9 @@ import { frodo, state } from '@rockcarver/frodo-lib';
|
|
|
4
4
|
import { verboseMessage, printMessage } from '../../utils/Console';
|
|
5
5
|
import { addExistingServiceAccount } from '../../ops/ConnectionProfileOps.js';
|
|
6
6
|
import { provisionCreds } from '../../ops/LogOps';
|
|
7
|
+
import * as s from '../../help/SampleData';
|
|
7
8
|
const program = new FrodoCommand('frodo conn save', ['realm']);
|
|
8
|
-
program.alias('add').description('Save connection profiles.').addOption(new Option('--
|
|
9
|
+
program.alias('add').description('Save connection profiles.').addOption(new Option('--no-sa', 'Do not create and add service account.')).addOption(new Option('--log-api-key [key]', 'Log API key. If specified, must also include --log-api-secret. Ignored with --no-log-api.')).addOption(new Option('--log-api-secret [secret]', 'Log API secret. If specified, must also include --log-api-key. Ignored with --no-log-api.')).addOption(new Option('--no-log-api', 'Do not create and add log API key and secret.')).addOption(new Option('--no-validate', 'Do not validate connection.')).addOption(new Option('--authentication-service [service]', 'Name of the authentication service/tree to use.')).addOption(new Option('--authentication-header-overrides [headers]', 'Map of headers: {"host":"am.example.com:8081"}.')).addHelpText('after', `Usage Examples:\n` + ` Create a connection profile with a new log API key and secret and a new service account:\n` + ` $ frodo conn save ${s.amBaseUrl} ${s.username} '${s.password}'\n`['brightCyan'] + ` Save an existing service account to an existing or new connection profile:\n` + ` $ frodo conn save --sa-id ${s.saId} --sa-jwk-file ${s.saJwkFile} ${s.amBaseUrl}'\n`['brightCyan'] + ` Save an existing service account to an existing connection profile (partial host URL only updates an existing profile):\n` + ` $ frodo conn save --sa-id ${s.saId} --sa-jwk-file ${s.saJwkFile} ${s.connId}'\n`['brightCyan']).action(
|
|
9
10
|
// implement command logic inside action handler
|
|
10
11
|
async (host, user, password, options, command) => {
|
|
11
12
|
command.handleDefaultArgsAndOpts(host, user, password, options, command);
|
|
@@ -17,7 +18,9 @@ async (host, user, password, options, command) => {
|
|
|
17
18
|
if (options.authenticationHeaderOverrides) {
|
|
18
19
|
state.setAuthenticationHeaderOverrides(JSON.parse(options.authenticationHeaderOverrides));
|
|
19
20
|
}
|
|
20
|
-
const
|
|
21
|
+
const needSa = options.sa && !state.getServiceAccountId() && !state.getServiceAccountJwk();
|
|
22
|
+
const needLogApiKey = options.logApi && !state.getLogApiKey() && !state.getLogApiSecret() && needSa;
|
|
23
|
+
const forceLoginAsUser = needSa || needLogApiKey;
|
|
21
24
|
if (options.validate && (await frodo.login.getTokens(forceLoginAsUser)) || !options.validate) {
|
|
22
25
|
verboseMessage(`Saving connection profile for tenant ${state.getHost()}...`);
|
|
23
26
|
// if cloud deployment add service account
|
|
@@ -50,7 +53,7 @@ async (host, user, password, options, command) => {
|
|
|
50
53
|
// if cloud deployment add log api key and secret
|
|
51
54
|
verboseMessage(options);
|
|
52
55
|
verboseMessage(state);
|
|
53
|
-
if (options.validate && state.getDeploymentType() === frodo.helper.constants.CLOUD_DEPLOYMENT_TYPE_KEY &&
|
|
56
|
+
if (options.validate && state.getDeploymentType() === frodo.helper.constants.CLOUD_DEPLOYMENT_TYPE_KEY && needLogApiKey) {
|
|
54
57
|
// validate and add existing log api key and secret
|
|
55
58
|
if (options.logApiKey && options.logApiSecret) {
|
|
56
59
|
verboseMessage(`Validating and adding log api key and secret...`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conn-save.js","names":["FrodoCommand","Option","frodo","state","verboseMessage","printMessage","addExistingServiceAccount","provisionCreds","program","alias","description","addOption","action","host","user","password","options","command","handleDefaultArgsAndOpts","setLogApiKey","logApiKey","setLogApiSecret","logApiSecret","authenticationService","setAuthenticationService","authenticationHeaderOverrides","setAuthenticationHeaderOverrides","JSON","parse","forceLoginAsUser","sa","getLogApiKey","getLogApiSecret","validate","login","getTokens","getHost","getDeploymentType","helper","constants","CLOUD_DEPLOYMENT_TYPE_KEY","cloud","serviceAccount","isServiceAccountsFeatureAvailable","saId","saJwkFile","getServiceAccountId","conn","addNewServiceAccount","name","_id","error","_error$response","_error$response2","_error$response2$data","response","data","message","process","exitCode","logApi","creds","api_key_id","api_key_secret","_error$response3","_error$response4","_error$response4$data","saveConnectionProfile"],"sources":["cli/conn/conn-save.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport { verboseMessage, printMessage } from '../../utils/Console';\nimport { addExistingServiceAccount } from '../../ops/ConnectionProfileOps.js';\nimport { provisionCreds } from '../../ops/LogOps';\n\nconst program = new FrodoCommand('frodo conn save', ['realm']);\n\nprogram\n .alias('add')\n .description('Save connection profiles.')\n .addOption(\n new Option(\n '--sa-id <uuid>',\n \"Service account's uuid. If specified, must also include --sa-jwk-file. Ignored with --no-sa.\"\n )\n )\n .addOption(\n new Option(\n '--sa-jwk-file <file>',\n \"File containing the service account's java web key (jwk). Jwk must contain private key! If specified, must also include --sa-id. Ignored with --no-sa.\"\n )\n )\n .addOption(new Option('--no-sa', 'Do not create and add service account.'))\n .addOption(\n new Option(\n '--log-api-key [key]',\n 'Log API key. If specified, must also include --log-api-secret. Ignored with --no-log-api.'\n )\n )\n .addOption(\n new Option(\n '--log-api-secret [secret]',\n 'Log API secret. If specified, must also include --log-api-key. Ignored with --no-log-api.'\n )\n )\n .addOption(\n new Option('--no-log-api', 'Do not create and add log API key and secret.')\n )\n .addOption(new Option('--no-validate', 'Do not validate connection.'))\n .addOption(\n new Option(\n '--authentication-service [service]',\n 'Name of the authentication service/tree to use.'\n )\n )\n .addOption(\n new Option(\n '--authentication-header-overrides [headers]',\n 'Map of headers: {\"host\":\"am.example.com:8081\"}.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n state.setLogApiKey(options.logApiKey);\n state.setLogApiSecret(options.logApiSecret);\n if (options.authenticationService) {\n state.setAuthenticationService(options.authenticationService);\n }\n if (options.authenticationHeaderOverrides) {\n state.setAuthenticationHeaderOverrides(\n JSON.parse(options.authenticationHeaderOverrides)\n );\n }\n const forceLoginAsUser =\n !options.sa ||\n (state.getLogApiKey() && state.getLogApiSecret() ? false : true);\n if (\n (options.validate && (await frodo.login.getTokens(forceLoginAsUser))) ||\n !options.validate\n ) {\n verboseMessage(\n `Saving connection profile for tenant ${state.getHost()}...`\n );\n // if cloud deployment add service account\n if (\n options.validate &&\n state.getDeploymentType() ===\n frodo.helper.constants.CLOUD_DEPLOYMENT_TYPE_KEY &&\n options.sa &&\n (await frodo.cloud.serviceAccount.isServiceAccountsFeatureAvailable())\n ) {\n // validate and add existing service account\n if (options.saId && options.saJwkFile) {\n verboseMessage(`Validating and adding service account...`);\n if (\n await addExistingServiceAccount(\n options.saId,\n options.saJwkFile,\n options.validate\n )\n ) {\n printMessage(\n `Validated and added service account with id ${options.saId} to profile.`\n );\n }\n }\n // add new service account if none already exists in the profile\n else if (!state.getServiceAccountId()) {\n try {\n verboseMessage(`Creating service account...`);\n const sa = await frodo.conn.addNewServiceAccount();\n printMessage(\n `Created and added service account ${sa.name} with id ${sa._id} to profile.`\n );\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(\n `Error creating service account: ${error.response?.data?.message}`,\n 'error'\n );\n process.exitCode = 1;\n }\n }\n }\n // add existing service account without validation\n else if (\n !options.validate &&\n options.saId &&\n options.saJwkFile &&\n options.sa\n ) {\n addExistingServiceAccount(\n options.saId,\n options.saJwkFile,\n options.validate\n );\n }\n // if cloud deployment add log api key and secret\n verboseMessage(options);\n verboseMessage(state);\n if (\n options.validate &&\n state.getDeploymentType() ===\n frodo.helper.constants.CLOUD_DEPLOYMENT_TYPE_KEY &&\n options.logApi\n ) {\n // validate and add existing log api key and secret\n if (options.logApiKey && options.logApiSecret) {\n verboseMessage(`Validating and adding log api key and secret...`);\n if (\n await addExistingServiceAccount(\n options.logApiKey,\n options.logApiSecret,\n options.validate\n )\n ) {\n printMessage(\n `Added log API key ${options.logApiKey} to profile.`\n );\n }\n }\n // add new log api key and secret if none already exists in the profile\n else if (!state.getLogApiKey()) {\n try {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id as string);\n state.setLogApiSecret(creds.api_key_secret as string);\n printMessage(\n `Created log API key ${creds.api_key_id} and secret.`\n );\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(\n `Error creating log API key and secret: ${error.response?.data?.message}`,\n 'error'\n );\n process.exitCode = 1;\n }\n }\n }\n // add existing log api key and secret without validation\n // storing log API key and secret in the connection profile is happening default, therefore no code required here\n if (await frodo.conn.saveConnectionProfile(host)) {\n printMessage(`Saved connection profile ${state.getHost()}`);\n } else {\n process.exitCode = 1;\n }\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conn-save.js","names":["FrodoCommand","Option","frodo","state","verboseMessage","printMessage","addExistingServiceAccount","provisionCreds","s","program","alias","description","addOption","addHelpText","amBaseUrl","username","password","saId","saJwkFile","connId","action","host","user","options","command","handleDefaultArgsAndOpts","setLogApiKey","logApiKey","setLogApiSecret","logApiSecret","authenticationService","setAuthenticationService","authenticationHeaderOverrides","setAuthenticationHeaderOverrides","JSON","parse","needSa","sa","getServiceAccountId","getServiceAccountJwk","needLogApiKey","logApi","getLogApiKey","getLogApiSecret","forceLoginAsUser","validate","login","getTokens","getHost","getDeploymentType","helper","constants","CLOUD_DEPLOYMENT_TYPE_KEY","cloud","serviceAccount","isServiceAccountsFeatureAvailable","conn","addNewServiceAccount","name","_id","error","_error$response","_error$response2","_error$response2$data","response","data","message","process","exitCode","creds","api_key_id","api_key_secret","_error$response3","_error$response4","_error$response4$data","saveConnectionProfile"],"sources":["cli/conn/conn-save.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport { verboseMessage, printMessage } from '../../utils/Console';\nimport { addExistingServiceAccount } from '../../ops/ConnectionProfileOps.js';\nimport { provisionCreds } from '../../ops/LogOps';\nimport * as s from '../../help/SampleData';\n\nconst program = new FrodoCommand('frodo conn save', ['realm']);\n\nprogram\n .alias('add')\n .description('Save connection profiles.')\n .addOption(new Option('--no-sa', 'Do not create and add service account.'))\n .addOption(\n new Option(\n '--log-api-key [key]',\n 'Log API key. If specified, must also include --log-api-secret. Ignored with --no-log-api.'\n )\n )\n .addOption(\n new Option(\n '--log-api-secret [secret]',\n 'Log API secret. If specified, must also include --log-api-key. Ignored with --no-log-api.'\n )\n )\n .addOption(\n new Option('--no-log-api', 'Do not create and add log API key and secret.')\n )\n .addOption(new Option('--no-validate', 'Do not validate connection.'))\n .addOption(\n new Option(\n '--authentication-service [service]',\n 'Name of the authentication service/tree to use.'\n )\n )\n .addOption(\n new Option(\n '--authentication-header-overrides [headers]',\n 'Map of headers: {\"host\":\"am.example.com:8081\"}.'\n )\n )\n .addHelpText(\n 'after',\n `Usage Examples:\\n` +\n ` Create a connection profile with a new log API key and secret and a new service account:\\n` +\n ` $ frodo conn save ${s.amBaseUrl} ${s.username} '${s.password}'\\n`[\n 'brightCyan'\n ] +\n ` Save an existing service account to an existing or new connection profile:\\n` +\n ` $ frodo conn save --sa-id ${s.saId} --sa-jwk-file ${s.saJwkFile} ${s.amBaseUrl}'\\n`[\n 'brightCyan'\n ] +\n ` Save an existing service account to an existing connection profile (partial host URL only updates an existing profile):\\n` +\n ` $ frodo conn save --sa-id ${s.saId} --sa-jwk-file ${s.saJwkFile} ${s.connId}'\\n`[\n 'brightCyan'\n ]\n )\n .action(\n // implement command logic inside action handler\n async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n state.setLogApiKey(options.logApiKey);\n state.setLogApiSecret(options.logApiSecret);\n if (options.authenticationService) {\n state.setAuthenticationService(options.authenticationService);\n }\n if (options.authenticationHeaderOverrides) {\n state.setAuthenticationHeaderOverrides(\n JSON.parse(options.authenticationHeaderOverrides)\n );\n }\n const needSa =\n options.sa &&\n !state.getServiceAccountId() &&\n !state.getServiceAccountJwk();\n const needLogApiKey =\n options.logApi &&\n !state.getLogApiKey() &&\n !state.getLogApiSecret() &&\n needSa;\n const forceLoginAsUser = needSa || needLogApiKey;\n if (\n (options.validate && (await frodo.login.getTokens(forceLoginAsUser))) ||\n !options.validate\n ) {\n verboseMessage(\n `Saving connection profile for tenant ${state.getHost()}...`\n );\n // if cloud deployment add service account\n if (\n options.validate &&\n state.getDeploymentType() ===\n frodo.helper.constants.CLOUD_DEPLOYMENT_TYPE_KEY &&\n options.sa &&\n (await frodo.cloud.serviceAccount.isServiceAccountsFeatureAvailable())\n ) {\n // validate and add existing service account\n if (options.saId && options.saJwkFile) {\n verboseMessage(`Validating and adding service account...`);\n if (\n await addExistingServiceAccount(\n options.saId,\n options.saJwkFile,\n options.validate\n )\n ) {\n printMessage(\n `Validated and added service account with id ${options.saId} to profile.`\n );\n }\n }\n // add new service account if none already exists in the profile\n else if (!state.getServiceAccountId()) {\n try {\n verboseMessage(`Creating service account...`);\n const sa = await frodo.conn.addNewServiceAccount();\n printMessage(\n `Created and added service account ${sa.name} with id ${sa._id} to profile.`\n );\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(\n `Error creating service account: ${error.response?.data?.message}`,\n 'error'\n );\n process.exitCode = 1;\n }\n }\n }\n // add existing service account without validation\n else if (\n !options.validate &&\n options.saId &&\n options.saJwkFile &&\n options.sa\n ) {\n addExistingServiceAccount(\n options.saId,\n options.saJwkFile,\n options.validate\n );\n }\n // if cloud deployment add log api key and secret\n verboseMessage(options);\n verboseMessage(state);\n if (\n options.validate &&\n state.getDeploymentType() ===\n frodo.helper.constants.CLOUD_DEPLOYMENT_TYPE_KEY &&\n needLogApiKey\n ) {\n // validate and add existing log api key and secret\n if (options.logApiKey && options.logApiSecret) {\n verboseMessage(`Validating and adding log api key and secret...`);\n if (\n await addExistingServiceAccount(\n options.logApiKey,\n options.logApiSecret,\n options.validate\n )\n ) {\n printMessage(\n `Added log API key ${options.logApiKey} to profile.`\n );\n }\n }\n // add new log api key and secret if none already exists in the profile\n else if (!state.getLogApiKey()) {\n try {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id as string);\n state.setLogApiSecret(creds.api_key_secret as string);\n printMessage(\n `Created log API key ${creds.api_key_id} and secret.`\n );\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(\n `Error creating log API key and secret: ${error.response?.data?.message}`,\n 'error'\n );\n process.exitCode = 1;\n }\n }\n }\n // add existing log api key and secret without validation\n // storing log API key and secret in the connection profile is happening default, therefore no code required here\n if (await frodo.conn.saveConnectionProfile(host)) {\n printMessage(`Saved connection profile ${state.getHost()}`);\n } else {\n process.exitCode = 1;\n }\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,cAAc,EAAEC,YAAY,QAAQ,qBAAqB;AAClE,SAASC,yBAAyB,QAAQ,mCAAmC;AAC7E,SAASC,cAAc,QAAQ,kBAAkB;AACjD,OAAO,KAAKC,CAAC,MAAM,uBAAuB;AAE1C,MAAMC,OAAO,GAAG,IAAIT,YAAY,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC;AAE9DS,OAAO,CACJC,KAAK,CAAC,KAAK,CAAC,CACZC,WAAW,CAAC,2BAA2B,CAAC,CACxCC,SAAS,CAAC,IAAIX,MAAM,CAAC,SAAS,EAAE,wCAAwC,CAAC,CAAC,CAC1EW,SAAS,CACR,IAAIX,MAAM,CACR,qBAAqB,EACrB,2FACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,2BAA2B,EAC3B,2FACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CAAC,cAAc,EAAE,+CAA+C,CAC5E,CAAC,CACAW,SAAS,CAAC,IAAIX,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC,CAAC,CACrEW,SAAS,CACR,IAAIX,MAAM,CACR,oCAAoC,EACpC,iDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,6CAA6C,EAC7C,iDACF,CACF,CAAC,CACAY,WAAW,CACV,OAAO,EACN,mBAAkB,GAChB,8FAA6F,GAC7F,uBAAsBL,CAAC,CAACM,SAAU,IAAGN,CAAC,CAACO,QAAS,KAAIP,CAAC,CAACQ,QAAS,KAAI,CAClE,YAAY,CACb,GACA,gFAA+E,GAC/E,+BAA8BR,CAAC,CAACS,IAAK,kBAAiBT,CAAC,CAACU,SAAU,IAAGV,CAAC,CAACM,SAAU,KAAI,CACpF,YAAY,CACb,GACA,6HAA4H,GAC5H,+BAA8BN,CAAC,CAACS,IAAK,kBAAiBT,CAAC,CAACU,SAAU,IAAGV,CAAC,CAACW,MAAO,KAAI,CACjF,YAAY,CAElB,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,IAAI,EAAEN,QAAQ,EAAEO,OAAO,EAAEC,OAAO,KAAK;EAChDA,OAAO,CAACC,wBAAwB,CAACJ,IAAI,EAAEC,IAAI,EAAEN,QAAQ,EAAEO,OAAO,EAAEC,OAAO,CAAC;EACxErB,KAAK,CAACuB,YAAY,CAACH,OAAO,CAACI,SAAS,CAAC;EACrCxB,KAAK,CAACyB,eAAe,CAACL,OAAO,CAACM,YAAY,CAAC;EAC3C,IAAIN,OAAO,CAACO,qBAAqB,EAAE;IACjC3B,KAAK,CAAC4B,wBAAwB,CAACR,OAAO,CAACO,qBAAqB,CAAC;EAC/D;EACA,IAAIP,OAAO,CAACS,6BAA6B,EAAE;IACzC7B,KAAK,CAAC8B,gCAAgC,CACpCC,IAAI,CAACC,KAAK,CAACZ,OAAO,CAACS,6BAA6B,CAClD,CAAC;EACH;EACA,MAAMI,MAAM,GACVb,OAAO,CAACc,EAAE,IACV,CAAClC,KAAK,CAACmC,mBAAmB,CAAC,CAAC,IAC5B,CAACnC,KAAK,CAACoC,oBAAoB,CAAC,CAAC;EAC/B,MAAMC,aAAa,GACjBjB,OAAO,CAACkB,MAAM,IACd,CAACtC,KAAK,CAACuC,YAAY,CAAC,CAAC,IACrB,CAACvC,KAAK,CAACwC,eAAe,CAAC,CAAC,IACxBP,MAAM;EACR,MAAMQ,gBAAgB,GAAGR,MAAM,IAAII,aAAa;EAChD,IACGjB,OAAO,CAACsB,QAAQ,KAAK,MAAM3C,KAAK,CAAC4C,KAAK,CAACC,SAAS,CAACH,gBAAgB,CAAC,CAAC,IACpE,CAACrB,OAAO,CAACsB,QAAQ,EACjB;IACAzC,cAAc,CACX,wCAAuCD,KAAK,CAAC6C,OAAO,CAAC,CAAE,KAC1D,CAAC;IACD;IACA,IACEzB,OAAO,CAACsB,QAAQ,IAChB1C,KAAK,CAAC8C,iBAAiB,CAAC,CAAC,KACvB/C,KAAK,CAACgD,MAAM,CAACC,SAAS,CAACC,yBAAyB,IAClD7B,OAAO,CAACc,EAAE,KACT,MAAMnC,KAAK,CAACmD,KAAK,CAACC,cAAc,CAACC,iCAAiC,CAAC,CAAC,CAAC,EACtE;MACA;MACA,IAAIhC,OAAO,CAACN,IAAI,IAAIM,OAAO,CAACL,SAAS,EAAE;QACrCd,cAAc,CAAE,0CAAyC,CAAC;QAC1D,IACE,MAAME,yBAAyB,CAC7BiB,OAAO,CAACN,IAAI,EACZM,OAAO,CAACL,SAAS,EACjBK,OAAO,CAACsB,QACV,CAAC,EACD;UACAxC,YAAY,CACT,+CAA8CkB,OAAO,CAACN,IAAK,cAC9D,CAAC;QACH;MACF;MACA;MAAA,KACK,IAAI,CAACd,KAAK,CAACmC,mBAAmB,CAAC,CAAC,EAAE;QACrC,IAAI;UACFlC,cAAc,CAAE,6BAA4B,CAAC;UAC7C,MAAMiC,EAAE,GAAG,MAAMnC,KAAK,CAACsD,IAAI,CAACC,oBAAoB,CAAC,CAAC;UAClDpD,YAAY,CACT,qCAAoCgC,EAAE,CAACqB,IAAK,YAAWrB,EAAE,CAACsB,GAAI,cACjE,CAAC;QACH,CAAC,CAAC,OAAOC,KAAK,EAAE;UAAA,IAAAC,eAAA,EAAAC,gBAAA,EAAAC,qBAAA;UACd1D,YAAY,EAAAwD,eAAA,GAACD,KAAK,CAACI,QAAQ,cAAAH,eAAA,uBAAdA,eAAA,CAAgBI,IAAI,EAAE,OAAO,CAAC;UAC3C5D,YAAY,CACT,mCAAgC,CAAAyD,gBAAA,GAAEF,KAAK,CAACI,QAAQ,cAAAF,gBAAA,wBAAAC,qBAAA,GAAdD,gBAAA,CAAgBG,IAAI,cAAAF,qBAAA,uBAApBA,qBAAA,CAAsBG,OAAQ,EAAC,EAClE,OACF,CAAC;UACDC,OAAO,CAACC,QAAQ,GAAG,CAAC;QACtB;MACF;IACF;IACA;IAAA,KACK,IACH,CAAC7C,OAAO,CAACsB,QAAQ,IACjBtB,OAAO,CAACN,IAAI,IACZM,OAAO,CAACL,SAAS,IACjBK,OAAO,CAACc,EAAE,EACV;MACA/B,yBAAyB,CACvBiB,OAAO,CAACN,IAAI,EACZM,OAAO,CAACL,SAAS,EACjBK,OAAO,CAACsB,QACV,CAAC;IACH;IACA;IACAzC,cAAc,CAACmB,OAAO,CAAC;IACvBnB,cAAc,CAACD,KAAK,CAAC;IACrB,IACEoB,OAAO,CAACsB,QAAQ,IAChB1C,KAAK,CAAC8C,iBAAiB,CAAC,CAAC,KACvB/C,KAAK,CAACgD,MAAM,CAACC,SAAS,CAACC,yBAAyB,IAClDZ,aAAa,EACb;MACA;MACA,IAAIjB,OAAO,CAACI,SAAS,IAAIJ,OAAO,CAACM,YAAY,EAAE;QAC7CzB,cAAc,CAAE,iDAAgD,CAAC;QACjE,IACE,MAAME,yBAAyB,CAC7BiB,OAAO,CAACI,SAAS,EACjBJ,OAAO,CAACM,YAAY,EACpBN,OAAO,CAACsB,QACV,CAAC,EACD;UACAxC,YAAY,CACT,qBAAoBkB,OAAO,CAACI,SAAU,cACzC,CAAC;QACH;MACF;MACA;MAAA,KACK,IAAI,CAACxB,KAAK,CAACuC,YAAY,CAAC,CAAC,EAAE;QAC9B,IAAI;UACF,MAAM2B,KAAK,GAAG,MAAM9D,cAAc,CAAC,CAAC;UACpCJ,KAAK,CAACuB,YAAY,CAAC2C,KAAK,CAACC,UAAoB,CAAC;UAC9CnE,KAAK,CAACyB,eAAe,CAACyC,KAAK,CAACE,cAAwB,CAAC;UACrDlE,YAAY,CACT,uBAAsBgE,KAAK,CAACC,UAAW,cAC1C,CAAC;QACH,CAAC,CAAC,OAAOV,KAAK,EAAE;UAAA,IAAAY,gBAAA,EAAAC,gBAAA,EAAAC,qBAAA;UACdrE,YAAY,EAAAmE,gBAAA,GAACZ,KAAK,CAACI,QAAQ,cAAAQ,gBAAA,uBAAdA,gBAAA,CAAgBP,IAAI,EAAE,OAAO,CAAC;UAC3C5D,YAAY,CACT,0CAAuC,CAAAoE,gBAAA,GAAEb,KAAK,CAACI,QAAQ,cAAAS,gBAAA,wBAAAC,qBAAA,GAAdD,gBAAA,CAAgBR,IAAI,cAAAS,qBAAA,uBAApBA,qBAAA,CAAsBR,OAAQ,EAAC,EACzE,OACF,CAAC;UACDC,OAAO,CAACC,QAAQ,GAAG,CAAC;QACtB;MACF;IACF;IACA;IACA;IACA,IAAI,MAAMlE,KAAK,CAACsD,IAAI,CAACmB,qBAAqB,CAACtD,IAAI,CAAC,EAAE;MAChDhB,YAAY,CAAE,4BAA2BF,KAAK,CAAC6C,OAAO,CAAC,CAAE,EAAC,CAAC;IAC7D,CAAC,MAAM;MACLmB,OAAO,CAACC,QAAQ,GAAG,CAAC;IACtB;EACF,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEH3D,OAAO,CAAC0B,KAAK,CAAC,CAAC"}
|
package/esm/cli/info/info.js
CHANGED
|
@@ -2,13 +2,14 @@ import { FrodoCommand } from '../FrodoCommand';
|
|
|
2
2
|
import { Option } from 'commander';
|
|
3
3
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
4
4
|
import { createObjectTable, printMessage, verboseMessage } from '../../utils/Console';
|
|
5
|
+
import * as s from '../../help/SampleData';
|
|
5
6
|
export default function setup() {
|
|
6
|
-
const
|
|
7
|
-
|
|
7
|
+
const program = new FrodoCommand('info', ['realm']);
|
|
8
|
+
program.description('Print versions and tokens.').addOption(new Option('--json', 'Output in JSON format.')).addOption(new Option('-s, --scriptFriendly', 'Send output of operation to STDOUT in a script-friendly format (JSON) which can be piped to other commands. User messages/warnings are output to STDERR, and are not piped. For example, to only get bearer token: \n<<< frodo info my-tenant -s 2>/dev/null | jq -r .bearerToken >>>').default(false, 'Output as plain text').hideHelp()).addHelpText('after', `Usage Examples:\n` + ` Show human-readable output and login using AM base URL, username, and password (note the quotes around password to allow special characters):\n` + ` $ frodo info ${s.amBaseUrl} ${s.username} '${s.password}'\n`['brightCyan'] + ` Show human-readable output and login using a connection profile (identified by the full AM base URL):\n` + ` $ frodo info ${s.amBaseUrl}'\n`['brightCyan'] + ` Show human-readable output and login using a connection profile (identified by a unique substring of the AM base URL):\n` + ` $ frodo info ${s.connId}'\n`['brightCyan'] + ` Show JSON output and login using the AM base URL's unique substring to identify the connection profile:\n` + ` $ frodo info --json ${s.connId}'\n`['brightCyan']).action(async (host, user, password, options, command) => {
|
|
8
9
|
command.handleDefaultArgsAndOpts(host, user, password, options, command);
|
|
9
10
|
if (await frodo.login.getTokens()) {
|
|
10
11
|
const info = await frodo.info.getInfo();
|
|
11
|
-
if (!options.scriptFriendly) {
|
|
12
|
+
if (!options.scriptFriendly && !options.json) {
|
|
12
13
|
verboseMessage('Printing info, versions, and tokens...');
|
|
13
14
|
delete info.sessionToken;
|
|
14
15
|
delete info.bearerToken;
|
|
@@ -42,7 +43,6 @@ export default function setup() {
|
|
|
42
43
|
process.exitCode = 1;
|
|
43
44
|
}
|
|
44
45
|
});
|
|
45
|
-
|
|
46
|
-
return info;
|
|
46
|
+
return program;
|
|
47
47
|
}
|
|
48
48
|
//# sourceMappingURL=info.js.map
|
package/esm/cli/info/info.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","names":["FrodoCommand","Option","frodo","state","createObjectTable","printMessage","verboseMessage","setup","
|
|
1
|
+
{"version":3,"file":"info.js","names":["FrodoCommand","Option","frodo","state","createObjectTable","printMessage","verboseMessage","s","setup","program","description","addOption","default","hideHelp","addHelpText","amBaseUrl","username","password","connId","action","host","user","options","command","handleDefaultArgsAndOpts","login","getTokens","info","getInfo","scriptFriendly","json","sessionToken","bearerToken","labels","amVersion","authenticatedSubject","config_promotion_done","cookieName","deploymentType","immutable","locked","placeholder_management","region","tier","table","toString","getCookieValue","getBearerToken","JSON","stringify","process","exitCode"],"sources":["cli/info/info.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n createObjectTable,\n printMessage,\n verboseMessage,\n} from '../../utils/Console';\nimport * as s from '../../help/SampleData';\n\nexport default function setup() {\n const program = new FrodoCommand('info', ['realm']);\n program\n .description('Print versions and tokens.')\n .addOption(new Option('--json', 'Output in JSON format.'))\n .addOption(\n new Option(\n '-s, --scriptFriendly',\n 'Send output of operation to STDOUT in a script-friendly format (JSON) which can be piped to other commands. User messages/warnings are output to STDERR, and are not piped. For example, to only get bearer token: \\n<<< frodo info my-tenant -s 2>/dev/null | jq -r .bearerToken >>>'\n )\n .default(false, 'Output as plain text')\n .hideHelp()\n )\n .addHelpText(\n 'after',\n `Usage Examples:\\n` +\n ` Show human-readable output and login using AM base URL, username, and password (note the quotes around password to allow special characters):\\n` +\n ` $ frodo info ${s.amBaseUrl} ${s.username} '${s.password}'\\n`[\n 'brightCyan'\n ] +\n ` Show human-readable output and login using a connection profile (identified by the full AM base URL):\\n` +\n ` $ frodo info ${s.amBaseUrl}'\\n`['brightCyan'] +\n ` Show human-readable output and login using a connection profile (identified by a unique substring of the AM base URL):\\n` +\n ` $ frodo info ${s.connId}'\\n`['brightCyan'] +\n ` Show JSON output and login using the AM base URL's unique substring to identify the connection profile:\\n` +\n ` $ frodo info --json ${s.connId}'\\n`['brightCyan']\n )\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n if (await frodo.login.getTokens()) {\n const info = await frodo.info.getInfo();\n if (!options.scriptFriendly && !options.json) {\n verboseMessage('Printing info, versions, and tokens...');\n delete info.sessionToken;\n delete info.bearerToken;\n const labels = {\n amVersion: 'AM Version',\n authenticatedSubject: 'Subject (Type)',\n config_promotion_done: 'Promotion Done',\n cookieName: 'Cookie Name',\n deploymentType: 'Deployment Type',\n host: 'Host URL',\n immutable: 'Immutable',\n locked: 'Locked',\n placeholder_management: 'Placeholder Management',\n region: 'Region',\n tier: 'Tier',\n };\n const table = createObjectTable(info, labels);\n printMessage(`\\n${table.toString()}`);\n if (state.getCookieValue()) {\n printMessage(`\\nSession token:`, 'info');\n printMessage(`${state.getCookieValue()}`);\n }\n if (state.getBearerToken()) {\n printMessage(`\\nBearer token:`, 'info');\n printMessage(`${state.getBearerToken()}`);\n }\n } else {\n printMessage(JSON.stringify(info, null, 2), 'data');\n }\n } else {\n process.exitCode = 1;\n }\n });\n return program;\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FrodoCommand } from '../FrodoCommand';
|
|
2
|
-
import { sourcesOptionM } from './
|
|
2
|
+
import { sourcesOptionM } from './log';
|
|
3
3
|
import { Option } from 'commander';
|
|
4
4
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
5
5
|
import * as config from '../../utils/Config';
|
|
@@ -9,7 +9,7 @@ const SECONDS_IN_30_DAYS = 2592000;
|
|
|
9
9
|
const SECONDS_IN_1_HOUR = 3600;
|
|
10
10
|
const LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS;
|
|
11
11
|
const LOG_TIME_WINDOW_INCREMENT = 1;
|
|
12
|
-
const program = new FrodoCommand('frodo
|
|
12
|
+
const program = new FrodoCommand('frodo log fetch', ['realm', 'type']);
|
|
13
13
|
program.description('Fetch Identity Cloud logs between a specified begin and end time period.\
|
|
14
14
|
WARNING: depending on filters and time period specified, this could take substantial time to complete.').addOption(sourcesOptionM).addOption(new Option('-l, --level <level>', 'Set log level filter. You can specify the level as a number or a string. \
|
|
15
15
|
Following values are possible (values on the same line are equivalent): \
|
|
@@ -88,4 +88,4 @@ Cannot be more than 30 days in the past. If not specified, logs from one hour ag
|
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
90
|
program.parse();
|
|
91
|
-
//# sourceMappingURL=
|
|
91
|
+
//# sourceMappingURL=log-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-fetch.js","names":["FrodoCommand","sourcesOptionM","Option","frodo","state","config","printMessage","fetchLogs","provisionCreds","SECONDS_IN_30_DAYS","SECONDS_IN_1_HOUR","LOG_TIME_WINDOW_MAX","LOG_TIME_WINDOW_INCREMENT","program","description","addOption","default","cloud","log","resolveLevel","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","getConnectionProfile","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","login","getTokens","creds","api_key_id","api_key_secret","now","Date","nowString","toISOString","beginTimestamp","tempStartDate","setTime","tempEndDate","endTimestamp","beginTs","parse","endTs","intermediateEndTs","opts","sources","level","saveConnectionProfile","timeIncrement","transactionId","searchString","getNoiseFilters","defaults"],"sources":["cli/log/log-fetch.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { sourcesOptionM } from './log';\nimport { Option } from 'commander';\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\nimport { fetchLogs, provisionCreds } from '../../ops/LogOps';\n\nconst SECONDS_IN_30_DAYS = 2592000;\nconst SECONDS_IN_1_HOUR = 3600;\nconst LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS;\nconst LOG_TIME_WINDOW_INCREMENT = 1;\n\nconst program = new FrodoCommand('frodo log fetch', ['realm', 'type']);\nprogram\n .description(\n 'Fetch Identity Cloud logs between a specified begin and end time period.\\\n WARNING: depending on filters and time period specified, this could take substantial time to complete.'\n )\n .addOption(sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${frodo.cloud.log.resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option(\n '-b, --begin-timestamp <beginTs>',\n 'Begin timestamp for period (in ISO8601, example: \"2022-10-13T19:06:28Z\", or \"2022-09.30\". \\\nCannot be more than 30 days in the past. If not specified, logs from one hour ago are fetched \\\n(-e is ignored)'\n )\n )\n .addOption(\n new Option(\n '-e, --end-timestamp <endTs>',\n 'End timestamp for period. Default: \"now\"'\n )\n )\n .addOption(\n new Option(\n '-s, --search-string <ss>',\n 'Filter by a specific string (ANDed with transactionID filter)'\n )\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n const conn = await frodo.conn.getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await frodo.login.getTokens(true)) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id as string);\n state.setLogApiSecret(creds.api_key_secret as string);\n }\n }\n const now = Date.now() / 1000;\n const nowString = new Date(now * 1000).toISOString();\n if (\n typeof options.beginTimestamp === 'undefined' ||\n !options.beginTimestamp\n ) {\n // no beginTimestamp value specified, default is 1 hour ago\n const tempStartDate = new Date();\n tempStartDate.setTime((now - SECONDS_IN_1_HOUR) * 1000);\n options.beginTimestamp = tempStartDate.toISOString();\n // also override endTimestamp to now\n const tempEndDate = new Date();\n tempEndDate.setTime(now * 1000);\n options.endTimestamp = tempEndDate;\n printMessage(\n 'No timestamps specified, defaulting to logs from 1 hour ago',\n 'info'\n );\n }\n if (\n typeof options.endTimestamp === 'undefined' ||\n !options.endTimestamp\n ) {\n // no endTimestamp value specified, default is now\n options.endTimestamp = nowString;\n printMessage(\n 'No end timestamp specified, defaulting end timestamp to \"now\"',\n 'info'\n );\n }\n let beginTs = Date.parse(options.beginTimestamp) / 1000;\n const endTs = Date.parse(options.endTimestamp) / 1000;\n if (endTs < beginTs) {\n printMessage(\n 'End timestamp can not be before begin timestamp',\n 'error'\n );\n return;\n }\n if (now - beginTs > LOG_TIME_WINDOW_MAX) {\n printMessage(\n 'Begin timestamp can not be more than 30 days in the past',\n 'error'\n );\n return;\n }\n let intermediateEndTs = 0;\n printMessage(\n `Fetching ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${frodo.cloud.log.resolveLevel(\n command.opts().level\n )}] of ${conn.tenant}...`\n );\n if (credsFromParameters) await frodo.conn.saveConnectionProfile(host); // save new values if they were specified on CLI\n\n let timeIncrement = LOG_TIME_WINDOW_INCREMENT;\n if (endTs - beginTs > 30) {\n timeIncrement = timeIncrement * 30;\n }\n do {\n intermediateEndTs = beginTs + timeIncrement;\n await fetchLogs(\n command.opts().sources,\n new Date(beginTs * 1000).toISOString(),\n new Date(intermediateEndTs * 1000).toISOString(),\n frodo.cloud.log.resolveLevel(command.opts().level),\n command.opts().transactionId,\n command.opts().searchString,\n null,\n config.getNoiseFilters(options.defaults)\n );\n beginTs = intermediateEndTs;\n } while (intermediateEndTs < endTs);\n }\n });\n\nprogram.parse();\n"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { FrodoCommand } from '../FrodoCommand';
|
|
2
|
+
import { Option } from 'commander';
|
|
3
|
+
import { frodo } from '@rockcarver/frodo-lib';
|
|
4
|
+
import { printMessage, verboseMessage } from '../../utils/Console';
|
|
5
|
+
import { deleteLogApiKey, deleteLogApiKeys } from '../../ops/LogOps';
|
|
6
|
+
const program = new FrodoCommand('frodo log key delete');
|
|
7
|
+
program.description('Delete log API keys.').addOption(new Option('-i, --key-id <key-id>', 'Key id. Regex if specified with -a.')).addOption(new Option('-a, --all', 'Delete all keys. Optionally specify regex filter -i.')).action(
|
|
8
|
+
// implement command logic inside action handler
|
|
9
|
+
async (host, realm, user, password, options, command) => {
|
|
10
|
+
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
11
|
+
// delete by id
|
|
12
|
+
if (options.keyId && (await frodo.login.getTokens(true))) {
|
|
13
|
+
verboseMessage(`Deleting key ${options.keyId}`);
|
|
14
|
+
deleteLogApiKey(options.keyId);
|
|
15
|
+
}
|
|
16
|
+
// --all -a
|
|
17
|
+
else if (options.all && (await frodo.login.getTokens(true))) {
|
|
18
|
+
verboseMessage('Deleting keys...');
|
|
19
|
+
deleteLogApiKeys();
|
|
20
|
+
}
|
|
21
|
+
// unrecognized combination of options or no options
|
|
22
|
+
else {
|
|
23
|
+
printMessage('Unrecognized combination of options or no options...', 'error');
|
|
24
|
+
program.help();
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// end command logic inside action handler
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
program.parse();
|
|
32
|
+
//# sourceMappingURL=log-key-delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-key-delete.js","names":["FrodoCommand","Option","frodo","printMessage","verboseMessage","deleteLogApiKey","deleteLogApiKeys","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","keyId","login","getTokens","all","help","process","exitCode","parse"],"sources":["cli/log/log-key-delete.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { frodo } from '@rockcarver/frodo-lib';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { deleteLogApiKey, deleteLogApiKeys } from '../../ops/LogOps';\n\nconst program = new FrodoCommand('frodo log key delete');\n\nprogram\n .description('Delete log API keys.')\n .addOption(\n new Option('-i, --key-id <key-id>', 'Key id. Regex if specified with -a.')\n )\n .addOption(\n new Option(\n '-a, --all',\n 'Delete all keys. Optionally specify regex filter -i.'\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 // delete by id\n if (options.keyId && (await frodo.login.getTokens(true))) {\n verboseMessage(`Deleting key ${options.keyId}`);\n deleteLogApiKey(options.keyId);\n }\n // --all -a\n else if (options.all && (await frodo.login.getTokens(true))) {\n verboseMessage('Deleting keys...');\n deleteLogApiKeys();\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,eAAe,EAAEC,gBAAgB,QAAQ,kBAAkB;AAEpE,MAAMC,OAAO,GAAG,IAAIP,YAAY,CAAC,sBAAsB,CAAC;AAExDO,OAAO,CACJC,WAAW,CAAC,sBAAsB,CAAC,CACnCC,SAAS,CACR,IAAIR,MAAM,CAAC,uBAAuB,EAAE,qCAAqC,CAC3E,CAAC,CACAQ,SAAS,CACR,IAAIR,MAAM,CACR,WAAW,EACX,sDACF,CACF,CAAC,CACAS,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD;EACA,IAAID,OAAO,CAACG,KAAK,KAAK,MAAMhB,KAAK,CAACiB,KAAK,CAACC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;IACxDhB,cAAc,CAAE,gBAAeW,OAAO,CAACG,KAAM,EAAC,CAAC;IAC/Cb,eAAe,CAACU,OAAO,CAACG,KAAK,CAAC;EAChC;EACA;EAAA,KACK,IAAIH,OAAO,CAACM,GAAG,KAAK,MAAMnB,KAAK,CAACiB,KAAK,CAACC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;IAC3DhB,cAAc,CAAC,kBAAkB,CAAC;IAClCE,gBAAgB,CAAC,CAAC;EACpB;EACA;EAAA,KACK;IACHH,YAAY,CACV,sDAAsD,EACtD,OACF,CAAC;IACDI,OAAO,CAACe,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHjB,OAAO,CAACkB,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FrodoCommand } from '../FrodoCommand';
|
|
2
|
+
import { Option } from 'commander';
|
|
3
|
+
import { frodo } from '@rockcarver/frodo-lib';
|
|
4
|
+
const program = new FrodoCommand('frodo log key describe');
|
|
5
|
+
program.description('Describe log API keys.').addOption(new Option('-i, --key-id <key-id>', 'Key id. If specified, -a and -A are ignored.')).action(
|
|
6
|
+
// implement command logic inside action handler
|
|
7
|
+
async (host, realm, user, password, options, command) => {
|
|
8
|
+
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
9
|
+
if (await frodo.login.getTokens()) {
|
|
10
|
+
// code goes here
|
|
11
|
+
} else {
|
|
12
|
+
process.exitCode = 1;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
// end command logic inside action handler
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
program.parse();
|
|
19
|
+
//# sourceMappingURL=log-key-describe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-key-describe.js","names":["FrodoCommand","Option","frodo","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","login","getTokens","process","exitCode","parse"],"sources":["cli/log/log-key-describe.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { frodo } from '@rockcarver/frodo-lib';\n\nconst program = new FrodoCommand('frodo log key describe');\n\nprogram\n .description('Describe log API keys.')\n .addOption(\n new Option(\n '-i, --key-id <key-id>',\n 'Key id. If specified, -a and -A are ignored.'\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 frodo.login.getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,KAAK,QAAQ,uBAAuB;AAE7C,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,wBAAwB,CAAC;AAE1DG,OAAO,CACJC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,SAAS,CACR,IAAIJ,MAAM,CACR,uBAAuB,EACvB,8CACF,CACF,CAAC,CACAK,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,MAAMV,KAAK,CAACY,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE;IACjC;EAAA,CACD,MAAM;IACLC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACe,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FrodoCommand } from '../FrodoCommand';
|
|
2
|
+
import { Option } from 'commander';
|
|
3
|
+
import { frodo } from '@rockcarver/frodo-lib';
|
|
4
|
+
import { listLogApiKeys } from '../../ops/LogOps';
|
|
5
|
+
import { verboseMessage } from '../../utils/Console';
|
|
6
|
+
const program = new FrodoCommand('frodo log key list');
|
|
7
|
+
program.description('List log API keys.').addOption(new Option('-l, --long', 'Long with all fields.').default(false, 'false')).action(
|
|
8
|
+
// implement command logic inside action handler
|
|
9
|
+
async (host, realm, user, password, options, command) => {
|
|
10
|
+
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
11
|
+
if (await frodo.login.getTokens(true)) {
|
|
12
|
+
verboseMessage(`Listing log API keys...`);
|
|
13
|
+
const outcome = await listLogApiKeys(options.long);
|
|
14
|
+
if (!outcome) process.exitCode = 1;
|
|
15
|
+
} else {
|
|
16
|
+
process.exitCode = 1;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// end command logic inside action handler
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
program.parse();
|
|
23
|
+
//# sourceMappingURL=log-key-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-key-list.js","names":["FrodoCommand","Option","frodo","listLogApiKeys","verboseMessage","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","login","getTokens","outcome","long","process","exitCode","parse"],"sources":["cli/log/log-key-list.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { frodo } from '@rockcarver/frodo-lib';\nimport { listLogApiKeys } from '../../ops/LogOps';\nimport { verboseMessage } from '../../utils/Console';\n\nconst program = new FrodoCommand('frodo log key list');\n\nprogram\n .description('List log API keys.')\n .addOption(\n new Option('-l, --long', 'Long with all fields.').default(false, 'false')\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 frodo.login.getTokens(true)) {\n verboseMessage(`Listing log API keys...`);\n const outcome = await listLogApiKeys(options.long);\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,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,cAAc,QAAQ,qBAAqB;AAEpD,MAAMC,OAAO,GAAG,IAAIL,YAAY,CAAC,oBAAoB,CAAC;AAEtDK,OAAO,CACJC,WAAW,CAAC,oBAAoB,CAAC,CACjCC,SAAS,CACR,IAAIN,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAACO,OAAO,CAAC,KAAK,EAAE,OAAO,CAC1E,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,MAAMb,KAAK,CAACe,KAAK,CAACC,SAAS,CAAC,IAAI,CAAC,EAAE;IACrCd,cAAc,CAAE,yBAAwB,CAAC;IACzC,MAAMe,OAAO,GAAG,MAAMhB,cAAc,CAACW,OAAO,CAACM,IAAI,CAAC;IAClD,IAAI,CAACD,OAAO,EAAEE,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHjB,OAAO,CAACkB,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FrodoStubCommand } from '../FrodoCommand';
|
|
2
|
+
const program = new FrodoStubCommand('frodo log key');
|
|
3
|
+
program.description('Manage Identity Cloud log API keys.');
|
|
4
|
+
program.command('list', 'List log API keys.');
|
|
5
|
+
program.command('describe', 'Describe log API keys.');
|
|
6
|
+
program.command('delete', 'Delete log API keys.');
|
|
7
|
+
program.parse();
|
|
8
|
+
//# sourceMappingURL=log-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-key.js","names":["FrodoStubCommand","program","description","command","parse"],"sources":["cli/log/log-key.ts"],"sourcesContent":["import { FrodoStubCommand } from '../FrodoCommand';\n\nconst program = new FrodoStubCommand('frodo log key');\n\nprogram.description('Manage Identity Cloud log API keys.');\n\nprogram.command('list', 'List log API keys.');\n\nprogram.command('describe', 'Describe log API keys.');\n\nprogram.command('delete', 'Delete log API keys.');\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,OAAO,GAAG,IAAID,gBAAgB,CAAC,eAAe,CAAC;AAErDC,OAAO,CAACC,WAAW,CAAC,qCAAqC,CAAC;AAE1DD,OAAO,CAACE,OAAO,CAAC,MAAM,EAAE,oBAAoB,CAAC;AAE7CF,OAAO,CAACE,OAAO,CAAC,UAAU,EAAE,wBAAwB,CAAC;AAErDF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,sBAAsB,CAAC;AAEjDF,OAAO,CAACG,KAAK,CAAC,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { FrodoCommand } from '../FrodoCommand';
|
|
|
2
2
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
3
3
|
import { printMessage, verboseMessage } from '../../utils/Console';
|
|
4
4
|
import { provisionCreds } from '../../ops/LogOps';
|
|
5
|
-
const program = new FrodoCommand('frodo
|
|
5
|
+
const program = new FrodoCommand('frodo log list', ['realm', 'type']);
|
|
6
6
|
program.description('List available ID Cloud log sources.').action(async (host, user, password, options, command) => {
|
|
7
7
|
command.handleDefaultArgsAndOpts(host, user, password, options, command);
|
|
8
8
|
let credsFromParameters = true;
|
|
@@ -46,4 +46,4 @@ program.description('List available ID Cloud log sources.').action(async (host,
|
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
program.parse();
|
|
49
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=log-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-list.js","names":["FrodoCommand","frodo","state","printMessage","verboseMessage","provisionCreds","program","description","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","getConnectionProfile","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","login","getTokens","creds","api_key_id","api_key_secret","sources","cloud","log","getLogSources","length","saveConnectionProfile","forEach","source","parse"],"sources":["cli/log/log-list.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { provisionCreds } from '../../ops/LogOps';\n\nconst program = new FrodoCommand('frodo log list', ['realm', 'type']);\nprogram\n .description('List available ID Cloud log sources.')\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n verboseMessage('Listing available ID Cloud log sources...');\n const conn = await frodo.conn.getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await frodo.login.getTokens(true)) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id as string);\n state.setLogApiSecret(creds.api_key_secret as string);\n }\n }\n\n const sources = await frodo.cloud.log.getLogSources();\n if (sources.length === 0) {\n printMessage(\n \"Can't get sources, possible cause - wrong API key or secret\",\n 'error'\n );\n } else {\n if (credsFromParameters) await frodo.conn.saveConnectionProfile(host); // save new values if they were specified on CLI\n printMessage(`Log sources from ${conn.tenant}`);\n sources.forEach((source) => {\n printMessage(`${source}`, 'data');\n });\n printMessage(\n 'Use any combination of comma separated sources, example:',\n 'info'\n );\n printMessage(`$ frodo logs tail -c am-core,idm-core ${host}`, 'text');\n }\n }\n });\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,cAAc,QAAQ,kBAAkB;AAEjD,MAAMC,OAAO,GAAG,IAAIN,YAAY,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACrEM,OAAO,CACJC,WAAW,CAAC,sCAAsC,CAAC,CACnDC,MAAM,CAAC,OAAOC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACxDA,OAAO,CAACC,wBAAwB,CAACL,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,CAAC;EACxE,IAAIE,mBAAmB,GAAG,IAAI;EAC9BX,cAAc,CAAC,2CAA2C,CAAC;EAC3D,MAAMY,IAAI,GAAG,MAAMf,KAAK,CAACe,IAAI,CAACC,oBAAoB,CAAC,CAAC;EACpD,IAAID,IAAI,EAAE;IACRd,KAAK,CAACgB,OAAO,CAACF,IAAI,CAACG,MAAM,CAAC;IAC1B,IAAIH,IAAI,CAACI,SAAS,IAAI,IAAI,IAAIJ,IAAI,CAACK,YAAY,IAAI,IAAI,EAAE;MACvDN,mBAAmB,GAAG,KAAK;MAC3Bb,KAAK,CAACoB,YAAY,CAACN,IAAI,CAACI,SAAS,CAAC;MAClClB,KAAK,CAACqB,eAAe,CAACP,IAAI,CAACK,YAAY,CAAC;IAC1C,CAAC,MAAM;MACL,IAAIL,IAAI,CAACQ,QAAQ,IAAI,IAAI,IAAIR,IAAI,CAACL,QAAQ,IAAI,IAAI,EAAE;QAClD,IAAI,CAACT,KAAK,CAACuB,WAAW,CAAC,CAAC,IAAI,CAACvB,KAAK,CAACwB,WAAW,CAAC,CAAC,EAAE;UAChDX,mBAAmB,GAAG,KAAK;UAC3BZ,YAAY,CACV,qFAAqF,EACrF,MACF,CAAC;UACD;QACF;MACF,CAAC,MAAM;QACLD,KAAK,CAACyB,WAAW,CAACX,IAAI,CAACQ,QAAQ,CAAC;QAChCtB,KAAK,CAAC0B,WAAW,CAACZ,IAAI,CAACL,QAAQ,CAAC;MAClC;MACA,IAAI,MAAMV,KAAK,CAAC4B,KAAK,CAACC,SAAS,CAAC,IAAI,CAAC,EAAE;QACrC,MAAMC,KAAK,GAAG,MAAM1B,cAAc,CAAC,CAAC;QACpCH,KAAK,CAACoB,YAAY,CAACS,KAAK,CAACC,UAAoB,CAAC;QAC9C9B,KAAK,CAACqB,eAAe,CAACQ,KAAK,CAACE,cAAwB,CAAC;MACvD;IACF;IAEA,MAAMC,OAAO,GAAG,MAAMjC,KAAK,CAACkC,KAAK,CAACC,GAAG,CAACC,aAAa,CAAC,CAAC;IACrD,IAAIH,OAAO,CAACI,MAAM,KAAK,CAAC,EAAE;MACxBnC,YAAY,CACV,6DAA6D,EAC7D,OACF,CAAC;IACH,CAAC,MAAM;MACL,IAAIY,mBAAmB,EAAE,MAAMd,KAAK,CAACe,IAAI,CAACuB,qBAAqB,CAAC9B,IAAI,CAAC,CAAC,CAAC;MACvEN,YAAY,CAAE,oBAAmBa,IAAI,CAACG,MAAO,EAAC,CAAC;MAC/Ce,OAAO,CAACM,OAAO,CAAEC,MAAM,IAAK;QAC1BtC,YAAY,CAAE,GAAEsC,MAAO,EAAC,EAAE,MAAM,CAAC;MACnC,CAAC,CAAC;MACFtC,YAAY,CACV,0DAA0D,EAC1D,MACF,CAAC;MACDA,YAAY,CAAE,yCAAwCM,IAAK,EAAC,EAAE,MAAM,CAAC;IACvE;EACF;AACF,CAAC,CAAC;AAEJH,OAAO,CAACoC,KAAK,CAAC,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { FrodoCommand } from '../FrodoCommand';
|
|
2
|
-
import { sourcesOptionM } from './
|
|
2
|
+
import { sourcesOptionM } from './log';
|
|
3
3
|
import { Option } from 'commander';
|
|
4
4
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
5
5
|
import * as config from '../../utils/Config';
|
|
6
6
|
import { printMessage } from '../../utils/Console';
|
|
7
7
|
import { provisionCreds, tailLogs } from '../../ops/LogOps';
|
|
8
|
-
const program = new FrodoCommand('frodo
|
|
8
|
+
const program = new FrodoCommand('frodo log tail', ['realm', 'type']);
|
|
9
9
|
program.description('Tail Identity Cloud logs.').addOption(sourcesOptionM).addOption(new Option('-l, --level <level>', 'Set log level filter. You can specify the level as a number or a string. \
|
|
10
10
|
Following values are possible (values on the same line are equivalent): \
|
|
11
11
|
\n0, SEVERE, FATAL, or ERROR\n1, WARNING, WARN or CONFIG\
|
|
@@ -43,4 +43,4 @@ Following values are possible (values on the same line are equivalent): \
|
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
45
|
program.parse();
|
|
46
|
-
//# sourceMappingURL=
|
|
46
|
+
//# sourceMappingURL=log-tail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-tail.js","names":["FrodoCommand","sourcesOptionM","Option","frodo","state","config","printMessage","provisionCreds","tailLogs","program","description","addOption","default","cloud","log","resolveLevel","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","getConnectionProfile","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","login","getTokens","creds","api_key_id","api_key_secret","opts","sources","level","saveConnectionProfile","transactionId","getNoiseFilters","defaults","parse"],"sources":["cli/log/log-tail.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { sourcesOptionM } from './log';\nimport { Option } from 'commander';\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\nimport { provisionCreds, tailLogs } from '../../ops/LogOps';\n\nconst program = new FrodoCommand('frodo log tail', ['realm', 'type']);\nprogram\n .description('Tail Identity Cloud logs.')\n .addOption(sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${frodo.cloud.log.resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n const conn = await frodo.conn.getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await frodo.login.getTokens(true)) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id as string);\n state.setLogApiSecret(creds.api_key_secret as string);\n }\n }\n printMessage(\n `Tailing ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${frodo.cloud.log.resolveLevel(\n command.opts().level\n )}] of ${conn.tenant}...`\n );\n if (credsFromParameters) await frodo.conn.saveConnectionProfile(host); // save new values if they were specified on CLI\n await tailLogs(\n command.opts().sources,\n frodo.cloud.log.resolveLevel(command.opts().level),\n command.opts().transactionId,\n null,\n config.getNoiseFilters(options.defaults)\n );\n }\n });\n\nprogram.parse();\n"],"mappings":"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"}
|