Index: README.md |
diff --git a/README.md b/README.md |
index 52b724c9d5bf6125bf4bf2bf69a1f2414392dbd4..23be5ff2047324bf4312934f7b6612152f3996b5 100644 |
--- a/README.md |
+++ b/README.md |
@@ -48,53 +48,60 @@ final secret = "my client secret"; |
// query parameters. |
final redirectUrl = Uri.parse("http://my-site.com/oauth2-redirect"); |
-var credentialsFile = new File("~/.myapp/credentials.json"); |
-return credentialsFile.exists().then((exists) { |
- // If the OAuth2 credentials have already been saved from a previous |
- // run, we just want to reload them. |
+/// A file in which the users credentials are stored persistently. If the server |
+/// issues a refresh token allowing the client to refresh outdated credentials, |
+/// these may be valid indefinitely, meaning the user never has to |
+/// re-authenticate. |
+final credentialsFile = new File("~/.myapp/credentials.json"); |
+ |
+/// Either load an OAuth2 client from saved credentials or authenticate a new |
+/// one. |
+Future<oauth2.Client> getClient() async { |
+ var exists = await credentialsFile.exists(); |
+ |
+ // If the OAuth2 credentials have already been saved from a previous run, we |
+ // just want to reload them. |
if (exists) { |
- return credentialsFile.readAsString().then((json) { |
- var credentials = new oauth2.Credentials.fromJson(json); |
- return new oauth2.Client(identifier, secret, credentials); |
- }); |
+ var credentials = new oauth2.Credentials.fromJson( |
+ await credentialsFile.readAsString()); |
+ return new oauth2.Client(identifier, secret, credentials); |
} |
- // If we don't have OAuth2 credentials yet, we need to get the |
- // resource owner to authorize us. We're assuming here that we're a |
- // command-line application. |
+ // If we don't have OAuth2 credentials yet, we need to get the resource owner |
+ // to authorize us. We're assuming here that we're a command-line application. |
var grant = new oauth2.AuthorizationCodeGrant( |
identifier, secret, authorizationEndpoint, tokenEndpoint); |
- // Redirect the resource owner to the authorization URL. This will be |
- // a URL on the authorization server (authorizationEndpoint with some |
- // additional query parameters). Once the resource owner has |
- // authorized, they'll be redirected to `redirectUrl` with an |
- // authorization code. |
+ // Redirect the resource owner to the authorization URL. This will be a URL on |
+ // the authorization server (authorizationEndpoint with some additional query |
+ // parameters). Once the resource owner has authorized, they'll be redirected |
+ // to `redirectUrl` with an authorization code. |
// |
// `redirect` is an imaginary function that redirects the resource |
// owner's browser. |
- return redirect(grant.getAuthorizationUrl(redirectUrl)).then((_) { |
- // Another imaginary function that listens for a request to |
- // `redirectUrl`. |
- return listen(redirectUrl); |
- }).then((request) { |
- // Once the user is redirected to `redirectUrl`, pass the query |
- // parameters to the AuthorizationCodeGrant. It will validate them |
- // and extract the authorization code to create a new Client. |
- return grant.handleAuthorizationResponse(request.uri.queryParameters); |
- }) |
-}).then((client) { |
- // Once you have a Client, you can use it just like any other HTTP |
- // client. |
- return client.read("http://example.com/protected-resources.txt") |
- .then((result) { |
- // Once we're done with the client, save the credentials file. This |
- // ensures that if the credentials were automatically refreshed |
- // while using the client, the new credentials are available for the |
- // next run of the program. |
- return credentialsFile.open(FileMode.WRITE).then((file) { |
- return file.writeString(client.credentials.toJson()); |
- }).then((file) => file.close()).then((_) => result); |
- }); |
-}).then(print); |
+ await redirect(grant.getAuthorizationUrl(redirectUrl)); |
+ |
+ // Another imaginary function that listens for a request to `redirectUrl`. |
+ var request = await listen(redirectUrl); |
+ |
+ // Once the user is redirected to `redirectUrl`, pass the query parameters to |
+ // the AuthorizationCodeGrant. It will validate them and extract the |
+ // authorization code to create a new Client. |
+ return await grant.handleAuthorizationResponse(request.uri.queryParameters); |
+} |
+ |
+main() async { |
+ var client = await loadClient(); |
+ |
+ // Once you have a Client, you can use it just like any other HTTP client. |
+ var result = client.read("http://example.com/protected-resources.txt"); |
+ |
+ // Once we're done with the client, save the credentials file. This ensures |
+ // that if the credentials were automatically refreshed while using the |
+ // client, the new credentials are available for the next run of the |
+ // program. |
+ await credentialsFile.writeAsString(client.credentials.toJson()); |
+ |
+ print(result); |
+} |
``` |