From 4efb0fcb2d0e4aa33ff13871a5d86000623cf4cc Mon Sep 17 00:00:00 2001 From: Ahson Khan Date: Wed, 27 Nov 2024 11:21:23 -0800 Subject: [PATCH] Remove unused SharedKeyLitePolicy and connection string helpers in Tables. (#6268) * Remove SharedKeyLitePolicy and connection string helpers in Tables. * Remove files and tests that are no longer necessary. --- sdk/tables/azure-data-tables/CMakeLists.txt | 3 - .../credentials/named_key_credential.hpp | 23 +--- .../src/credentials/named_key_credential.cpp | 100 ------------------ .../src/policies/shared_key_lite_policy.cpp | 46 -------- .../policies/shared_key_lite_policy.hpp | 43 -------- .../azure-data-tables/src/table_clients.cpp | 2 - .../azure-data-tables/test/ut/CMakeLists.txt | 1 - .../test/ut/shared_key_lite_policy_test.cpp | 93 ---------------- 8 files changed, 3 insertions(+), 308 deletions(-) delete mode 100644 sdk/tables/azure-data-tables/src/credentials/named_key_credential.cpp delete mode 100644 sdk/tables/azure-data-tables/src/policies/shared_key_lite_policy.cpp delete mode 100644 sdk/tables/azure-data-tables/src/private/policies/shared_key_lite_policy.hpp delete mode 100644 sdk/tables/azure-data-tables/test/ut/shared_key_lite_policy_test.cpp diff --git a/sdk/tables/azure-data-tables/CMakeLists.txt b/sdk/tables/azure-data-tables/CMakeLists.txt index 76d02ace0..fcc5b35fa 100644 --- a/sdk/tables/azure-data-tables/CMakeLists.txt +++ b/sdk/tables/azure-data-tables/CMakeLists.txt @@ -57,16 +57,13 @@ set( set( AZURE_DATA_TABLES_SOURCE src/account_sas_builder.cpp - src/credentials/named_key_credential.cpp src/cryptography/hmacsha256.cpp src/models.cpp - src/policies/shared_key_lite_policy.cpp src/policies/tenant_bearer_token_policy.cpp src/policies/timeout_policy.cpp src/private/hmacsha256.hpp src/private/package_version.hpp src/private/policies/service_version_policy.hpp - src/private/policies/shared_key_lite_policy.hpp src/private/policies/tenant_bearer_token_policy.hpp src/private/policies/timeout_policy.hpp src/private/serializers.hpp diff --git a/sdk/tables/azure-data-tables/inc/azure/data/tables/credentials/named_key_credential.hpp b/sdk/tables/azure-data-tables/inc/azure/data/tables/credentials/named_key_credential.hpp index 32012c159..3a25d8a3e 100644 --- a/sdk/tables/azure-data-tables/inc/azure/data/tables/credentials/named_key_credential.hpp +++ b/sdk/tables/azure-data-tables/inc/azure/data/tables/credentials/named_key_credential.hpp @@ -8,9 +8,6 @@ #include #include #include -namespace Azure { namespace Data { namespace Tables { namespace _detail { namespace Policies { - class SharedKeyLitePolicy; -}}}}} // namespace Azure::Data::Tables::_detail::Policies namespace Azure { namespace Data { namespace Tables { namespace Sas { class AccountSasBuilder; @@ -28,7 +25,7 @@ namespace Azure { namespace Data { namespace Tables { namespace Credentials { /** * @brief Initializes a new instance of the NamedKeyCredential. * - * @param accountName Name of the account. + * @param accountName Name of the account. * @param accountKey Access key of the * account. */ @@ -38,10 +35,10 @@ namespace Azure { namespace Data { namespace Tables { namespace Credentials { } /** - * @brief Update the account's access key. This intended to be used when you've + * @brief Update the account's access key. This intended to be used when you've * regenerated your account's access keys and want to update long lived clients. * - * @param accountKey An account access key. + * @param accountKey An account access key. */ void Update(std::string accountKey) { @@ -55,7 +52,6 @@ namespace Azure { namespace Data { namespace Tables { namespace Credentials { const std::string AccountName; private: - friend class Azure::Data::Tables::_detail::Policies::SharedKeyLitePolicy; friend class Azure::Data::Tables::Sas::AccountSasBuilder; friend class Azure::Data::Tables::Sas::TablesSasBuilder; @@ -69,17 +65,4 @@ namespace Azure { namespace Data { namespace Tables { namespace Credentials { std::string m_accountKey; }; - namespace _detail { - struct ConnectionStringParts - { - std::string AccountName; - std::string AccountKey; - Azure::Core::Url TableServiceUrl; - std::shared_ptr KeyCredential; - }; - - ConnectionStringParts ParseConnectionString(const std::string& connectionString); - std::string GetDefaultScopeForAudience(const std::string& audience); - } // namespace _detail - }}}} // namespace Azure::Data::Tables::Credentials diff --git a/sdk/tables/azure-data-tables/src/credentials/named_key_credential.cpp b/sdk/tables/azure-data-tables/src/credentials/named_key_credential.cpp deleted file mode 100644 index bfd14ded9..000000000 --- a/sdk/tables/azure-data-tables/src/credentials/named_key_credential.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -#include "azure/data/tables/credentials/named_key_credential.hpp" - -#include - -namespace Azure { namespace Data { namespace Tables { namespace Credentials { namespace _detail { - - ConnectionStringParts ParseConnectionString(const std::string& connectionString) - { - std::map connectionStringMap; - - std::string::const_iterator cur = connectionString.begin(); - - while (cur != connectionString.end()) - { - auto key_begin = cur; - auto key_end = std::find(cur, connectionString.end(), '='); - std::string key = std::string(key_begin, key_end); - cur = key_end; - if (cur != connectionString.end()) - { - ++cur; - } - - auto value_begin = cur; - auto value_end = std::find(cur, connectionString.end(), ';'); - std::string value = std::string(value_begin, value_end); - cur = value_end; - if (cur != connectionString.end()) - { - ++cur; - } - - if (!key.empty() || !value.empty()) - { - connectionStringMap[std::move(key)] = std::move(value); - } - } - - auto getWithDefault = [](const std::map& m, - const std::string& key, - const std::string& defaultValue = std::string()) { - auto ite = m.find(key); - return ite == m.end() ? defaultValue : ite->second; - }; - - ConnectionStringParts connectionStringParts; - - std::string defaultEndpointsProtocol - = getWithDefault(connectionStringMap, "DefaultEndpointsProtocol", "https"); - std::string EndpointSuffix - = getWithDefault(connectionStringMap, "EndpointSuffix", "core.windows.net"); - std::string accountName = getWithDefault(connectionStringMap, "AccountName"); - connectionStringParts.AccountName = accountName; - - std::string endpoint = getWithDefault(connectionStringMap, "TableEndpoint"); - if (endpoint.empty() && !accountName.empty()) - { - endpoint = defaultEndpointsProtocol + "://" + accountName + ".table." + EndpointSuffix; - } - connectionStringParts.TableServiceUrl = Azure::Core::Url(std::move(endpoint)); - - std::string accountKey = getWithDefault(connectionStringMap, "AccountKey"); - connectionStringParts.AccountKey = accountKey; - if (!accountKey.empty()) - { - if (accountName.empty()) - { - throw std::runtime_error("Cannot find account name in connection string."); - } - connectionStringParts.KeyCredential - = std::make_shared(accountName, accountKey); - } - - std::string sas = getWithDefault(connectionStringMap, "SharedAccessSignature"); - if (!sas.empty()) - { - if (sas[0] != '?') - { - sas = '?' + sas; - } - - connectionStringParts.TableServiceUrl - = Azure::Core::Url(connectionStringParts.TableServiceUrl.GetAbsoluteUrl() + sas); - } - - return connectionStringParts; - } - - std::string GetDefaultScopeForAudience(const std::string& audience) - { - if (!audience.empty() && audience.back() == '/') - { - return audience + ".default"; - } - return audience + "/.default"; - } -}}}}} // namespace Azure::Data::Tables::Credentials::_detail diff --git a/sdk/tables/azure-data-tables/src/policies/shared_key_lite_policy.cpp b/sdk/tables/azure-data-tables/src/policies/shared_key_lite_policy.cpp deleted file mode 100644 index eb7e7cdf3..000000000 --- a/sdk/tables/azure-data-tables/src/policies/shared_key_lite_policy.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -#include "../private/policies/shared_key_lite_policy.hpp" - -#include "../private/hmacsha256.hpp" - -#include -#include -#include -#include - -#include - -namespace Azure { namespace Data { namespace Tables { namespace _detail { namespace Policies { - - std::string SharedKeyLitePolicy::GetSignature(const Core::Http::Request& request) const - { - std::string string_to_sign; - - const auto& headers = request.GetHeaders(); - - // canonical date header headers - const std::string dateHeader = headers.at("x-ms-date"); - string_to_sign += dateHeader + "\n"; - - // If the request URI addresses a component of the resource, append the appropriate query - // string. The query string should include the question mark and the comp parameter (for - // example, ?comp=metadata). No other parameters should be included on the query string. - // https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key#shared-key-lite-and-table-service-format-for-2009-09-19-and-later - // canonicalized resource - string_to_sign += "/" + m_credential->AccountName + "/" + request.GetUrl().GetPath(); - auto queryParameters = request.GetUrl().GetQueryParameters(); - if (queryParameters.count("comp") > 0) - { - const std::string keyValue = Azure::Core::Url::Encode("comp"); - auto compValue = queryParameters.at(keyValue); - string_to_sign += "?comp=" + Azure::Core::Url::Decode(compValue); - } - - return Azure::Core::Convert::Base64Encode( - Azure::Data::Tables::_detail::Cryptography::HmacSha256::Compute( - std::vector(string_to_sign.begin(), string_to_sign.end()), - Azure::Core::Convert::Base64Decode(m_credential->GetAccountKey()))); - } -}}}}} // namespace Azure::Data::Tables::_detail::Policies diff --git a/sdk/tables/azure-data-tables/src/private/policies/shared_key_lite_policy.hpp b/sdk/tables/azure-data-tables/src/private/policies/shared_key_lite_policy.hpp deleted file mode 100644 index 094b4b78f..000000000 --- a/sdk/tables/azure-data-tables/src/private/policies/shared_key_lite_policy.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -#pragma once - -#include "azure/data/tables/credentials/named_key_credential.hpp" - -#include - -#include -#include - -namespace Azure { namespace Data { namespace Tables { namespace _detail { namespace Policies { - class SharedKeyLitePolicy final : public Core::Http::Policies::HttpPolicy { - public: - explicit SharedKeyLitePolicy(std::shared_ptr credential) - : m_credential{std::move(credential)} - { - } - - ~SharedKeyLitePolicy() override {} - - std::unique_ptr Clone() const override - { - return std::make_unique(m_credential); - } - - std::unique_ptr Send( - Core::Http::Request& request, - Core::Http::Policies::NextHttpPolicy nextPolicy, - Core::Context const& context) const override - { - request.SetHeader( - "Authorization", - "SharedKeyLite " + m_credential->AccountName + ":" + GetSignature(request)); - return nextPolicy.Send(request, context); - } - - std::string GetSignature(const Core::Http::Request& request) const; - std::shared_ptr m_credential; - }; - -}}}}} // namespace Azure::Data::Tables::_detail::Policies diff --git a/sdk/tables/azure-data-tables/src/table_clients.cpp b/sdk/tables/azure-data-tables/src/table_clients.cpp index 7fd301287..cfcdaa55d 100644 --- a/sdk/tables/azure-data-tables/src/table_clients.cpp +++ b/sdk/tables/azure-data-tables/src/table_clients.cpp @@ -5,7 +5,6 @@ #include "azure/data/tables/table_service_client.hpp" #include "private/package_version.hpp" #include "private/policies/service_version_policy.hpp" -#include "private/policies/shared_key_lite_policy.hpp" #include "private/policies/tenant_bearer_token_policy.hpp" #include "private/policies/timeout_policy.hpp" #include "private/serializers.hpp" @@ -17,7 +16,6 @@ using namespace Azure::Data::Tables; using namespace Azure::Data::Tables::_detail::Policies; using namespace Azure::Data::Tables::_detail::Xml; -using namespace Azure::Data::Tables::Credentials::_detail; using namespace Azure::Data::Tables::_detail; TableServiceClient::TableServiceClient( diff --git a/sdk/tables/azure-data-tables/test/ut/CMakeLists.txt b/sdk/tables/azure-data-tables/test/ut/CMakeLists.txt index b78818d5a..458d2cd02 100644 --- a/sdk/tables/azure-data-tables/test/ut/CMakeLists.txt +++ b/sdk/tables/azure-data-tables/test/ut/CMakeLists.txt @@ -22,7 +22,6 @@ add_executable ( sas_test.cpp serializers_test.hpp serializers_test.cpp - shared_key_lite_policy_test.cpp table_client_test.cpp table_client_test.hpp transactions_test.hpp diff --git a/sdk/tables/azure-data-tables/test/ut/shared_key_lite_policy_test.cpp b/sdk/tables/azure-data-tables/test/ut/shared_key_lite_policy_test.cpp deleted file mode 100644 index 5a315ec7b..000000000 --- a/sdk/tables/azure-data-tables/test/ut/shared_key_lite_policy_test.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -#include "../src/private/hmacsha256.hpp" -#include "../src/private/policies/shared_key_lite_policy.hpp" -#include "azure/data/tables/credentials/named_key_credential.hpp" - -#include -#include -#include - -#include - -using namespace Azure::Core::Http::Policies; -using namespace Azure::Data::Tables::_detail::Policies; -using namespace Azure::Data::Tables::Credentials; -using namespace Azure::Data::Tables::Credentials::_detail; -namespace Azure { namespace Data { namespace Tables { namespace _internal { namespace Policies { - namespace Test { - - TEST(SharedKeyCredentialLiteTest, SharedKeyCredentialLite) - { - const std::string accountKey = "account-key"; - std::string connectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;" - "AccountKey=" - + Azure::Core::Convert::Base64Encode( - std::vector(accountKey.begin(), accountKey.end())) - + ";EndpointSuffix = core.windows.net "; - - std::shared_ptr credential; - auto parsedConnectionString = ParseConnectionString(connectionString); - SharedKeyLitePolicy policy(parsedConnectionString.KeyCredential); - - Azure::Core::Url url("https://goqu.table.core.windows.net"); - url.SetQueryParameters({{"restype", "service"}, {"comp", "properties"}}); - Azure::Core::Http::Request request(Azure::Core::Http::HttpMethod::Get, url); - request.SetHeader("x-ms-date", "Thu, 23 Apr 2020 09:43:37 GMT"); - auto result = policy.GetSignature(request); - const std::string stringTest - = "Thu, 23 Apr 2020 09:43:37 GMT\n/account-name/?comp=properties"; - const std::string expectedSignature = Azure::Core::Convert::Base64Encode( - Azure::Data::Tables::_detail::Cryptography::HmacSha256::Compute( - std::vector(stringTest.begin(), stringTest.end()), - std::vector(accountKey.begin(), accountKey.end()))); - EXPECT_EQ(result, expectedSignature); - } - - TEST(SharedKeyCredentialLiteTest, SharedKeyCredentialLiteNoDate) - { - const std::string accountKey = "account-key"; - std::string connectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;" - "AccountKey=" - + Azure::Core::Convert::Base64Encode( - std::vector(accountKey.begin(), accountKey.end())) - + ";EndpointSuffix = core.windows.net "; - - std::shared_ptr credential; - auto parsedConnectionString = ParseConnectionString(connectionString); - SharedKeyLitePolicy policy(parsedConnectionString.KeyCredential); - - Azure::Core::Url url("https://goqu.table.core.windows.net"); - url.SetQueryParameters({{"restype", "service"}, {"comp", "properties"}}); - Azure::Core::Http::Request request(Azure::Core::Http::HttpMethod::Get, url); - EXPECT_THROW(policy.GetSignature(request), std::exception); - } - - TEST(SharedKeyCredentialLiteTest, SharedKeyCredentialLiteNoQuery) - { - const std::string accountKey = "account-key"; - std::string connectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;" - "AccountKey=" - + Azure::Core::Convert::Base64Encode( - std::vector(accountKey.begin(), accountKey.end())) - + ";EndpointSuffix = core.windows.net "; - - std::shared_ptr credential; - auto parsedConnectionString = ParseConnectionString(connectionString); - SharedKeyLitePolicy policy(parsedConnectionString.KeyCredential); - - Azure::Core::Url url("https://goqu.table.core.windows.net"); - Azure::Core::Http::Request request(Azure::Core::Http::HttpMethod::Get, url); - request.SetHeader("x-ms-date", "Thu, 23 Apr 2020 09:43:37 GMT"); - auto result = policy.GetSignature(request); - const std::string stringTest = "Thu, 23 Apr 2020 09:43:37 GMT\n/account-name/"; - const std::string expectedSignature = Azure::Core::Convert::Base64Encode( - Azure::Data::Tables::_detail::Cryptography::HmacSha256::Compute( - std::vector(stringTest.begin(), stringTest.end()), - std::vector(accountKey.begin(), accountKey.end()))); - - EXPECT_EQ(result, expectedSignature); - } - -}}}}}} // namespace Azure::Data::Tables::_internal::Policies::Test