parseAuthHeader function

Map<String, String> parseAuthHeader(
  1. String value
)

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