OLD | NEW |
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 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 } | 406 } |
407 std::string relay_state; | 407 std::string relay_state; |
408 GetQueryParameter(request.content, "RelayState", &relay_state); | 408 GetQueryParameter(request.content, "RelayState", &relay_state); |
409 std::string redirect_url = relay_state; | 409 std::string redirect_url = relay_state; |
410 http_response->set_code(net::HTTP_TEMPORARY_REDIRECT); | 410 http_response->set_code(net::HTTP_TEMPORARY_REDIRECT); |
411 http_response->AddCustomHeader("Location", redirect_url); | 411 http_response->AddCustomHeader("Location", redirect_url); |
412 } | 412 } |
413 | 413 |
414 void FakeGaia::HandleAuthToken(const HttpRequest& request, | 414 void FakeGaia::HandleAuthToken(const HttpRequest& request, |
415 BasicHttpResponse* http_response) { | 415 BasicHttpResponse* http_response) { |
416 std::string grant_type; | |
417 std::string refresh_token; | |
418 std::string client_id; | |
419 std::string scope; | 416 std::string scope; |
420 std::string auth_code; | |
421 const AccessTokenInfo* token_info = NULL; | |
422 GetQueryParameter(request.content, "scope", &scope); | 417 GetQueryParameter(request.content, "scope", &scope); |
423 | 418 |
| 419 std::string grant_type; |
424 if (!GetQueryParameter(request.content, "grant_type", &grant_type)) { | 420 if (!GetQueryParameter(request.content, "grant_type", &grant_type)) { |
425 http_response->set_code(net::HTTP_BAD_REQUEST); | 421 http_response->set_code(net::HTTP_BAD_REQUEST); |
426 LOG(ERROR) << "No 'grant_type' param in /o/oauth2/token"; | 422 LOG(ERROR) << "No 'grant_type' param in /o/oauth2/token"; |
427 return; | 423 return; |
428 } | 424 } |
429 | 425 |
430 if (grant_type == "authorization_code") { | 426 if (grant_type == "authorization_code") { |
| 427 std::string auth_code; |
431 if (!GetQueryParameter(request.content, "code", &auth_code) || | 428 if (!GetQueryParameter(request.content, "code", &auth_code) || |
432 auth_code != merge_session_params_.auth_code) { | 429 auth_code != merge_session_params_.auth_code) { |
433 http_response->set_code(net::HTTP_BAD_REQUEST); | 430 http_response->set_code(net::HTTP_BAD_REQUEST); |
434 LOG(ERROR) << "No 'code' param in /o/oauth2/token"; | 431 LOG(ERROR) << "No 'code' param in /o/oauth2/token"; |
435 return; | 432 return; |
436 } | 433 } |
437 | 434 |
438 if (GaiaConstants::kOAuth1LoginScope != scope) { | 435 if (GaiaConstants::kOAuth1LoginScope != scope) { |
439 http_response->set_code(net::HTTP_BAD_REQUEST); | 436 http_response->set_code(net::HTTP_BAD_REQUEST); |
440 LOG(ERROR) << "Invalid scope for /o/oauth2/token - " << scope; | 437 LOG(ERROR) << "Invalid scope for /o/oauth2/token - " << scope; |
441 return; | 438 return; |
442 } | 439 } |
443 | 440 |
444 base::DictionaryValue response_dict; | 441 base::DictionaryValue response_dict; |
445 response_dict.SetString("refresh_token", | 442 response_dict.SetString("refresh_token", |
446 merge_session_params_.refresh_token); | 443 merge_session_params_.refresh_token); |
447 response_dict.SetString("access_token", | 444 response_dict.SetString("access_token", |
448 merge_session_params_.access_token); | 445 merge_session_params_.access_token); |
449 response_dict.SetInteger("expires_in", 3600); | 446 response_dict.SetInteger("expires_in", 3600); |
450 FormatJSONResponse(response_dict, http_response); | 447 FormatJSONResponse(response_dict, http_response); |
451 } else if (GetQueryParameter(request.content, | 448 return; |
452 "refresh_token", | |
453 &refresh_token) && | |
454 GetQueryParameter(request.content, | |
455 "client_id", | |
456 &client_id) && | |
457 (token_info = FindAccessTokenInfo(refresh_token, | |
458 client_id, | |
459 scope))) { | |
460 base::DictionaryValue response_dict; | |
461 response_dict.SetString("access_token", token_info->token); | |
462 response_dict.SetInteger("expires_in", 3600); | |
463 FormatJSONResponse(response_dict, http_response); | |
464 } else { | |
465 LOG(ERROR) << "Bad request for /o/oauth2/token - " | |
466 << "refresh_token = " << refresh_token | |
467 << ", scope = " << scope | |
468 << ", client_id = " << client_id; | |
469 http_response->set_code(net::HTTP_BAD_REQUEST); | |
470 } | 449 } |
| 450 |
| 451 std::string refresh_token; |
| 452 std::string client_id; |
| 453 if (GetQueryParameter(request.content, "refresh_token", &refresh_token) && |
| 454 GetQueryParameter(request.content, "client_id", &client_id)) { |
| 455 const AccessTokenInfo* token_info = |
| 456 FindAccessTokenInfo(refresh_token, client_id, scope); |
| 457 if (token_info) { |
| 458 base::DictionaryValue response_dict; |
| 459 response_dict.SetString("access_token", token_info->token); |
| 460 response_dict.SetInteger("expires_in", 3600); |
| 461 FormatJSONResponse(response_dict, http_response); |
| 462 return; |
| 463 } |
| 464 } |
| 465 |
| 466 LOG(ERROR) << "Bad request for /o/oauth2/token - " |
| 467 << "refresh_token = " << refresh_token |
| 468 << ", scope = " << scope |
| 469 << ", client_id = " << client_id; |
| 470 http_response->set_code(net::HTTP_BAD_REQUEST); |
471 } | 471 } |
472 | 472 |
473 void FakeGaia::HandleTokenInfo(const HttpRequest& request, | 473 void FakeGaia::HandleTokenInfo(const HttpRequest& request, |
474 BasicHttpResponse* http_response) { | 474 BasicHttpResponse* http_response) { |
475 const AccessTokenInfo* token_info = NULL; | 475 const AccessTokenInfo* token_info = NULL; |
476 std::string access_token; | 476 std::string access_token; |
477 if (GetQueryParameter(request.content, "access_token", &access_token)) { | 477 if (GetQueryParameter(request.content, "access_token", &access_token)) { |
478 for (AccessTokenInfoMap::const_iterator entry( | 478 for (AccessTokenInfoMap::const_iterator entry( |
479 access_token_info_map_.begin()); | 479 access_token_info_map_.begin()); |
480 entry != access_token_info_map_.end(); | 480 entry != access_token_info_map_.end(); |
(...skipping 19 matching lines...) Expand all Loading... |
500 } else { | 500 } else { |
501 http_response->set_code(net::HTTP_BAD_REQUEST); | 501 http_response->set_code(net::HTTP_BAD_REQUEST); |
502 } | 502 } |
503 } | 503 } |
504 | 504 |
505 void FakeGaia::HandleIssueToken(const HttpRequest& request, | 505 void FakeGaia::HandleIssueToken(const HttpRequest& request, |
506 BasicHttpResponse* http_response) { | 506 BasicHttpResponse* http_response) { |
507 std::string access_token; | 507 std::string access_token; |
508 std::string scope; | 508 std::string scope; |
509 std::string client_id; | 509 std::string client_id; |
510 const AccessTokenInfo* token_info = NULL; | |
511 if (GetAccessToken(request, kAuthHeaderBearer, &access_token) && | 510 if (GetAccessToken(request, kAuthHeaderBearer, &access_token) && |
512 GetQueryParameter(request.content, "scope", &scope) && | 511 GetQueryParameter(request.content, "scope", &scope) && |
513 GetQueryParameter(request.content, "client_id", &client_id) && | 512 GetQueryParameter(request.content, "client_id", &client_id)) { |
514 (token_info = FindAccessTokenInfo(access_token, client_id, scope))) { | 513 const AccessTokenInfo* token_info = |
515 base::DictionaryValue response_dict; | 514 FindAccessTokenInfo(access_token, client_id, scope); |
516 response_dict.SetString("issueAdvice", "auto"); | 515 if (token_info) { |
517 response_dict.SetString("expiresIn", | 516 base::DictionaryValue response_dict; |
518 base::IntToString(token_info->expires_in)); | 517 response_dict.SetString("issueAdvice", "auto"); |
519 response_dict.SetString("token", token_info->token); | 518 response_dict.SetString("expiresIn", |
520 FormatJSONResponse(response_dict, http_response); | 519 base::IntToString(token_info->expires_in)); |
521 } else { | 520 response_dict.SetString("token", token_info->token); |
522 http_response->set_code(net::HTTP_BAD_REQUEST); | 521 FormatJSONResponse(response_dict, http_response); |
| 522 return; |
| 523 } |
523 } | 524 } |
| 525 http_response->set_code(net::HTTP_BAD_REQUEST); |
524 } | 526 } |
525 | 527 |
526 void FakeGaia::HandleListAccounts(const HttpRequest& request, | 528 void FakeGaia::HandleListAccounts(const HttpRequest& request, |
527 BasicHttpResponse* http_response) { | 529 BasicHttpResponse* http_response) { |
528 http_response->set_content(base::StringPrintf( | 530 http_response->set_content(base::StringPrintf( |
529 kListAccountsResponseFormat, merge_session_params_.email.c_str())); | 531 kListAccountsResponseFormat, merge_session_params_.email.c_str())); |
530 http_response->set_code(net::HTTP_OK); | 532 http_response->set_code(net::HTTP_OK); |
531 } | 533 } |
OLD | NEW |