Index: chrome/common/net/gaia/gaia_auth_fetcher.cc |
=================================================================== |
--- chrome/common/net/gaia/gaia_auth_fetcher.cc (revision 111276) |
+++ chrome/common/net/gaia/gaia_auth_fetcher.cc (working copy) |
@@ -4,16 +4,13 @@ |
#include "chrome/common/net/gaia/gaia_auth_fetcher.h" |
-#include <algorithm> |
#include <string> |
#include <utility> |
#include <vector> |
-#include "base/json/json_reader.h" |
#include "base/string_split.h" |
#include "base/string_util.h" |
#include "base/stringprintf.h" |
-#include "base/values.h" |
#include "chrome/common/net/gaia/gaia_auth_consumer.h" |
#include "chrome/common/net/gaia/gaia_constants.h" |
#include "chrome/common/net/gaia/gaia_urls.h" |
@@ -25,13 +22,6 @@ |
#include "net/url_request/url_request_context_getter.h" |
#include "net/url_request/url_request_status.h" |
-namespace { |
-static bool CookiePartsContains(const std::vector<std::string>& parts, |
- const char* part) { |
- return std::find(parts.begin(), parts.end(), part) != parts.end(); |
-} |
-} // namespace |
- |
// TODO(chron): Add sourceless version of this formatter. |
// static |
const char GaiaAuthFetcher::kClientLoginFormat[] = |
@@ -58,16 +48,6 @@ |
"service=%s&" |
"Session=%s"; |
// static |
-const char GaiaAuthFetcher::kClientLoginToOAuth2BodyFormat[] = |
- "scope=%s&client_id=%s"; |
-// static |
-const char GaiaAuthFetcher::kOAuth2CodeToTokenPairBodyFormat[] = |
- "scope=%s&" |
- "grant_type=authorization_code&" |
- "client_id=%s&" |
- "client_secret=%s&" |
- "code=%s"; |
-// static |
const char GaiaAuthFetcher::kGetUserInfoFormat[] = |
"LSID=%s"; |
// static |
@@ -120,27 +100,6 @@ |
// static |
const char GaiaAuthFetcher::kSecondFactor[] = "Info=InvalidSecondFactor"; |
-// static |
-const char GaiaAuthFetcher::kAuthHeaderFormat[] = |
- "Authorization: GoogleLogin auth=%s"; |
-// static |
-const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartSecure[] = "Secure"; |
-// static |
-const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartHttpOnly[] = |
- "HttpOnly"; |
-// static |
-const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefix[] = |
- "oauth_code="; |
-// static |
-const int GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefixLength = |
- arraysize(GaiaAuthFetcher::kClientLoginToOAuth2CookiePartCodePrefix) - 1; |
-// static |
-const char GaiaAuthFetcher::kOAuth2RefreshTokenKey[] = "refresh_token"; |
-// static |
-const char GaiaAuthFetcher::kOAuth2AccessTokenKey[] = "access_token"; |
-// static |
-const char GaiaAuthFetcher::kOAuth2ExpiresInKey[] = "expires_in"; |
- |
GaiaAuthFetcher::GaiaAuthFetcher(GaiaAuthConsumer* consumer, |
const std::string& source, |
net::URLRequestContextGetter* getter) |
@@ -149,9 +108,6 @@ |
source_(source), |
client_login_gurl_(GaiaUrls::GetInstance()->client_login_url()), |
issue_auth_token_gurl_(GaiaUrls::GetInstance()->issue_auth_token_url()), |
- client_login_to_oauth2_gurl_( |
- GaiaUrls::GetInstance()->client_login_to_oauth2_url()), |
- oauth2_token_gurl_(GaiaUrls::GetInstance()->oauth2_token_url()), |
get_user_info_gurl_(GaiaUrls::GetInstance()->get_user_info_url()), |
token_auth_gurl_(GaiaUrls::GetInstance()->token_auth_url()), |
merge_session_gurl_(GaiaUrls::GetInstance()->merge_session_url()), |
@@ -172,9 +128,8 @@ |
content::URLFetcher* GaiaAuthFetcher::CreateGaiaFetcher( |
net::URLRequestContextGetter* getter, |
const std::string& body, |
- const std::string& headers, |
const GURL& gaia_gurl, |
- bool use_cookies, |
+ bool send_cookies, |
content::URLFetcherDelegate* delegate) { |
content::URLFetcher* to_return = content::URLFetcher::Create( |
0, gaia_gurl, content::URLFetcher::POST, delegate); |
@@ -186,12 +141,8 @@ |
// maintain a separation between the user's browsing and Chrome's internal |
// services. Where such mixing is desired (MergeSession), it will be done |
// explicitly. |
- if (!use_cookies) { |
- to_return->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | |
- net::LOAD_DO_NOT_SAVE_COOKIES); |
- } |
- if (!headers.empty()) |
- to_return->SetExtraRequestHeaders(headers); |
+ if (!send_cookies) |
+ to_return->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES); |
return to_return; |
} |
@@ -258,34 +209,6 @@ |
} |
// static |
-std::string GaiaAuthFetcher::MakeGetAuthCodeBody() { |
- std::string encoded_scope = net::EscapeUrlEncodedData( |
- GaiaUrls::GetInstance()->oauth1_login_scope(), true); |
- std::string encoded_client_id = net::EscapeUrlEncodedData( |
- GaiaUrls::GetInstance()->oauth2_chrome_client_id(), true); |
- return StringPrintf(kClientLoginToOAuth2BodyFormat, |
- encoded_scope.c_str(), |
- encoded_client_id.c_str()); |
-} |
- |
-// static |
-std::string GaiaAuthFetcher::MakeGetTokenPairBody( |
- const std::string& auth_code) { |
- std::string encoded_scope = net::EscapeUrlEncodedData( |
- GaiaUrls::GetInstance()->oauth1_login_scope(), true); |
- std::string encoded_client_id = net::EscapeUrlEncodedData( |
- GaiaUrls::GetInstance()->oauth2_chrome_client_id(), true); |
- std::string encoded_client_secret = net::EscapeUrlEncodedData( |
- GaiaUrls::GetInstance()->oauth2_chrome_client_secret(), true); |
- std::string encoded_auth_code = net::EscapeUrlEncodedData(auth_code, true); |
- return StringPrintf(kOAuth2CodeToTokenPairBodyFormat, |
- encoded_scope.c_str(), |
- encoded_client_id.c_str(), |
- encoded_client_secret.c_str(), |
- encoded_auth_code.c_str()); |
-} |
- |
-// static |
std::string GaiaAuthFetcher::MakeGetUserInfoBody(const std::string& lsid) { |
std::string encoded_lsid = net::EscapeUrlEncodedData(lsid, true); |
return base::StringPrintf(kGetUserInfoFormat, encoded_lsid.c_str()); |
@@ -320,12 +243,6 @@ |
encoded_source.c_str()); |
} |
-// static |
-std::string GaiaAuthFetcher::MakeGetAuthCodeHeader( |
- const std::string& auth_token) { |
- return StringPrintf(kAuthHeaderFormat, auth_token.c_str()); |
-} |
- |
// Helper method that extracts tokens from a successful reply. |
// static |
void GaiaAuthFetcher::ParseClientLoginResponse(const std::string& data, |
@@ -376,72 +293,6 @@ |
} |
} |
-// static |
-bool GaiaAuthFetcher::ParseClientLoginToOAuth2Response( |
- const net::ResponseCookies& cookies, |
- std::string* auth_code) { |
- DCHECK(auth_code); |
- net::ResponseCookies::const_iterator iter; |
- for (iter = cookies.begin(); iter != cookies.end(); ++iter) { |
- if (ParseClientLoginToOAuth2Cookie(*iter, auth_code)) |
- return true; |
- } |
- return false; |
-} |
- |
-// static |
-bool GaiaAuthFetcher::ParseOAuth2TokenPairResponse(const std::string& data, |
- std::string* refresh_token, |
- std::string* access_token, |
- int* expires_in_secs) { |
- DCHECK(refresh_token); |
- DCHECK(access_token); |
- base::JSONReader reader; |
- scoped_ptr<base::Value> value(reader.Read(data, false)); |
- if (!value.get() || value->GetType() != base::Value::TYPE_DICTIONARY) |
- return false; |
- |
- DictionaryValue* dict = static_cast<DictionaryValue*>(value.get()); |
- std::string rt; |
- std::string at; |
- int exp; |
- |
- if (!dict->GetStringWithoutPathExpansion(kOAuth2RefreshTokenKey, &rt) || |
- !dict->GetStringWithoutPathExpansion(kOAuth2AccessTokenKey, &at) || |
- !dict->GetIntegerWithoutPathExpansion(kOAuth2ExpiresInKey, &exp)) { |
- return false; |
- } |
- |
- refresh_token->assign(rt); |
- access_token->assign(at); |
- *expires_in_secs = exp; |
- return true; |
-} |
- |
-// static |
-bool GaiaAuthFetcher::ParseClientLoginToOAuth2Cookie(const std::string& cookie, |
- std::string* auth_code) { |
- std::vector<std::string> parts; |
- base::SplitString(cookie, ';', &parts); |
- // Per documentation, the cookie should have Secure and HttpOnly. |
- if (!CookiePartsContains(parts, kClientLoginToOAuth2CookiePartSecure) || |
- !CookiePartsContains(parts, kClientLoginToOAuth2CookiePartHttpOnly)) { |
- return false; |
- } |
- |
- std::vector<std::string>::const_iterator iter; |
- for (iter = parts.begin(); iter != parts.end(); ++iter) { |
- const std::string& part = *iter; |
- if (StartsWithASCII( |
- part, kClientLoginToOAuth2CookiePartCodePrefix, false)) { |
- auth_code->assign(part.substr( |
- kClientLoginToOAuth2CookiePartCodePrefixLength)); |
- return true; |
- } |
- } |
- return false; |
-} |
- |
void GaiaAuthFetcher::StartClientLogin( |
const std::string& username, |
const std::string& password, |
@@ -466,7 +317,6 @@ |
allow_hosted_accounts); |
fetcher_.reset(CreateGaiaFetcher(getter_, |
request_body_, |
- "", |
client_login_gurl_, |
false, |
this)); |
@@ -484,7 +334,6 @@ |
request_body_ = MakeIssueAuthTokenBody(sid, lsid, service); |
fetcher_.reset(CreateGaiaFetcher(getter_, |
request_body_, |
- "", |
issue_auth_token_gurl_, |
false, |
this)); |
@@ -492,22 +341,6 @@ |
fetcher_->Start(); |
} |
-void GaiaAuthFetcher::StartOAuthLoginTokenFetch( |
- const std::string& auth_token) { |
- DCHECK(!fetch_pending_) << "Tried to fetch two things at once!"; |
- |
- DVLOG(1) << "Starting OAuth login token fetch"; |
- request_body_ = MakeGetAuthCodeBody(); |
- fetcher_.reset(CreateGaiaFetcher(getter_, |
- request_body_, |
- MakeGetAuthCodeHeader(auth_token), |
- client_login_to_oauth2_gurl_, |
- false, |
- this)); |
- fetch_pending_ = true; |
- fetcher_->Start(); |
-} |
- |
void GaiaAuthFetcher::StartGetUserInfo(const std::string& lsid, |
const std::string& info_key) { |
DCHECK(!fetch_pending_) << "Tried to fetch two things at once!"; |
@@ -516,7 +349,6 @@ |
request_body_ = MakeGetUserInfoBody(lsid); |
fetcher_.reset(CreateGaiaFetcher(getter_, |
request_body_, |
- "", |
get_user_info_gurl_, |
false, |
this)); |
@@ -537,7 +369,6 @@ |
request_body_ = MakeTokenAuthBody(auth_token, continue_url, source_); |
fetcher_.reset(CreateGaiaFetcher(getter_, |
request_body_, |
- "", |
token_auth_gurl_, |
false, |
this)); |
@@ -562,7 +393,6 @@ |
request_body_ = MakeMergeSessionBody(auth_token, continue_url, source_); |
fetcher_.reset(CreateGaiaFetcher(getter_, |
request_body_, |
- "", |
merge_session_gurl_, |
true, |
this)); |
@@ -706,61 +536,6 @@ |
} |
} |
-void GaiaAuthFetcher::OnClientLoginToOAuth2Fetched( |
- const std::string& data, |
- const net::ResponseCookies& cookies, |
- const net::URLRequestStatus& status, |
- int response_code) { |
- if (status.is_success() && response_code == RC_REQUEST_OK) { |
- std::string auth_code; |
- if (!ParseClientLoginToOAuth2Response(cookies, &auth_code)) { |
- consumer_->OnOAuthLoginTokenFailure(GoogleServiceAuthError( |
- GoogleServiceAuthError::UNEXPECTED_RESPONSE)); |
- } else { |
- // Start GetTokenPair. |
- StartOAuth2TokenPairFetch(auth_code); |
- } |
- } else { |
- consumer_->OnOAuthLoginTokenFailure(GenerateAuthError(data, status)); |
- } |
-} |
- |
-void GaiaAuthFetcher::StartOAuth2TokenPairFetch(const std::string& auth_code) { |
- DCHECK(!fetch_pending_) << "Tried to fetch two things at once!"; |
- |
- DVLOG(1) << "Starting OAuth token pair fetch"; |
- request_body_ = MakeGetTokenPairBody(auth_code); |
- fetcher_.reset(CreateGaiaFetcher(getter_, |
- request_body_, |
- "", |
- oauth2_token_gurl_, |
- false, |
- this)); |
- fetch_pending_ = true; |
- fetcher_->Start(); |
-} |
- |
-void GaiaAuthFetcher::OnOAuth2TokenPairFetched( |
- const std::string& data, |
- const net::URLRequestStatus& status, |
- int response_code) { |
- if (status.is_success() && response_code == RC_REQUEST_OK) { |
- std::string refresh_token; |
- std::string access_token; |
- int expires_in_secs; |
- if (ParseOAuth2TokenPairResponse( |
- data, &refresh_token, &access_token, &expires_in_secs)) { |
- consumer_->OnOAuthLoginTokenSuccess( |
- refresh_token, access_token, expires_in_secs); |
- } else { |
- consumer_->OnOAuthLoginTokenFailure(GoogleServiceAuthError( |
- GoogleServiceAuthError::UNEXPECTED_RESPONSE)); |
- } |
- } else { |
- consumer_->OnOAuthLoginTokenFailure(GenerateAuthError(data, status)); |
- } |
-} |
- |
void GaiaAuthFetcher::OnGetUserInfoFetched( |
const std::string& data, |
const net::URLRequestStatus& status, |
@@ -816,11 +591,6 @@ |
OnClientLoginFetched(data, status, response_code); |
} else if (url == issue_auth_token_gurl_) { |
OnIssueAuthTokenFetched(data, status, response_code); |
- } else if (url == client_login_to_oauth2_gurl_) { |
- OnClientLoginToOAuth2Fetched( |
- data, source->GetCookies(), status, response_code); |
- } else if (url == oauth2_token_gurl_) { |
- OnOAuth2TokenPairFetched(data, status, response_code); |
} else if (url == get_user_info_gurl_) { |
OnGetUserInfoFetched(data, status, response_code); |
} else if (url == token_auth_gurl_) { |