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

Side by Side Diff: google_apis/gaia/fake_gaia.cc

Issue 136573002: Retrieve the authenticated user's e-mail from GAIA during SAML login (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments. Created 6 years, 11 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
« no previous file with comments | « google_apis/gaia/fake_gaia.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/fake_gaia.h" 5 #include "google_apis/gaia/fake_gaia.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/base_paths.h" 9 #include "base/base_paths.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 if (StartsWithASCII(auth_header_entry->second, auth_token_prefix, true)) { 86 if (StartsWithASCII(auth_header_entry->second, auth_token_prefix, true)) {
87 *access_token = auth_header_entry->second.substr( 87 *access_token = auth_header_entry->second.substr(
88 strlen(auth_token_prefix)); 88 strlen(auth_token_prefix));
89 return true; 89 return true;
90 } 90 }
91 } 91 }
92 92
93 return false; 93 return false;
94 } 94 }
95 95
96 void SetCookies(BasicHttpResponse* http_response,
97 const std::string& sid_cookie,
98 const std::string& lsid_cookie) {
99 http_response->AddCustomHeader(
100 "Set-Cookie",
101 base::StringPrintf("SID=%s; Path=/; HttpOnly;", sid_cookie.c_str()));
102 http_response->AddCustomHeader(
103 "Set-Cookie",
104 base::StringPrintf("LSID=%s; Path=/; HttpOnly;", lsid_cookie.c_str()));
96 } 105 }
97 106
107 } // namespace
108
98 FakeGaia::AccessTokenInfo::AccessTokenInfo() 109 FakeGaia::AccessTokenInfo::AccessTokenInfo()
99 : expires_in(3600) {} 110 : expires_in(3600) {}
100 111
101 FakeGaia::AccessTokenInfo::~AccessTokenInfo() {} 112 FakeGaia::AccessTokenInfo::~AccessTokenInfo() {}
102 113
103 FakeGaia::MergeSessionParams::MergeSessionParams() { 114 FakeGaia::MergeSessionParams::MergeSessionParams() {
104 } 115 }
105 116
106 FakeGaia::MergeSessionParams::~MergeSessionParams() { 117 FakeGaia::MergeSessionParams::~MergeSessionParams() {
107 } 118 }
108 119
109 FakeGaia::FakeGaia() { 120 FakeGaia::FakeGaia() {
110 base::FilePath source_root_dir; 121 base::FilePath source_root_dir;
111 PathService::Get(base::DIR_SOURCE_ROOT, &source_root_dir); 122 PathService::Get(base::DIR_SOURCE_ROOT, &source_root_dir);
112 CHECK(base::ReadFileToString( 123 CHECK(base::ReadFileToString(
113 source_root_dir.Append(base::FilePath(kServiceLogin)), 124 source_root_dir.Append(base::FilePath(kServiceLogin)),
114 &service_login_response_)); 125 &service_login_response_));
115 } 126 }
116 127
117 FakeGaia::~FakeGaia() {} 128 FakeGaia::~FakeGaia() {}
118 129
119 void FakeGaia::SetMergeSessionParams( 130 void FakeGaia::SetMergeSessionParams(
120 const MergeSessionParams& params) { 131 const MergeSessionParams& params) {
121 merge_session_params_ = params; 132 merge_session_params_ = params;
122 } 133 }
123 134
124 void FakeGaia::Initialize() { 135 void FakeGaia::Initialize() {
125 GaiaUrls* gaia_urls = GaiaUrls::GetInstance(); 136 GaiaUrls* gaia_urls = GaiaUrls::GetInstance();
137 // Handles /MergeSession GAIA call.
138 REGISTER_RESPONSE_HANDLER(
139 gaia_urls->merge_session_url(), HandleMergeSession);
140
141 // Handles /o/oauth2/programmatic_auth GAIA call.
142 REGISTER_RESPONSE_HANDLER(
143 gaia_urls->client_login_to_oauth2_url(), HandleProgramaticAuth);
144
126 // Handles /ServiceLogin GAIA call. 145 // Handles /ServiceLogin GAIA call.
127 REGISTER_RESPONSE_HANDLER( 146 REGISTER_RESPONSE_HANDLER(
128 gaia_urls->service_login_url(), HandleServiceLogin); 147 gaia_urls->service_login_url(), HandleServiceLogin);
129 148
149 // Handles /OAuthLogin GAIA call.
150 REGISTER_RESPONSE_HANDLER(
151 gaia_urls->oauth1_login_url(), HandleOAuthLogin);
152
130 // Handles /ServiceLoginAuth GAIA call. 153 // Handles /ServiceLoginAuth GAIA call.
131 REGISTER_RESPONSE_HANDLER( 154 REGISTER_RESPONSE_HANDLER(
132 gaia_urls->service_login_auth_url(), HandleServiceLoginAuth); 155 gaia_urls->service_login_auth_url(), HandleServiceLoginAuth);
133 156
134 // Handles /o/oauth2/programmatic_auth GAIA call. 157 // Handles /SSO GAIA call (not GAIA, made up for SAML tests).
135 REGISTER_RESPONSE_HANDLER( 158 REGISTER_PATH_RESPONSE_HANDLER("/SSO", HandleSSO);
136 gaia_urls->client_login_to_oauth2_url(), HandleProgramaticAuth);
137 159
138 // Handles /o/oauth2/token GAIA call. 160 // Handles /o/oauth2/token GAIA call.
139 REGISTER_RESPONSE_HANDLER( 161 REGISTER_RESPONSE_HANDLER(
140 gaia_urls->oauth2_token_url(), HandleAuthToken); 162 gaia_urls->oauth2_token_url(), HandleAuthToken);
141 163
142 // Handles /OAuthLogin GAIA call. 164 // Handles /oauth2/v2/tokeninfo GAIA call.
143 REGISTER_RESPONSE_HANDLER( 165 REGISTER_RESPONSE_HANDLER(
144 gaia_urls->oauth1_login_url(), HandleOAuthLogin); 166 gaia_urls->oauth2_token_info_url(), HandleTokenInfo);
145
146 // Handles /MergeSession GAIA call.
147 REGISTER_RESPONSE_HANDLER(
148 gaia_urls->merge_session_url(), HandleMergeSession);
149 167
150 // Handles /oauth2/v2/IssueToken GAIA call. 168 // Handles /oauth2/v2/IssueToken GAIA call.
151 REGISTER_RESPONSE_HANDLER( 169 REGISTER_RESPONSE_HANDLER(
152 gaia_urls->oauth2_issue_token_url(), HandleIssueToken); 170 gaia_urls->oauth2_issue_token_url(), HandleIssueToken);
153 171
154 // Handles /oauth2/v2/tokeninfo GAIA call. 172 // Handles /GetUserInfo GAIA call.
155 REGISTER_RESPONSE_HANDLER( 173 REGISTER_RESPONSE_HANDLER(
156 gaia_urls->oauth2_token_info_url(), HandleTokenInfo); 174 gaia_urls->get_user_info_url(), HandleGetUserInfo);
175 }
157 176
158 // Handles /SSO GAIA call (not GAIA, made up for SAML tests). 177 scoped_ptr<HttpResponse> FakeGaia::HandleRequest(const HttpRequest& request) {
159 REGISTER_PATH_RESPONSE_HANDLER("/SSO", HandleSSO); 178 // The scheme and host of the URL is actually not important but required to
179 // get a valid GURL in order to parse |request.relative_url|.
180 GURL request_url = GURL("http://localhost").Resolve(request.relative_url);
181 std::string request_path = request_url.path();
182 scoped_ptr<BasicHttpResponse> http_response(new BasicHttpResponse());
183 RequestHandlerMap::iterator iter = request_handlers_.find(request_path);
184 if (iter != request_handlers_.end()) {
185 LOG(WARNING) << "Serving request " << request_path;
186 iter->second.Run(request, http_response.get());
187 } else {
188 LOG(ERROR) << "Unhandled request " << request_path;
189 return scoped_ptr<HttpResponse>(); // Request not understood.
190 }
191
192 return http_response.PassAs<HttpResponse>();
193 }
194
195 void FakeGaia::IssueOAuthToken(const std::string& auth_token,
196 const AccessTokenInfo& token_info) {
197 access_token_info_map_.insert(std::make_pair(auth_token, token_info));
198 }
199
200 void FakeGaia::RegisterSamlUser(const std::string& account_id,
201 const GURL& saml_idp) {
202 saml_account_idp_map_[account_id] = saml_idp;
203 }
204
205 // static
206 bool FakeGaia::GetQueryParameter(const std::string& query,
207 const std::string& key,
208 std::string* value) {
209 // Name and scheme actually don't matter, but are required to get a valid URL
210 // for parsing.
211 GURL query_url("http://localhost?" + query);
212 return net::GetValueForKeyInQuery(query_url, key, value);
213 }
214
215 void FakeGaia::HandleMergeSession(const HttpRequest& request,
216 BasicHttpResponse* http_response) {
217 http_response->set_code(net::HTTP_UNAUTHORIZED);
218 if (merge_session_params_.session_sid_cookie.empty() ||
219 merge_session_params_.session_lsid_cookie.empty()) {
220 http_response->set_code(net::HTTP_BAD_REQUEST);
221 return;
222 }
223
224 std::string uber_token;
225 if (!GetQueryParameter(request.content, "uberauth", &uber_token) ||
226 uber_token != merge_session_params_.gaia_uber_token) {
227 LOG(ERROR) << "Missing or invalid 'uberauth' param in /MergeSession call";
228 return;
229 }
230
231 std::string continue_url;
232 if (!GetQueryParameter(request.content, "continue", &continue_url)) {
233 LOG(ERROR) << "Missing or invalid 'continue' param in /MergeSession call";
234 return;
235 }
236
237 std::string source;
238 if (!GetQueryParameter(request.content, "source", &source)) {
239 LOG(ERROR) << "Missing or invalid 'source' param in /MergeSession call";
240 return;
241 }
242
243 SetCookies(http_response,
244 merge_session_params_.session_sid_cookie,
245 merge_session_params_.session_lsid_cookie);
246 // TODO(zelidrag): Not used now.
247 http_response->set_content("OK");
248 http_response->set_code(net::HTTP_OK);
160 } 249 }
161 250
162 void FakeGaia::HandleProgramaticAuth( 251 void FakeGaia::HandleProgramaticAuth(
163 const HttpRequest& request, 252 const HttpRequest& request,
164 BasicHttpResponse* http_response) { 253 BasicHttpResponse* http_response) {
165 http_response->set_code(net::HTTP_UNAUTHORIZED); 254 http_response->set_code(net::HTTP_UNAUTHORIZED);
166 if (merge_session_params_.auth_code.empty()) { 255 if (merge_session_params_.auth_code.empty()) {
167 http_response->set_code(net::HTTP_BAD_REQUEST); 256 http_response->set_code(net::HTTP_BAD_REQUEST);
168 return; 257 return;
169 } 258 }
(...skipping 27 matching lines...) Expand all
197 286
198 http_response->AddCustomHeader( 287 http_response->AddCustomHeader(
199 "Set-Cookie", 288 "Set-Cookie",
200 base::StringPrintf( 289 base::StringPrintf(
201 "oauth_code=%s; Path=/o/GetOAuth2Token; Secure; HttpOnly;", 290 "oauth_code=%s; Path=/o/GetOAuth2Token; Secure; HttpOnly;",
202 merge_session_params_.auth_code.c_str())); 291 merge_session_params_.auth_code.c_str()));
203 http_response->set_code(net::HTTP_OK); 292 http_response->set_code(net::HTTP_OK);
204 http_response->set_content_type("text/html"); 293 http_response->set_content_type("text/html");
205 } 294 }
206 295
296 void FakeGaia::FormatJSONResponse(const base::DictionaryValue& response_dict,
297 BasicHttpResponse* http_response) {
298 std::string response_json;
299 base::JSONWriter::Write(&response_dict, &response_json);
300 http_response->set_content(response_json);
301 http_response->set_code(net::HTTP_OK);
302 }
303
304 const FakeGaia::AccessTokenInfo* FakeGaia::FindAccessTokenInfo(
305 const std::string& auth_token,
306 const std::string& client_id,
307 const std::string& scope_string) const {
308 if (auth_token.empty() || client_id.empty())
309 return NULL;
310
311 std::vector<std::string> scope_list;
312 base::SplitString(scope_string, ' ', &scope_list);
313 ScopeSet scopes(scope_list.begin(), scope_list.end());
314
315 for (AccessTokenInfoMap::const_iterator entry(
316 access_token_info_map_.lower_bound(auth_token));
317 entry != access_token_info_map_.upper_bound(auth_token);
318 ++entry) {
319 if (entry->second.audience == client_id &&
320 (scope_string.empty() || entry->second.scopes == scopes)) {
321 return &(entry->second);
322 }
323 }
324
325 return NULL;
326 }
327
207 void FakeGaia::HandleServiceLogin(const HttpRequest& request, 328 void FakeGaia::HandleServiceLogin(const HttpRequest& request,
208 BasicHttpResponse* http_response) { 329 BasicHttpResponse* http_response) {
209 http_response->set_code(net::HTTP_OK); 330 http_response->set_code(net::HTTP_OK);
210 http_response->set_content(service_login_response_); 331 http_response->set_content(service_login_response_);
211 http_response->set_content_type("text/html"); 332 http_response->set_content_type("text/html");
212 } 333 }
213 334
214 void FakeGaia::HandleOAuthLogin(const HttpRequest& request, 335 void FakeGaia::HandleOAuthLogin(const HttpRequest& request,
215 BasicHttpResponse* http_response) { 336 BasicHttpResponse* http_response) {
216 http_response->set_code(net::HTTP_UNAUTHORIZED); 337 http_response->set_code(net::HTTP_UNAUTHORIZED);
(...skipping 21 matching lines...) Expand all
238 if (GetQueryParameter(request_query, "issueuberauth", &issue_uberauth) && 359 if (GetQueryParameter(request_query, "issueuberauth", &issue_uberauth) &&
239 issue_uberauth == "1") { 360 issue_uberauth == "1") {
240 http_response->set_content(merge_session_params_.gaia_uber_token); 361 http_response->set_content(merge_session_params_.gaia_uber_token);
241 http_response->set_code(net::HTTP_OK); 362 http_response->set_code(net::HTTP_OK);
242 // Issue GAIA uber token. 363 // Issue GAIA uber token.
243 } else { 364 } else {
244 LOG(FATAL) << "/OAuthLogin for SID/LSID is not supported"; 365 LOG(FATAL) << "/OAuthLogin for SID/LSID is not supported";
245 } 366 }
246 } 367 }
247 368
248 void FakeGaia::HandleMergeSession(const HttpRequest& request,
249 BasicHttpResponse* http_response) {
250 http_response->set_code(net::HTTP_UNAUTHORIZED);
251 if (merge_session_params_.session_sid_cookie.empty() ||
252 merge_session_params_.session_lsid_cookie.empty()) {
253 http_response->set_code(net::HTTP_BAD_REQUEST);
254 return;
255 }
256
257 std::string uber_token;
258 if (!GetQueryParameter(request.content, "uberauth", &uber_token) ||
259 uber_token != merge_session_params_.gaia_uber_token) {
260 LOG(ERROR) << "Missing or invalid 'uberauth' param in /MergeSession call";
261 return;
262 }
263
264 std::string continue_url;
265 if (!GetQueryParameter(request.content, "continue", &continue_url)) {
266 LOG(ERROR) << "Missing or invalid 'continue' param in /MergeSession call";
267 return;
268 }
269
270 std::string source;
271 if (!GetQueryParameter(request.content, "source", &source)) {
272 LOG(ERROR) << "Missing or invalid 'source' param in /MergeSession call";
273 return;
274 }
275
276 http_response->AddCustomHeader(
277 "Set-Cookie",
278 base::StringPrintf(
279 "SID=%s; Path=/; HttpOnly;",
280 merge_session_params_.session_sid_cookie.c_str()));
281 http_response->AddCustomHeader(
282 "Set-Cookie",
283 base::StringPrintf(
284 "LSID=%s; Path=/; HttpOnly;",
285 merge_session_params_.session_lsid_cookie.c_str()));
286 // TODO(zelidrag): Not used now.
287 http_response->set_content("OK");
288 http_response->set_code(net::HTTP_OK);
289 }
290
291
292 void FakeGaia::HandleServiceLoginAuth(const HttpRequest& request, 369 void FakeGaia::HandleServiceLoginAuth(const HttpRequest& request,
293 BasicHttpResponse* http_response) { 370 BasicHttpResponse* http_response) {
294 std::string continue_url = 371 std::string continue_url =
295 GaiaUrls::GetInstance()->service_login_url().spec(); 372 GaiaUrls::GetInstance()->service_login_url().spec();
296 GetQueryParameter(request.content, "continue", &continue_url); 373 GetQueryParameter(request.content, "continue", &continue_url);
297 374
298 std::string redirect_url = continue_url; 375 std::string redirect_url = continue_url;
299 376
300 std::string email; 377 std::string email;
301 if (GetQueryParameter(request.content, "Email", &email) && 378 if (GetQueryParameter(request.content, "Email", &email) &&
302 saml_account_idp_map_.find(email) != saml_account_idp_map_.end()) { 379 saml_account_idp_map_.find(email) != saml_account_idp_map_.end()) {
303 GURL url(saml_account_idp_map_[email]); 380 GURL url(saml_account_idp_map_[email]);
304 url = net::AppendQueryParameter(url, "SAMLRequest", "fake_request"); 381 url = net::AppendQueryParameter(url, "SAMLRequest", "fake_request");
305 url = net::AppendQueryParameter(url, "RelayState", continue_url); 382 url = net::AppendQueryParameter(url, "RelayState", continue_url);
306 redirect_url = url.spec(); 383 redirect_url = url.spec();
307 } 384 } else if (!merge_session_params_.auth_sid_cookie.empty() &&
308 385 !merge_session_params_.auth_lsid_cookie.empty()) {
309 if (!merge_session_params_.auth_sid_cookie.empty() && 386 SetCookies(http_response,
310 !merge_session_params_.auth_lsid_cookie.empty()) { 387 merge_session_params_.auth_sid_cookie,
311 http_response->AddCustomHeader( 388 merge_session_params_.auth_lsid_cookie);
312 "Set-Cookie",
313 base::StringPrintf(
314 "SID=%s; Path=/; HttpOnly;",
315 merge_session_params_.auth_sid_cookie.c_str()));
316 http_response->AddCustomHeader(
317 "Set-Cookie",
318 base::StringPrintf(
319 "LSID=%s; Path=/; HttpOnly;",
320 merge_session_params_.auth_lsid_cookie.c_str()));
321 } 389 }
322 390
323 http_response->set_code(net::HTTP_TEMPORARY_REDIRECT); 391 http_response->set_code(net::HTTP_TEMPORARY_REDIRECT);
324 http_response->AddCustomHeader("Location", redirect_url); 392 http_response->AddCustomHeader("Location", redirect_url);
325 } 393 }
326 394
327 void FakeGaia::HandleSSO(const HttpRequest& request, 395 void FakeGaia::HandleSSO(const HttpRequest& request,
328 BasicHttpResponse* http_response) { 396 BasicHttpResponse* http_response) {
397 if (!merge_session_params_.auth_sid_cookie.empty() &&
398 !merge_session_params_.auth_lsid_cookie.empty()) {
399 SetCookies(http_response,
400 merge_session_params_.auth_sid_cookie,
401 merge_session_params_.auth_lsid_cookie);
402 }
329 std::string relay_state; 403 std::string relay_state;
330 GetQueryParameter(request.content, "RelayState", &relay_state); 404 GetQueryParameter(request.content, "RelayState", &relay_state);
331 std::string redirect_url = relay_state; 405 std::string redirect_url = relay_state;
332 http_response->set_code(net::HTTP_TEMPORARY_REDIRECT); 406 http_response->set_code(net::HTTP_TEMPORARY_REDIRECT);
333 http_response->AddCustomHeader("Location", redirect_url); 407 http_response->AddCustomHeader("Location", redirect_url);
334 } 408 }
335 409
336 void FakeGaia::HandleAuthToken(const HttpRequest& request, 410 void FakeGaia::HandleAuthToken(const HttpRequest& request,
337 BasicHttpResponse* http_response) { 411 BasicHttpResponse* http_response) {
338 std::string grant_type; 412 std::string grant_type;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 response_dict.SetString("issueAdvice", "auto"); 512 response_dict.SetString("issueAdvice", "auto");
439 response_dict.SetString("expiresIn", 513 response_dict.SetString("expiresIn",
440 base::IntToString(token_info->expires_in)); 514 base::IntToString(token_info->expires_in));
441 response_dict.SetString("token", token_info->token); 515 response_dict.SetString("token", token_info->token);
442 FormatJSONResponse(response_dict, http_response); 516 FormatJSONResponse(response_dict, http_response);
443 } else { 517 } else {
444 http_response->set_code(net::HTTP_BAD_REQUEST); 518 http_response->set_code(net::HTTP_BAD_REQUEST);
445 } 519 }
446 } 520 }
447 521
448 scoped_ptr<HttpResponse> FakeGaia::HandleRequest(const HttpRequest& request) { 522 void FakeGaia::HandleGetUserInfo(const HttpRequest& request,
449 // The scheme and host of the URL is actually not important but required to 523 BasicHttpResponse* http_response) {
450 // get a valid GURL in order to parse |request.relative_url|. 524 std::string lsid;
451 GURL request_url = GURL("http://localhost").Resolve(request.relative_url); 525 if (!GetQueryParameter(request.content, "LSID", &lsid)) {
452 std::string request_path = request_url.path(); 526 http_response->set_code(net::HTTP_BAD_REQUEST);
453 scoped_ptr<BasicHttpResponse> http_response(new BasicHttpResponse()); 527 LOG(ERROR) << "/GetUserInfo missing LSID";
454 RequestHandlerMap::iterator iter = request_handlers_.find(request_path); 528 return;
455 if (iter != request_handlers_.end()) {
456 LOG(WARNING) << "Serving request " << request_path;
457 iter->second.Run(request, http_response.get());
458 } else {
459 LOG(ERROR) << "Unhandled request " << request_path;
460 return scoped_ptr<HttpResponse>(); // Request not understood.
461 } 529 }
462 530 if (lsid != merge_session_params_.auth_lsid_cookie) {
463 return http_response.PassAs<HttpResponse>(); 531 http_response->set_code(net::HTTP_BAD_REQUEST);
464 } 532 LOG(ERROR) << "/GetUserInfo contains unknown LSID";
465 533 return;
466 void FakeGaia::IssueOAuthToken(const std::string& auth_token, 534 }
467 const AccessTokenInfo& token_info) { 535 http_response->set_content(base::StringPrintf(
468 access_token_info_map_.insert(std::make_pair(auth_token, token_info)); 536 "email=%s", merge_session_params_.email.c_str()));
469 }
470
471 void FakeGaia::RegisterSamlUser(const std::string& account_id,
472 const GURL& saml_idp) {
473 saml_account_idp_map_[account_id] = saml_idp;
474 }
475
476 void FakeGaia::FormatJSONResponse(const base::DictionaryValue& response_dict,
477 BasicHttpResponse* http_response) {
478 std::string response_json;
479 base::JSONWriter::Write(&response_dict, &response_json);
480 http_response->set_content(response_json);
481 http_response->set_code(net::HTTP_OK); 537 http_response->set_code(net::HTTP_OK);
482 } 538 }
483
484 const FakeGaia::AccessTokenInfo* FakeGaia::FindAccessTokenInfo(
485 const std::string& auth_token,
486 const std::string& client_id,
487 const std::string& scope_string) const {
488 if (auth_token.empty() || client_id.empty())
489 return NULL;
490
491 std::vector<std::string> scope_list;
492 base::SplitString(scope_string, ' ', &scope_list);
493 ScopeSet scopes(scope_list.begin(), scope_list.end());
494
495 for (AccessTokenInfoMap::const_iterator entry(
496 access_token_info_map_.lower_bound(auth_token));
497 entry != access_token_info_map_.upper_bound(auth_token);
498 ++entry) {
499 if (entry->second.audience == client_id &&
500 (scope_string.empty() || entry->second.scopes == scopes)) {
501 return &(entry->second);
502 }
503 }
504
505 return NULL;
506 }
507
508 // static
509 bool FakeGaia::GetQueryParameter(const std::string& query,
510 const std::string& key,
511 std::string* value) {
512 // Name and scheme actually don't matter, but are required to get a valid URL
513 // for parsing.
514 GURL query_url("http://localhost?" + query);
515 return net::GetValueForKeyInQuery(query_url, key, value);
516 }
OLDNEW
« no previous file with comments | « google_apis/gaia/fake_gaia.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698