OLD | NEW |
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 "google_apis/gaia/gaia_urls.h" | 5 #include "google_apis/gaia/gaia_urls.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "google_apis/gaia/gaia_switches.h" | 8 #include "google_apis/gaia/gaia_switches.h" |
9 #include "google_apis/google_api_keys.h" | 9 #include "google_apis/google_api_keys.h" |
10 | 10 |
11 namespace { | 11 namespace { |
12 | 12 |
13 // Gaia service constants | 13 // Gaia service constants |
14 const char kDefaultGaiaBaseUrl[] = "accounts.google.com"; | 14 const char kDefaultGaiaBaseUrl[] = "accounts.google.com"; |
| 15 const char kDefaultGoogleApisBaseUrl[] = "www.googleapis.com"; |
15 const char kCaptchaUrlPrefixSuffix[] = "/"; | 16 const char kCaptchaUrlPrefixSuffix[] = "/"; |
| 17 |
| 18 // API calls from accounts.google.com |
16 const char kClientLoginUrlSuffix[] = "/ClientLogin"; | 19 const char kClientLoginUrlSuffix[] = "/ClientLogin"; |
17 const char kServiceLoginUrlSuffix[] = "/ServiceLogin"; | 20 const char kServiceLoginUrlSuffix[] = "/ServiceLogin"; |
18 const char kIssueAuthTokenUrlSuffix[] = "/IssueAuthToken"; | 21 const char kIssueAuthTokenUrlSuffix[] = "/IssueAuthToken"; |
19 const char kGetUserInfoUrlSuffix[] = "/GetUserInfo"; | 22 const char kGetUserInfoUrlSuffix[] = "/GetUserInfo"; |
20 const char kTokenAuthUrlSuffix[] = "/TokenAuth"; | 23 const char kTokenAuthUrlSuffix[] = "/TokenAuth"; |
21 const char kMergeSessionUrlSuffix[] = "/MergeSession"; | 24 const char kMergeSessionUrlSuffix[] = "/MergeSession"; |
22 | |
23 const char kOAuthGetAccessTokenUrlSuffix[] = "/OAuthGetAccessToken"; | 25 const char kOAuthGetAccessTokenUrlSuffix[] = "/OAuthGetAccessToken"; |
24 const char kOAuthWrapBridgeUrlSuffix[] = "/OAuthWrapBridge"; | 26 const char kOAuthWrapBridgeUrlSuffix[] = "/OAuthWrapBridge"; |
25 const char kOAuth1LoginUrlSuffix[] = "/OAuthLogin"; | 27 const char kOAuth1LoginUrlSuffix[] = "/OAuthLogin"; |
26 const char kOAuthRevokeTokenUrlSuffix[] = "/AuthSubRevokeToken"; | 28 const char kOAuthRevokeTokenUrlSuffix[] = "/AuthSubRevokeToken"; |
27 | 29 |
28 // Federated login constants | 30 // API calls from accounts.google.com (LSO) |
29 const char kDefaultFederatedLoginHost[] = "www.google.com"; | |
30 const char kDefaultFederatedLoginPath[] = "/accounts"; | |
31 const char kGetOAuthTokenUrlSuffix[] = "/o/oauth/GetOAuthToken/"; | 31 const char kGetOAuthTokenUrlSuffix[] = "/o/oauth/GetOAuthToken/"; |
| 32 const char kClientLoginToOAuth2UrlSuffix[] = "/o/oauth2/programmatic_auth"; |
| 33 const char kOAuth2TokenUrlSuffix[] = "/o/oauth2/token"; |
| 34 const char kClientOAuthUrlSuffix[] = "/ClientOAuth"; |
32 | 35 |
33 const char kClientLoginToOAuth2Url[] = | 36 // API calls from www.googleapis.com |
34 "https://accounts.google.com/o/oauth2/programmatic_auth"; | 37 const char kOAuth2IssueTokenUrlSuffix[] = "/oauth2/v2/IssueToken"; |
35 const char kOAuth2TokenUrl[] = | 38 const char kOAuthUserInfoUrlSuffix[] = "/oauth2/v1/userinfo"; |
36 "https://accounts.google.com/o/oauth2/token"; | 39 const char kOAuthWrapBridgeUserInfoScopeUrlSuffix[] = "/auth/userinfo.email"; |
37 const char kOAuth2IssueTokenUrl[] = | 40 |
38 "https://www.googleapis.com/oauth2/v2/IssueToken"; | |
39 const char kOAuth1LoginScope[] = | 41 const char kOAuth1LoginScope[] = |
40 "https://www.google.com/accounts/OAuthLogin"; | 42 "https://www.google.com/accounts/OAuthLogin"; |
41 const char kOAuthUserInfoUrl[] = | |
42 "https://www.googleapis.com/oauth2/v1/userinfo"; | |
43 | |
44 | 43 |
45 void GetSwitchValueWithDefault(const char* switch_value, | 44 void GetSwitchValueWithDefault(const char* switch_value, |
46 const char* default_value, | 45 const char* default_value, |
47 std::string* output_value) { | 46 std::string* output_value) { |
48 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 47 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
49 if (command_line->HasSwitch(switch_value)) { | 48 if (command_line->HasSwitch(switch_value)) { |
50 *output_value = command_line->GetSwitchValueASCII(switch_value); | 49 *output_value = command_line->GetSwitchValueASCII(switch_value); |
51 } else { | 50 } else { |
52 *output_value = default_value; | 51 *output_value = default_value; |
53 } | 52 } |
54 } | 53 } |
55 | 54 |
56 } // namespace | 55 } // namespace |
57 | 56 |
58 GaiaUrls* GaiaUrls::GetInstance() { | 57 GaiaUrls* GaiaUrls::GetInstance() { |
59 return Singleton<GaiaUrls>::get(); | 58 return Singleton<GaiaUrls>::get(); |
60 } | 59 } |
61 | 60 |
62 GaiaUrls::GaiaUrls() { | 61 GaiaUrls::GaiaUrls() { |
63 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 62 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
64 std::string host_base; | 63 std::string host_base; |
65 GetSwitchValueWithDefault(switches::kGaiaHost, kDefaultGaiaBaseUrl, | 64 GetSwitchValueWithDefault(switches::kGaiaHost, kDefaultGaiaBaseUrl, |
66 &host_base); | 65 &host_base); |
67 | 66 |
| 67 std::string lso_base; |
| 68 GetSwitchValueWithDefault(switches::kLsoHost, kDefaultGaiaBaseUrl, |
| 69 &lso_base); |
| 70 |
| 71 std::string google_apis_base; |
| 72 GetSwitchValueWithDefault(switches::kGoogleApisHost, |
| 73 kDefaultGoogleApisBaseUrl, |
| 74 &google_apis_base); |
| 75 |
68 captcha_url_prefix_ = "http://" + host_base + kCaptchaUrlPrefixSuffix; | 76 captcha_url_prefix_ = "http://" + host_base + kCaptchaUrlPrefixSuffix; |
69 gaia_origin_url_ = "https://" + host_base; | 77 gaia_origin_url_ = "https://" + host_base; |
| 78 lso_origin_url_ = "https://" + lso_base; |
| 79 google_apis_origin_url_ = "https://" + google_apis_base; |
70 std::string gaia_url_base = gaia_origin_url_; | 80 std::string gaia_url_base = gaia_origin_url_; |
71 if (command_line->HasSwitch(switches::kGaiaUrlPath)) { | 81 if (command_line->HasSwitch(switches::kGaiaUrlPath)) { |
72 std::string path = | 82 std::string path = |
73 command_line->GetSwitchValueASCII(switches::kGaiaUrlPath); | 83 command_line->GetSwitchValueASCII(switches::kGaiaUrlPath); |
74 if (!path.empty()) { | 84 if (!path.empty()) { |
75 if (path[0] != '/') | 85 if (path[0] != '/') |
76 gaia_url_base.append("/"); | 86 gaia_url_base.append("/"); |
77 | 87 |
78 gaia_url_base.append(path); | 88 gaia_url_base.append(path); |
79 } | 89 } |
80 } | 90 } |
81 | 91 |
| 92 |
| 93 oauth2_chrome_client_id_ = |
| 94 google_apis::GetOAuth2ClientID(google_apis::CLIENT_MAIN); |
| 95 oauth2_chrome_client_secret_ = |
| 96 google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_MAIN); |
| 97 |
| 98 // URLs from accounts.google.com. |
| 99 gaia_login_form_realm_ = gaia_url_base + "/"; |
82 client_login_url_ = gaia_url_base + kClientLoginUrlSuffix; | 100 client_login_url_ = gaia_url_base + kClientLoginUrlSuffix; |
83 service_login_url_ = gaia_url_base + kServiceLoginUrlSuffix; | 101 service_login_url_ = gaia_url_base + kServiceLoginUrlSuffix; |
84 issue_auth_token_url_ = gaia_url_base + kIssueAuthTokenUrlSuffix; | 102 issue_auth_token_url_ = gaia_url_base + kIssueAuthTokenUrlSuffix; |
85 get_user_info_url_ = gaia_url_base + kGetUserInfoUrlSuffix; | 103 get_user_info_url_ = gaia_url_base + kGetUserInfoUrlSuffix; |
86 token_auth_url_ = gaia_url_base + kTokenAuthUrlSuffix; | 104 token_auth_url_ = gaia_url_base + kTokenAuthUrlSuffix; |
87 merge_session_url_ = gaia_url_base + kMergeSessionUrlSuffix; | 105 merge_session_url_ = gaia_url_base + kMergeSessionUrlSuffix; |
88 get_oauth_token_url_ = gaia_url_base + kGetOAuthTokenUrlSuffix; | |
89 oauth_get_access_token_url_ = gaia_url_base + | 106 oauth_get_access_token_url_ = gaia_url_base + |
90 kOAuthGetAccessTokenUrlSuffix; | 107 kOAuthGetAccessTokenUrlSuffix; |
91 oauth_wrap_bridge_url_ = gaia_url_base + kOAuthWrapBridgeUrlSuffix; | 108 oauth_wrap_bridge_url_ = gaia_url_base + kOAuthWrapBridgeUrlSuffix; |
92 oauth_revoke_token_url_ = gaia_url_base + kOAuthRevokeTokenUrlSuffix; | 109 oauth_revoke_token_url_ = gaia_url_base + kOAuthRevokeTokenUrlSuffix; |
93 oauth1_login_url_ = gaia_url_base + kOAuth1LoginUrlSuffix; | 110 oauth1_login_url_ = gaia_url_base + kOAuth1LoginUrlSuffix; |
| 111 client_oauth_url_ = gaia_url_base + kClientOAuthUrlSuffix; |
94 | 112 |
| 113 // URLs from accounts.google.com (LSO). |
| 114 get_oauth_token_url_ = lso_origin_url_ + kGetOAuthTokenUrlSuffix; |
| 115 std::string client_login_to_oauth2_url = lso_origin_url_ + |
| 116 kClientLoginToOAuth2UrlSuffix; |
| 117 std::string oauth2_token_url = lso_origin_url_ + kOAuth2TokenUrlSuffix; |
| 118 |
| 119 // URLs from www.googleapis.com. |
| 120 oauth_wrap_bridge_user_info_scope_ = google_apis_origin_url_ + |
| 121 kOAuthWrapBridgeUserInfoScopeUrlSuffix; |
| 122 std::string oauth2_issue_token_url = google_apis_origin_url_ + |
| 123 kOAuth2IssueTokenUrlSuffix; |
| 124 std::string oauth_user_info_url = google_apis_origin_url_ + |
| 125 kOAuthUserInfoUrlSuffix; |
| 126 |
| 127 // TODO(zelidrag): Get rid of all these switches since all URLs should be |
| 128 // controlled only with --gaia-host, --lso-host and --google-apis-host. |
95 GetSwitchValueWithDefault(switches::kOAuth1LoginScope, | 129 GetSwitchValueWithDefault(switches::kOAuth1LoginScope, |
96 kOAuth1LoginScope, | 130 kOAuth1LoginScope, |
97 &oauth1_login_scope_); | 131 &oauth1_login_scope_); |
98 | |
99 // TODO(joaodasilva): these aren't configurable for now, but are managed here | |
100 // so that users of Gaia URLs don't have to use static constants. | |
101 // http://crbug.com/97126 | |
102 oauth_wrap_bridge_user_info_scope_ = | |
103 "https://www.googleapis.com/auth/userinfo.email"; | |
104 client_oauth_url_ = "https://accounts.google.com/ClientOAuth"; | |
105 | |
106 oauth2_chrome_client_id_ = | |
107 google_apis::GetOAuth2ClientID(google_apis::CLIENT_MAIN); | |
108 oauth2_chrome_client_secret_ = | |
109 google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_MAIN); | |
110 | |
111 GetSwitchValueWithDefault(switches::kClientLoginToOAuth2Url, | 132 GetSwitchValueWithDefault(switches::kClientLoginToOAuth2Url, |
112 kClientLoginToOAuth2Url, | 133 client_login_to_oauth2_url.c_str(), |
113 &client_login_to_oauth2_url_); | 134 &client_login_to_oauth2_url_); |
114 GetSwitchValueWithDefault(switches::kOAuth2TokenUrl, | 135 GetSwitchValueWithDefault(switches::kOAuth2TokenUrl, |
115 kOAuth2TokenUrl, | 136 oauth2_token_url.c_str(), |
116 &oauth2_token_url_); | 137 &oauth2_token_url_); |
117 GetSwitchValueWithDefault(switches::kOAuth2IssueTokenUrl, | 138 GetSwitchValueWithDefault(switches::kOAuth2IssueTokenUrl, |
118 kOAuth2IssueTokenUrl, | 139 oauth2_issue_token_url.c_str(), |
119 &oauth2_issue_token_url_); | 140 &oauth2_issue_token_url_); |
120 GetSwitchValueWithDefault(switches::kOAuthUserInfoUrl, | 141 GetSwitchValueWithDefault(switches::kOAuthUserInfoUrl, |
121 kOAuthUserInfoUrl, | 142 oauth_user_info_url.c_str(), |
122 &oauth_user_info_url_); | 143 &oauth_user_info_url_); |
123 | |
124 gaia_login_form_realm_ = "https://accounts.google.com/"; | |
125 } | 144 } |
126 | 145 |
127 GaiaUrls::~GaiaUrls() { | 146 GaiaUrls::~GaiaUrls() { |
128 } | 147 } |
129 | 148 |
130 const std::string& GaiaUrls::captcha_url_prefix() { | 149 const std::string& GaiaUrls::captcha_url_prefix() { |
131 return captcha_url_prefix_; | 150 return captcha_url_prefix_; |
132 } | 151 } |
133 | 152 |
134 const std::string& GaiaUrls::gaia_origin_url() { | 153 const std::string& GaiaUrls::gaia_origin_url() { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 } | 231 } |
213 | 232 |
214 const std::string& GaiaUrls::oauth2_issue_token_url() { | 233 const std::string& GaiaUrls::oauth2_issue_token_url() { |
215 return oauth2_issue_token_url_; | 234 return oauth2_issue_token_url_; |
216 } | 235 } |
217 | 236 |
218 | 237 |
219 const std::string& GaiaUrls::gaia_login_form_realm() { | 238 const std::string& GaiaUrls::gaia_login_form_realm() { |
220 return gaia_login_form_realm_; | 239 return gaia_login_form_realm_; |
221 } | 240 } |
OLD | NEW |