@rockcarver/frodo-cli 2.0.0-32 → 2.0.0-34
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/cli/FrodoCommand.js +8 -1
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js +41 -0
- package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js.map +1 -0
- package/esm/cli/admin/admin-export-full-cloud-config.js +44 -0
- package/esm/cli/admin/admin-export-full-cloud-config.js.map +1 -0
- package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artifacts.js +43 -0
- package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artifacts.js.map +1 -0
- package/esm/cli/admin/admin.js +3 -0
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +1 -1
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +1 -1
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +2 -2
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +2 -2
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +1 -1
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +1 -1
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +1 -1
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +3 -3
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +2 -2
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +2 -2
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +1 -1
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/email/email-template-export.js +3 -3
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +4 -4
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +1 -1
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +2 -1
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +4 -3
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +2 -1
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +6 -4
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +2 -1
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +2 -1
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +2 -2
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +2 -1
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +2 -2
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +4 -3
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +2 -1
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +2 -1
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +4 -2
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +2 -1
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +6 -3
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +2 -1
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +4 -2
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/idm/idm-count.js +1 -1
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +3 -3
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-list.js +2 -2
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +3 -3
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +4 -4
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +1 -1
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +6 -2
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +4 -10
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +4 -10
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-import.js +4 -4
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +1 -1
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +3 -3
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +1 -1
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +1 -1
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-import.js +4 -4
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +1 -1
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +1 -1
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/script/script-export.js +2 -6
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +3 -3
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +4 -4
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +4 -4
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +1 -1
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +28 -26
- package/esm/ops/AdminFederationOps.js.map +1 -1
- package/esm/ops/AdminOps.js +241 -0
- package/esm/ops/AdminOps.js.map +1 -0
- package/esm/ops/AgentOps.js +59 -51
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +19 -13
- package/esm/ops/ApplicationOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +28 -26
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +78 -94
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +8 -31
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +49 -54
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +91 -70
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +13 -11
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +31 -26
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +42 -39
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +19 -16
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +49 -45
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +36 -55
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +159 -60
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +111 -130
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +126 -56
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/utils/Console.js +69 -30
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +4 -12
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/package.json +10 -2
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-33] - 2023-11-26
|
|
11
|
+
|
|
12
|
+
## [2.0.0-32] - 2023-11-21
|
|
13
|
+
|
|
10
14
|
## [2.0.0-31] - 2023-11-17
|
|
11
15
|
|
|
12
16
|
## [2.0.0-30] - 2023-11-04
|
|
@@ -1429,7 +1433,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1429
1433
|
- Fixed problem with adding connection profiles
|
|
1430
1434
|
- Miscellaneous bug fixes
|
|
1431
1435
|
|
|
1432
|
-
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-
|
|
1436
|
+
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-33...HEAD
|
|
1437
|
+
|
|
1438
|
+
[2.0.0-33]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-32...v2.0.0-33
|
|
1439
|
+
|
|
1440
|
+
[2.0.0-32]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-31...v2.0.0-32
|
|
1433
1441
|
|
|
1434
1442
|
[2.0.0-31]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-30...v2.0.0-31
|
|
1435
1443
|
|
package/esm/cli/FrodoCommand.js
CHANGED
|
@@ -2,7 +2,7 @@ import { frodo, state } from '@rockcarver/frodo-lib';
|
|
|
2
2
|
import { Argument, Command, Option } from 'commander';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import * as globalConfig from '../storage/StaticStorage';
|
|
5
|
-
import { createProgressIndicator, curlirizeMessage, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator, verboseMessage } from '../utils/Console.js';
|
|
5
|
+
import { cleanupProgressIndicators, createProgressIndicator, curlirizeMessage, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator, verboseMessage } from '../utils/Console.js';
|
|
6
6
|
const hostArgument = new Argument('[host]', 'Access Management base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring.');
|
|
7
7
|
const realmArgument = new Argument('[realm]', "Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise.").default(
|
|
8
8
|
// must check for FRODO_REALM env variable here because otherwise cli will overwrite realm with default value
|
|
@@ -93,6 +93,13 @@ export class FrodoStubCommand extends Command {
|
|
|
93
93
|
state.setCreateProgressHandler(createProgressIndicator);
|
|
94
94
|
state.setUpdateProgressHandler(updateProgressIndicator);
|
|
95
95
|
state.setStopProgressHandler(stopProgressIndicator);
|
|
96
|
+
|
|
97
|
+
// shutdown handlers
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
99
|
+
this.hook('postAction', (thisCommand, actionCommand) => {
|
|
100
|
+
debugMessage(`postAction: this command: ${thisCommand.name()}, action command: ${actionCommand.name()}`);
|
|
101
|
+
cleanupProgressIndicators();
|
|
102
|
+
});
|
|
96
103
|
}
|
|
97
104
|
}
|
|
98
105
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrodoCommand.js","names":["frodo","state","Argument","Command","Option","fs","globalConfig","createProgressIndicator","curlirizeMessage","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","verboseMessage","hostArgument","realmArgument","default","process","env","FRODO_REALM","DEFAULT_REALM_KEY","usernameArgument","passwordArgument","serviceAccountIdOption","serviceAccountJwkFileOption","deploymentOption","choices","DEPLOYMENT_TYPES","directoryOption","undefined","insecureOption","verboseOption","debugOption","curlirizeOption","noCacheOption","flushCacheOption","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","directory","setDirectory","insecure","setAllowInsecureConnection","verbose","setVerbose","debug","setDebug","curlirize","setCurlirize","cache","setUseTokenCache","flush","FrodoStubCommand","constructor","listenerCount","on","_error$config","_error$config2","_error$response","config","method","url","response","stack","exitCode","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":["../../src/cli/FrodoCommand.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Argument, Command, Option } from 'commander';\nimport fs from 'fs';\n\nimport * as globalConfig from '../storage/StaticStorage';\nimport {\n createProgressIndicator,\n curlirizeMessage,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n verboseMessage,\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 directoryOption = new Option(\n '-D, --directory <directory>',\n 'Set the working directory.'\n).default(undefined, 'undefined');\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 noCacheOption = new Option(\n '--no-cache',\n 'Disable token cache for this operation.'\n);\n\nconst flushCacheOption = new Option('--flush-cache', 'Flush token cache.');\n\nconst defaultArgs = [\n hostArgument,\n realmArgument,\n usernameArgument,\n passwordArgument,\n];\n\nconst defaultOpts = [\n serviceAccountIdOption,\n serviceAccountJwkFileOption,\n deploymentOption,\n directoryOption,\n insecureOption,\n verboseOption,\n debugOption,\n curlirizeOption,\n noCacheOption,\n flushCacheOption,\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 [directoryOption.attributeName()]: (directory: string) =>\n state.setDirectory(directory),\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 [noCacheOption.attributeName()]: (cache: boolean) =>\n state.setUseTokenCache(cache),\n [flushCacheOption.attributeName()]: (flush: boolean) => {\n if (flush) frodo.cache.flush();\n },\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 if (!process.listenerCount('unhandledRejection')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on('unhandledRejection', (error: any) => {\n printMessage(\n `${error.config?.method ? error.config.method + ' ' : ''}${\n error.config?.url ? error.config.url : ''\n }`,\n 'error'\n );\n printMessage(error.response?.data, 'error');\n printMessage(error.stack, 'error');\n printMessage(\n `Please report this unhandled error here: https://github.com/rockcarver/frodo-cli/issues`,\n 'error'\n );\n process.exitCode = 1;\n });\n }\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_NO_CACHE: Disable token cache. Same as '--no-cache' option.\\n` +\n ` FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'.\\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 log')\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_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'.\\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 ` FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file.\\n` +\n ` FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH.\\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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"}
|
|
1
|
+
{"version":3,"file":"FrodoCommand.js","names":["frodo","state","Argument","Command","Option","fs","globalConfig","cleanupProgressIndicators","createProgressIndicator","curlirizeMessage","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","verboseMessage","hostArgument","realmArgument","default","process","env","FRODO_REALM","DEFAULT_REALM_KEY","usernameArgument","passwordArgument","serviceAccountIdOption","serviceAccountJwkFileOption","deploymentOption","choices","DEPLOYMENT_TYPES","directoryOption","undefined","insecureOption","verboseOption","debugOption","curlirizeOption","noCacheOption","flushCacheOption","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","directory","setDirectory","insecure","setAllowInsecureConnection","verbose","setVerbose","debug","setDebug","curlirize","setCurlirize","cache","setUseTokenCache","flush","FrodoStubCommand","constructor","listenerCount","on","_error$config","_error$config2","_error$response","config","method","url","response","stack","exitCode","helpOption","showHelpAfterError","configureHelp","sortSubcommands","sortOptions","setPrintHandler","setVerboseHandler","setDebugHandler","setCurlirizeHandler","setCreateProgressHandler","setUpdateProgressHandler","setStopProgressHandler","hook","thisCommand","actionCommand","FrodoCommand","omits","arg","includes","addArgument","opt","addOption","addHelpText","startsWith","handleDefaultArgsAndOpts","args","command","pop","options","i","v","entries","_args","length","Object","keys","handler","k"],"sources":["../../src/cli/FrodoCommand.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Argument, Command, Option } from 'commander';\nimport fs from 'fs';\n\nimport * as globalConfig from '../storage/StaticStorage';\nimport {\n cleanupProgressIndicators,\n createProgressIndicator,\n curlirizeMessage,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n verboseMessage,\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 directoryOption = new Option(\n '-D, --directory <directory>',\n 'Set the working directory.'\n).default(undefined, 'undefined');\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 noCacheOption = new Option(\n '--no-cache',\n 'Disable token cache for this operation.'\n);\n\nconst flushCacheOption = new Option('--flush-cache', 'Flush token cache.');\n\nconst defaultArgs = [\n hostArgument,\n realmArgument,\n usernameArgument,\n passwordArgument,\n];\n\nconst defaultOpts = [\n serviceAccountIdOption,\n serviceAccountJwkFileOption,\n deploymentOption,\n directoryOption,\n insecureOption,\n verboseOption,\n debugOption,\n curlirizeOption,\n noCacheOption,\n flushCacheOption,\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 [directoryOption.attributeName()]: (directory: string) =>\n state.setDirectory(directory),\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 [noCacheOption.attributeName()]: (cache: boolean) =>\n state.setUseTokenCache(cache),\n [flushCacheOption.attributeName()]: (flush: boolean) => {\n if (flush) frodo.cache.flush();\n },\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 if (!process.listenerCount('unhandledRejection')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on('unhandledRejection', (error: any) => {\n printMessage(\n `${error.config?.method ? error.config.method + ' ' : ''}${\n error.config?.url ? error.config.url : ''\n }`,\n 'error'\n );\n printMessage(error.response?.data, 'error');\n printMessage(error.stack, 'error');\n printMessage(\n `Please report this unhandled error here: https://github.com/rockcarver/frodo-cli/issues`,\n 'error'\n );\n process.exitCode = 1;\n });\n }\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 // shutdown handlers\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.hook('postAction', (thisCommand, actionCommand) => {\n debugMessage(\n `postAction: this command: ${thisCommand.name()}, action command: ${actionCommand.name()}`\n );\n cleanupProgressIndicators();\n });\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_NO_CACHE: Disable token cache. Same as '--no-cache' option.\\n` +\n ` FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'.\\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 log')\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_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'.\\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 ` FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file.\\n` +\n ` FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH.\\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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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
|
+
import { Option } from 'commander';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
5
|
+
import { executeRfc7523AuthZGrantFlow } from '../../ops/AdminOps.js';
|
|
6
|
+
import { printMessage } from '../../utils/Console.js';
|
|
7
|
+
import { FrodoCommand } from '../FrodoCommand.js';
|
|
8
|
+
const {
|
|
9
|
+
getTokens
|
|
10
|
+
} = frodo.login;
|
|
11
|
+
const program = new FrodoCommand('frodo admin execute-rfc7523-authz-grant-flow');
|
|
12
|
+
program.description('Execute RFC7523 authorization grant flow.').addOption(new Option('--client-id [id]', 'Client id.')).addOption(new Option('--jwk-file [file]', 'Path to JSON Web Key (JWK) file containing private key.')).addOption(new Option('--sub [subject]', 'Subject identifier, typically a UUID. Must resolve to a valid user in the realm.')).addOption(new Option('--iss [issuer]', 'Trusted issuer, typically a URL.')).addOption(new Option('--scope [scope]', 'Space-delimited list of scopes.').default('openid fr:am:* fr:idm:*')).addOption(new Option('--json', 'Output in JSON format.')).action(
|
|
13
|
+
// implement command logic inside action handler
|
|
14
|
+
async (host, realm, user, password, options, command) => {
|
|
15
|
+
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
16
|
+
if (await getTokens()) {
|
|
17
|
+
printMessage(`Generating RFC7523 authorization grant artifacts in realm "${state.getRealm()}"...`);
|
|
18
|
+
let clientId = uuidv4();
|
|
19
|
+
if (options.clientId) {
|
|
20
|
+
clientId = options.clientId;
|
|
21
|
+
}
|
|
22
|
+
let jwk = undefined;
|
|
23
|
+
if (options.jwkFile) {
|
|
24
|
+
try {
|
|
25
|
+
const data = fs.readFileSync(options.jwkFile);
|
|
26
|
+
jwk = JSON.parse(data.toString());
|
|
27
|
+
} catch (error) {
|
|
28
|
+
printMessage(`Error parsing JWK from file ${options.jwkFile}: ${error.message}`, 'error');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const outcome = await executeRfc7523AuthZGrantFlow(clientId, options.iss, jwk, options.sub, options.scope.split(' '), options.json);
|
|
32
|
+
if (!outcome) process.exitCode = 1;
|
|
33
|
+
} else {
|
|
34
|
+
process.exitCode = 1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// end command logic inside action handler
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
program.parse();
|
|
41
|
+
//# sourceMappingURL=admin-execute-rfc7523-authz-grant-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-execute-rfc7523-authz-grant-flow.js","names":["frodo","state","Option","fs","v4","uuidv4","executeRfc7523AuthZGrantFlow","printMessage","FrodoCommand","getTokens","login","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","getRealm","clientId","jwk","undefined","jwkFile","data","readFileSync","JSON","parse","toString","error","message","outcome","iss","sub","scope","split","json","process","exitCode"],"sources":["../../../src/cli/admin/admin-execute-rfc7523-authz-grant-flow.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { JwkRsa } from '@rockcarver/frodo-lib/types/ops/JoseOps.js';\nimport { Option } from 'commander';\nimport fs from 'fs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { executeRfc7523AuthZGrantFlow } from '../../ops/AdminOps.js';\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand.js';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand(\n 'frodo admin execute-rfc7523-authz-grant-flow'\n);\n\nprogram\n .description('Execute RFC7523 authorization grant flow.')\n .addOption(new Option('--client-id [id]', 'Client id.'))\n .addOption(\n new Option(\n '--jwk-file [file]',\n 'Path to JSON Web Key (JWK) file containing private key.'\n )\n )\n .addOption(\n new Option(\n '--sub [subject]',\n 'Subject identifier, typically a UUID. Must resolve to a valid user in the realm.'\n )\n )\n .addOption(new Option('--iss [issuer]', 'Trusted issuer, typically a URL.'))\n .addOption(\n new Option('--scope [scope]', 'Space-delimited list of scopes.').default(\n 'openid fr:am:* fr:idm:*'\n )\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 printMessage(\n `Generating RFC7523 authorization grant artifacts in realm \"${state.getRealm()}\"...`\n );\n let clientId = uuidv4();\n if (options.clientId) {\n clientId = options.clientId;\n }\n let jwk: JwkRsa = undefined;\n if (options.jwkFile) {\n try {\n const data = fs.readFileSync(options.jwkFile);\n jwk = JSON.parse(data.toString());\n } catch (error) {\n printMessage(\n `Error parsing JWK from file ${options.jwkFile}: ${error.message}`,\n 'error'\n );\n }\n }\n const outcome = await executeRfc7523AuthZGrantFlow(\n clientId,\n options.iss,\n jwk,\n options.sub,\n options.scope.split(' '),\n options.json\n );\n if (!outcome) process.exitCode = 1;\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AAEpD,SAASC,MAAM,QAAQ,WAAW;AAClC,OAAOC,EAAE,MAAM,IAAI;AACnB,SAASC,EAAE,IAAIC,MAAM,QAAQ,MAAM;AAEnC,SAASC,4BAA4B,QAAQ,uBAAuB;AACpE,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,oBAAoB;AAEjD,MAAM;EAAEC;AAAU,CAAC,GAAGT,KAAK,CAACU,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAC9B,8CACF,CAAC;AAEDG,OAAO,CACJC,WAAW,CAAC,2CAA2C,CAAC,CACxDC,SAAS,CAAC,IAAIX,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CACvDW,SAAS,CACR,IAAIX,MAAM,CACR,mBAAmB,EACnB,yDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,iBAAiB,EACjB,kFACF,CACF,CAAC,CACAW,SAAS,CAAC,IAAIX,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,CAAC,CAC3EW,SAAS,CACR,IAAIX,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAACY,OAAO,CACtE,yBACF,CACF,CAAC,CACAD,SAAS,CAAC,IAAIX,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CACzDa,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,YAAY,CACT,8DAA6DN,KAAK,CAACsB,QAAQ,CAAC,CAAE,MACjF,CAAC;IACD,IAAIC,QAAQ,GAAGnB,MAAM,CAAC,CAAC;IACvB,IAAIe,OAAO,CAACI,QAAQ,EAAE;MACpBA,QAAQ,GAAGJ,OAAO,CAACI,QAAQ;IAC7B;IACA,IAAIC,GAAW,GAAGC,SAAS;IAC3B,IAAIN,OAAO,CAACO,OAAO,EAAE;MACnB,IAAI;QACF,MAAMC,IAAI,GAAGzB,EAAE,CAAC0B,YAAY,CAACT,OAAO,CAACO,OAAO,CAAC;QAC7CF,GAAG,GAAGK,IAAI,CAACC,KAAK,CAACH,IAAI,CAACI,QAAQ,CAAC,CAAC,CAAC;MACnC,CAAC,CAAC,OAAOC,KAAK,EAAE;QACd1B,YAAY,CACT,+BAA8Ba,OAAO,CAACO,OAAQ,KAAIM,KAAK,CAACC,OAAQ,EAAC,EAClE,OACF,CAAC;MACH;IACF;IACA,MAAMC,OAAO,GAAG,MAAM7B,4BAA4B,CAChDkB,QAAQ,EACRJ,OAAO,CAACgB,GAAG,EACXX,GAAG,EACHL,OAAO,CAACiB,GAAG,EACXjB,OAAO,CAACkB,KAAK,CAACC,KAAK,CAAC,GAAG,CAAC,EACxBnB,OAAO,CAACoB,IACV,CAAC;IACD,IAAI,CAACL,OAAO,EAAEM,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEH/B,OAAO,CAACoB,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
|
+
import { Option } from 'commander';
|
|
3
|
+
import { exportEverythingToFile, exportEverythingToFiles } from '../../ops/AdminOps';
|
|
4
|
+
import { printMessage, verboseMessage } from '../../utils/Console';
|
|
5
|
+
import { FrodoCommand } from '../FrodoCommand';
|
|
6
|
+
const {
|
|
7
|
+
getTokens
|
|
8
|
+
} = frodo.login;
|
|
9
|
+
const program = new FrodoCommand('frodo admin export-full-cloud-config');
|
|
10
|
+
program.description('Export full cloud configuration for all ops that currently support export.').addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export everything to a single file.')).addOption(new Option('-A, --all-separate', 'Export everything to separate files in the -D directory. Ignored with -a.')).addOption(new Option('--use-string-arrays', 'Where applicable, use string arrays to store multi-line text (e.g. scripts).').default(false, 'off')).addOption(new Option('--no-decode', 'Do not include decoded variable value in variable export').default(false, 'false')).addOption(new Option('-x, --extract', 'Extract scripts from the exported file, and save it to a separate file. Ignored with -a.')).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
|
+
// --all -a
|
|
15
|
+
if (options.all && (await getTokens())) {
|
|
16
|
+
verboseMessage('Exporting everything to a single file...');
|
|
17
|
+
await exportEverythingToFile(options.file, {
|
|
18
|
+
useStringArrays: options.useStringArrays,
|
|
19
|
+
noDecode: options.decode
|
|
20
|
+
});
|
|
21
|
+
// require --directory -D for all-separate function
|
|
22
|
+
} else if (options.allSeparate && !state.getDirectory()) {
|
|
23
|
+
printMessage('-D or --directory required when using -A or --all-separate', 'error');
|
|
24
|
+
program.help();
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
// --all-separate -A
|
|
27
|
+
} else if (options.allSeparate && (await getTokens())) {
|
|
28
|
+
verboseMessage('Exporting everything to separate files...');
|
|
29
|
+
await exportEverythingToFiles(options.extract, {
|
|
30
|
+
useStringArrays: options.useStringArrays,
|
|
31
|
+
noDecode: options.decode
|
|
32
|
+
});
|
|
33
|
+
// unrecognized combination of options or no options
|
|
34
|
+
} else {
|
|
35
|
+
verboseMessage('Unrecognized combination of options or no options...');
|
|
36
|
+
program.help();
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// end command logic inside action handler
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
program.parse();
|
|
44
|
+
//# sourceMappingURL=admin-export-full-cloud-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-export-full-cloud-config.js","names":["frodo","state","Option","exportEverythingToFile","exportEverythingToFiles","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","all","file","useStringArrays","noDecode","decode","allSeparate","getDirectory","help","process","exitCode","extract","parse"],"sources":["../../../src/cli/admin/admin-export-full-cloud-config.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportEverythingToFile,\n exportEverythingToFiles,\n} from '../../ops/AdminOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo admin export-full-cloud-config');\n\nprogram\n .description(\n 'Export full cloud configuration for all ops that currently support export.'\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(new Option('-a, --all', 'Export everything to a single file.'))\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export everything to separate files in the -D directory. Ignored with -a.'\n )\n )\n .addOption(\n new Option(\n '--use-string-arrays',\n 'Where applicable, use string arrays to store multi-line text (e.g. scripts).'\n ).default(false, 'off')\n )\n .addOption(\n new Option(\n '--no-decode',\n 'Do not include decoded variable value in variable export'\n ).default(false, 'false')\n )\n .addOption(\n new Option(\n '-x, --extract',\n 'Extract scripts from the exported file, and save it to a separate file. Ignored with -a.'\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 // --all -a\n if (options.all && (await getTokens())) {\n verboseMessage('Exporting everything to a single file...');\n await exportEverythingToFile(options.file, {\n useStringArrays: options.useStringArrays,\n noDecode: options.decode,\n });\n // require --directory -D for all-separate function\n } else if (options.allSeparate && !state.getDirectory()) {\n printMessage(\n '-D or --directory required when using -A or --all-separate',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n // --all-separate -A\n } else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting everything to separate files...');\n await exportEverythingToFiles(options.extract, {\n useStringArrays: options.useStringArrays,\n noDecode: options.decode,\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,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,sBAAsB,EACtBC,uBAAuB,QAClB,oBAAoB;AAC3B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGR,KAAK,CAACS,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,sCAAsC,CAAC;AAExEG,OAAO,CACJC,WAAW,CACV,4EACF,CAAC,CACAC,SAAS,CAAC,IAAIV,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,CACtEU,SAAS,CAAC,IAAIV,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC,CACzEU,SAAS,CACR,IAAIV,MAAM,CACR,oBAAoB,EACpB,2EACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,qBAAqB,EACrB,8EACF,CAAC,CAACW,OAAO,CAAC,KAAK,EAAE,KAAK,CACxB,CAAC,CACAD,SAAS,CACR,IAAIV,MAAM,CACR,aAAa,EACb,0DACF,CAAC,CAACW,OAAO,CAAC,KAAK,EAAE,OAAO,CAC1B,CAAC,CACAD,SAAS,CACR,IAAIV,MAAM,CACR,eAAe,EACf,0FACF,CACF,CAAC,CACAY,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD;EACA,IAAID,OAAO,CAACG,GAAG,KAAK,MAAMd,SAAS,CAAC,CAAC,CAAC,EAAE;IACtCF,cAAc,CAAC,0CAA0C,CAAC;IAC1D,MAAMH,sBAAsB,CAACgB,OAAO,CAACI,IAAI,EAAE;MACzCC,eAAe,EAAEL,OAAO,CAACK,eAAe;MACxCC,QAAQ,EAAEN,OAAO,CAACO;IACpB,CAAC,CAAC;IACF;EACF,CAAC,MAAM,IAAIP,OAAO,CAACQ,WAAW,IAAI,CAAC1B,KAAK,CAAC2B,YAAY,CAAC,CAAC,EAAE;IACvDvB,YAAY,CACV,4DAA4D,EAC5D,OACF,CAAC;IACDK,OAAO,CAACmB,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;IACpB;EACF,CAAC,MAAM,IAAIZ,OAAO,CAACQ,WAAW,KAAK,MAAMnB,SAAS,CAAC,CAAC,CAAC,EAAE;IACrDF,cAAc,CAAC,2CAA2C,CAAC;IAC3D,MAAMF,uBAAuB,CAACe,OAAO,CAACa,OAAO,EAAE;MAC7CR,eAAe,EAAEL,OAAO,CAACK,eAAe;MACxCC,QAAQ,EAAEN,OAAO,CAACO;IACpB,CAAC,CAAC;IACF;EACF,CAAC,MAAM;IACLpB,cAAc,CAAC,sDAAsD,CAAC;IACtEI,OAAO,CAACmB,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHrB,OAAO,CAACuB,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
|
+
import { Option } from 'commander';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
5
|
+
import { generateRfc7523AuthZGrantArtifacts } from '../../ops/AdminOps.js';
|
|
6
|
+
import { printMessage } from '../../utils/Console.js';
|
|
7
|
+
import { FrodoCommand } from '../FrodoCommand.js';
|
|
8
|
+
const {
|
|
9
|
+
getTokens
|
|
10
|
+
} = frodo.login;
|
|
11
|
+
const program = new FrodoCommand('frodo admin generate-rfc7523-authz-grant-artifacts');
|
|
12
|
+
program.description('Generate RFC7523 authorization grant artifacts.').addOption(new Option('--client-id [id]', 'Client id.')).addOption(new Option('--jwk-file [file]', 'Path to JSON Web Key (JWK) file containing private key.')).addOption(new Option('--sub [subject]', 'Subject identifier, typically a UUID. Must resolve to a valid user in the realm.')).addOption(new Option('--iss [issuer]', 'Trusted issuer, typically a URL.')).addOption(new Option('--scope [scope]', 'Space-delimited list of scopes.').default('openid fr:am:* fr:idm:*')).addOption(new Option('--no-save', 'Do not save artifacts in AM and to file By default this command creates a fully configured oauth2 client and trusted issuer in AM and saves the generated JWK (private key) and JWKS (public key set) to files.')).addOption(new Option('--json', 'Output in JSON format.')).action(
|
|
13
|
+
// implement command logic inside action handler
|
|
14
|
+
async (host, realm, user, password, options, command) => {
|
|
15
|
+
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
16
|
+
if (await getTokens()) {
|
|
17
|
+
printMessage(`Generating RFC7523 authorization grant artifacts in realm "${state.getRealm()}"...`);
|
|
18
|
+
let clientId = uuidv4();
|
|
19
|
+
if (options.clientId) {
|
|
20
|
+
clientId = options.clientId;
|
|
21
|
+
}
|
|
22
|
+
let jwk = undefined;
|
|
23
|
+
if (options.jwkFile) {
|
|
24
|
+
try {
|
|
25
|
+
const data = fs.readFileSync(options.jwkFile);
|
|
26
|
+
jwk = JSON.parse(data.toString());
|
|
27
|
+
} catch (error) {
|
|
28
|
+
printMessage(`Error parsing JWK from file ${options.jwkFile}: ${error.message}`, 'error');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const outcome = await generateRfc7523AuthZGrantArtifacts(clientId, options.iss, jwk, options.sub, options.scope.split(' '), {
|
|
32
|
+
save: options.save
|
|
33
|
+
}, options.json);
|
|
34
|
+
if (!outcome) process.exitCode = 1;
|
|
35
|
+
} else {
|
|
36
|
+
process.exitCode = 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// end command logic inside action handler
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
program.parse();
|
|
43
|
+
//# sourceMappingURL=admin-generate-rfc7523-authz-grant-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-generate-rfc7523-authz-grant-artifacts.js","names":["frodo","state","Option","fs","v4","uuidv4","generateRfc7523AuthZGrantArtifacts","printMessage","FrodoCommand","getTokens","login","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","getRealm","clientId","jwk","undefined","jwkFile","data","readFileSync","JSON","parse","toString","error","message","outcome","iss","sub","scope","split","save","json","process","exitCode"],"sources":["../../../src/cli/admin/admin-generate-rfc7523-authz-grant-artifacts.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { JwkRsa } from '@rockcarver/frodo-lib/types/ops/JoseOps.js';\nimport { Option } from 'commander';\nimport fs from 'fs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { generateRfc7523AuthZGrantArtifacts } from '../../ops/AdminOps.js';\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand.js';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand(\n 'frodo admin generate-rfc7523-authz-grant-artifacts'\n);\n\nprogram\n .description('Generate RFC7523 authorization grant artifacts.')\n .addOption(new Option('--client-id [id]', 'Client id.'))\n .addOption(\n new Option(\n '--jwk-file [file]',\n 'Path to JSON Web Key (JWK) file containing private key.'\n )\n )\n .addOption(\n new Option(\n '--sub [subject]',\n 'Subject identifier, typically a UUID. Must resolve to a valid user in the realm.'\n )\n )\n .addOption(new Option('--iss [issuer]', 'Trusted issuer, typically a URL.'))\n .addOption(\n new Option('--scope [scope]', 'Space-delimited list of scopes.').default(\n 'openid fr:am:* fr:idm:*'\n )\n )\n .addOption(\n new Option(\n '--no-save',\n 'Do not save artifacts in AM and to file By default this command creates a fully configured oauth2 client and trusted issuer in AM and saves the generated JWK (private key) and JWKS (public key set) to files.'\n )\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 printMessage(\n `Generating RFC7523 authorization grant artifacts in realm \"${state.getRealm()}\"...`\n );\n let clientId = uuidv4();\n if (options.clientId) {\n clientId = options.clientId;\n }\n let jwk: JwkRsa = undefined;\n if (options.jwkFile) {\n try {\n const data = fs.readFileSync(options.jwkFile);\n jwk = JSON.parse(data.toString());\n } catch (error) {\n printMessage(\n `Error parsing JWK from file ${options.jwkFile}: ${error.message}`,\n 'error'\n );\n }\n }\n const outcome = await generateRfc7523AuthZGrantArtifacts(\n clientId,\n options.iss,\n jwk,\n options.sub,\n options.scope.split(' '),\n { save: options.save },\n options.json\n );\n if (!outcome) process.exitCode = 1;\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AAEpD,SAASC,MAAM,QAAQ,WAAW;AAClC,OAAOC,EAAE,MAAM,IAAI;AACnB,SAASC,EAAE,IAAIC,MAAM,QAAQ,MAAM;AAEnC,SAASC,kCAAkC,QAAQ,uBAAuB;AAC1E,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,oBAAoB;AAEjD,MAAM;EAAEC;AAAU,CAAC,GAAGT,KAAK,CAACU,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAC9B,oDACF,CAAC;AAEDG,OAAO,CACJC,WAAW,CAAC,iDAAiD,CAAC,CAC9DC,SAAS,CAAC,IAAIX,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CACvDW,SAAS,CACR,IAAIX,MAAM,CACR,mBAAmB,EACnB,yDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,iBAAiB,EACjB,kFACF,CACF,CAAC,CACAW,SAAS,CAAC,IAAIX,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,CAAC,CAC3EW,SAAS,CACR,IAAIX,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAACY,OAAO,CACtE,yBACF,CACF,CAAC,CACAD,SAAS,CACR,IAAIX,MAAM,CACR,WAAW,EACX,iNACF,CACF,CAAC,CACAW,SAAS,CAAC,IAAIX,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CACzDa,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,YAAY,CACT,8DAA6DN,KAAK,CAACsB,QAAQ,CAAC,CAAE,MACjF,CAAC;IACD,IAAIC,QAAQ,GAAGnB,MAAM,CAAC,CAAC;IACvB,IAAIe,OAAO,CAACI,QAAQ,EAAE;MACpBA,QAAQ,GAAGJ,OAAO,CAACI,QAAQ;IAC7B;IACA,IAAIC,GAAW,GAAGC,SAAS;IAC3B,IAAIN,OAAO,CAACO,OAAO,EAAE;MACnB,IAAI;QACF,MAAMC,IAAI,GAAGzB,EAAE,CAAC0B,YAAY,CAACT,OAAO,CAACO,OAAO,CAAC;QAC7CF,GAAG,GAAGK,IAAI,CAACC,KAAK,CAACH,IAAI,CAACI,QAAQ,CAAC,CAAC,CAAC;MACnC,CAAC,CAAC,OAAOC,KAAK,EAAE;QACd1B,YAAY,CACT,+BAA8Ba,OAAO,CAACO,OAAQ,KAAIM,KAAK,CAACC,OAAQ,EAAC,EAClE,OACF,CAAC;MACH;IACF;IACA,MAAMC,OAAO,GAAG,MAAM7B,kCAAkC,CACtDkB,QAAQ,EACRJ,OAAO,CAACgB,GAAG,EACXX,GAAG,EACHL,OAAO,CAACiB,GAAG,EACXjB,OAAO,CAACkB,KAAK,CAACC,KAAK,CAAC,GAAG,CAAC,EACxB;MAAEC,IAAI,EAAEpB,OAAO,CAACoB;IAAK,CAAC,EACtBpB,OAAO,CAACqB,IACV,CAAC;IACD,IAAI,CAACN,OAAO,EAAEO,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHhC,OAAO,CAACoB,KAAK,CAAC,CAAC"}
|
package/esm/cli/admin/admin.js
CHANGED
|
@@ -6,8 +6,11 @@ export default function setup() {
|
|
|
6
6
|
const program = new FrodoStubCommand('admin').description('Platform admin tasks.').executableDir(__dirname);
|
|
7
7
|
program.command('federation', 'Manage admin federation configuration.');
|
|
8
8
|
program.command('create-oauth2-client-with-admin-privileges', 'Create an oauth2 client with admin privileges.');
|
|
9
|
+
program.command('generate-rfc7523-authz-grant-artifacts', 'Generate RFC7523 authorization grant artifacts.');
|
|
10
|
+
program.command('execute-rfc7523-authz-grant-flow', 'Execute RFC7523 authorization grant flow.');
|
|
9
11
|
program.command('get-access-token', 'Get an access token using client credentials grant type.');
|
|
10
12
|
program.command('list-oauth2-clients-with-admin-privileges', 'List oauth2 clients with admin privileges.');
|
|
13
|
+
program.command('export-full-cloud-config', 'Export full cloud configuration for all ops that currently support export.');
|
|
11
14
|
program.command('grant-oauth2-client-admin-privileges', 'Grant an oauth2 client admin privileges.');
|
|
12
15
|
program.command('revoke-oauth2-client-admin-privileges', 'Revoke admin privileges from an oauth2 client.');
|
|
13
16
|
program.command('list-oauth2-clients-with-custom-privileges', 'List oauth2 clients with custom privileges.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","names":["path","fileURLToPath","FrodoStubCommand","__dirname","dirname","import","meta","url","setup","program","description","executableDir","command"],"sources":["../../../src/cli/admin/admin.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('admin')\n .description('Platform admin tasks.')\n .executableDir(__dirname);\n\n program.command('federation', 'Manage admin federation configuration.');\n\n program.command(\n 'create-oauth2-client-with-admin-privileges',\n 'Create an oauth2 client with admin privileges.'\n );\n\n program.command(\n 'get-access-token',\n 'Get an access token using client credentials grant type.'\n );\n\n program.command(\n 'list-oauth2-clients-with-admin-privileges',\n 'List oauth2 clients with admin privileges.'\n );\n\n program.command(\n 'grant-oauth2-client-admin-privileges',\n 'Grant an oauth2 client admin privileges.'\n );\n\n program.command(\n 'revoke-oauth2-client-admin-privileges',\n 'Revoke admin privileges from an oauth2 client.'\n );\n\n program.command(\n 'list-oauth2-clients-with-custom-privileges',\n 'List oauth2 clients with custom privileges.'\n );\n\n program.command(\n 'list-static-user-mappings',\n 'List all subjects of static user mappings that are not oauth2 clients.'\n );\n\n program.command(\n 'remove-static-user-mapping',\n \"Remove a subject's static user mapping.\"\n );\n\n program.command(\n 'add-autoid-static-user-mapping',\n 'Add AutoId static user mapping to enable dashboards and other AutoId-based functionality.'\n );\n\n program.command(\n 'hide-generic-extension-attributes',\n 'Hide generic extension attributes.'\n );\n\n program.command(\n 'show-generic-extension-attributes',\n 'Show generic extension attributes.'\n );\n\n program.command('repair-org-model', 'Repair org model.');\n\n // program.command('train-auto-access-model', 'Train Auto Access model.');\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,uBAAuB,CAAC,CACpCC,aAAa,CAACR,SAAS,CAAC;EAE3BM,OAAO,CAACG,OAAO,CAAC,YAAY,EAAE,wCAAwC,CAAC;EAEvEH,OAAO,CAACG,OAAO,CACb,4CAA4C,EAC5C,gDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,kBAAkB,EAClB,0DACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,2CAA2C,EAC3C,4CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,sCAAsC,EACtC,0CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,uCAAuC,EACvC,gDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,4CAA4C,EAC5C,6CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,2BAA2B,EAC3B,wEACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,4BAA4B,EAC5B,yCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,gCAAgC,EAChC,2FACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,mCAAmC,EACnC,oCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,mCAAmC,EACnC,oCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;;EAExD;;EAEA,OAAOH,OAAO;AAChB"}
|
|
1
|
+
{"version":3,"file":"admin.js","names":["path","fileURLToPath","FrodoStubCommand","__dirname","dirname","import","meta","url","setup","program","description","executableDir","command"],"sources":["../../../src/cli/admin/admin.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('admin')\n .description('Platform admin tasks.')\n .executableDir(__dirname);\n\n program.command('federation', 'Manage admin federation configuration.');\n\n program.command(\n 'create-oauth2-client-with-admin-privileges',\n 'Create an oauth2 client with admin privileges.'\n );\n\n program.command(\n 'generate-rfc7523-authz-grant-artifacts',\n 'Generate RFC7523 authorization grant artifacts.'\n );\n\n program.command(\n 'execute-rfc7523-authz-grant-flow',\n 'Execute RFC7523 authorization grant flow.'\n );\n\n program.command(\n 'get-access-token',\n 'Get an access token using client credentials grant type.'\n );\n\n program.command(\n 'list-oauth2-clients-with-admin-privileges',\n 'List oauth2 clients with admin privileges.'\n );\n\n program.command(\n 'export-full-cloud-config',\n 'Export full cloud configuration for all ops that currently support export.'\n );\n\n program.command(\n 'grant-oauth2-client-admin-privileges',\n 'Grant an oauth2 client admin privileges.'\n );\n\n program.command(\n 'revoke-oauth2-client-admin-privileges',\n 'Revoke admin privileges from an oauth2 client.'\n );\n\n program.command(\n 'list-oauth2-clients-with-custom-privileges',\n 'List oauth2 clients with custom privileges.'\n );\n\n program.command(\n 'list-static-user-mappings',\n 'List all subjects of static user mappings that are not oauth2 clients.'\n );\n\n program.command(\n 'remove-static-user-mapping',\n \"Remove a subject's static user mapping.\"\n );\n\n program.command(\n 'add-autoid-static-user-mapping',\n 'Add AutoId static user mapping to enable dashboards and other AutoId-based functionality.'\n );\n\n program.command(\n 'hide-generic-extension-attributes',\n 'Hide generic extension attributes.'\n );\n\n program.command(\n 'show-generic-extension-attributes',\n 'Show generic extension attributes.'\n );\n\n program.command('repair-org-model', 'Repair org model.');\n\n // program.command('train-auto-access-model', 'Train Auto Access model.');\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,uBAAuB,CAAC,CACpCC,aAAa,CAACR,SAAS,CAAC;EAE3BM,OAAO,CAACG,OAAO,CAAC,YAAY,EAAE,wCAAwC,CAAC;EAEvEH,OAAO,CAACG,OAAO,CACb,4CAA4C,EAC5C,gDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,wCAAwC,EACxC,iDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,kCAAkC,EAClC,2CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,kBAAkB,EAClB,0DACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,2CAA2C,EAC3C,4CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,0BAA0B,EAC1B,4EACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,sCAAsC,EACtC,0CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,uCAAuC,EACvC,gDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,4CAA4C,EAC5C,6CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,2BAA2B,EAC3B,wEACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,4BAA4B,EAC5B,yCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,gCAAgC,EAChC,2FACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,mCAAmC,EACnC,oCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,mCAAmC,EACnC,oCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;;EAExD;;EAEA,OAAOH,OAAO;AAChB"}
|
|
@@ -14,7 +14,7 @@ async (host, realm, user, password, options, command) => {
|
|
|
14
14
|
// export
|
|
15
15
|
if (options.policyId && (await getTokens())) {
|
|
16
16
|
verboseMessage('Exporting authorization policy to file...');
|
|
17
|
-
const outcome = exportPolicyToFile(options.policyId, options.file, {
|
|
17
|
+
const outcome = await exportPolicyToFile(options.policyId, options.file, {
|
|
18
18
|
deps: options.deps,
|
|
19
19
|
prereqs: options.prereqs,
|
|
20
20
|
useStringArrays: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz-policy-export.js","names":["frodo","Option","exportPoliciesByPolicySetToFile","exportPoliciesByPolicySetToFiles","exportPoliciesToFile","exportPoliciesToFiles","exportPolicyToFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","policyId","outcome","file","deps","prereqs","useStringArrays","process","exitCode","setId","all","allSeparate","help","parse"],"sources":["../../../src/cli/authz/authz-policy-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportPoliciesByPolicySetToFile,\n exportPoliciesByPolicySetToFiles,\n exportPoliciesToFile,\n exportPoliciesToFiles,\n exportPolicyToFile,\n} from '../../ops/PolicyOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz policy export');\n\nprogram\n .description('Export authorization policies.')\n .addOption(\n new Option(\n '-i, --policy-id <policy-id>',\n 'Policy id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '--set-id <set-id>',\n 'Export policies in policy set only. Ignored with -i.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export policies to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export policies to separate files (*.policy.authz.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(new Option('--no-deps', 'Do not include dependencies (scripts).'))\n .addOption(\n new Option(\n '--prereqs',\n 'Include prerequisites (policy sets, resource types).'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export\n if (options.policyId && (await getTokens())) {\n verboseMessage('Exporting authorization policy to file...');\n const outcome = exportPolicyToFile(options.policyId
|
|
1
|
+
{"version":3,"file":"authz-policy-export.js","names":["frodo","Option","exportPoliciesByPolicySetToFile","exportPoliciesByPolicySetToFiles","exportPoliciesToFile","exportPoliciesToFiles","exportPolicyToFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","policyId","outcome","file","deps","prereqs","useStringArrays","process","exitCode","setId","all","allSeparate","help","parse"],"sources":["../../../src/cli/authz/authz-policy-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportPoliciesByPolicySetToFile,\n exportPoliciesByPolicySetToFiles,\n exportPoliciesToFile,\n exportPoliciesToFiles,\n exportPolicyToFile,\n} from '../../ops/PolicyOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz policy export');\n\nprogram\n .description('Export authorization policies.')\n .addOption(\n new Option(\n '-i, --policy-id <policy-id>',\n 'Policy id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '--set-id <set-id>',\n 'Export policies in policy set only. Ignored with -i.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export policies to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export policies to separate files (*.policy.authz.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(new Option('--no-deps', 'Do not include dependencies (scripts).'))\n .addOption(\n new Option(\n '--prereqs',\n 'Include prerequisites (policy sets, resource types).'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export\n if (options.policyId && (await getTokens())) {\n verboseMessage('Exporting authorization policy to file...');\n const outcome = await exportPolicyToFile(\n options.policyId,\n options.file,\n {\n deps: options.deps,\n prereqs: options.prereqs,\n useStringArrays: true,\n }\n );\n if (!outcome) process.exitCode = 1;\n }\n // -a/--all by policy set\n else if (options.setId && options.all && (await getTokens())) {\n verboseMessage(\n `Exporting all authorization policies in policy set ${options.setId} to file...`\n );\n const outcome = await exportPoliciesByPolicySetToFile(\n options.setId,\n options.file,\n {\n deps: options.deps,\n prereqs: options.prereqs,\n useStringArrays: true,\n }\n );\n if (!outcome) process.exitCode = 1;\n }\n // -a/--all\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all authorization policies to file...');\n const outcome = await exportPoliciesToFile(options.file, {\n deps: options.deps,\n prereqs: options.prereqs,\n useStringArrays: true,\n });\n if (!outcome) process.exitCode = 1;\n }\n // -A/--all-separate by policy set\n else if (options.setId && options.allSeparate && (await getTokens())) {\n verboseMessage(\n `Exporting all authorization policies in policy set ${options.setId} to separate files...`\n );\n const outcome = await exportPoliciesByPolicySetToFiles(options.setId, {\n deps: options.deps,\n prereqs: options.prereqs,\n useStringArrays: true,\n });\n if (!outcome) process.exitCode = 1;\n }\n // -A/--all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage(\n 'Exporting all authorization policies to separate files...'\n );\n const outcome = await exportPoliciesToFiles({\n deps: options.deps,\n prereqs: options.prereqs,\n useStringArrays: true,\n });\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":"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"}
|
|
@@ -14,7 +14,7 @@ async (host, realm, user, password, options, command) => {
|
|
|
14
14
|
// import
|
|
15
15
|
if (options.policyId && (await getTokens())) {
|
|
16
16
|
verboseMessage('Importing authorization policy from file...');
|
|
17
|
-
const outcome = importPolicyFromFile(options.policyId, options.file, {
|
|
17
|
+
const outcome = await importPolicyFromFile(options.policyId, options.file, {
|
|
18
18
|
deps: options.deps,
|
|
19
19
|
prereqs: options.prereqs,
|
|
20
20
|
policySetName: options.setId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz-policy-import.js","names":["frodo","Option","importFirstPolicyFromFile","importPoliciesFromFile","importPoliciesFromFiles","importPolicyFromFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","policyId","outcome","file","deps","prereqs","policySetName","setId","process","exitCode","all","allSeparate","help","parse"],"sources":["../../../src/cli/authz/authz-policy-import.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n importFirstPolicyFromFile,\n importPoliciesFromFile,\n importPoliciesFromFiles,\n importPolicyFromFile,\n} from '../../ops/PolicyOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz policy import');\n\nprogram\n .description('Import authorization policies.')\n .addOption(\n new Option(\n '-i, --policy-id <policy-id>',\n 'Policy id. If specified, only one policy is imported and the options -a and -A are ignored.'\n )\n )\n .addOption(\n new Option('--set-id <set-id>', 'Import policies into this policy set.')\n )\n .addOption(new Option('-f, --file <file>', 'Name of the file to import.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Import all policies from single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all policies from separate files (*.policy.authz.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(\n new Option(\n '--no-deps',\n 'Do not import dependencies (scripts) even if they are available in the import file.'\n )\n )\n .addOption(\n new Option(\n '--prereqs',\n 'Import prerequisites (policy sets, resource types) if they are available in the import file.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // import\n if (options.policyId && (await getTokens())) {\n verboseMessage('Importing authorization policy from file...');\n const outcome = importPolicyFromFile(options.policyId
|
|
1
|
+
{"version":3,"file":"authz-policy-import.js","names":["frodo","Option","importFirstPolicyFromFile","importPoliciesFromFile","importPoliciesFromFiles","importPolicyFromFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","policyId","outcome","file","deps","prereqs","policySetName","setId","process","exitCode","all","allSeparate","help","parse"],"sources":["../../../src/cli/authz/authz-policy-import.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n importFirstPolicyFromFile,\n importPoliciesFromFile,\n importPoliciesFromFiles,\n importPolicyFromFile,\n} from '../../ops/PolicyOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz policy import');\n\nprogram\n .description('Import authorization policies.')\n .addOption(\n new Option(\n '-i, --policy-id <policy-id>',\n 'Policy id. If specified, only one policy is imported and the options -a and -A are ignored.'\n )\n )\n .addOption(\n new Option('--set-id <set-id>', 'Import policies into this policy set.')\n )\n .addOption(new Option('-f, --file <file>', 'Name of the file to import.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Import all policies from single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all policies from separate files (*.policy.authz.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(\n new Option(\n '--no-deps',\n 'Do not import dependencies (scripts) even if they are available in the import file.'\n )\n )\n .addOption(\n new Option(\n '--prereqs',\n 'Import prerequisites (policy sets, resource types) if they are available in the import file.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // import\n if (options.policyId && (await getTokens())) {\n verboseMessage('Importing authorization policy from file...');\n const outcome = await importPolicyFromFile(\n options.policyId,\n options.file,\n {\n deps: options.deps,\n prereqs: options.prereqs,\n policySetName: options.setId,\n }\n );\n if (!outcome) process.exitCode = 1;\n }\n // -a/--all\n else if (options.all && (await getTokens())) {\n verboseMessage('Importing all authorization policies from file...');\n const outcome = await importPoliciesFromFile(options.file, {\n deps: options.deps,\n prereqs: options.prereqs,\n policySetName: options.setId,\n });\n if (!outcome) process.exitCode = 1;\n }\n // -A/--all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage(\n 'Importing all authorization policies from separate files...'\n );\n const outcome = await importPoliciesFromFiles({\n deps: options.deps,\n prereqs: options.prereqs,\n policySetName: options.setId,\n });\n if (!outcome) process.exitCode = 1;\n }\n // import first policy set from file\n else if (options.file && (await getTokens())) {\n verboseMessage(\n `Importing first authorization policy from file \"${options.file}\"...`\n );\n const outcome = await importFirstPolicyFromFile(options.file, {\n deps: options.deps,\n prereqs: options.prereqs,\n policySetName: options.setId,\n });\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":"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"}
|
|
@@ -14,13 +14,13 @@ async (host, realm, user, password, options, command) => {
|
|
|
14
14
|
// by policy set
|
|
15
15
|
if (options.setId && (await getTokens())) {
|
|
16
16
|
verboseMessage(`Listing authorization policies in policy set ${options.setId}...`);
|
|
17
|
-
const outcome = listPoliciesByPolicySet(options.setId, options.long);
|
|
17
|
+
const outcome = await listPoliciesByPolicySet(options.setId, options.long);
|
|
18
18
|
if (!outcome) process.exitCode = 1;
|
|
19
19
|
}
|
|
20
20
|
// all policies
|
|
21
21
|
else if (await getTokens()) {
|
|
22
22
|
verboseMessage(`Listing authorization policies...`);
|
|
23
|
-
const outcome = listPolicies(options.long);
|
|
23
|
+
const outcome = await listPolicies(options.long);
|
|
24
24
|
if (!outcome) process.exitCode = 1;
|
|
25
25
|
}
|
|
26
26
|
// unrecognized combination of options or no options
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz-policy-list.js","names":["frodo","Option","listPolicies","listPoliciesByPolicySet","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","setId","outcome","long","process","exitCode","help","parse"],"sources":["../../../src/cli/authz/authz-policy-list.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { listPolicies, listPoliciesByPolicySet } from '../../ops/PolicyOps';\nimport { verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz policy list');\n\nprogram\n .description('List authorization policies.')\n .addOption(new Option('--set-id <set-id>', 'Policy set id/name.'))\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 // by policy set\n if (options.setId && (await getTokens())) {\n verboseMessage(\n `Listing authorization policies in policy set ${options.setId}...`\n );\n const outcome = listPoliciesByPolicySet(options.setId
|
|
1
|
+
{"version":3,"file":"authz-policy-list.js","names":["frodo","Option","listPolicies","listPoliciesByPolicySet","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","setId","outcome","long","process","exitCode","help","parse"],"sources":["../../../src/cli/authz/authz-policy-list.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { listPolicies, listPoliciesByPolicySet } from '../../ops/PolicyOps';\nimport { verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz policy list');\n\nprogram\n .description('List authorization policies.')\n .addOption(new Option('--set-id <set-id>', 'Policy set id/name.'))\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 // by policy set\n if (options.setId && (await getTokens())) {\n verboseMessage(\n `Listing authorization policies in policy set ${options.setId}...`\n );\n const outcome = await listPoliciesByPolicySet(\n options.setId,\n options.long\n );\n if (!outcome) process.exitCode = 1;\n }\n // all policies\n else if (await getTokens()) {\n verboseMessage(`Listing authorization policies...`);\n const outcome = await listPolicies(options.long);\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,YAAY,EAAEC,uBAAuB,QAAQ,qBAAqB;AAC3E,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGN,KAAK,CAACO,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,yBAAyB,CAAC;AAE3DG,OAAO,CACJC,WAAW,CAAC,8BAA8B,CAAC,CAC3CC,SAAS,CAAC,IAAIT,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,CACjES,SAAS,CACR,IAAIT,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAACU,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;EACA,IAAID,OAAO,CAACG,KAAK,KAAK,MAAMd,SAAS,CAAC,CAAC,CAAC,EAAE;IACxCF,cAAc,CACX,gDAA+Ca,OAAO,CAACG,KAAM,KAChE,CAAC;IACD,MAAMC,OAAO,GAAG,MAAMlB,uBAAuB,CAC3Cc,OAAO,CAACG,KAAK,EACbH,OAAO,CAACK,IACV,CAAC;IACD,IAAI,CAACD,OAAO,EAAEE,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC;EACA;EAAA,KACK,IAAI,MAAMlB,SAAS,CAAC,CAAC,EAAE;IAC1BF,cAAc,CAAE,mCAAkC,CAAC;IACnD,MAAMiB,OAAO,GAAG,MAAMnB,YAAY,CAACe,OAAO,CAACK,IAAI,CAAC;IAChD,IAAI,CAACD,OAAO,EAAEE,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC;EACA;EAAA,KACK;IACHpB,cAAc,CAAC,sDAAsD,CAAC;IACtEI,OAAO,CAACiB,IAAI,CAAC,CAAC;IACdF,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHhB,OAAO,CAACkB,KAAK,CAAC,CAAC"}
|
|
@@ -14,13 +14,13 @@ async (host, realm, user, password, options, command) => {
|
|
|
14
14
|
// delete by id
|
|
15
15
|
if (options.setId && (await getTokens())) {
|
|
16
16
|
verboseMessage('Deleting authorization policy set...');
|
|
17
|
-
const outcome = deletePolicySetById(options.setId);
|
|
17
|
+
const outcome = await deletePolicySetById(options.setId);
|
|
18
18
|
if (!outcome) process.exitCode = 1;
|
|
19
19
|
}
|
|
20
20
|
// --all -a
|
|
21
21
|
else if (options.all && (await getTokens())) {
|
|
22
22
|
verboseMessage('Deleting all authorization policy sets...');
|
|
23
|
-
const outcome = deletePolicySets();
|
|
23
|
+
const outcome = await deletePolicySets();
|
|
24
24
|
if (!outcome) process.exitCode = 1;
|
|
25
25
|
}
|
|
26
26
|
// unrecognized combination of options or no options
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz-set-delete.js","names":["frodo","Option","deletePolicySetById","deletePolicySets","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","setId","outcome","process","exitCode","all","help","parse"],"sources":["../../../src/cli/authz/authz-set-delete.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { deletePolicySetById, deletePolicySets } from '../../ops/PolicySetOps';\nimport { printMessage, verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz set delete');\n\nprogram\n .description('Delete authorization policy sets.')\n .addOption(new Option('-i, --set-id <set-id>', 'Policy set id/name.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Delete all policy sets in a realm. Ignored with -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.setId && (await getTokens())) {\n verboseMessage('Deleting authorization policy set...');\n const outcome = deletePolicySetById(options.setId);\n if (!outcome) process.exitCode = 1;\n }\n // --all -a\n else if (options.all && (await getTokens())) {\n verboseMessage('Deleting all authorization policy sets...');\n const outcome = deletePolicySets();\n if (!outcome) process.exitCode = 1;\n }\n // unrecognized combination of options or no options\n else {\n printMessage('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,mBAAmB,EAAEC,gBAAgB,QAAQ,wBAAwB;AAC9E,SAASC,YAAY,EAAEC,cAAc,QAAQ,wBAAwB;AACrE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,wBAAwB,CAAC;AAE1DG,OAAO,CACJC,WAAW,CAAC,mCAAmC,CAAC,CAChDC,SAAS,CAAC,IAAIV,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC,CACrEU,SAAS,CACR,IAAIV,MAAM,CACR,WAAW,EACX,qDACF,CACF,CAAC,CACAW,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,MAAMb,SAAS,CAAC,CAAC,CAAC,EAAE;IACxCF,cAAc,CAAC,sCAAsC,CAAC;IACtD,MAAMgB,OAAO,
|
|
1
|
+
{"version":3,"file":"authz-set-delete.js","names":["frodo","Option","deletePolicySetById","deletePolicySets","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","setId","outcome","process","exitCode","all","help","parse"],"sources":["../../../src/cli/authz/authz-set-delete.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { deletePolicySetById, deletePolicySets } from '../../ops/PolicySetOps';\nimport { printMessage, verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz set delete');\n\nprogram\n .description('Delete authorization policy sets.')\n .addOption(new Option('-i, --set-id <set-id>', 'Policy set id/name.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Delete all policy sets in a realm. Ignored with -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.setId && (await getTokens())) {\n verboseMessage('Deleting authorization policy set...');\n const outcome = await deletePolicySetById(options.setId);\n if (!outcome) process.exitCode = 1;\n }\n // --all -a\n else if (options.all && (await getTokens())) {\n verboseMessage('Deleting all authorization policy sets...');\n const outcome = await deletePolicySets();\n if (!outcome) process.exitCode = 1;\n }\n // unrecognized combination of options or no options\n else {\n printMessage('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,mBAAmB,EAAEC,gBAAgB,QAAQ,wBAAwB;AAC9E,SAASC,YAAY,EAAEC,cAAc,QAAQ,wBAAwB;AACrE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,wBAAwB,CAAC;AAE1DG,OAAO,CACJC,WAAW,CAAC,mCAAmC,CAAC,CAChDC,SAAS,CAAC,IAAIV,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC,CACrEU,SAAS,CACR,IAAIV,MAAM,CACR,WAAW,EACX,qDACF,CACF,CAAC,CACAW,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,MAAMb,SAAS,CAAC,CAAC,CAAC,EAAE;IACxCF,cAAc,CAAC,sCAAsC,CAAC;IACtD,MAAMgB,OAAO,GAAG,MAAMnB,mBAAmB,CAACe,OAAO,CAACG,KAAK,CAAC;IACxD,IAAI,CAACC,OAAO,EAAEC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC;EACA;EAAA,KACK,IAAIN,OAAO,CAACO,GAAG,KAAK,MAAMjB,SAAS,CAAC,CAAC,CAAC,EAAE;IAC3CF,cAAc,CAAC,2CAA2C,CAAC;IAC3D,MAAMgB,OAAO,GAAG,MAAMlB,gBAAgB,CAAC,CAAC;IACxC,IAAI,CAACkB,OAAO,EAAEC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC;EACA;EAAA,KACK;IACHnB,YAAY,CAAC,sDAAsD,CAAC;IACpEK,OAAO,CAACgB,IAAI,CAAC,CAAC;IACdH,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACiB,KAAK,CAAC,CAAC"}
|
|
@@ -14,7 +14,7 @@ async (host, realm, user, password, options, command) => {
|
|
|
14
14
|
// export
|
|
15
15
|
if (options.setId && (await getTokens())) {
|
|
16
16
|
verboseMessage('Exporting authorization policy set to file...');
|
|
17
|
-
const outcome = exportPolicySetToFile(options.setId, options.file, {
|
|
17
|
+
const outcome = await exportPolicySetToFile(options.setId, options.file, {
|
|
18
18
|
useStringArrays: true,
|
|
19
19
|
deps: options.deps,
|
|
20
20
|
prereqs: options.prereqs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz-set-export.js","names":["frodo","Option","exportPolicySetsToFile","exportPolicySetsToFiles","exportPolicySetToFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","setId","outcome","file","useStringArrays","deps","prereqs","process","exitCode","all","allSeparate","help","parse"],"sources":["../../../src/cli/authz/authz-set-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportPolicySetsToFile,\n exportPolicySetsToFiles,\n exportPolicySetToFile,\n} from '../../ops/PolicySetOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz set export');\n\nprogram\n .description('Export authorization policy sets.')\n .addOption(\n new Option(\n '-i, --set-id <set-id>',\n 'Policy set id/name. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all applications/policy sets to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all applications/policy sets to separate files (*.authz.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(\n new Option(\n '--no-deps',\n 'Do not include any dependencies (policies, scripts).'\n )\n )\n .addOption(new Option('--prereqs', 'Include prerequisites (resource types).'))\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export\n if (options.setId && (await getTokens())) {\n verboseMessage('Exporting authorization policy set to file...');\n const outcome = exportPolicySetToFile(options.setId
|
|
1
|
+
{"version":3,"file":"authz-set-export.js","names":["frodo","Option","exportPolicySetsToFile","exportPolicySetsToFiles","exportPolicySetToFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","setId","outcome","file","useStringArrays","deps","prereqs","process","exitCode","all","allSeparate","help","parse"],"sources":["../../../src/cli/authz/authz-set-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportPolicySetsToFile,\n exportPolicySetsToFiles,\n exportPolicySetToFile,\n} from '../../ops/PolicySetOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo authz set export');\n\nprogram\n .description('Export authorization policy sets.')\n .addOption(\n new Option(\n '-i, --set-id <set-id>',\n 'Policy set id/name. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all applications/policy sets to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all applications/policy sets to separate files (*.authz.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(\n new Option(\n '--no-deps',\n 'Do not include any dependencies (policies, scripts).'\n )\n )\n .addOption(new Option('--prereqs', 'Include prerequisites (resource types).'))\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export\n if (options.setId && (await getTokens())) {\n verboseMessage('Exporting authorization policy set to file...');\n const outcome = await exportPolicySetToFile(\n options.setId,\n options.file,\n {\n useStringArrays: true,\n deps: options.deps,\n prereqs: options.prereqs,\n }\n );\n if (!outcome) process.exitCode = 1;\n }\n // -a/--all\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all authorization policy sets to file...');\n const outcome = await exportPolicySetsToFile(options.file, {\n useStringArrays: true,\n deps: options.deps,\n prereqs: options.prereqs,\n });\n if (!outcome) process.exitCode = 1;\n }\n // -A/--all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage(\n 'Exporting all authorization policy sets to separate files...'\n );\n const outcome = await exportPolicySetsToFiles({\n useStringArrays: true,\n deps: options.deps,\n prereqs: options.prereqs,\n });\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":"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"}
|