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

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

Issue 7121014: When a user logs into sync, the appropriate cookies are retrieved so that (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Uploading after sync merge Created 9 years, 6 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 #include "chrome/common/net/gaia/gaia_auth_fetcher.h" 5 #include "chrome/common/net/gaia/gaia_auth_fetcher.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 "logincaptcha=%s"; 42 "logincaptcha=%s";
43 // static 43 // static
44 const char GaiaAuthFetcher::kIssueAuthTokenFormat[] = 44 const char GaiaAuthFetcher::kIssueAuthTokenFormat[] =
45 "SID=%s&" 45 "SID=%s&"
46 "LSID=%s&" 46 "LSID=%s&"
47 "service=%s&" 47 "service=%s&"
48 "Session=%s"; 48 "Session=%s";
49 // static 49 // static
50 const char GaiaAuthFetcher::kGetUserInfoFormat[] = 50 const char GaiaAuthFetcher::kGetUserInfoFormat[] =
51 "LSID=%s"; 51 "LSID=%s";
52 // static
53 const char GaiaAuthFetcher::kTokenAuthFormat[] =
54 "auth=%s&"
55 "continue=%s&"
56 "source=%s";
52 57
53 // static 58 // static
54 const char GaiaAuthFetcher::kAccountDeletedError[] = "AccountDeleted"; 59 const char GaiaAuthFetcher::kAccountDeletedError[] = "AccountDeleted";
55 // static 60 // static
56 const char GaiaAuthFetcher::kAccountDisabledError[] = "AccountDisabled"; 61 const char GaiaAuthFetcher::kAccountDisabledError[] = "AccountDisabled";
57 // static 62 // static
58 const char GaiaAuthFetcher::kBadAuthenticationError[] = "BadAuthentication"; 63 const char GaiaAuthFetcher::kBadAuthenticationError[] = "BadAuthentication";
59 // static 64 // static
60 const char GaiaAuthFetcher::kCaptchaError[] = "CaptchaRequired"; 65 const char GaiaAuthFetcher::kCaptchaError[] = "CaptchaRequired";
61 // static 66 // static
(...skipping 23 matching lines...) Expand all
85 90
86 GaiaAuthFetcher::GaiaAuthFetcher(GaiaAuthConsumer* consumer, 91 GaiaAuthFetcher::GaiaAuthFetcher(GaiaAuthConsumer* consumer,
87 const std::string& source, 92 const std::string& source,
88 net::URLRequestContextGetter* getter) 93 net::URLRequestContextGetter* getter)
89 : consumer_(consumer), 94 : consumer_(consumer),
90 getter_(getter), 95 getter_(getter),
91 source_(source), 96 source_(source),
92 client_login_gurl_(GaiaUrls::GetInstance()->client_login_url()), 97 client_login_gurl_(GaiaUrls::GetInstance()->client_login_url()),
93 issue_auth_token_gurl_(GaiaUrls::GetInstance()->issue_auth_token_url()), 98 issue_auth_token_gurl_(GaiaUrls::GetInstance()->issue_auth_token_url()),
94 get_user_info_gurl_(GaiaUrls::GetInstance()->get_user_info_url()), 99 get_user_info_gurl_(GaiaUrls::GetInstance()->get_user_info_url()),
100 token_auth_gurl_(GaiaUrls::GetInstance()->token_auth_url()),
95 fetch_pending_(false) {} 101 fetch_pending_(false) {}
96 102
97 GaiaAuthFetcher::~GaiaAuthFetcher() {} 103 GaiaAuthFetcher::~GaiaAuthFetcher() {}
98 104
99 bool GaiaAuthFetcher::HasPendingFetch() { 105 bool GaiaAuthFetcher::HasPendingFetch() {
100 return fetch_pending_; 106 return fetch_pending_;
101 } 107 }
102 108
103 void GaiaAuthFetcher::CancelRequest() { 109 void GaiaAuthFetcher::CancelRequest() {
104 fetcher_.reset(); 110 fetcher_.reset();
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 service, 187 service,
182 session ? "true" : "false"); 188 session ? "true" : "false");
183 } 189 }
184 190
185 // static 191 // static
186 std::string GaiaAuthFetcher::MakeGetUserInfoBody(const std::string& lsid) { 192 std::string GaiaAuthFetcher::MakeGetUserInfoBody(const std::string& lsid) {
187 std::string encoded_lsid = EscapeUrlEncodedData(lsid, true); 193 std::string encoded_lsid = EscapeUrlEncodedData(lsid, true);
188 return base::StringPrintf(kGetUserInfoFormat, encoded_lsid.c_str()); 194 return base::StringPrintf(kGetUserInfoFormat, encoded_lsid.c_str());
189 } 195 }
190 196
197 // static
198 std::string GaiaAuthFetcher::MakeTokenAuthBody(const std::string& auth_token,
199 const std::string& continue_url,
200 const std::string& source) {
201 std::string encoded_auth_token = EscapeUrlEncodedData(auth_token, true);
202 std::string encoded_continue_url = EscapeUrlEncodedData(continue_url, true);
203 std::string encoded_source = EscapeUrlEncodedData(source, true);
204 return base::StringPrintf(kTokenAuthFormat,
205 encoded_auth_token.c_str(),
206 encoded_continue_url.c_str(),
207 encoded_source.c_str());
208 }
209
191 // Helper method that extracts tokens from a successful reply. 210 // Helper method that extracts tokens from a successful reply.
192 // static 211 // static
193 void GaiaAuthFetcher::ParseClientLoginResponse(const std::string& data, 212 void GaiaAuthFetcher::ParseClientLoginResponse(const std::string& data,
194 std::string* sid, 213 std::string* sid,
195 std::string* lsid, 214 std::string* lsid,
196 std::string* token) { 215 std::string* token) {
197 using std::vector; 216 using std::vector;
198 using std::pair; 217 using std::pair;
199 using std::string; 218 using std::string;
200 219
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 request_body_ = MakeGetUserInfoBody(lsid); 311 request_body_ = MakeGetUserInfoBody(lsid);
293 fetcher_.reset(CreateGaiaFetcher(getter_, 312 fetcher_.reset(CreateGaiaFetcher(getter_,
294 request_body_, 313 request_body_,
295 get_user_info_gurl_, 314 get_user_info_gurl_,
296 this)); 315 this));
297 fetch_pending_ = true; 316 fetch_pending_ = true;
298 requested_info_key_ = info_key; 317 requested_info_key_ = info_key;
299 fetcher_->Start(); 318 fetcher_->Start();
300 } 319 }
301 320
321 void GaiaAuthFetcher::StartTokenAuth(const std::string& auth_token) {
322 DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
323
324 VLOG(1) << "Starting TokenAuth with auth_token=" << auth_token;
325
326 // The continue URL is a required parameter of the TokenAuth API, but in this
327 // case we don't actually need or want to navigate to it. Setting it to
328 // an arbitrary Google URL.
329 std::string continue_url("http://www.google.com");
330 request_body_ = MakeTokenAuthBody(auth_token, continue_url, source_);
331 fetcher_.reset(CreateGaiaFetcher(getter_,
332 request_body_,
333 token_auth_gurl_,
334 this));
335 fetch_pending_ = true;
336 fetcher_->Start();
337 }
338
302 // static 339 // static
303 GoogleServiceAuthError GaiaAuthFetcher::GenerateAuthError( 340 GoogleServiceAuthError GaiaAuthFetcher::GenerateAuthError(
304 const std::string& data, 341 const std::string& data,
305 const net::URLRequestStatus& status) { 342 const net::URLRequestStatus& status) {
306 if (!status.is_success()) { 343 if (!status.is_success()) {
307 if (status.status() == net::URLRequestStatus::CANCELED) { 344 if (status.status() == net::URLRequestStatus::CANCELED) {
308 return GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED); 345 return GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED);
309 } else { 346 } else {
310 LOG(WARNING) << "Could not reach Google Accounts servers: errno " 347 LOG(WARNING) << "Could not reach Google Accounts servers: errno "
311 << status.os_error(); 348 << status.os_error();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 consumer_->OnGetUserInfoSuccess(i->first, i->second); 436 consumer_->OnGetUserInfoSuccess(i->first, i->second);
400 return; 437 return;
401 } 438 }
402 } 439 }
403 consumer_->OnGetUserInfoKeyNotFound(requested_info_key_); 440 consumer_->OnGetUserInfoKeyNotFound(requested_info_key_);
404 } else { 441 } else {
405 consumer_->OnGetUserInfoFailure(GenerateAuthError(data, status)); 442 consumer_->OnGetUserInfoFailure(GenerateAuthError(data, status));
406 } 443 }
407 } 444 }
408 445
446 void GaiaAuthFetcher::OnTokenAuthFetched(const std::string& data,
447 const net::URLRequestStatus& status,
448 int response_code) {
449 if (status.is_success() && response_code == RC_REQUEST_OK) {
450 consumer_->OnTokenAuthSuccess(data);
451 } else {
452 consumer_->OnTokenAuthFailure(GenerateAuthError(data, status));
453 }
454 }
455
409 void GaiaAuthFetcher::OnURLFetchComplete(const URLFetcher* source, 456 void GaiaAuthFetcher::OnURLFetchComplete(const URLFetcher* source,
410 const GURL& url, 457 const GURL& url,
411 const net::URLRequestStatus& status, 458 const net::URLRequestStatus& status,
412 int response_code, 459 int response_code,
413 const net::ResponseCookies& cookies, 460 const net::ResponseCookies& cookies,
414 const std::string& data) { 461 const std::string& data) {
415 fetch_pending_ = false; 462 fetch_pending_ = false;
416 if (url == client_login_gurl_) { 463 if (url == client_login_gurl_) {
417 OnClientLoginFetched(data, status, response_code); 464 OnClientLoginFetched(data, status, response_code);
418 } else if (url == issue_auth_token_gurl_) { 465 } else if (url == issue_auth_token_gurl_) {
419 OnIssueAuthTokenFetched(data, status, response_code); 466 OnIssueAuthTokenFetched(data, status, response_code);
420 } else if (url == get_user_info_gurl_) { 467 } else if (url == get_user_info_gurl_) {
421 OnGetUserInfoFetched(data, status, response_code); 468 OnGetUserInfoFetched(data, status, response_code);
469 } else if (url == token_auth_gurl_) {
470 OnTokenAuthFetched(data, status, response_code);
422 } else { 471 } else {
423 NOTREACHED(); 472 NOTREACHED();
424 } 473 }
425 } 474 }
426 475
427 // static 476 // static
428 bool GaiaAuthFetcher::IsSecondFactorSuccess( 477 bool GaiaAuthFetcher::IsSecondFactorSuccess(
429 const std::string& alleged_error) { 478 const std::string& alleged_error) {
430 return alleged_error.find(kSecondFactor) != 479 return alleged_error.find(kSecondFactor) !=
431 std::string::npos; 480 std::string::npos;
432 } 481 }
OLDNEW
« no previous file with comments | « chrome/common/net/gaia/gaia_auth_fetcher.h ('k') | chrome/common/net/gaia/gaia_auth_fetcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698