redactUriForLog function
Redacts sensitive URI components before writing logs.
Implementation
String redactUriForLog(String uri) {
if (uri.trim().isEmpty) {
return '<empty>';
}
final String sanitized = uri.replaceAll('\r', r'\r').replaceAll('\n', r'\n');
if (!sanitized.contains('://')) {
return '<scheme-missing>';
}
final Uri parsed;
try {
parsed = Uri.parse(sanitized);
} on FormatException {
return '<unparseable>';
}
if (parsed.scheme.isEmpty) {
return '<scheme-missing>';
}
final String authority = parsed.hasAuthority
? (parsed.userInfo.isEmpty ? parsed.authority : parsed.host)
: '';
final String query = parsed.queryParametersAll.isEmpty
? ''
: parsed.queryParametersAll.keys
.map((String key) => '$key=<redacted>')
.join('&');
return Uri(
scheme: parsed.scheme,
userInfo: '',
host: authority == parsed.host ? parsed.host : authority,
port: parsed.hasPort ? parsed.port : 0,
path: parsed.path,
query: query.isEmpty ? null : query,
).replace(port: parsed.hasPort ? parsed.port : null).toString();
}