parseAuthHeader function
Parses a comma-separated name=value parameter list (e.g. an
Authorization or WWW-Authenticate header body, minus the scheme prefix).
Implementation
Map<String, String> parseAuthHeader(String value) {
var s = value.trim();
final lower = s.toLowerCase();
if (lower.startsWith('digest ')) {
s = s.substring(7).trim();
} else if (lower == 'digest') {
return {};
}
final out = <String, String>{};
var i = 0;
while (i < s.length) {
while (i < s.length && (s[i] == ' ' || s[i] == ',' || s[i] == '\t')) {
i++;
}
if (i >= s.length) break;
final eq = s.indexOf('=', i);
if (eq < 0) break;
final name = s.substring(i, eq).trim().toLowerCase();
var j = eq + 1;
String val;
if (j < s.length && s[j] == '"') {
final end = s.indexOf('"', j + 1);
if (end < 0) break;
val = s.substring(j + 1, end);
j = end + 1;
} else {
var end = j;
while (end < s.length && s[end] != ',') {
end++;
}
val = s.substring(j, end).trim();
j = end;
}
out[name] = val;
i = j;
}
return out;
}