| Index: chrome/common/net/gaia/authentication_fetcher.cc
|
| diff --git a/chrome/common/net/gaia/authentication_fetcher.cc b/chrome/common/net/gaia/authentication_fetcher.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..226174284dbf91cd021525b5a8276487934c388b
|
| --- /dev/null
|
| +++ b/chrome/common/net/gaia/authentication_fetcher.cc
|
| @@ -0,0 +1,163 @@
|
| +// Copyright (c) 2011 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.
|
| +
|
| +#include "chrome/common/net/gaia/authentication_fetcher.h"
|
| +
|
| +#include <string>
|
| +#include <utility>
|
| +#include <vector>
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/string_split.h"
|
| +#include "base/string_util.h"
|
| +#include "chrome/browser/net/gaia/authentication_service.h"
|
| +#include "chrome/common/net/gaia/gaia_auth_fetcher.h"
|
| +#include "chrome/common/net/gaia/gaia_constants.h"
|
| +#include "chrome/common/net/gaia/google_service_auth_error.h"
|
| +#include "chrome/common/net/gaia/authentication_consumer_oauth.h"
|
| +#include "chrome/common/net/gaia/authentication_fetcher_oauth.h"
|
| +#include "chrome/common/net/http_return.h"
|
| +#include "net/base/load_flags.h"
|
| +#include "net/url_request/url_request_context_getter.h"
|
| +#include "net/url_request/url_request_status.h"
|
| +#include "third_party/libjingle/source/talk/base/urlencode.h"
|
| +
|
| +// TODO(chron): Add sourceless version of this formatter.
|
| +// static
|
| +const char AuthenticationFetcher::kAuthenticationFormat[] =
|
| + "Email=%s&"
|
| + "Passwd=%s&"
|
| + "PersistentCookie=%s&"
|
| + "accountType=%s&"
|
| + "source=%s&"
|
| + "service=%s";
|
| +// static
|
| +const char AuthenticationFetcher::kAuthenticationCaptchaFormat[] =
|
| + "Email=%s&"
|
| + "Passwd=%s&"
|
| + "PersistentCookie=%s&"
|
| + "accountType=%s&"
|
| + "source=%s&"
|
| + "service=%s&"
|
| + "logintoken=%s&"
|
| + "logincaptcha=%s";
|
| +// static
|
| +const char AuthenticationFetcher::kIssueAuthTokenFormat[] =
|
| + "SID=%s&"
|
| + "LSID=%s&"
|
| + "service=%s&"
|
| + "Session=%s";
|
| +// static
|
| +const char AuthenticationFetcher::kGetUserInfoFormat[] =
|
| + "LSID=%s";
|
| +
|
| +// static
|
| +const char AuthenticationFetcher::kAccountDeletedError[] = "AccountDeleted";
|
| +// static
|
| +const char AuthenticationFetcher::kAccountDisabledError[] = "AccountDisabled";
|
| +// static
|
| +const char AuthenticationFetcher::kBadAuthenticationError[] =
|
| + "BadAuthentication";
|
| +// static
|
| +const char AuthenticationFetcher::kCaptchaError[] = "CaptchaRequired";
|
| +// static
|
| +const char AuthenticationFetcher::kServiceUnavailableError[] =
|
| + "ServiceUnavailable";
|
| +// static
|
| +const char AuthenticationFetcher::kErrorParam[] = "Error";
|
| +// static
|
| +const char AuthenticationFetcher::kErrorUrlParam[] = "Url";
|
| +// static
|
| +const char AuthenticationFetcher::kCaptchaUrlParam[] = "CaptchaUrl";
|
| +// static
|
| +const char AuthenticationFetcher::kCaptchaTokenParam[] = "CaptchaToken";
|
| +// static
|
| +const char AuthenticationFetcher::kCaptchaUrlPrefix[] =
|
| + "http://www.google.com/accounts/";
|
| +
|
| +// static
|
| +const char AuthenticationFetcher::kCookiePersistence[] = "true";
|
| +// static
|
| +// TODO(johnnyg): When hosted accounts are supported by sync,
|
| +// we can always use "HOSTED_OR_GOOGLE"
|
| +const char AuthenticationFetcher::kAccountTypeHostedOrGoogle[] =
|
| + "HOSTED_OR_GOOGLE";
|
| +const char AuthenticationFetcher::kAccountTypeGoogle[] =
|
| + "GOOGLE";
|
| +
|
| +// static
|
| +const char AuthenticationFetcher::kSecondFactor[] = "Info=InvalidSecondFactor";
|
| +
|
| +// TODO(chron): These urls are also in auth_response_handler.h.
|
| +// The URLs for different calls in the Google Accounts programmatic login API.
|
| +const char AuthenticationFetcher::kAuthenticationUrl[] =
|
| + "https://www.google.com/accounts/ClientLogin";
|
| +const char AuthenticationFetcher::kIssueAuthTokenUrl[] =
|
| + "https://www.google.com/accounts/IssueAuthToken";
|
| +const char AuthenticationFetcher::kGetUserInfoUrl[] =
|
| + "https://www.google.com/accounts/GetUserInfo";
|
| +
|
| +AuthenticationFetcher::AuthenticationFetcher(
|
| + AuthenticationConsumer* consumer,
|
| + const std::string& source,
|
| + net::URLRequestContextGetter* getter)
|
| + : consumer_(consumer),
|
| + getter_(getter),
|
| + source_(source),
|
| + fetch_pending_(false) {}
|
| +
|
| +AuthenticationFetcher::~AuthenticationFetcher() {}
|
| +
|
| +bool AuthenticationFetcher::HasPendingFetch() const {
|
| + return fetch_pending_;
|
| +}
|
| +
|
| +void AuthenticationFetcher::CancelRequest() {
|
| + fetcher_.reset();
|
| + fetch_pending_ = false;
|
| +}
|
| +
|
| +void AuthenticationFetcher::ClearPending() {
|
| + fetch_pending_ = false;
|
| +}
|
| +
|
| +void AuthenticationFetcher::SetPending() {
|
| + fetch_pending_ = true;
|
| +}
|
| +
|
| +// static
|
| +AuthenticationFetcher* AuthenticationFetcher::CreateAuthenticationFetcher(
|
| + const std::string& variant,
|
| + AuthenticationConsumer* consumer,
|
| + const std::string& source,
|
| + net::URLRequestContextGetter* getter) {
|
| + if (variant == AuthenticationService::kClientLoginVariant) {
|
| + return new GaiaAuthFetcher(
|
| + static_cast<GaiaAuthConsumer*>(consumer), source, getter);
|
| + }
|
| + if (variant == AuthenticationService::kOAuthVariant) {
|
| + return new AuthenticationFetcherOAuth(
|
| + static_cast<AuthenticationConsumerOAuth*>(consumer), source, getter);
|
| + }
|
| + NOTREACHED();
|
| + return NULL;
|
| +}
|
| +
|
| +// static
|
| +URLFetcher* AuthenticationFetcher::CreateAuthenticationFetcher(
|
| + net::URLRequestContextGetter* getter,
|
| + const std::string& body,
|
| + const GURL& gaia_gurl,
|
| + URLFetcher::Delegate* delegate) {
|
| +
|
| + URLFetcher* to_return =
|
| + URLFetcher::Create(0,
|
| + gaia_gurl,
|
| + URLFetcher::POST,
|
| + delegate);
|
| + to_return->set_request_context(getter);
|
| + to_return->set_load_flags(net::LOAD_DO_NOT_SEND_COOKIES);
|
| + to_return->set_upload_data("application/x-www-form-urlencoded", body);
|
| + return to_return;
|
| +}
|
|
|