Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Unified Diff: pkg/oauth2/lib/src/utils.dart

Issue 11316325: Make the oauth2 lib handle OAuth2 401 errors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes. Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/oauth2/lib/src/client.dart ('k') | pkg/oauth2/test/client_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/oauth2/lib/src/utils.dart
diff --git a/pkg/oauth2/lib/src/utils.dart b/pkg/oauth2/lib/src/utils.dart
index 583a5bc4438ecea546e41cb8b833b235448676de..59428b3c6fa906927c3f067df2f736c619467b9a 100644
--- a/pkg/oauth2/lib/src/utils.dart
+++ b/pkg/oauth2/lib/src/utils.dart
@@ -65,6 +65,52 @@ List<String> split1(String toSplit, String pattern) {
toSplit.substring(index + pattern.length)];
}
+/// A WWW-Authenticate header value, parsed as per [RFC 2617][].
+///
+/// [RFC 2617]: http://tools.ietf.org/html/rfc2617
+class AuthenticateHeader {
+ final String scheme;
+ final Map<String, String> parameters;
+
+ AuthenticateHeader(this.scheme, this.parameters);
+
+ /// Parses a header string. Throws a [FormatException] if the header is
+ /// invalid.
+ factory AuthenticateHeader.parse(String header) {
+ var split = split1(header, ' ');
+ if (split.length == 0) {
+ throw new FormatException('Invalid WWW-Authenticate header: "$header"');
+ } else if (split.length == 1 || split[1].trim().isEmpty) {
+ return new AuthenticateHeader(split[0].toLowerCase(), {});
+ }
+ var scheme = split[0].toLowerCase();
+ var paramString = split[1];
+
+ // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html.
+ var tokenChar = r'[^\0-\x1F()<>@,;:\\"/\[\]?={} \t\x7F]';
+ var quotedStringChar = r'(?:[^\0-\x1F\x7F"]|\\.)';
+ var regexp = new RegExp('^ *($tokenChar+)="($quotedStringChar*)" *(, *)?');
+
+ var parameters = {};
+ var match;
+ do {
+ match = regexp.firstMatch(paramString);
+ if (match == null) {
+ throw new FormatException('Invalid WWW-Authenticate header: "$header"');
+ }
+
+ paramString = paramString.substring(match.end);
+ parameters[match.group(1).toLowerCase()] = match.group(2);
+ } while (match.group(3) != null);
+
+ if (!paramString.trim().isEmpty) {
+ throw new FormatException('Invalid WWW-Authenticate header: "$header"');
+ }
+
+ return new AuthenticateHeader(scheme, parameters);
+ }
+}
+
/// Returns a [Future] that asynchronously completes to `null`.
Future get async {
var completer = new Completer();
« no previous file with comments | « pkg/oauth2/lib/src/client.dart ('k') | pkg/oauth2/test/client_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698