| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef GOOGLE_APIS_GAIA_GAIA_OAUTH_CLIENT_H_ | 5 #ifndef GOOGLE_APIS_GAIA_GAIA_OAUTH_CLIENT_H_ |
| 6 #define GOOGLE_APIS_GAIA_GAIA_OAUTH_CLIENT_H_ | 6 #define GOOGLE_APIS_GAIA_GAIA_OAUTH_CLIENT_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> |
| 9 | 10 |
| 10 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/message_loop_proxy.h" | 13 #include "base/message_loop_proxy.h" |
| 14 #include "base/values.h" |
| 12 | 15 |
| 13 namespace net { | 16 namespace net { |
| 14 class URLRequestContextGetter; | 17 class URLRequestContextGetter; |
| 15 } | 18 } |
| 16 | 19 |
| 17 // A helper class to get and refresh OAuth tokens given an authorization code. | 20 // A helper class to get and refresh OAuth tokens given an authorization code. |
| 21 // Also exposes utility methods for fetching user email and token owner. |
| 22 // Supports one request at a time; for parallel requests, create multiple |
| 23 // instances. |
| 18 namespace gaia { | 24 namespace gaia { |
| 19 | 25 |
| 20 struct OAuthClientInfo { | 26 struct OAuthClientInfo { |
| 21 std::string client_id; | 27 std::string client_id; |
| 22 std::string client_secret; | 28 std::string client_secret; |
| 23 std::string redirect_uri; | 29 std::string redirect_uri; |
| 24 }; | 30 }; |
| 25 | 31 |
| 26 class GaiaOAuthClient { | 32 class GaiaOAuthClient { |
| 27 public: | 33 public: |
| 28 class Delegate { | 34 class Delegate { |
| 29 public: | 35 public: |
| 30 // Invoked on a successful response to the GetTokensFromAuthCode request. | 36 // Invoked on a successful response to the GetTokensFromAuthCode request. |
| 31 virtual void OnGetTokensResponse(const std::string& refresh_token, | 37 virtual void OnGetTokensResponse(const std::string& refresh_token, |
| 32 const std::string& access_token, | 38 const std::string& access_token, |
| 33 int expires_in_seconds) = 0; | 39 int expires_in_seconds) {}; |
| 34 // Invoked on a successful response to the RefreshToken request. | 40 // Invoked on a successful response to the RefreshToken request. |
| 35 virtual void OnRefreshTokenResponse(const std::string& access_token, | 41 virtual void OnRefreshTokenResponse(const std::string& access_token, |
| 36 int expires_in_seconds) = 0; | 42 int expires_in_seconds) {}; |
| 37 // Invoked on a successful response to the GetUserInfo request. | 43 // Invoked on a successful response to the GetUserInfo request. |
| 38 virtual void OnGetUserInfoResponse(const std::string& user_email) {}; | 44 virtual void OnGetUserInfoResponse(const std::string& user_email) {}; |
| 45 // Invoked on a successful response to the GetTokenInfo request. |
| 46 virtual void OnGetTokenInfoResponse( |
| 47 scoped_ptr<DictionaryValue> token_info) {}; |
| 39 // Invoked when there is an OAuth error with one of the requests. | 48 // Invoked when there is an OAuth error with one of the requests. |
| 40 virtual void OnOAuthError() = 0; | 49 virtual void OnOAuthError() = 0; |
| 41 // Invoked when there is a network error or upon receiving an invalid | 50 // Invoked when there is a network error or upon receiving an invalid |
| 42 // response. This is invoked when the maximum number of retries have been | 51 // response. This is invoked when the maximum number of retries have been |
| 43 // exhausted. If max_retries is -1, this is never invoked. | 52 // exhausted. If max_retries is -1, this is never invoked. |
| 44 virtual void OnNetworkError(int response_code) = 0; | 53 virtual void OnNetworkError(int response_code) = 0; |
| 45 | 54 |
| 46 protected: | 55 protected: |
| 47 virtual ~Delegate() {} | 56 virtual ~Delegate() {} |
| 48 }; | 57 }; |
| 58 |
| 49 GaiaOAuthClient(const std::string& gaia_url, | 59 GaiaOAuthClient(const std::string& gaia_url, |
| 50 net::URLRequestContextGetter* context_getter); | 60 net::URLRequestContextGetter* context_getter); |
| 51 ~GaiaOAuthClient(); | 61 ~GaiaOAuthClient(); |
| 52 | 62 |
| 53 // In the below methods, |max_retries| specifies the maximum number of times | 63 // In the below methods, |max_retries| specifies the maximum number of times |
| 54 // we should retry on a network error in invalid response. This does not | 64 // we should retry on a network error in invalid response. This does not |
| 55 // apply in the case of an OAuth error (i.e. there was something wrong with | 65 // apply in the case of an OAuth error (i.e. there was something wrong with |
| 56 // the input arguments). Setting |max_retries| to -1 implies infinite retries. | 66 // the input arguments). Setting |max_retries| to -1 implies infinite retries. |
| 57 void GetTokensFromAuthCode(const OAuthClientInfo& oauth_client_info, | 67 void GetTokensFromAuthCode(const OAuthClientInfo& oauth_client_info, |
| 58 const std::string& auth_code, | 68 const std::string& auth_code, |
| 59 int max_retries, | 69 int max_retries, |
| 60 Delegate* delegate); | 70 Delegate* delegate); |
| 61 void RefreshToken(const OAuthClientInfo& oauth_client_info, | 71 void RefreshToken(const OAuthClientInfo& oauth_client_info, |
| 62 const std::string& refresh_token, | 72 const std::string& refresh_token, |
| 73 const std::vector<std::string>& scopes, |
| 63 int max_retries, | 74 int max_retries, |
| 64 Delegate* delegate); | 75 Delegate* delegate); |
| 65 void GetUserInfo(const std::string& oauth_access_token, | 76 void GetUserInfo(const std::string& oauth_access_token, |
| 66 int max_retries, | 77 int max_retries, |
| 67 Delegate* delegate); | 78 Delegate* delegate); |
| 79 void GetTokenInfo(const std::string& oauth_access_token, |
| 80 int max_retries, |
| 81 Delegate* delegate); |
| 68 | 82 |
| 69 private: | 83 private: |
| 70 // The guts of the implementation live in this class. | 84 // The guts of the implementation live in this class. |
| 71 class Core; | 85 class Core; |
| 72 scoped_refptr<Core> core_; | 86 scoped_refptr<Core> core_; |
| 73 DISALLOW_COPY_AND_ASSIGN(GaiaOAuthClient); | 87 DISALLOW_COPY_AND_ASSIGN(GaiaOAuthClient); |
| 74 }; | 88 }; |
| 75 } | 89 } |
| 76 | 90 |
| 77 #endif // GOOGLE_APIS_GAIA_GAIA_OAUTH_CLIENT_H_ | 91 #endif // GOOGLE_APIS_GAIA_GAIA_OAUTH_CLIENT_H_ |
| OLD | NEW |