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

Side by Side Diff: chrome/common/net/gaia/gaia_auth_fetcher.h

Issue 6894027: Initial refactoring complete Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Fixed some tests that were broken by previous refactoring Created 9 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_ 5 #ifndef CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_
6 #define CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_ 6 #define CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <string> 9 #include <string>
10 10
11 #include "base/gtest_prod_util.h" 11 #include "base/gtest_prod_util.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "chrome/common/net/gaia/gaia_auth_consumer.h" 13 #include "chrome/common/net/gaia/gaia_auth_consumer.h"
14 #include "chrome/common/net/url_fetcher.h" 14 #include "chrome/common/net/gaia/authentication_fetcher.h"
15 #include "googleurl/src/gurl.h" 15 #include "googleurl/src/gurl.h"
16 16
17 // Authenticate a user against the Google Accounts ClientLogin API 17 // Authenticate a user against the Google Accounts ClientLogin API
18 // with various capabilities and return results to a GaiaAuthConsumer. 18 // with various capabilities and return results to a GaiaAuthConsumer.
19 // 19 //
20 // In the future, we will also issue auth tokens from this class. 20 // In the future, we will also issue auth tokens from this class.
21 // This class should be used on a single thread, but it can be whichever thread 21 // This class should be used on a single thread, but it can be whichever thread
22 // that you like. 22 // that you like.
23 // 23 //
24 // This class can handle one request at a time. To parallelize requests, 24 // This class can handle one request at a time. To parallelize requests,
25 // create multiple GaiaAuthFetcher's. 25 // create multiple GaiaAuthFetcher's.
26 26
27 class GaiaAuthFetcherTest; 27 class GaiaAuthFetcherTest;
28 28
29 class GaiaAuthFetcher : public URLFetcher::Delegate { 29 class GaiaAuthFetcher : public AuthenticationFetcher {
30 public: 30 public:
31 enum HostedAccountsSetting {
32 HostedAccountsAllowed,
33 HostedAccountsNotAllowed
34 };
35
36 // The URLs for different calls in the Google Accounts programmatic login API. 31 // The URLs for different calls in the Google Accounts programmatic login API.
37 static const char kClientLoginUrl[]; 32 static const char kClientLoginUrl[];
38 static const char kIssueAuthTokenUrl[]; 33 static const char kIssueAuthTokenUrl[];
39 static const char kGetUserInfoUrl[]; 34 static const char kGetUserInfoUrl[];
40 35
41 // Magic string indicating that, while a second factor is still 36 // Magic string indicating that, while a second factor is still
42 // needed to complete authentication, the user provided the right password. 37 // needed to complete authentication, the user provided the right password.
43 static const char kSecondFactor[]; 38 static const char kSecondFactor[];
44 39
45 // This will later be hidden behind an auth service which caches 40 // This will later be hidden behind an auth service which caches
46 // tokens. 41 // tokens.
47 GaiaAuthFetcher(GaiaAuthConsumer* consumer, 42 GaiaAuthFetcher(GaiaAuthConsumer* consumer,
48 const std::string& source, 43 const std::string& source,
49 net::URLRequestContextGetter* getter); 44 net::URLRequestContextGetter* getter);
50 virtual ~GaiaAuthFetcher(); 45 virtual ~GaiaAuthFetcher();
51 46
47 virtual void StartAuthentication(const std::string& username,
48 const std::string& password,
49 const char* const service,
50 const std::string& login_token,
51 const std::string& login_captcha,
52 HostedAccountsSetting allow_hosted_accounts);
53
52 // GaiaAuthConsumer will be called on the original thread 54 // GaiaAuthConsumer will be called on the original thread
53 // after results come back. This class is thread agnostic. 55 // after results come back. This class is thread agnostic.
54 // You can't make more than request at a time. 56 // You can't make more than request at a time.
55 void StartClientLogin(const std::string& username, 57 void StartClientLogin(const std::string& username,
56 const std::string& password, 58 const std::string& password,
57 const char* const service, 59 const char* const service,
58 const std::string& login_token, 60 const std::string& login_token,
59 const std::string& login_captcha, 61 const std::string& login_captcha,
60 HostedAccountsSetting allow_hosted_accounts); 62 HostedAccountsSetting allow_hosted_accounts);
61 63
62 // GaiaAuthConsumer will be called on the original thread 64 // GaiaAuthConsumer will be called on the original thread
63 // after results come back. This class is thread agnostic. 65 // after results come back. This class is thread agnostic.
64 // You can't make more than one request at a time. 66 // You can't make more than one request at a time.
65 void StartIssueAuthToken(const std::string& sid, 67 virtual void StartIssueAuthToken(
66 const std::string& lsid, 68 const AuthenticationConsumer::AuthenticationResult& credentials,
67 const char* const service); 69 const char* const service);
68 70
69 // Start a request to get a particular key from user info. 71 // Start a request to get a particular key from user info.
70 // GaiaAuthConsumer will be called back on the same thread when 72 // GaiaAuthConsumer will be called back on the same thread when
71 // results come back. 73 // results come back.
72 // You can't make more than one request at a time. 74 // You can't make more than one request at a time.
73 void StartGetUserInfo(const std::string& lsid, 75 virtual void StartGetUserInfo(const std::string& lsid,
74 const std::string& info_key); 76 const std::string& info_key);
75 77
76 // Implementation of URLFetcher::Delegate 78 // Implementation of URLFetcher::Delegate
77 virtual void OnURLFetchComplete(const URLFetcher* source, 79 virtual void OnURLFetchComplete(const URLFetcher* source,
78 const GURL& url, 80 const GURL& url,
79 const net::URLRequestStatus& status, 81 const net::URLRequestStatus& status,
80 int response_code, 82 int response_code,
81 const ResponseCookies& cookies, 83 const ResponseCookies& cookies,
82 const std::string& data); 84 const std::string& data);
83 85
84 // StartClientLogin been called && results not back yet?
85 bool HasPendingFetch();
86
87 // Stop any URL fetches in progress.
88 void CancelRequest();
89
90 private: 86 private:
91 // ClientLogin body constants that don't change 87 // ClientLogin body constants that don't change
92 static const char kCookiePersistence[]; 88 static const char kCookiePersistence[];
93 static const char kAccountTypeHostedOrGoogle[]; 89 static const char kAccountTypeHostedOrGoogle[];
94 static const char kAccountTypeGoogle[]; 90 static const char kAccountTypeGoogle[];
95 91
96 // The format of the POST body for ClientLogin. 92 // The format of the POST body for ClientLogin.
97 static const char kClientLoginFormat[]; 93 static const char kClientLoginFormat[];
98 // The format of said POST body when CAPTCHA token & answer are specified. 94 // The format of said POST body when CAPTCHA token & answer are specified.
99 static const char kClientLoginCaptchaFormat[]; 95 static const char kClientLoginCaptchaFormat[];
100 // The format of the POST body for IssueAuthToken. 96 // The format of the POST body for IssueAuthToken.
101 static const char kIssueAuthTokenFormat[]; 97 static const char kIssueAuthTokenFormat[];
102 // The format of the POSt body for GetUserInfo. 98 // The format of the POSt body for GetUserInfo.
103 static const char kGetUserInfoFormat[]; 99 static const char kGetUserInfoFormat[];
104 100
105 // Constants for parsing ClientLogin errors. 101 // Constants for parsing ClientLogin errors.
106 static const char kAccountDeletedError[]; 102 static const char kAccountDeletedError[];
107 static const char kAccountDisabledError[]; 103 static const char kAccountDisabledError[];
108 static const char kBadAuthenticationError[]; 104 static const char kBadAuthenticationError[];
109 static const char kCaptchaError[]; 105 static const char kCaptchaError[];
110 static const char kServiceUnavailableError[]; 106 static const char kServiceUnavailableError[];
111 static const char kErrorParam[]; 107 static const char kErrorParam[];
112 static const char kErrorUrlParam[]; 108 static const char kErrorUrlParam[];
113 static const char kCaptchaUrlParam[]; 109 static const char kCaptchaUrlParam[];
114 static const char kCaptchaTokenParam[]; 110 static const char kCaptchaTokenParam[];
115 static const char kCaptchaUrlPrefix[]; 111 static const char kCaptchaUrlPrefix[];
116 112
113 // Process the results of a Authentication fetch.
114 virtual void OnAuthenticationFetched(const std::string& data,
115 const net::URLRequestStatus& status,
116 int response_code);
117
117 // Process the results of a ClientLogin fetch. 118 // Process the results of a ClientLogin fetch.
118 void OnClientLoginFetched(const std::string& data, 119 void OnClientLoginFetched(const std::string& data,
119 const net::URLRequestStatus& status, 120 const net::URLRequestStatus& status,
120 int response_code); 121 int response_code);
121 122
122 void OnIssueAuthTokenFetched(const std::string& data, 123 void OnIssueAuthTokenFetched(const std::string& data,
123 const net::URLRequestStatus& status, 124 const net::URLRequestStatus& status,
124 int response_code); 125 int response_code);
125 126
127 void OnIssueTokenFetched(const std::string& data,
128 const net::URLRequestStatus& status,
129 int response_code);
130
126 void OnGetUserInfoFetched(const std::string& data, 131 void OnGetUserInfoFetched(const std::string& data,
127 const net::URLRequestStatus& status, 132 const net::URLRequestStatus& status,
128 int response_code); 133 int response_code);
129 134
130 // Tokenize the results of a ClientLogin fetch. 135 // Tokenize the results of a ClientLogin fetch.
131 static void ParseClientLoginResponse(const std::string& data, 136 static void ParseClientLoginResponse(const std::string& data,
132 std::string* sid, 137 std::string* sid,
133 std::string* lsid, 138 std::string* lsid,
134 std::string* token); 139 std::string* token);
135 140
(...skipping 17 matching lines...) Expand all
153 static std::string MakeClientLoginBody( 158 static std::string MakeClientLoginBody(
154 const std::string& username, 159 const std::string& username,
155 const std::string& password, 160 const std::string& password,
156 const std::string& source, 161 const std::string& source,
157 const char* const service, 162 const char* const service,
158 const std::string& login_token, 163 const std::string& login_token,
159 const std::string& login_captcha, 164 const std::string& login_captcha,
160 HostedAccountsSetting allow_hosted_accounts); 165 HostedAccountsSetting allow_hosted_accounts);
161 // Supply the sid / lsid returned from ClientLogin in order to 166 // Supply the sid / lsid returned from ClientLogin in order to
162 // request a long lived auth token for a service. 167 // request a long lived auth token for a service.
163 static std::string MakeIssueAuthTokenBody(const std::string& sid, 168 static std::string MakeIssueAuthTokenBody(
164 const std::string& lsid, 169 const AuthenticationConsumer::AuthenticationResult& credentials,
165 const char* const service); 170 const char* const service);
166 // Supply the lsid returned from ClientLogin in order to fetch 171 // Supply the lsid returned from ClientLogin in order to fetch
167 // user information. 172 // user information.
168 static std::string MakeGetUserInfoBody(const std::string& lsid); 173 static std::string MakeGetUserInfoBody(const std::string& lsid);
169 174
170 // Create a fetcher useable for making any Gaia request. 175 // Create a fetcher useable for making any Gaia request.
171 static URLFetcher* CreateGaiaFetcher(net::URLRequestContextGetter* getter, 176 static URLFetcher* CreateGaiaFetcher(net::URLRequestContextGetter* getter,
172 const std::string& body, 177 const std::string& body,
173 const GURL& gaia_gurl_, 178 const GURL& gaia_gurl_,
174 URLFetcher::Delegate* delegate); 179 URLFetcher::Delegate* delegate);
175
176
177 // These fields are common to GaiaAuthFetcher, same every request 180 // These fields are common to GaiaAuthFetcher, same every request
178 GaiaAuthConsumer* const consumer_;
179 net::URLRequestContextGetter* const getter_;
180 std::string source_;
181 const GURL client_login_gurl_; 181 const GURL client_login_gurl_;
182 const GURL issue_auth_token_gurl_; 182 const GURL issue_auth_token_gurl_;
183 const GURL get_user_info_gurl_; 183 const GURL get_user_info_gurl_;
184 184
185 // While a fetch is going on: 185 // While a fetch is going on:
186 scoped_ptr<URLFetcher> fetcher_; 186 scoped_ptr<URLFetcher> fetcher_;
187 std::string request_body_; 187 std::string request_body_;
188 std::string requested_service_; // Currently tracked for IssueAuthToken only 188 std::string requested_service_; // Currently tracked for IssueAuthToken only
189 std::string requested_info_key_; // Currently tracked for GetUserInfo only 189 std::string requested_info_key_; // Currently tracked for GetUserInfo only
190 bool fetch_pending_;
191 190
192 friend class GaiaAuthFetcherTest; 191 friend class GaiaAuthFetcherTest;
193 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CaptchaParse); 192 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CaptchaParse);
194 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, AccountDeletedError); 193 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, AccountDeletedError);
195 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, AccountDisabledError); 194 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, AccountDisabledError);
196 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, BadAuthenticationError); 195 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, BadAuthenticationError);
197 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, IncomprehensibleError); 196 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, IncomprehensibleError);
198 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, ServiceUnavailableError); 197 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, ServiceUnavailableError);
199 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CheckNormalErrorCode); 198 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CheckNormalErrorCode);
200 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CheckTwoFactorResponse); 199 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, CheckTwoFactorResponse);
201 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, LoginNetFailure); 200 FRIEND_TEST_ALL_PREFIXES(GaiaAuthFetcherTest, LoginNetFailure);
202 201
203 DISALLOW_COPY_AND_ASSIGN(GaiaAuthFetcher); 202 DISALLOW_COPY_AND_ASSIGN(GaiaAuthFetcher);
204 }; 203 };
205 204
206 #endif // CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_ 205 #endif // CHROME_COMMON_NET_GAIA_GAIA_AUTH_FETCHER_H_
OLDNEW
« 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