internal static JObject Sanitize()

in src/WebJobs.Script/Sanitizer.cs [101:172]


        internal static JObject Sanitize(JObject obj, Func<string, bool> selector = null)
        {
            static bool IsPotentialCredential(string name)
            {
                foreach (string fragment in CredentialNameFragments)
                {
                    if (name.Contains(fragment, StringComparison.OrdinalIgnoreCase))
                    {
                        return true;
                    }
                }

                return false;
            }

            static JToken Sanitize(JToken token)
            {
                if (token is JObject obj)
                {
                    JObject sanitized = new JObject();
                    foreach (var prop in obj)
                    {
                        if (IsPotentialCredential(prop.Key))
                        {
                            sanitized[prop.Key] = Sanitizer.SecretReplacement;
                        }
                        else
                        {
                            sanitized[prop.Key] = Sanitize(prop.Value);
                        }
                    }

                    return sanitized;
                }

                if (token is JArray arr)
                {
                    JArray sanitized = new JArray();
                    foreach (var value in arr)
                    {
                        sanitized.Add(Sanitize(value));
                    }

                    return sanitized;
                }

                if (token.Type == JTokenType.String)
                {
                    return Sanitizer.Sanitize(token.ToString());
                }

                return token;
            }

            JObject sanitizedObject = new JObject();
            foreach (var prop in obj)
            {
                string propName = prop.Key;
                if (selector != null && !selector(propName))
                {
                    continue;
                }

                var propValue = prop.Value;
                if (propValue != null)
                {
                    sanitizedObject[propName] = Sanitize(propValue);
                }
            }

            return sanitizedObject;
        }