15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/oauth_request_signer.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This value is used to seed the PRNG at the beginning of a sequence of 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// operations to produce a repeatable sequence. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RANDOM_SEED (0x69E3C47D) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, Encode) { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "abcdefghijklmnopqrstuvwxyz" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "0123456789" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "-._~"), 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "abcdefghijklmnopqrstuvwxyz" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "0123456789" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "-._~"); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode( 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://accounts.google.com/OAuthLogin"), 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https%3A%2F%2Faccounts.google.com%2FOAuthLogin"); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode("%"), "%25"); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode("%25"), "%2525"); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode( 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed " 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "do eiusmod tempor incididunt ut labore et dolore magna " 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "aliqua. Ut enim ad minim veniam, quis nostrud exercitation " 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis " 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "aute irure dolor in reprehenderit in voluptate velit esse " 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cillum dolore eu fugiat nulla pariatur. Excepteur sint " 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "occaecat cupidatat non proident, sunt in culpa qui officia " 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "deserunt mollit anim id est laborum."), 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Lorem%20ipsum%20dolor%20sit%20amet%2C%20consectetur%20" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "adipisicing%20elit%2C%20sed%20do%20eiusmod%20tempor%20" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "incididunt%20ut%20labore%20et%20dolore%20magna%20aliqua.%20Ut%20" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "enim%20ad%20minim%20veniam%2C%20quis%20nostrud%20exercitation%20" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ullamco%20laboris%20nisi%20ut%20aliquip%20ex%20ea%20commodo%20" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "consequat.%20Duis%20aute%20irure%20dolor%20in%20reprehenderit%20" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "in%20voluptate%20velit%20esse%20cillum%20dolore%20eu%20fugiat%20" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "nulla%20pariatur.%20Excepteur%20sint%20occaecat%20cupidatat%20" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "non%20proident%2C%20sunt%20in%20culpa%20qui%20officia%20" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "deserunt%20mollit%20anim%20id%20est%20laborum."); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode("!5}&QF~0R-Ecy[?2Cig>6g=;hH!\\Ju4K%UK;"), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%215%7D%26QF~0R-Ecy%5B%3F2Cig%3E6g%3D%3BhH%21%5CJu4K%25UK%3B"); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode("1UgHf(r)SkMRS`fRZ/8PsTcXT0:\\<9I=6{|:"), 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "1UgHf%28r%29SkMRS%60fRZ%2F8PsTcXT0%3A%5C%3C9I%3D6%7B%7C%3A"); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode("|<XIy1?o`r\"RuGSX#!:MeP&RLZQM@:\\';2X"), 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%7C%3CXIy1%3Fo%60r%22RuGSX%23%21%3AMeP%26RLZQM%40%3A%5C%27%3B2X"); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(OAuthRequestSigner::Encode("#a@A>ZtcQ/yb.~^Q_]daRT?ffK>@A:afWuZL"), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%23a%40A%3EZtcQ%2Fyb.~%5EQ_%5DdaRT%3FffK%3E%40A%3AafWuZL"); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, DecodeEncoded) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) srand(RANDOM_SEED); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kIterations = 500; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kLengthLimit = 500; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int iteration = 0; iteration < kIterations; ++iteration) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string text; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int length = rand() % kLengthLimit; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int position = 0; position < length; ++position) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text += static_cast<char>(rand() % 256); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string encoded = OAuthRequestSigner::Encode(text); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string decoded; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::Decode(encoded, &decoded)); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(decoded, text); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignGet1) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken"); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::Parameters parameters; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["scope"] = "https://accounts.google.com/OAuthLogin"; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g"; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["xaouth_display_name"] = "Chromium"; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_timestamp"] = "1308152953"; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::SignURL( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_url, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::GET_METHOD, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "johndoe", // oauth_consumer_key 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "53cR3t", // consumer secret 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "4/VGY0MsQadcmO8VnCv9gnhoEooq1v", // oauth_token 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "c5e0531ff55dfbb4054e", // token secret 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &signed_text)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("https://www.google.com/accounts/o8/GetOAuthToken" 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?oauth_consumer_key=johndoe" 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g" 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature=PFqDTaiyey1UObcvOyI4Ng2HXW0%3D" 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature_method=HMAC-SHA1" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1308152953" 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_token=4%2FVGY0MsQadcmO8VnCv9gnhoEooq1v" 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_version=1.0" 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin" 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&xaouth_display_name=Chromium", 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) signed_text); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignGet2) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://accounts.google.com/OAuthGetAccessToken"); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::Parameters parameters; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_timestamp"] = "1308147831"; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_nonce"] = "4d4hZW9DygWQujP2tz06UN"; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::SignURL( 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request_url, 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parameters, 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::GET_METHOD, 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // oauth_consumer_key 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // consumer secret 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK", // oauth_token 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), // token secret 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &signed_text)); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(signed_text, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://accounts.google.com/OAuthGetAccessToken" 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?oauth_consumer_key=anonymous" 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=4d4hZW9DygWQujP2tz06UN" 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature=YiJv%2BEOWsvCDCi13%2FhQBFrr0J7c%3D" 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature_method=HMAC-SHA1" 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1308147831" 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK" 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_version=1.0"); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, ParseAndSignGet1) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken" 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?scope=https://accounts.google.com/OAuthLogin" 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g" 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&xaouth_display_name=Chromium" 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1308152953"); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::ParseAndSign( 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request_url, 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::GET_METHOD, 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // oauth_consumer_key 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // consumer secret 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK", // oauth_token 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), // token secret 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &signed_text)); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("https://www.google.com/accounts/o8/GetOAuthToken" 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?oauth_consumer_key=anonymous" 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g" 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature=PH7KP6cP%2BzZ1SJ6WGqBgXwQP9Mc%3D" 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature_method=HMAC-SHA1" 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1308152953" 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK" 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_version=1.0" 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin" 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&xaouth_display_name=Chromium", 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) signed_text); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, ParseAndSignGet2) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://accounts.google.com/OAuthGetAccessToken" 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?oauth_timestamp=1308147831" 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=4d4hZW9DygWQujP2tz06UN"); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::ParseAndSign( 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request_url, 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::GET_METHOD, 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // oauth_consumer_key 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // consumer secret 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK", // oauth_token 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), // token secret 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &signed_text)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(signed_text, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://accounts.google.com/OAuthGetAccessToken" 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?oauth_consumer_key=anonymous" 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=4d4hZW9DygWQujP2tz06UN" 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature=YiJv%2BEOWsvCDCi13%2FhQBFrr0J7c%3D" 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature_method=HMAC-SHA1" 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1308147831" 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK" 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_version=1.0"); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignPost1) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken"); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::Parameters parameters; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["scope"] = "https://accounts.google.com/OAuthLogin"; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g"; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["xaouth_display_name"] = "Chromium"; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_timestamp"] = "1308152953"; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::SignURL( 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_url, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::POST_METHOD, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "anonymous", // oauth_consumer_key 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "anonymous", // consumer secret 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "4/X8x0r7bHif_VNCLjUMutxGkzo13d", // oauth_token 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "b7120598d47594bd3522", // token secret 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &signed_text)); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("oauth_consumer_key=anonymous" 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g" 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature=vVlfv6dnV2%2Fx7TozS0Gf83zS2%2BQ%3D" 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature_method=HMAC-SHA1" 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1308152953" 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_token=4%2FX8x0r7bHif_VNCLjUMutxGkzo13d" 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_version=1.0" 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin" 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&xaouth_display_name=Chromium", 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) signed_text); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignPost2) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://accounts.google.com/OAuthGetAccessToken"); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::Parameters parameters; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_timestamp"] = "1234567890"; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_nonce"] = "17171717171717171"; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::SignURL( 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request_url, 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parameters, 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::POST_METHOD, 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // oauth_consumer_key 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // consumer secret 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK", // oauth_token 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), // token secret 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &signed_text)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(signed_text, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_consumer_key=anonymous" 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=17171717171717171" 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature=tPX2XqKQICWzopZ80CFGX%2F53DLo%3D" 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature_method=HMAC-SHA1" 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1234567890" 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK" 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_version=1.0"); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, ParseAndSignPost1) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken" 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?scope=https://accounts.google.com/OAuthLogin" 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g" 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&xaouth_display_name=Chromium" 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1308152953"); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::ParseAndSign( 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_url, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::POST_METHOD, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "anonymous", // oauth_consumer_key 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "anonymous", // consumer secret 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "4/X8x0r7bHif_VNCLjUMutxGkzo13d", // oauth_token 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "b7120598d47594bd3522", // token secret 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &signed_text)); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("oauth_consumer_key=anonymous" 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g" 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature=vVlfv6dnV2%2Fx7TozS0Gf83zS2%2BQ%3D" 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature_method=HMAC-SHA1" 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1308152953" 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_token=4%2FX8x0r7bHif_VNCLjUMutxGkzo13d" 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_version=1.0" 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin" 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&xaouth_display_name=Chromium", 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) signed_text); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, ParseAndSignPost2) { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://accounts.google.com/OAuthGetAccessToken" 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?oauth_timestamp=1234567890" 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=17171717171717171"); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::ParseAndSign( 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request_url, 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OAuthRequestSigner::POST_METHOD, 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // oauth_consumer_key 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "anonymous", // consumer secret 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK", // oauth_token 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), // token secret 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &signed_text)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(signed_text, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_consumer_key=anonymous" 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_nonce=17171717171717171" 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature=tPX2XqKQICWzopZ80CFGX%2F53DLo%3D" 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_signature_method=HMAC-SHA1" 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_timestamp=1234567890" 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK" 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&oauth_version=1.0"); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignAuthHeader) { 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken"); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::Parameters parameters; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["scope"] = "https://accounts.google.com/OAuthLogin"; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g"; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["xaouth_display_name"] = "Chromium"; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters["oauth_timestamp"] = "1308152953"; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_text; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(OAuthRequestSigner::SignAuthHeader( 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_url, 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::HMAC_SHA1_SIGNATURE, 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OAuthRequestSigner::GET_METHOD, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "johndoe", // oauth_consumer_key 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "53cR3t", // consumer secret 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "4/VGY0MsQadcmO8VnCv9gnhoEooq1v", // oauth_token 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "c5e0531ff55dfbb4054e", // token secret 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &signed_text)); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("OAuth " 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_consumer_key=\"johndoe\", " 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_nonce=\"2oiE_aHdk5qRTz0L9C8Lq0g\", " 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_signature=\"PFqDTaiyey1UObcvOyI4Ng2HXW0%3D\", " 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_signature_method=\"HMAC-SHA1\", " 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_timestamp=\"1308152953\", " 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_token=\"4%2FVGY0MsQadcmO8VnCv9gnhoEooq1v\", " 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oauth_version=\"1.0\", " 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "scope=\"https%3A%2F%2Faccounts.google.com%2FOAuthLogin\", " 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "xaouth_display_name=\"Chromium\"", 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) signed_text); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 324