Private/Runtime/Get-OpenApiRedactedUri.ps1
|
function Get-OpenApiRedactedUri { <# .SYNOPSIS Replaces the values of secret query parameters (api keys and names like token/secret) in a URL with ********. #> [CmdletBinding()] [OutputType([string])] param( [Parameter()] [AllowNull()] [AllowEmptyString()] [string]$Uri, [Parameter()] [AllowNull()] [AllowEmptyCollection()] [string[]]$SensitiveName ) if ([string]::IsNullOrEmpty($Uri)) { return $Uri } $queryIndex = $Uri.IndexOf('?') if ($queryIndex -lt 0) { return $Uri } $prefix = $Uri.Substring(0, $queryIndex + 1) $query = $Uri.Substring($queryIndex + 1) $fragment = '' $hashIndex = $query.IndexOf('#') if ($hashIndex -ge 0) { $fragment = $query.Substring($hashIndex) $query = $query.Substring(0, $hashIndex) } $parts = foreach ($pair in $query.Split('&')) { $equals = $pair.IndexOf('=') if ($equals -lt 0) { $pair continue } $name = [System.Uri]::UnescapeDataString($pair.Substring(0, $equals)) if (Test-OpenApiSensitiveName -Name $name -SensitiveName $SensitiveName) { $pair.Substring(0, $equals + 1) + '********' } else { $pair } } return $prefix + (@($parts) -join '&') + $fragment } |