Index: chrome/common/net/gaia/gaia_auth_fetcher.h |
diff --git a/chrome/common/net/gaia/gaia_auth_fetcher.h b/chrome/common/net/gaia/gaia_auth_fetcher.h |
deleted file mode 100644 |
index 718d8286b7af53c31d2b6889c492c894b437b175..0000000000000000000000000000000000000000 |
--- a/chrome/common/net/gaia/gaia_auth_fetcher.h |
+++ /dev/null |
@@ -1,406 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_ |
-#define CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_ |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/gtest_prod_util.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "chrome/common/net/gaia/gaia_auth_consumer.h" |
-#include "chrome/common/net/gaia/google_service_auth_error.h" |
-#include "googleurl/src/gurl.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
- |
-// Authenticate a user against the Google Accounts ClientLogin API |
-// with various capabilities and return results to a GaiaAuthConsumer. |
-// |
-// In the future, we will also issue auth tokens from this class. |
-// This class should be used on a single thread, but it can be whichever thread |
-// that you like. |
-// |
-// This class can handle one request at a time on any thread. To parallelize |
-// requests, create multiple GaiaAuthFetcher's. |
- |
-class GaiaAuthFetcherTest; |
- |
-namespace net { |
-class URLFetcher; |
-class URLRequestContextGetter; |
-class URLRequestStatus; |
-} |
- |
-class GaiaAuthFetcher : public net::URLFetcherDelegate { |
- public: |
- enum HostedAccountsSetting { |
- HostedAccountsAllowed, |
- HostedAccountsNotAllowed |
- }; |
- |
- // Magic string indicating that, while a second factor is still |
- // needed to complete authentication, the user provided the right password. |
- static const char kSecondFactor[]; |
- |
- // This will later be hidden behind an auth service which caches |
- // tokens. |
- GaiaAuthFetcher(GaiaAuthConsumer* consumer, |
- const std::string& source, |
- net::URLRequestContextGetter* getter); |
- virtual ~GaiaAuthFetcher(); |
- |
- // Start a request to obtain the SID and LSID cookies for the the account |
- // identified by |username| and |password|. If |service| is not null or |
- // empty, then also obtains a service token for specified service. |
- // |
- // If this is a second call because of captcha challenge, then the |
- // |login_token| and |login_captcha| arugment should correspond to the |
- // solution of the challenge. |
- // |
- // Either OnClientLoginSuccess or OnClientLoginFailure will be |
- // called on the consumer on the original thread. |
- void StartClientLogin(const std::string& username, |
- const std::string& password, |
- const char* const service, |
- const std::string& login_token, |
- const std::string& login_captcha, |
- HostedAccountsSetting allow_hosted_accounts); |
- |
- // Start a request to obtain service token for the the account identified by |
- // |sid| and |lsid| and the service|service|. |
- // |
- // Either OnIssueAuthTokenSuccess or OnIssueAuthTokenFailure will be |
- // called on the consumer on the original thread. |
- void StartIssueAuthToken(const std::string& sid, |
- const std::string& lsid, |
- const char* const service); |
- |
- // Start a request to exchange an "lso" service token given by |auth_token| |
- // for an OAuthLogin-scoped oauth2 token. |
- // |
- // Either OnClientOAuthSuccess or OnClientOAuthFailure will be |
- // called on the consumer on the original thread. |
- void StartLsoForOAuthLoginTokenExchange(const std::string& auth_token); |
- |
- // Start a request to exchange the cookies of a signed-in user session |
- // for an OAuthLogin-scoped oauth2 token. In the case of a session with |
- // multiple accounts signed in, |session_index| indicate the which of accounts |
- // within the session. |
- // |
- // Either OnClientOAuthSuccess or OnClientOAuthFailure will be |
- // called on the consumer on the original thread. |
- void StartCookieForOAuthLoginTokenExchange(const std::string& session_index); |
- |
- // Start a request to get user info for the account identified by |lsid|. |
- // |
- // Either OnGetUserInfoSuccess or OnGetUserInfoFailure will be |
- // called on the consumer on the original thread. |
- void StartGetUserInfo(const std::string& lsid); |
- |
- // Start a MergeSession request to pre-login the user with the given |
- // credentials. |
- // |
- // Start a MergeSession request to fill the browsing cookie jar with |
- // credentials represented by the account whose uber-auth token is |
- // |uber_token|. This method will modify the cookies of the current profile. |
- // |
- // Either OnMergeSessionSuccess or OnMergeSessionFailure will be |
- // called on the consumer on the original thread. |
- void StartMergeSession(const std::string& uber_token); |
- |
- // Start a request to exchange an OAuthLogin-scoped oauth2 access token for an |
- // uber-auth token. The returned token can be used with the method |
- // StartMergeSession(). |
- // |
- // Either OnUberAuthTokenSuccess or OnUberAuthTokenFailure will be |
- // called on the consumer on the original thread. |
- void StartTokenFetchForUberAuthExchange(const std::string& access_token); |
- |
- // Start a request to obtain an OAuth2 token for the account identified by |
- // |username| and |password|. |scopes| is a list of oauth scopes that |
- // indicate the access permerssions to assign to the returned token. |
- // |persistent_id| is an optional client identifier used to identify this |
- // particular chrome instances, which may reduce the chance of a challenge. |
- // |locale| will be used to format messages to be presented to the user in |
- // challenges, if needed. |
- // |
- // If the request cannot complete due to a challenge, the |
- // GoogleServiceAuthError will indicate the type of challenge required: |
- // either CAPTCHA_REQUIRED or TWO_FACTOR. |
- // |
- // Either OnClientOAuthSuccess or OnClientOAuthFailure will be |
- // called on the consumer on the original thread. |
- void StartClientOAuth(const std::string& username, |
- const std::string& password, |
- const std::vector<std::string>& scopes, |
- const std::string& persistent_id, |
- const std::string& locale); |
- |
- // Start a challenge response to obtain an OAuth2 token. This method is |
- // called after a challenge response is issued from a previous call to |
- // StartClientOAuth(). The |type| and |token| arguments come from the |
- // error response to StartClientOAuth(), while the |solution| argument |
- // represents the answer from the user for the partocular challenge. |
- // |
- // Either OnClientOAuthSuccess or OnClientOAuthFailure will be |
- // called on the consumer on the original thread. |
- void StartClientOAuthChallengeResponse(GoogleServiceAuthError::State type, |
- const std::string& token, |
- const std::string& solution); |
- |
- // Start a request to exchange an OAuthLogin-scoped oauth2 access token for a |
- // ClientLogin-style service tokens. The response to this request is the |
- // same as the response to a ClientLogin request, except that captcha |
- // challenges are never issued. |
- // |
- // Either OnClientLoginSuccess or OnClientLoginFailure will be |
- // called on the consumer on the original thread. |
- void StartOAuthLogin(const std::string& access_token, |
- const std::string& service); |
- |
- // Implementation of net::URLFetcherDelegate |
- virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; |
- |
- // StartClientLogin been called && results not back yet? |
- bool HasPendingFetch(); |
- |
- // Stop any URL fetches in progress. |
- void CancelRequest(); |
- |
- // From a URLFetcher result, generate an appropriate error. |
- // From the API documentation, both IssueAuthToken and ClientLogin have |
- // the same error returns. |
- static GoogleServiceAuthError GenerateOAuthLoginError( |
- const std::string& data, |
- const net::URLRequestStatus& status); |
- |
- private: |
- // ClientLogin body constants that don't change |
- static const char kCookiePersistence[]; |
- static const char kAccountTypeHostedOrGoogle[]; |
- static const char kAccountTypeGoogle[]; |
- |
- // The format of the POST body for ClientLogin. |
- static const char kClientLoginFormat[]; |
- // The format of said POST body when CAPTCHA token & answer are specified. |
- static const char kClientLoginCaptchaFormat[]; |
- // The format of the POST body for IssueAuthToken. |
- static const char kIssueAuthTokenFormat[]; |
- // The format of the POST body to get OAuth2 auth code from auth token. |
- static const char kClientLoginToOAuth2BodyFormat[]; |
- // The format of the POST body to get OAuth2 token pair from auth code. |
- static const char kOAuth2CodeToTokenPairBodyFormat[]; |
- // The format of the POST body for GetUserInfo. |
- static const char kGetUserInfoFormat[]; |
- // The format of the POST body for MergeSession. |
- static const char kMergeSessionFormat[]; |
- // The format of the URL for UberAuthToken. |
- static const char kUberAuthTokenURLFormat[]; |
- // The format of the body for OAuthLogin. |
- static const char kOAuthLoginFormat[]; |
- |
- // Constants for parsing ClientLogin errors. |
- static const char kAccountDeletedError[]; |
- static const char kAccountDeletedErrorCode[]; |
- static const char kAccountDisabledError[]; |
- static const char kAccountDisabledErrorCode[]; |
- static const char kBadAuthenticationError[]; |
- static const char kBadAuthenticationErrorCode[]; |
- static const char kCaptchaError[]; |
- static const char kCaptchaErrorCode[]; |
- static const char kServiceUnavailableError[]; |
- static const char kServiceUnavailableErrorCode[]; |
- static const char kErrorParam[]; |
- static const char kErrorUrlParam[]; |
- static const char kCaptchaUrlParam[]; |
- static const char kCaptchaTokenParam[]; |
- |
- // Constants for parsing ClientOAuth errors. |
- static const char kNeedsAdditional[]; |
- static const char kCaptcha[]; |
- static const char kTwoFactor[]; |
- |
- // Constants for request/response for OAuth2 requests. |
- static const char kAuthHeaderFormat[]; |
- static const char kOAuthHeaderFormat[]; |
- static const char kClientLoginToOAuth2CookiePartSecure[]; |
- static const char kClientLoginToOAuth2CookiePartHttpOnly[]; |
- static const char kClientLoginToOAuth2CookiePartCodePrefix[]; |
- static const int kClientLoginToOAuth2CookiePartCodePrefixLength; |
- |
- // Process the results of a ClientLogin fetch. |
- void OnClientLoginFetched(const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- void OnIssueAuthTokenFetched(const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- void OnClientLoginToOAuth2Fetched(const std::string& data, |
- const net::ResponseCookies& cookies, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- void OnOAuth2TokenPairFetched(const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- void OnGetUserInfoFetched(const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- void OnMergeSessionFetched(const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- void OnUberAuthTokenFetch(const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- void OnClientOAuthFetched(const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- void OnOAuthLoginFetched(const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code); |
- |
- // Tokenize the results of a ClientLogin fetch. |
- static void ParseClientLoginResponse(const std::string& data, |
- std::string* sid, |
- std::string* lsid, |
- std::string* token); |
- |
- static void ParseClientLoginFailure(const std::string& data, |
- std::string* error, |
- std::string* error_url, |
- std::string* captcha_url, |
- std::string* captcha_token); |
- |
- // Parse ClientLogin to OAuth2 response. |
- static bool ParseClientLoginToOAuth2Response( |
- const net::ResponseCookies& cookies, |
- std::string* auth_code); |
- |
- static bool ParseClientLoginToOAuth2Cookie(const std::string& cookie, |
- std::string* auth_code); |
- |
- static GoogleServiceAuthError GenerateClientOAuthError( |
- const std::string& data, |
- const net::URLRequestStatus& status); |
- |
- // Is this a special case Gaia error for TwoFactor auth? |
- static bool IsSecondFactorSuccess(const std::string& alleged_error); |
- |
- // Given parameters, create a ClientLogin request body. |
- static std::string MakeClientLoginBody( |
- const std::string& username, |
- const std::string& password, |
- const std::string& source, |
- const char* const service, |
- const std::string& login_token, |
- const std::string& login_captcha, |
- HostedAccountsSetting allow_hosted_accounts); |
- // Supply the sid / lsid returned from ClientLogin in order to |
- // request a long lived auth token for a service. |
- static std::string MakeIssueAuthTokenBody(const std::string& sid, |
- const std::string& lsid, |
- const char* const service); |
- // Create body to get OAuth2 auth code. |
- static std::string MakeGetAuthCodeBody(); |
- // Given auth code, create body to get OAuth2 token pair. |
- static std::string MakeGetTokenPairBody(const std::string& auth_code); |
- // Supply the lsid returned from ClientLogin in order to fetch |
- // user information. |
- static std::string MakeGetUserInfoBody(const std::string& lsid); |
- |
- // Supply the authentication token returned from StartIssueAuthToken. |
- static std::string MakeMergeSessionBody(const std::string& auth_token, |
- const std::string& continue_url, |
- const std::string& source); |
- |
- static std::string MakeGetAuthCodeHeader(const std::string& auth_token); |
- |
- static std::string MakeClientOAuthBody(const std::string& username, |
- const std::string& password, |
- const std::vector<std::string>& scopes, |
- const std::string& persistent_id, |
- const std::string& friendly_name, |
- const std::string& locale); |
- |
- static std::string MakeClientOAuthChallengeResponseBody( |
- const std::string& name, |
- const std::string& token, |
- const std::string& solution); |
- |
- static std::string MakeOAuthLoginBody(const std::string& service, |
- const std::string& source); |
- |
- void StartOAuth2TokenPairFetch(const std::string& auth_code); |
- |
- // Create a fetcher usable for making any Gaia request. |body| is used |
- // as the body of the POST request sent to GAIA. Any strings listed in |
- // |headers| are added as extra HTTP headers in the request. |
- // |
- // |load_flags| are passed to directly to net::URLFetcher::Create() when |
- // creating the URL fetcher. |
- static net::URLFetcher* CreateGaiaFetcher( |
- net::URLRequestContextGetter* getter, |
- const std::string& body, |
- const std::string& headers, |
- const GURL& gaia_gurl, |
- int load_flags, |
- net::URLFetcherDelegate* delegate); |
- |
- // From a URLFetcher result, generate an appropriate error. |
- // From the API documentation, both IssueAuthToken and ClientLogin have |
- // the same error returns. |
- static GoogleServiceAuthError GenerateAuthError( |
- const std::string& data, |
- const net::URLRequestStatus& status); |
- |
- // These fields are common to GaiaAuthFetcher, same every request |
- GaiaAuthConsumer* const consumer_; |
- net::URLRequestContextGetter* const getter_; |
- std::string source_; |
- const GURL client_login_gurl_; |
- const GURL issue_auth_token_gurl_; |
- const GURL oauth2_token_gurl_; |
- const GURL get_user_info_gurl_; |
- const GURL merge_session_gurl_; |
- const GURL uberauth_token_gurl_; |
- const GURL client_oauth_gurl_; |
- const GURL oauth_login_gurl_; |
- |
- // While a fetch is going on: |
- scoped_ptr<net::URLFetcher> fetcher_; |
- GURL client_login_to_oauth2_gurl_; |
- std::string request_body_; |
- std::string requested_service_; // Currently tracked for IssueAuthToken only. |
- bool fetch_pending_; |
- |
- friend class GaiaAuthFetcherTest; |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CaptchaParse); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, AccountDeletedError); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, AccountDisabledError); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, BadAuthenticationError); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, IncomprehensibleError); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, ServiceUnavailableError); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CheckNormalErrorCode); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CheckTwoFactorResponse); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, LoginNetFailure); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, |
- ParseClientLoginToOAuth2Response); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, ParseOAuth2TokenPairResponse); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, ClientOAuthSuccess); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, ClientOAuthWithQuote); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, ClientOAuthChallengeSuccess); |
- FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, ClientOAuthChallengeQuote); |
- |
- DISALLOW_COPY_AND_ASSIGN(GaiaAuthFetcher); |
-}; |
- |
-#endif // CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_ |