redactSecrets static method

Map<String, dynamic> redactSecrets(
  1. Map<String, dynamic> json
)

Returns a deep copy of json in which every secret value, i.e. every password, access_token and refresh_token, is replaced by ***.

Used by the toString() implementations so that interpolating an account, server configuration or token into log output does not leak credentials.

Implementation

static Map<String, dynamic> redactSecrets(Map<String, dynamic> json) {
  Object? redact(Object? value) {
    if (value is Map) {
      return <String, dynamic>{
        for (final entry in value.entries)
          entry.key.toString(): _secretKeys.contains(entry.key)
              ? '***'
              : redact(entry.value),
      };
    }
    if (value is List) {
      return value.map(redact).toList();
    }

    return value;
  }

  return redact(json)! as Map<String, dynamic>;
}