Skip to content

Make URL Redaction more dynamic#2716

Open
rads-1996 wants to merge 10 commits intomicrosoft:mainfrom
rads-1996:dynamic-config-for-url-redaction
Open

Make URL Redaction more dynamic#2716
rads-1996 wants to merge 10 commits intomicrosoft:mainfrom
rads-1996:dynamic-config-for-url-redaction

Conversation

@rads-1996
Copy link
Member

No description provided.

* [Optional] A flag to enable or disable redaction for query parameters.
* @defaultValue true
*/
redactQueryParams?: boolean;
Copy link
Member Author

@rads-1996 rads-1996 Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have added an opt in/out option indiviually for username:password and query params. Previously we just had a redactUrls which would completely not redact anything in the url, if set to False

Do we need this level of flexibility?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like too many configs (with long names) which are ( probably ) going to be rarely used.

Suggestion: Introduce a new constant enum and lest change the redactUrls to use that

redactUrls?: boolean | RedactUrlOption

With values like (names are suggestions only so feel free to change them)

  • true / false (does what it does today - nothing or use defaults with merged urls)
  • AllMerge (same as true)
  • AllReplace
  • UrlOnly
  • UsernamePasswordOnly
  • etc

Or use a bitwise value logic for the values
0x00-0x0f (Url)
0x10 add (to Skip Username/Passwword etc)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quick question, when the user choose replace/append for query params, the username and password should be redacted as per logic right?

@rads-1996 rads-1996 marked this pull request as ready for review March 12, 2026 23:02
@rads-1996 rads-1996 requested a review from a team as a code owner March 12, 2026 23:02
Copilot AI review requested due to automatic review settings March 12, 2026 23:02
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the URL field redaction configuration in AppInsightsCore by separating control of credential redaction vs query-parameter redaction, and expands unit test coverage for the new configuration behavior.

Changes:

  • Introduces separate query-parameter redaction configuration (redactQueryParams boolean + append/replace query param lists).
  • Updates fieldRedaction() / query-parameter redaction selection logic to respect the new configuration shape.
  • Adjusts and adds unit tests covering disabled redaction, credential-only redaction, and custom query param modes.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
shared/AppInsightsCore/Tests/Unit/src/ai/ApplicationInsightsCore.Tests.ts Adds/updates FieldRedaction unit tests for new query-param config modes and flag interactions.
shared/AppInsightsCore/Tests/Unit/src/ai/AppInsightsCommon.tests.ts Updates dataSanitizeUrl test config usage and adds coverage for “replace default sensitive params” behavior.
shared/AppInsightsCore/src/utils/EnvUtils.ts Updates query-param redaction selection and splits credential vs query redaction behavior in fieldRedaction().
shared/AppInsightsCore/src/interfaces/ai/IConfiguration.ts Changes the public config surface for URL redaction (new boolean + new append/replace arrays).
Comments suppressed due to low confidence (1)

shared/AppInsightsCore/Tests/Unit/src/ai/ApplicationInsightsCore.Tests.ts:2264

  • Test name/assert message say this covers an "empty redactQueryParams array", but the test now uses let config = {} as IConfiguration; (no empty array / no query-param config at all). Either pass an explicit empty list (for the new config shape) or rename the test/message so it matches what’s being exercised.
        this.testCase({
            name: "FieldRedaction: should handle empty redactQueryParams array",
            test: () => {
                let config = {} as IConfiguration;
                
                // Should still redact default parameters
                const url = "https://example.com/path?Signature=secret&custom_param=value";
                const redactedLocation = fieldRedaction(url, config);
                Assert.equal(redactedLocation, "https://example.com/path?Signature=REDACTED&custom_param=value",
                    "URL with default sensitive parameters should still be redacted with empty custom array");

You can also share your feedback on Copilot code review. Take the survey.

@rads-1996
Copy link
Member Author

Will document all the changes once decide all the config changes.

@rads-1996 rads-1996 force-pushed the dynamic-config-for-url-redaction branch from 71e3d85 to b4d41fd Compare March 12, 2026 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants