package util import ( "net/url" ) // MaskURLQuery masks specific url query string values func MaskURLQuery(originalURL string, keysToMask ...string) (string, error) { parsedURL, err := url.Parse(originalURL) if err != nil { return "", err } queryParams := parsedURL.Query() for _, key := range keysToMask { if value, exists := queryParams[key]; exists { for i := range value { queryParams[key][i] = maskValue(value[i]) } } } parsedURL.RawQuery = queryParams.Encode() return parsedURL.String(), nil } func maskValue(value string) string { const defaultMask = "xxxxx" // using `x` because `*` will be encoded if len(value) < 5 { return defaultMask } maskLength := len(value) - 5 return defaultMask + value[maskLength:] }