in lib/src/handle_access_token_response.dart [114:154]
void _handleErrorResponse(
http.Response response, Uri tokenEndpoint, GetParameters getParameters) {
// OAuth2 mandates a 400 or 401 response code for access token error
// responses. If it's not a 400 reponse, the server is either broken or
// off-spec.
if (response.statusCode != 400 && response.statusCode != 401) {
var reason = '';
var reasonPhrase = response.reasonPhrase;
if (reasonPhrase != null && reasonPhrase.isNotEmpty) {
reason = ' $reasonPhrase';
}
throw FormatException('OAuth request for "$tokenEndpoint" failed '
'with status ${response.statusCode}$reason.\n\n${response.body}');
}
var contentTypeString = response.headers['content-type'];
var contentType =
contentTypeString == null ? null : MediaType.parse(contentTypeString);
var parameters = getParameters(contentType, response.body);
if (!parameters.containsKey('error')) {
throw FormatException('did not contain required parameter "error"');
} else if (parameters['error'] is! String) {
throw FormatException('required parameter "error" was not a string, was '
'"${parameters["error"]}"');
}
for (var name in ['error_description', 'error_uri']) {
var value = parameters[name];
if (value != null && value is! String) {
throw FormatException('parameter "$name" was not a string, was "$value"');
}
}
var description = parameters['error_description'];
var uriString = parameters['error_uri'];
var uri = uriString == null ? null : Uri.parse(uriString);
throw AuthorizationException(parameters['error'], description, uri);
}