| 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 |