OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library oauth2_client; | 5 library oauth2_client; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:uri'; | 8 import 'dart:uri'; |
9 | 9 |
10 import 'package:http/http.dart' as http; | 10 import 'package:http/http.dart' as http; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 this.secret, | 76 this.secret, |
77 this._credentials, | 77 this._credentials, |
78 {http.Client httpClient}) | 78 {http.Client httpClient}) |
79 : _httpClient = httpClient == null ? new http.Client() : httpClient; | 79 : _httpClient = httpClient == null ? new http.Client() : httpClient; |
80 | 80 |
81 /// Sends an HTTP request with OAuth2 authorization credentials attached. This | 81 /// Sends an HTTP request with OAuth2 authorization credentials attached. This |
82 /// will also automatically refresh this client's [Credentials] before sending | 82 /// will also automatically refresh this client's [Credentials] before sending |
83 /// the request if necessary. | 83 /// the request if necessary. |
84 Future<http.StreamedResponse> send(http.BaseRequest request) { | 84 Future<http.StreamedResponse> send(http.BaseRequest request) { |
85 return async.then((_) { | 85 return async.then((_) { |
86 if (!credentials.isExpired) return new Future.immediate(null); | 86 if (!credentials.isExpired) return new Future.value(); |
87 if (!credentials.canRefresh) throw new ExpirationException(credentials); | 87 if (!credentials.canRefresh) throw new ExpirationException(credentials); |
88 return refreshCredentials(); | 88 return refreshCredentials(); |
89 }).then((_) { | 89 }).then((_) { |
90 request.headers['authorization'] = "Bearer ${credentials.accessToken}"; | 90 request.headers['authorization'] = "Bearer ${credentials.accessToken}"; |
91 return _httpClient.send(request); | 91 return _httpClient.send(request); |
92 }).then((response) { | 92 }).then((response) { |
93 if (response.statusCode != 401 || | 93 if (response.statusCode != 401 || |
94 !response.headers.containsKey('www-authenticate')) { | 94 !response.headers.containsKey('www-authenticate')) { |
95 return response; | 95 return response; |
96 } | 96 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 return this; | 137 return this; |
138 }); | 138 }); |
139 } | 139 } |
140 | 140 |
141 /// Closes this client and its underlying HTTP client. | 141 /// Closes this client and its underlying HTTP client. |
142 void close() { | 142 void close() { |
143 if (_httpClient != null) _httpClient.close(); | 143 if (_httpClient != null) _httpClient.close(); |
144 _httpClient = null; | 144 _httpClient = null; |
145 } | 145 } |
146 } | 146 } |
OLD | NEW |