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

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

Issue 9301003: Change X-Auto-Login implementation to use OAuth token. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Follow review Created 8 years, 10 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) 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 #include "chrome/common/net/gaia/gaia_auth_fetcher.h" 5 #include "chrome/common/net/gaia/gaia_auth_fetcher.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 // static 73 // static
74 const char GaiaAuthFetcher::kTokenAuthFormat[] = 74 const char GaiaAuthFetcher::kTokenAuthFormat[] =
75 "auth=%s&" 75 "auth=%s&"
76 "continue=%s&" 76 "continue=%s&"
77 "source=%s"; 77 "source=%s";
78 // static 78 // static
79 const char GaiaAuthFetcher::kMergeSessionFormat[] = 79 const char GaiaAuthFetcher::kMergeSessionFormat[] =
80 "uberauth=%s&" 80 "uberauth=%s&"
81 "continue=%s&" 81 "continue=%s&"
82 "source=%s"; 82 "source=%s";
83 // static
84 const char GaiaAuthFetcher::kUberAuthTokenURLFormat[] =
85 "%s?source=%s&"
86 "issueuberauth=1";
Roger Tawa OOO till Jul 10th 2012/02/01 21:47:14 Why use url request parameters instead of putting
qsr 2012/02/02 09:26:55 Unfortunately it doesn't. I did try with the POST
83 87
84 // static 88 // static
85 const char GaiaAuthFetcher::kAccountDeletedError[] = "AccountDeleted"; 89 const char GaiaAuthFetcher::kAccountDeletedError[] = "AccountDeleted";
86 const char GaiaAuthFetcher::kAccountDeletedErrorCode[] = "adel"; 90 const char GaiaAuthFetcher::kAccountDeletedErrorCode[] = "adel";
87 // static 91 // static
88 const char GaiaAuthFetcher::kAccountDisabledError[] = "AccountDisabled"; 92 const char GaiaAuthFetcher::kAccountDisabledError[] = "AccountDisabled";
89 const char GaiaAuthFetcher::kAccountDisabledErrorCode[] = "adis"; 93 const char GaiaAuthFetcher::kAccountDisabledErrorCode[] = "adis";
90 // static 94 // static
91 const char GaiaAuthFetcher::kBadAuthenticationError[] = "BadAuthentication"; 95 const char GaiaAuthFetcher::kBadAuthenticationError[] = "BadAuthentication";
92 const char GaiaAuthFetcher::kBadAuthenticationErrorCode[] = "badauth"; 96 const char GaiaAuthFetcher::kBadAuthenticationErrorCode[] = "badauth";
(...skipping 24 matching lines...) Expand all
117 const char GaiaAuthFetcher::kAccountTypeGoogle[] = 121 const char GaiaAuthFetcher::kAccountTypeGoogle[] =
118 "GOOGLE"; 122 "GOOGLE";
119 123
120 // static 124 // static
121 const char GaiaAuthFetcher::kSecondFactor[] = "Info=InvalidSecondFactor"; 125 const char GaiaAuthFetcher::kSecondFactor[] = "Info=InvalidSecondFactor";
122 126
123 // static 127 // static
124 const char GaiaAuthFetcher::kAuthHeaderFormat[] = 128 const char GaiaAuthFetcher::kAuthHeaderFormat[] =
125 "Authorization: GoogleLogin auth=%s"; 129 "Authorization: GoogleLogin auth=%s";
126 // static 130 // static
131 const char GaiaAuthFetcher::kOAuthHeaderFormat[] = "Authorization: OAuth %s";
132 // static
127 const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartSecure[] = "Secure"; 133 const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartSecure[] = "Secure";
128 // static 134 // static
129 const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartHttpOnly[] = 135 const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartHttpOnly[] =
130 "HttpOnly"; 136 "HttpOnly";
131 // static 137 // static
132 const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefix[] = 138 const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefix[] =
133 "oauth_code="; 139 "oauth_code=";
134 // static 140 // static
135 const int GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefixLength = 141 const int GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefixLength =
136 arraysize(GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefix) - 1; 142 arraysize(GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefix) - 1;
(...skipping 11 matching lines...) Expand all
148 getter_(getter), 154 getter_(getter),
149 source_(source), 155 source_(source),
150 client_login_gurl_(GaiaUrls::GetInstance()->client_login_url()), 156 client_login_gurl_(GaiaUrls::GetInstance()->client_login_url()),
151 issue_auth_token_gurl_(GaiaUrls::GetInstance()->issue_auth_token_url()), 157 issue_auth_token_gurl_(GaiaUrls::GetInstance()->issue_auth_token_url()),
152 client_login_to_oauth2_gurl_( 158 client_login_to_oauth2_gurl_(
153 GaiaUrls::GetInstance()->client_login_to_oauth2_url()), 159 GaiaUrls::GetInstance()->client_login_to_oauth2_url()),
154 oauth2_token_gurl_(GaiaUrls::GetInstance()->oauth2_token_url()), 160 oauth2_token_gurl_(GaiaUrls::GetInstance()->oauth2_token_url()),
155 get_user_info_gurl_(GaiaUrls::GetInstance()->get_user_info_url()), 161 get_user_info_gurl_(GaiaUrls::GetInstance()->get_user_info_url()),
156 token_auth_gurl_(GaiaUrls::GetInstance()->token_auth_url()), 162 token_auth_gurl_(GaiaUrls::GetInstance()->token_auth_url()),
157 merge_session_gurl_(GaiaUrls::GetInstance()->merge_session_url()), 163 merge_session_gurl_(GaiaUrls::GetInstance()->merge_session_url()),
164 uberauth_token_gurl_(base::StringPrintf(kUberAuthTokenURLFormat,
165 GaiaUrls::GetInstance()->oauth1_login_url().c_str(), source.c_str())),
158 fetch_pending_(false) {} 166 fetch_pending_(false) {}
159 167
160 GaiaAuthFetcher::~GaiaAuthFetcher() {} 168 GaiaAuthFetcher::~GaiaAuthFetcher() {}
161 169
162 bool GaiaAuthFetcher::HasPendingFetch() { 170 bool GaiaAuthFetcher::HasPendingFetch() {
163 return fetch_pending_; 171 return fetch_pending_;
164 } 172 }
165 173
166 void GaiaAuthFetcher::CancelRequest() { 174 void GaiaAuthFetcher::CancelRequest() {
167 fetcher_.reset(); 175 fetcher_.reset();
168 fetch_pending_ = false; 176 fetch_pending_ = false;
169 } 177 }
170 178
171 // static 179 // static
172 content::URLFetcher* GaiaAuthFetcher::CreateGaiaFetcher( 180 content::URLFetcher* GaiaAuthFetcher::CreateGaiaFetcher(
173 net::URLRequestContextGetter* getter, 181 net::URLRequestContextGetter* getter,
174 const std::string& body, 182 const std::string& body,
175 const std::string& headers, 183 const std::string& headers,
176 const GURL& gaia_gurl, 184 const GURL& gaia_gurl,
177 bool use_cookies, 185 bool use_cookies,
178 content::URLFetcherDelegate* delegate) { 186 content::URLFetcherDelegate* delegate) {
179 content::URLFetcher* to_return = content::URLFetcher::Create( 187 content::URLFetcher* to_return = content::URLFetcher::Create(
180 0, gaia_gurl, content::URLFetcher::POST, delegate); 188 0, gaia_gurl,
189 body == "" ? content::URLFetcher::GET : content::URLFetcher::POST,
190 delegate);
181 to_return->SetRequestContext(getter); 191 to_return->SetRequestContext(getter);
182 to_return->SetUploadData("application/x-www-form-urlencoded", body); 192 to_return->SetUploadData("application/x-www-form-urlencoded", body);
183 193
184 // The Gaia token exchange requests do not require any cookie-based 194 // The Gaia token exchange requests do not require any cookie-based
185 // identification as part of requests. We suppress sending any cookies to 195 // identification as part of requests. We suppress sending any cookies to
186 // maintain a separation between the user's browsing and Chrome's internal 196 // maintain a separation between the user's browsing and Chrome's internal
187 // services. Where such mixing is desired (MergeSession), it will be done 197 // services. Where such mixing is desired (MergeSession), it will be done
188 // explicitly. 198 // explicitly.
189 if (!use_cookies) { 199 if (!use_cookies) {
190 to_return->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | 200 to_return->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 request_body_, 574 request_body_,
565 "", 575 "",
566 merge_session_gurl_, 576 merge_session_gurl_,
567 true, 577 true,
568 this)); 578 this));
569 fetch_pending_ = true; 579 fetch_pending_ = true;
570 fetcher_->Start(); 580 fetcher_->Start();
571 } 581 }
572 582
573 // static 583 // static
584 void GaiaAuthFetcher::StartUberAuthTokenFetch(const std::string& access_token) {
585 DCHECK(!fetch_pending_) << "Tried to fetch two things at once!";
586
587 DVLOG(1) << "Starting StartUberAuthTokenFetch with access_token="
588 << access_token;
589 std::string authentication_header =
590 base::StringPrintf(kOAuthHeaderFormat, access_token.c_str());
591 fetcher_.reset(CreateGaiaFetcher(getter_,
592 "",
593 authentication_header,
594 uberauth_token_gurl_,
595 false,
596 this));
597 fetch_pending_ = true;
598 fetcher_->Start();
599 }
600
601 // static
574 GoogleServiceAuthError GaiaAuthFetcher::GenerateAuthError( 602 GoogleServiceAuthError GaiaAuthFetcher::GenerateAuthError(
575 const std::string& data, 603 const std::string& data,
576 const net::URLRequestStatus& status) { 604 const net::URLRequestStatus& status) {
577 if (!status.is_success()) { 605 if (!status.is_success()) {
578 if (status.status() == net::URLRequestStatus::CANCELED) { 606 if (status.status() == net::URLRequestStatus::CANCELED) {
579 return GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED); 607 return GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED);
580 } else { 608 } else {
581 DLOG(WARNING) << "Could not reach Google Accounts servers: errno " 609 DLOG(WARNING) << "Could not reach Google Accounts servers: errno "
582 << status.error(); 610 << status.error();
583 return GoogleServiceAuthError::FromConnectionError(status.error()); 611 return GoogleServiceAuthError::FromConnectionError(status.error());
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 void GaiaAuthFetcher::OnMergeSessionFetched(const std::string& data, 818 void GaiaAuthFetcher::OnMergeSessionFetched(const std::string& data,
791 const net::URLRequestStatus& status, 819 const net::URLRequestStatus& status,
792 int response_code) { 820 int response_code) {
793 if (status.is_success() && response_code == RC_REQUEST_OK) { 821 if (status.is_success() && response_code == RC_REQUEST_OK) {
794 consumer_->OnMergeSessionSuccess(data); 822 consumer_->OnMergeSessionSuccess(data);
795 } else { 823 } else {
796 consumer_->OnMergeSessionFailure(GenerateAuthError(data, status)); 824 consumer_->OnMergeSessionFailure(GenerateAuthError(data, status));
797 } 825 }
798 } 826 }
799 827
828 void GaiaAuthFetcher::OnUberAuthTokenFetch(const std::string& data,
829 const net::URLRequestStatus& status,
830 int response_code) {
831 if (status.is_success() && response_code == RC_REQUEST_OK) {
832 consumer_->OnUberAuthTokenSuccess(data);
833 } else {
834 consumer_->OnUberAuthTokenFailure(GenerateAuthError(data, status));
835 }
836 }
837
800 void GaiaAuthFetcher::OnURLFetchComplete(const content::URLFetcher* source) { 838 void GaiaAuthFetcher::OnURLFetchComplete(const content::URLFetcher* source) {
801 fetch_pending_ = false; 839 fetch_pending_ = false;
802 const GURL& url = source->GetURL(); 840 const GURL& url = source->GetURL();
803 const net::URLRequestStatus& status = source->GetStatus(); 841 const net::URLRequestStatus& status = source->GetStatus();
804 int response_code = source->GetResponseCode(); 842 int response_code = source->GetResponseCode();
805 std::string data; 843 std::string data;
806 source->GetResponseAsString(&data); 844 source->GetResponseAsString(&data);
807 if (url == client_login_gurl_) { 845 if (url == client_login_gurl_) {
808 OnClientLoginFetched(data, status, response_code); 846 OnClientLoginFetched(data, status, response_code);
809 } else if (url == issue_auth_token_gurl_) { 847 } else if (url == issue_auth_token_gurl_) {
810 OnIssueAuthTokenFetched(data, status, response_code); 848 OnIssueAuthTokenFetched(data, status, response_code);
811 } else if (url == client_login_to_oauth2_gurl_) { 849 } else if (url == client_login_to_oauth2_gurl_) {
812 OnClientLoginToOAuth2Fetched( 850 OnClientLoginToOAuth2Fetched(
813 data, source->GetCookies(), status, response_code); 851 data, source->GetCookies(), status, response_code);
814 } else if (url == oauth2_token_gurl_) { 852 } else if (url == oauth2_token_gurl_) {
815 OnOAuth2TokenPairFetched(data, status, response_code); 853 OnOAuth2TokenPairFetched(data, status, response_code);
816 } else if (url == get_user_info_gurl_) { 854 } else if (url == get_user_info_gurl_) {
817 OnGetUserInfoFetched(data, status, response_code); 855 OnGetUserInfoFetched(data, status, response_code);
818 } else if (url == token_auth_gurl_) { 856 } else if (url == token_auth_gurl_) {
819 OnTokenAuthFetched(data, status, response_code); 857 OnTokenAuthFetched(data, status, response_code);
820 } else if (url == merge_session_gurl_ || 858 } else if (url == merge_session_gurl_ ||
821 (source && source->GetOriginalURL() == merge_session_gurl_)) { 859 (source && source->GetOriginalURL() == merge_session_gurl_)) {
822 // MergeSession may redirect, so check the original URL of the fetcher. 860 // MergeSession may redirect, so check the original URL of the fetcher.
823 OnMergeSessionFetched(data, status, response_code); 861 OnMergeSessionFetched(data, status, response_code);
862 } else if (url == uberauth_token_gurl_) {
863 OnUberAuthTokenFetch(data, status, response_code);
824 } else { 864 } else {
825 NOTREACHED(); 865 NOTREACHED();
826 } 866 }
827 } 867 }
828 868
829 // static 869 // static
830 bool GaiaAuthFetcher::IsSecondFactorSuccess( 870 bool GaiaAuthFetcher::IsSecondFactorSuccess(
831 const std::string& alleged_error) { 871 const std::string& alleged_error) {
832 return alleged_error.find(kSecondFactor) != 872 return alleged_error.find(kSecondFactor) !=
833 std::string::npos; 873 std::string::npos;
834 } 874 }
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