Skip to content

Make URL Redaction more dynamic#2716

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

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

Conversation

@rads-1996
Copy link
Member

No description provided.

@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
}

if (config && config.redactQueryParams) {
const option = config ? config.redactUrls : undefined;
Copy link
Member Author

Choose a reason for hiding this comment

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

I added this check here to avoid having to change the function arguments.

* Controls how the user can configure which parts of the URL should be redacted. Example, certain query parameters, username and password, etc.
*/

export const enum UrlRedactionOptions {
Copy link
Collaborator

Choose a reason for hiding this comment

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

OK, looking good just a couple of comments

  • const enum is excellent and it's what we want to use internally (like you have)

minor changes

  • the const enum should be named with a leading lowercase "e"
  • As this is usable from the IConfiguration it also needs to be exported from the index
  • Because of the exporting requirement we "should" probably also create a user usable enum using createEnumStyle
  • We should also export a type (the name you have now without a leading lowercase "e") and use this in the IConfiguration (so that files doesn't need to change)

Examples of what I'm talking about for the enum definitions are in https://github.com/microsoft/ApplicationInsights-JS/blob/main/shared/AppInsightsCore/src/enums/ai/EventsDiscardedReason.ts

Copy link
Member Author

Choose a reason for hiding this comment

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

I have addressed the comments. PTAL when you have time. Thanks!

@MSNev MSNev self-requested a review March 19, 2026 00:27
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