diff --git a/src/app/utils/query-parameter-sanitization.ts b/src/app/utils/query-parameter-sanitization.ts index 32ef683801..45973c6b6a 100644 --- a/src/app/utils/query-parameter-sanitization.ts +++ b/src/app/utils/query-parameter-sanitization.ts @@ -54,19 +54,23 @@ function isKeyValuePair(str: string): boolean { return KEY_VALUE_REGEX.test(str); } -export function isPropertyName(str: string): boolean { +function isPropertyName(str: string): boolean { return PROPERTY_NAME_REGEX.test(str); } -export function isAllAlpha(str: string): boolean { +function isAllAlpha(str: string): boolean { return ALL_ALPHA_REGEX.test(str); } +function isPlaceHolderSegment(segment: string) { + return segment.startsWith('{') && segment.endsWith('}') +} + /** * Redact variable segments of query parameters * @param queryParameter e.g. $top=5, $search="pizza", $filter=startswith(displayName, 'J') */ -export function sanitizeQueryParameter(queryParameter: string): string { +function sanitizeQueryParameter(queryParameter: string): string { // return if not key-value pair if (!queryParameter.includes('=')) { return queryParameter; @@ -482,3 +486,10 @@ function sanitizeFilterQueryOptionValue(queryParameterValue: string): string { } return sanitizedQueryString.trim(); } + +export { + isPropertyName, + isAllAlpha, + isPlaceHolderSegment, + sanitizeQueryParameter +} diff --git a/src/app/utils/query-url-sanitization.ts b/src/app/utils/query-url-sanitization.ts index cab4522c4b..5472e6aec8 100644 --- a/src/app/utils/query-url-sanitization.ts +++ b/src/app/utils/query-url-sanitization.ts @@ -2,6 +2,7 @@ import { IQuery } from '../../types/query-runner'; import { isAllAlpha, + isPlaceHolderSegment, sanitizeQueryParameter } from './query-parameter-sanitization'; import { parseSampleUrl } from './sample-url-generation'; @@ -79,7 +80,6 @@ function sanitizedQueryUrl(url: string): string { return `${match.substring(0, match.indexOf(':'))}:`; } ); - // Split requestUrl into segments that can be sanitized individually const urlSegments = resourceUrl.split('/'); urlSegments.forEach((segment, index) => { @@ -134,6 +134,10 @@ function sanitizePathSegment(previousSegment: string, segment: string): string { return `${segment.substring(0, openingBracketIndex)}(${sanitizedText})`; } + if (isPlaceHolderSegment(segment)) { + return segment; + } + if (!isAllAlpha(previousSegment) && !isDeprecation(previousSegment)) { previousSegment = 'unknown'; }