Index: sdk/lib/_internal/pub_generated/lib/src/oauth2.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/oauth2.dart b/sdk/lib/_internal/pub_generated/lib/src/oauth2.dart |
similarity index 50% |
copy from sdk/lib/_internal/pub/lib/src/oauth2.dart |
copy to sdk/lib/_internal/pub_generated/lib/src/oauth2.dart |
index 8de110c00b55f60e55446e2ee1c54cc1e0289d67..ece7b2ff7b86afaead7c523127893199f65178be 100644 |
--- a/sdk/lib/_internal/pub/lib/src/oauth2.dart |
+++ b/sdk/lib/_internal/pub_generated/lib/src/oauth2.dart |
@@ -1,50 +1,22 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
library pub.oauth2; |
- |
import 'dart:async'; |
import 'dart:io'; |
- |
import 'package:oauth2/oauth2.dart'; |
import 'package:path/path.dart' as path; |
import 'package:shelf/shelf.dart' as shelf; |
import 'package:shelf/shelf_io.dart' as shelf_io; |
- |
import 'http.dart'; |
import 'io.dart'; |
import 'log.dart' as log; |
import 'system_cache.dart'; |
import 'utils.dart'; |
- |
export 'package:oauth2/oauth2.dart'; |
- |
-/// The pub client's OAuth2 identifier. |
-final _identifier = '818368855108-8grd2eg9tj9f38os6f1urbcvsq399u8n.apps.' |
- 'googleusercontent.com'; |
- |
-/// The pub client's OAuth2 secret. |
-/// |
-/// This isn't actually meant to be kept a secret. |
+final _identifier = |
+ '818368855108-8grd2eg9tj9f38os6f1urbcvsq399u8n.apps.' 'googleusercontent.com'; |
final _secret = 'SWeqj8seoJW0w7_CpEPFLX0K'; |
- |
-/// The URL to which the user will be directed to authorize the pub client to |
-/// get an OAuth2 access token. |
-/// |
-/// `access_type=offline` and `approval_prompt=force` ensures that we always get |
-/// a refresh token from the server. See the [Google OAuth2 documentation][]. |
-/// |
-/// [Google OAuth2 documentation]: https://developers.google.com/accounts/docs/OAuth2WebServer#offline |
final authorizationEndpoint = Uri.parse( |
'https://accounts.google.com/o/oauth2/auth?access_type=offline' |
- '&approval_prompt=force'); |
- |
-/// The URL from which the pub client will request an access token once it's |
-/// been authorized by the user. |
-/// |
-/// This can be controlled externally by setting the `_PUB_TEST_TOKEN_ENDPOINT` |
-/// environment variable. |
+ '&approval_prompt=force'); |
Uri get tokenEndpoint { |
var tokenEndpoint = Platform.environment['_PUB_TEST_TOKEN_ENDPOINT']; |
if (tokenEndpoint != null) { |
@@ -53,46 +25,26 @@ Uri get tokenEndpoint { |
return _tokenEndpoint; |
} |
} |
- |
final _tokenEndpoint = Uri.parse('https://accounts.google.com/o/oauth2/token'); |
- |
-/// The OAuth2 scopes that the pub client needs. |
-/// |
-/// Currently the client only needs the user's email so that the server can |
-/// verify their identity. |
final _scopes = ['https://www.googleapis.com/auth/userinfo.email']; |
- |
-/// An in-memory cache of the user's OAuth2 credentials. |
-/// |
-/// This should always be the same as the credentials file stored in the system |
-/// cache. |
Credentials _credentials; |
- |
-/// Delete the cached credentials, if they exist. |
void clearCredentials(SystemCache cache) { |
_credentials = null; |
var credentialsFile = _credentialsFile(cache); |
if (entryExists(credentialsFile)) deleteEntry(credentialsFile); |
} |
- |
-/// Asynchronously passes an OAuth2 [Client] to [fn], and closes the client when |
-/// the [Future] returned by [fn] completes. |
-/// |
-/// This takes care of loading and saving the client's credentials, as well as |
-/// prompting the user for their authorization. It will also re-authorize and |
-/// re-run [fn] if a recoverable authorization error is detected. |
Future withClient(SystemCache cache, Future fn(Client client)) { |
return _getClient(cache).then((client) { |
var completer = new Completer(); |
return fn(client).whenComplete(() { |
client.close(); |
- // Be sure to save the credentials even when an error happens. |
_saveCredentials(cache, client.credentials); |
}); |
}).catchError((error) { |
if (error is ExpirationException) { |
- log.error("Pub's authorization to upload packages has expired and " |
- "can't be automatically refreshed."); |
+ log.error( |
+ "Pub's authorization to upload packages has expired and " |
+ "can't be automatically refreshed."); |
return withClient(cache, fn); |
} else if (error is AuthorizationException) { |
var message = "OAuth2 authorization failed"; |
@@ -107,54 +59,37 @@ Future withClient(SystemCache cache, Future fn(Client client)) { |
} |
}); |
} |
- |
-/// Gets a new OAuth2 client. |
-/// |
-/// If saved credentials are available, those are used; otherwise, the user is |
-/// prompted to authorize the pub client. |
Future<Client> _getClient(SystemCache cache) { |
return new Future.sync(() { |
var credentials = _loadCredentials(cache); |
if (credentials == null) return _authorize(); |
- |
- var client = new Client(_identifier, _secret, credentials, |
- httpClient: httpClient); |
+ var client = |
+ new Client(_identifier, _secret, credentials, httpClient: httpClient); |
_saveCredentials(cache, client.credentials); |
return client; |
}); |
} |
- |
-/// Loads the user's OAuth2 credentials from the in-memory cache or the |
-/// filesystem if possible. |
-/// |
-/// If the credentials can't be loaded for any reason, the returned [Future] |
-/// completes to `null`. |
Credentials _loadCredentials(SystemCache cache) { |
log.fine('Loading OAuth2 credentials.'); |
- |
try { |
if (_credentials != null) return _credentials; |
- |
var path = _credentialsFile(cache); |
if (!fileExists(path)) return null; |
- |
var credentials = new Credentials.fromJson(readTextFile(path)); |
if (credentials.isExpired && !credentials.canRefresh) { |
- log.error("Pub's authorization to upload packages has expired and " |
- "can't be automatically refreshed."); |
- return null; // null means re-authorize. |
+ log.error( |
+ "Pub's authorization to upload packages has expired and " |
+ "can't be automatically refreshed."); |
+ return null; |
} |
- |
return credentials; |
} catch (e) { |
- log.error('Warning: could not load the saved OAuth2 credentials: $e\n' |
- 'Obtaining new credentials...'); |
- return null; // null means re-authorize. |
+ log.error( |
+ 'Warning: could not load the saved OAuth2 credentials: $e\n' |
+ 'Obtaining new credentials...'); |
+ return null; |
} |
} |
- |
-/// Save the user's OAuth2 credentials to the in-memory cache and the |
-/// filesystem. |
void _saveCredentials(SystemCache cache, Credentials credentials) { |
log.fine('Saving OAuth2 credentials.'); |
_credentials = credentials; |
@@ -162,14 +97,8 @@ void _saveCredentials(SystemCache cache, Credentials credentials) { |
ensureDir(path.dirname(credentialsPath)); |
writeTextFile(credentialsPath, credentials.toJson(), dontLogContents: true); |
} |
- |
-/// The path to the file in which the user's OAuth2 credentials are stored. |
String _credentialsFile(SystemCache cache) => |
path.join(cache.rootDir, 'credentials.json'); |
- |
-/// Gets the user to authorize pub as a client of pub.dartlang.org via oauth2. |
-/// |
-/// Returns a Future that completes to a fully-authorized [Client]. |
Future<Client> _authorize() { |
var grant = new AuthorizationCodeGrant( |
_identifier, |
@@ -177,40 +106,29 @@ Future<Client> _authorize() { |
authorizationEndpoint, |
tokenEndpoint, |
httpClient: httpClient); |
- |
- // Spin up a one-shot HTTP server to receive the authorization code from the |
- // Google OAuth2 server via redirect. This server will close itself as soon as |
- // the code is received. |
var completer = new Completer(); |
bindServer('localhost', 0).then((server) { |
shelf_io.serveRequests(server, (request) { |
if (request.url.path != "/") { |
return new shelf.Response.notFound('Invalid URI.'); |
} |
- |
log.message('Authorization received, processing...'); |
var queryString = request.url.query; |
if (queryString == null) queryString = ''; |
- |
- // Closing the server here is safe, since it will wait until the response |
- // is sent to actually shut down. |
server.close(); |
- chainToCompleter(grant.handleAuthorizationResponse(queryToMap(queryString)), |
+ chainToCompleter( |
+ grant.handleAuthorizationResponse(queryToMap(queryString)), |
completer); |
- |
return new shelf.Response.found('http://pub.dartlang.org/authorized'); |
}); |
- |
var authUrl = grant.getAuthorizationUrl( |
- Uri.parse('http://localhost:${server.port}'), scopes: _scopes); |
- |
+ Uri.parse('http://localhost:${server.port}'), |
+ scopes: _scopes); |
log.message( |
'Pub needs your authorization to upload packages on your behalf.\n' |
- 'In a web browser, go to $authUrl\n' |
- 'Then click "Allow access".\n\n' |
- 'Waiting for your authorization...'); |
+ 'In a web browser, go to $authUrl\n' 'Then click "Allow access".\n\n' |
+ 'Waiting for your authorization...'); |
}); |
- |
return completer.future.then((client) { |
log.message('Successfully authorized.\n'); |
return client; |