From 630777eadce0ef3e1d6318a1dce902b3ec54f694 Mon Sep 17 00:00:00 2001 From: Mykhailo Kuchma Date: Wed, 10 Jun 2020 10:24:24 +0300 Subject: [PATCH] Fix the regression caused by #899 Use different stream objects. Resolves: OLPEDGE-2041 Signed-off-by: Mykhailo Kuchma --- .../src/AuthenticationClientUtils.cpp | 44 +++++++++---------- .../tests/AuthenticationClientTest.cpp | 9 ++-- 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/olp-cpp-sdk-authentication/src/AuthenticationClientUtils.cpp b/olp-cpp-sdk-authentication/src/AuthenticationClientUtils.cpp index 499040af0..b19080a69 100644 --- a/olp-cpp-sdk-authentication/src/AuthenticationClientUtils.cpp +++ b/olp-cpp-sdk-authentication/src/AuthenticationClientUtils.cpp @@ -283,42 +283,40 @@ std::string GenerateAuthorizationHeader( time_t timestamp, std::string nonce) { const std::string timestamp_str = std::to_string(timestamp); - std::stringstream stream; + std::stringstream query; - stream << kOauthConsumerKey << kParamEquals << credentials.GetKey() + query << kOauthConsumerKey << kParamEquals << credentials.GetKey() << kParamAdd << kOauthNonce << kParamEquals << nonce << kParamAdd << kOauthSignatureMethod << kParamEquals << kHmac << kParamAdd << kOauthTimestamp << kParamEquals << timestamp_str << kParamAdd << kOauthVersion << kParamEquals << kVersion; - const auto encoded_query = utils::Url::Encode(stream.str()); + const auto encoded_query = utils::Url::Encode(query.str()); - stream.clear(); + std::stringstream signature_base; - stream << kOauthPost << kParamAdd << utils::Url::Encode(url) << kParamAdd + signature_base << kOauthPost << kParamAdd << utils::Url::Encode(url) << kParamAdd << encoded_query; - const auto signature_base = stream.str(); - - stream.clear(); - const std::string encode_key = credentials.GetSecret() + kParamAdd; - auto hmac_result = Crypto::hmac_sha256(encode_key, signature_base); + auto hmac_result = Crypto::hmac_sha256(encode_key, signature_base.str()); auto signature = Base64Encode(hmac_result); - stream << "OAuth " << kOauthConsumerKey << kParamEquals << kParamQuote - << utils::Url::Encode(credentials.GetKey()) << kParamQuote - << kParamComma << kOauthNonce << kParamEquals << kParamQuote - << utils::Url::Encode(nonce) << kParamQuote << kParamComma - << kOauthSignatureMethod << kParamEquals << kParamQuote << kHmac - << kParamQuote << kParamComma << kOauthTimestamp << kParamEquals - << kParamQuote << utils::Url::Encode(timestamp_str) << kParamQuote - << kParamComma << kOauthVersion << kParamEquals << kParamQuote - << kVersion << kParamQuote << kParamComma << kOauthSignature - << kParamEquals << kParamQuote << utils::Url::Encode(signature) - << kParamQuote; - - return stream.str(); + std::stringstream authorization; + + authorization << "OAuth " << kOauthConsumerKey << kParamEquals << kParamQuote + << utils::Url::Encode(credentials.GetKey()) << kParamQuote + << kParamComma << kOauthNonce << kParamEquals << kParamQuote + << utils::Url::Encode(nonce) << kParamQuote << kParamComma + << kOauthSignatureMethod << kParamEquals << kParamQuote << kHmac + << kParamQuote << kParamComma << kOauthTimestamp << kParamEquals + << kParamQuote << utils::Url::Encode(timestamp_str) + << kParamQuote << kParamComma << kOauthVersion << kParamEquals + << kParamQuote << kVersion << kParamQuote << kParamComma + << kOauthSignature << kParamEquals << kParamQuote + << utils::Url::Encode(signature) << kParamQuote; + + return authorization.str(); } } // namespace authentication diff --git a/olp-cpp-sdk-authentication/tests/AuthenticationClientTest.cpp b/olp-cpp-sdk-authentication/tests/AuthenticationClientTest.cpp index 5eaa8ba99..676a79c72 100644 --- a/olp-cpp-sdk-authentication/tests/AuthenticationClientTest.cpp +++ b/olp-cpp-sdk-authentication/tests/AuthenticationClientTest.cpp @@ -42,13 +42,10 @@ TEST(AuthenticationClientTest, GenerateAuthorizationHeader) { const auto url = "https://auth.server.com"; auto sig = auth::GenerateAuthorizationHeader(credentials, url, 0, "unique"); auto expected_sig = - "oauth_consumer_key=key&oauth_nonce=unique&oauth_signature_method=HMAC-" - "SHA256&oauth_timestamp=0&oauth_version=1.0POST&https%3A%2F%2Fauth." - "server.com&oauth_consumer_key%3Dkey%26oauth_nonce%3Dunique%26oauth_" - "signature_method%3DHMAC-SHA256%26oauth_timestamp%3D0%26oauth_version%" - "3D1.0OAuth " + "OAuth " "oauth_consumer_key=\"key\",oauth_nonce=\"unique\",oauth_signature_" "method=\"HMAC-SHA256\",oauth_timestamp=\"0\",oauth_version=\"1.0\"," - "oauth_signature=\"ncwRtcqRSM04FIFch8Ay4l7bRmp96lifuHEops4AqEw%3D\""; + "oauth_signature=\"g1pNnGH65Pl%2B%2FoUNm%2BJBAM9%2BjjgmSuknucOiOwFGFQE%" + "3D\""; EXPECT_EQ(sig, expected_sig); }