Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9789)

Unified Diff: chrome/common/net/gaia/gaia_auth_fetcher.h

Issue 10928017: Moving google_apis and GaiaClient to src/google_apis. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge to head Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/net/gaia/gaia_auth_consumer.cc ('k') | chrome/common/net/gaia/gaia_auth_fetcher.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « chrome/common/net/gaia/gaia_auth_consumer.cc ('k') | chrome/common/net/gaia/gaia_auth_fetcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698