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 authorization_code_grant; | 5 library authorization_code_grant; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:uri'; | 8 import 'dart:uri'; |
9 | 9 |
10 // TODO(nweiz): This should be a "package:" import. See issue 6745. | 10 // TODO(nweiz): This should be a "package:" import. See issue 6745. |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 } | 222 } |
223 _state = _FINISHED_STATE; | 223 _state = _FINISHED_STATE; |
224 | 224 |
225 return _handleAuthorizationCode(authorizationCode); | 225 return _handleAuthorizationCode(authorizationCode); |
226 }); | 226 }); |
227 } | 227 } |
228 | 228 |
229 /// This works just like [handleAuthorizationCode], except it doesn't validate | 229 /// This works just like [handleAuthorizationCode], except it doesn't validate |
230 /// the state beforehand. | 230 /// the state beforehand. |
231 Future<Client> _handleAuthorizationCode(String authorizationCode) { | 231 Future<Client> _handleAuthorizationCode(String authorizationCode) { |
232 var startTime = new Date.now(); | 232 var startTime = new DateTime.now(); |
233 return _httpClient.post(this.tokenEndpoint, fields: { | 233 return _httpClient.post(this.tokenEndpoint, fields: { |
234 "grant_type": "authorization_code", | 234 "grant_type": "authorization_code", |
235 "code": authorizationCode, | 235 "code": authorizationCode, |
236 "redirect_uri": this._redirectEndpoint.toString(), | 236 "redirect_uri": this._redirectEndpoint.toString(), |
237 // TODO(nweiz): the spec recommends that HTTP basic auth be used in | 237 // TODO(nweiz): the spec recommends that HTTP basic auth be used in |
238 // preference to form parameters, but Google doesn't support that. Should | 238 // preference to form parameters, but Google doesn't support that. Should |
239 // it be configurable? | 239 // it be configurable? |
240 "client_id": this.identifier, | 240 "client_id": this.identifier, |
241 "client_secret": this.secret | 241 "client_secret": this.secret |
242 }).then((response) { | 242 }).then((response) { |
243 var credentials = handleAccessTokenResponse( | 243 var credentials = handleAccessTokenResponse( |
244 response, tokenEndpoint, startTime, _scopes); | 244 response, tokenEndpoint, startTime, _scopes); |
245 return new Client( | 245 return new Client( |
246 this.identifier, this.secret, credentials, httpClient: _httpClient); | 246 this.identifier, this.secret, credentials, httpClient: _httpClient); |
247 }); | 247 }); |
248 } | 248 } |
249 | 249 |
250 /// Closes the grant and frees its resources. | 250 /// Closes the grant and frees its resources. |
251 /// | 251 /// |
252 /// This will close the underlying HTTP client, which is shared by the | 252 /// This will close the underlying HTTP client, which is shared by the |
253 /// [Client] created by this grant, so it's not safe to close the grant and | 253 /// [Client] created by this grant, so it's not safe to close the grant and |
254 /// continue using the client. | 254 /// continue using the client. |
255 void close() { | 255 void close() { |
256 if (_httpClient != null) _httpClient.close(); | 256 if (_httpClient != null) _httpClient.close(); |
257 _httpClient = null; | 257 _httpClient = null; |
258 } | 258 } |
259 } | 259 } |
OLD | NEW |