| Index: lib/src/client.dart
|
| diff --git a/lib/src/client.dart b/lib/src/client.dart
|
| index d473be19aeda0b8f4120ecf269e5ac0b9141bd28..60495a0ab540805036b28de0fd5a7a6d01bc7647 100644
|
| --- a/lib/src/client.dart
|
| +++ b/lib/src/client.dart
|
| @@ -80,37 +80,34 @@ class Client extends http.BaseClient {
|
| /// Sends an HTTP request with OAuth2 authorization credentials attached. This
|
| /// will also automatically refresh this client's [Credentials] before sending
|
| /// the request if necessary.
|
| - Future<http.StreamedResponse> send(http.BaseRequest request) {
|
| - return async.then((_) {
|
| - if (!credentials.isExpired) return new Future.value();
|
| + Future<http.StreamedResponse> send(http.BaseRequest request) async {
|
| + if (credentials.isExpired) {
|
| if (!credentials.canRefresh) throw new ExpirationException(credentials);
|
| - return refreshCredentials();
|
| - }).then((_) {
|
| - request.headers['authorization'] = "Bearer ${credentials.accessToken}";
|
| - return _httpClient.send(request);
|
| - }).then((response) {
|
| - if (response.statusCode != 401 ||
|
| - !response.headers.containsKey('www-authenticate')) {
|
| - return response;
|
| - }
|
| -
|
| - var authenticate;
|
| - try {
|
| - authenticate = new AuthenticateHeader.parse(
|
| - response.headers['www-authenticate']);
|
| - } on FormatException catch (e) {
|
| - return response;
|
| - }
|
| -
|
| - if (authenticate.scheme != 'bearer') return response;
|
| -
|
| - var params = authenticate.parameters;
|
| - if (!params.containsKey('error')) return response;
|
| -
|
| - throw new AuthorizationException(
|
| - params['error'], params['error_description'],
|
| - params['error_uri'] == null ? null : Uri.parse(params['error_uri']));
|
| - });
|
| + await refreshCredentials();
|
| + }
|
| +
|
| + request.headers['authorization'] = "Bearer ${credentials.accessToken}";
|
| + var response = await _httpClient.send(request);
|
| +
|
| + if (response.statusCode != 401) return response;
|
| + if (!response.headers.containsKey('www-authenticate')) return response;
|
| +
|
| + var authenticate;
|
| + try {
|
| + authenticate = new AuthenticateHeader.parse(
|
| + response.headers['www-authenticate']);
|
| + } on FormatException catch (e) {
|
| + return response;
|
| + }
|
| +
|
| + if (authenticate.scheme != 'bearer') return response;
|
| +
|
| + var params = authenticate.parameters;
|
| + if (!params.containsKey('error')) return response;
|
| +
|
| + throw new AuthorizationException(
|
| + params['error'], params['error_description'],
|
| + params['error_uri'] == null ? null : Uri.parse(params['error_uri']));
|
| }
|
|
|
| /// Explicitly refreshes this client's credentials. Returns this client.
|
| @@ -122,20 +119,18 @@ class Client extends http.BaseClient {
|
| /// You may request different scopes than the default by passing in
|
| /// [newScopes]. These must be a subset of the scopes in the
|
| /// [Credentials.scopes] field of [Client.credentials].
|
| - Future<Client> refreshCredentials([List<String> newScopes]) {
|
| - return async.then((_) {
|
| - if (!credentials.canRefresh) {
|
| - var prefix = "OAuth credentials";
|
| - if (credentials.isExpired) prefix = "$prefix have expired and";
|
| - throw new StateError("$prefix can't be refreshed.");
|
| - }
|
| -
|
| - return credentials.refresh(identifier, secret,
|
| - newScopes: newScopes, httpClient: _httpClient);
|
| - }).then((credentials) {
|
| - _credentials = credentials;
|
| - return this;
|
| - });
|
| + Future<Client> refreshCredentials([List<String> newScopes]) async {
|
| + if (!credentials.canRefresh) {
|
| + var prefix = "OAuth credentials";
|
| + if (credentials.isExpired) prefix = "$prefix have expired and";
|
| + throw new StateError("$prefix can't be refreshed.");
|
| + }
|
| +
|
| + _credentials = await credentials.refresh(
|
| + identifier, secret,
|
| + newScopes: newScopes, httpClient: _httpClient);
|
| +
|
| + return this;
|
| }
|
|
|
| /// Closes this client and its underlying HTTP client.
|
|
|