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