using System; using System.Collections.Generic; namespace MxGateway.Worker.Bootstrap; public static class WorkerLogRedactor { public const string RedactedValue = "[redacted]"; private static readonly string[] SensitiveFieldNameParts = [ "nonce", "secret", "password", "token", "credential", "apikey", "api_key", ]; public static Dictionary RedactFields(IReadOnlyDictionary fields) { Dictionary redactedFields = []; foreach (KeyValuePair field in fields) { redactedFields[field.Key] = RedactValue(field.Key, field.Value); } return redactedFields; } public static object? RedactValue(string fieldName, object? value) { if (value is null) { return null; } foreach (string sensitiveFieldNamePart in SensitiveFieldNameParts) { if (fieldName.IndexOf(sensitiveFieldNamePart, StringComparison.OrdinalIgnoreCase) >= 0) { return RedactedValue; } } return value; } }