diff --git a/packages/aws-cdk/lib/cli/telemetry/sanitation.ts b/packages/aws-cdk/lib/cli/telemetry/sanitation.ts index 783211975..592d26cbc 100644 --- a/packages/aws-cdk/lib/cli/telemetry/sanitation.ts +++ b/packages/aws-cdk/lib/cli/telemetry/sanitation.ts @@ -33,7 +33,7 @@ export function sanitizeCommandLineArguments(argv: any): { path: string[]; param if (argv[argName] === undefined || (!globalOptions.includes(argName) && !commandOptions.includes(argName))) { continue; } - if (isNumberOrBoolean(argv[argName])) { + if (isNumberOrBoolean(argv[argName]) || isKnownEnumValue(argName, argv[argName], command, config)) { parameters[argName] = argv[argName]; } else { parameters[argName] = ''; @@ -65,6 +65,15 @@ function isNumberOrBoolean(value: any): boolean { return typeof value === 'number' || typeof value === 'boolean'; } +function isKnownEnumValue(name: string, value: any, command: string, config: any): boolean { + const propertyDefiniton = config.globalOptions[name] ?? config.commands[command]?.options[name]; + if (propertyDefiniton.type === 'string') { + // Even if the property has choices, only record if the value is a valid choice + return propertyDefiniton.choices?.includes(value); + } + return false; +} + function dropDuplicate(param: string): string { return param.endsWith('S') ? param.slice(0, param.length-1) : param; } diff --git a/packages/aws-cdk/test/cli/telemetry/sanitation.test.ts b/packages/aws-cdk/test/cli/telemetry/sanitation.test.ts index 81ce15431..8cbd94b12 100644 --- a/packages/aws-cdk/test/cli/telemetry/sanitation.test.ts +++ b/packages/aws-cdk/test/cli/telemetry/sanitation.test.ts @@ -76,12 +76,35 @@ describe(sanitizeCommandLineArguments, () => { const argv = { _: ['deploy'], STACKS: ['MyStack'], - ['require-approval']: 'broadening', ['build-exclude']: ['something'], }; expect(sanitizeCommandLineArguments(argv)).toEqual({ path: ['deploy', '$STACK1'], - parameters: { 'require-approval': '', 'build-exclude': '' }, + parameters: { 'build-exclude': '' }, + }); + }); + + test('enum options are allowed', () => { + const argv = { + _: ['deploy'], + STACKS: ['MyStack'], + ['require-approval']: 'broadening', + }; + expect(sanitizeCommandLineArguments(argv)).toEqual({ + path: ['deploy', '$STACK1'], + parameters: { 'require-approval': 'broadening' }, + }); + }); + + test('invalid enum options are redacted', () => { + const argv = { + _: ['deploy'], + STACKS: ['MyStack'], + ['require-approval']: 'invalid', + }; + expect(sanitizeCommandLineArguments(argv)).toEqual({ + path: ['deploy', '$STACK1'], + parameters: { 'require-approval': '' }, }); }); });