gaia_urls.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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 3// found in the LICENSE file. 4 5#include "google_apis/gaia/gaia_urls.h" 6 7#include "base/command_line.h" 8#include "base/logging.h" 9#include "google_apis/gaia/gaia_switches.h" 10#include "google_apis/google_api_keys.h" 11 12namespace { 13 14// Gaia service constants 15const char kDefaultGaiaUrl[] = "https://accounts.google.com"; 16const char kDefaultGoogleApisBaseUrl[] = "www.googleapis.com"; 17const char kCaptchaUrlPrefixSuffix[] = "/"; 18 19// API calls from accounts.google.com 20const char kClientLoginUrlSuffix[] = "/ClientLogin"; 21const char kServiceLoginUrlSuffix[] = "/ServiceLogin"; 22const char kServiceLogoutUrlSuffix[] = "/Logout"; 23const char kIssueAuthTokenUrlSuffix[] = "/IssueAuthToken"; 24const char kGetUserInfoUrlSuffix[] = "/GetUserInfo"; 25const char kTokenAuthUrlSuffix[] = "/TokenAuth"; 26const char kMergeSessionUrlSuffix[] = "/MergeSession"; 27const char kOAuthGetAccessTokenUrlSuffix[] = "/OAuthGetAccessToken"; 28const char kOAuthWrapBridgeUrlSuffix[] = "/OAuthWrapBridge"; 29const char kOAuth1LoginUrlSuffix[] = "/OAuthLogin"; 30const char kOAuthRevokeTokenUrlSuffix[] = "/AuthSubRevokeToken"; 31 32// API calls from accounts.google.com (LSO) 33const char kGetOAuthTokenUrlSuffix[] = "/o/oauth/GetOAuthToken/"; 34const char kClientLoginToOAuth2UrlSuffix[] = "/o/oauth2/programmatic_auth"; 35const char kOAuth2AuthUrlSuffix[] = "/o/oauth2/auth"; 36const char kOAuth2RevokeUrlSuffix[] = "/o/oauth2/revoke"; 37const char kOAuth2TokenUrlSuffix[] = "/o/oauth2/token"; 38const char kClientOAuthUrlSuffix[] = "/ClientOAuth"; 39 40// API calls from www.googleapis.com 41const char kOAuth2IssueTokenUrlSuffix[] = "/oauth2/v2/IssueToken"; 42const char kOAuth2TokenInfoUrlSuffix[] = "/oauth2/v2/tokeninfo"; 43const char kOAuthUserInfoUrlSuffix[] = "/oauth2/v1/userinfo"; 44const char kOAuthWrapBridgeUserInfoScopeUrlSuffix[] = "/auth/userinfo.email"; 45 46const char kOAuth1LoginScope[] = 47 "https://www.google.com/accounts/OAuthLogin"; 48 49void GetSwitchValueWithDefault(const char* switch_value, 50 const char* default_value, 51 std::string* output_value) { 52 CommandLine* command_line = CommandLine::ForCurrentProcess(); 53 if (command_line->HasSwitch(switch_value)) { 54 *output_value = command_line->GetSwitchValueASCII(switch_value); 55 } else { 56 *output_value = default_value; 57 } 58} 59 60} // namespace 61 62GaiaUrls* GaiaUrls::GetInstance() { 63 return Singleton<GaiaUrls>::get(); 64} 65 66GaiaUrls::GaiaUrls() { 67 std::string gaia_url_str; 68 GetSwitchValueWithDefault(switches::kGaiaUrl, 69 kDefaultGaiaUrl, 70 &gaia_url_str); 71 gaia_url_ = GURL(gaia_url_str); 72 DCHECK(gaia_url_.is_valid()); 73 74 GetSwitchValueWithDefault(switches::kLsoUrl, 75 kDefaultGaiaUrl, 76 &lso_origin_url_); 77 78 std::string google_apis_base; 79 GetSwitchValueWithDefault(switches::kGoogleApisHost, 80 kDefaultGoogleApisBaseUrl, 81 &google_apis_base); 82 83 captcha_url_prefix_ = "http://" + gaia_url_.host() + 84 (gaia_url_.has_port() ? ":" + gaia_url_.port() : "") + 85 kCaptchaUrlPrefixSuffix; 86 87 google_apis_origin_url_ = "https://" + google_apis_base; 88 89 oauth2_chrome_client_id_ = 90 google_apis::GetOAuth2ClientID(google_apis::CLIENT_MAIN); 91 oauth2_chrome_client_secret_ = 92 google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_MAIN); 93 94 // URLs from accounts.google.com. 95 gaia_login_form_realm_ = gaia_url_str + "/"; 96 client_login_url_ = gaia_url_str + kClientLoginUrlSuffix; 97 service_login_url_ = gaia_url_str + kServiceLoginUrlSuffix; 98 service_logout_url_ = gaia_url_str + kServiceLogoutUrlSuffix; 99 issue_auth_token_url_ = gaia_url_str + kIssueAuthTokenUrlSuffix; 100 get_user_info_url_ = gaia_url_str + kGetUserInfoUrlSuffix; 101 token_auth_url_ = gaia_url_str + kTokenAuthUrlSuffix; 102 merge_session_url_ = gaia_url_str + kMergeSessionUrlSuffix; 103 oauth_get_access_token_url_ = gaia_url_str + kOAuthGetAccessTokenUrlSuffix; 104 oauth_wrap_bridge_url_ = gaia_url_str + kOAuthWrapBridgeUrlSuffix; 105 oauth_revoke_token_url_ = gaia_url_str + kOAuthRevokeTokenUrlSuffix; 106 oauth1_login_url_ = gaia_url_str + kOAuth1LoginUrlSuffix; 107 108 // URLs from accounts.google.com (LSO). 109 get_oauth_token_url_ = lso_origin_url_ + kGetOAuthTokenUrlSuffix; 110 std::string client_login_to_oauth2_url = lso_origin_url_ + 111 kClientLoginToOAuth2UrlSuffix; 112 oauth2_auth_url_ = lso_origin_url_ + kOAuth2AuthUrlSuffix; 113 std::string oauth2_token_url = lso_origin_url_ + kOAuth2TokenUrlSuffix; 114 oauth2_revoke_url_ = lso_origin_url_ + kOAuth2RevokeUrlSuffix; 115 116 // URLs from www.googleapis.com. 117 oauth_wrap_bridge_user_info_scope_ = google_apis_origin_url_ + 118 kOAuthWrapBridgeUserInfoScopeUrlSuffix; 119 std::string oauth2_issue_token_url = google_apis_origin_url_ + 120 kOAuth2IssueTokenUrlSuffix; 121 oauth2_token_info_url_ = google_apis_origin_url_ + kOAuth2TokenInfoUrlSuffix; 122 std::string oauth_user_info_url = google_apis_origin_url_ + 123 kOAuthUserInfoUrlSuffix; 124 125 // TODO(zelidrag): Get rid of all these switches since all URLs should be 126 // controlled only with --gaia-url, --lso-url and --google-apis-host. 127 GetSwitchValueWithDefault(switches::kOAuth1LoginScope, 128 kOAuth1LoginScope, 129 &oauth1_login_scope_); 130 GetSwitchValueWithDefault(switches::kClientLoginToOAuth2Url, 131 client_login_to_oauth2_url.c_str(), 132 &client_login_to_oauth2_url_); 133 GetSwitchValueWithDefault(switches::kOAuth2TokenUrl, 134 oauth2_token_url.c_str(), 135 &oauth2_token_url_); 136 GetSwitchValueWithDefault(switches::kOAuth2IssueTokenUrl, 137 oauth2_issue_token_url.c_str(), 138 &oauth2_issue_token_url_); 139 GetSwitchValueWithDefault(switches::kOAuthUserInfoUrl, 140 oauth_user_info_url.c_str(), 141 &oauth_user_info_url_); 142} 143 144GaiaUrls::~GaiaUrls() { 145} 146 147const std::string& GaiaUrls::captcha_url_prefix() const { 148 return captcha_url_prefix_; 149} 150 151const GURL& GaiaUrls::gaia_url() const { 152 return gaia_url_; 153} 154 155const std::string& GaiaUrls::client_login_url() const { 156 return client_login_url_; 157} 158 159const std::string& GaiaUrls::service_login_url() const { 160 return service_login_url_; 161} 162 163const std::string& GaiaUrls::service_logout_url() const { 164 return service_logout_url_; 165} 166 167const std::string& GaiaUrls::issue_auth_token_url() const { 168 return issue_auth_token_url_; 169} 170 171const std::string& GaiaUrls::get_user_info_url() const { 172 return get_user_info_url_; 173} 174 175const std::string& GaiaUrls::token_auth_url() const { 176 return token_auth_url_; 177} 178 179const std::string& GaiaUrls::merge_session_url() const { 180 return merge_session_url_; 181} 182 183const std::string& GaiaUrls::get_oauth_token_url() const { 184 return get_oauth_token_url_; 185} 186 187const std::string& GaiaUrls::oauth_get_access_token_url() const { 188 return oauth_get_access_token_url_; 189} 190 191const std::string& GaiaUrls::oauth_wrap_bridge_url() const { 192 return oauth_wrap_bridge_url_; 193} 194 195const std::string& GaiaUrls::oauth_user_info_url() const { 196 return oauth_user_info_url_; 197} 198 199const std::string& GaiaUrls::oauth_revoke_token_url() const { 200 return oauth_revoke_token_url_; 201} 202 203const std::string& GaiaUrls::oauth1_login_url() const { 204 return oauth1_login_url_; 205} 206 207const std::string& GaiaUrls::oauth1_login_scope() const { 208 return oauth1_login_scope_; 209} 210 211const std::string& GaiaUrls::oauth_wrap_bridge_user_info_scope() const { 212 return oauth_wrap_bridge_user_info_scope_; 213} 214 215const std::string& GaiaUrls::oauth2_chrome_client_id() const { 216 return oauth2_chrome_client_id_; 217} 218 219const std::string& GaiaUrls::oauth2_chrome_client_secret() const { 220 return oauth2_chrome_client_secret_; 221} 222 223const std::string& GaiaUrls::client_login_to_oauth2_url() const { 224 return client_login_to_oauth2_url_; 225} 226 227const std::string& GaiaUrls::oauth2_auth_url() const { 228 return oauth2_auth_url_; 229} 230 231const std::string& GaiaUrls::oauth2_token_url() const { 232 return oauth2_token_url_; 233} 234 235const std::string& GaiaUrls::oauth2_issue_token_url() const { 236 return oauth2_issue_token_url_; 237} 238 239const std::string& GaiaUrls::oauth2_token_info_url() const { 240 return oauth2_token_info_url_; 241} 242 243const std::string& GaiaUrls::oauth2_revoke_url() const { 244 return oauth2_revoke_url_; 245} 246 247const std::string& GaiaUrls::gaia_login_form_realm() const { 248 return gaia_login_form_realm_; 249} 250