From f0ebdcb2e051e59e23a025f206df51896571d189 Mon Sep 17 00:00:00 2001 From: George Arama Date: Fri, 19 Apr 2024 09:47:16 -0700 Subject: [PATCH] fsdfs --- .../azure/core/test/test_proxy_manager.hpp | 2 + .../src/test_proxy_manager.cpp | 143 ++++++++++++++++++ 2 files changed, 145 insertions(+) diff --git a/sdk/core/azure-core-test/inc/azure/core/test/test_proxy_manager.hpp b/sdk/core/azure-core-test/inc/azure/core/test/test_proxy_manager.hpp index 6802b8e0a..d730ae1c6 100644 --- a/sdk/core/azure-core-test/inc/azure/core/test/test_proxy_manager.hpp +++ b/sdk/core/azure-core-test/inc/azure/core/test/test_proxy_manager.hpp @@ -83,6 +83,7 @@ namespace Azure { namespace Core { namespace Test { Azure::Core::Http::_internal::HttpPipeline pipeline( clientOp, "PerfFw", "na", std::move(policiesRe), std::move(policiesOp)); m_privatePipeline = std::make_unique(pipeline); + void SetProxySanitizer(); } /** @@ -153,6 +154,7 @@ namespace Azure { namespace Core { namespace Test { private: std::string PrepareRequestBody(); + void SetProxySanitizer(); bool CheckSanitizers(); }; diff --git a/sdk/core/azure-core-test/src/test_proxy_manager.cpp b/sdk/core/azure-core-test/src/test_proxy_manager.cpp index 31d5797c1..f9527cc43 100644 --- a/sdk/core/azure-core-test/src/test_proxy_manager.cpp +++ b/sdk/core/azure-core-test/src/test_proxy_manager.cpp @@ -188,3 +188,146 @@ bool TestProxyManager::CheckSanitizers() } return true; } + +void TestProxyManager::SetProxySanitizer() +{ + if (CheckSanitizers()) + { + return; + } + // we have 3 types of sanitizer, + // see + // https://github.com/Azure/azure-sdk-tools/blob/main/tools/test-proxy/Azure.Sdk.Tools.TestProxy/README.md#a-note-about-where-sanitizers-apply + enum class SanitizerType + { + Uri, + Header, + Body, + General, + }; + auto addSanitizer = [&](SanitizerType type, + const std::string& regex, + const std::string& groupName, + const std::string& headerName = std::string()) { + const std::map abstractionIdentifierValues = { + {SanitizerType::Uri, "UriRegexSanitizer"}, + {SanitizerType::Header, "HeaderRegexSanitizer"}, + {SanitizerType::Body, "BodyRegexSanitizer"}, + {SanitizerType::General, "GeneralRegexSanitizer"}, + }; + + Azure::Core::Url sanitizerRequest(m_proxy); + sanitizerRequest.AppendPath("Admin"); + sanitizerRequest.AppendPath("AddSanitizer"); + + auto jsonRoot = Json::_internal::json::object(); + jsonRoot["value"] = "REDACTED"; + jsonRoot["regex"] = regex; + jsonRoot["groupForReplace"] = groupName; + if (!headerName.empty()) + { + jsonRoot["key"] = headerName; + } + auto jsonString = jsonRoot.dump(); + + Azure::Core::IO::MemoryBodyStream payloadStream( + reinterpret_cast(jsonString.data()), jsonString.size()); + Azure::Core::Http::Request request( + Azure::Core::Http::HttpMethod::Post, sanitizerRequest, &payloadStream); + request.SetHeader("x-abstraction-identifier", abstractionIdentifierValues.at(type)); + Azure::Core::Context ctx; + auto response = m_privatePipeline->Send(request, ctx); + (void)response; + }; + + addSanitizer(SanitizerType::General, g_accountRegex, "account"); + addSanitizer(SanitizerType::Body, "client_secret=(?[^&]+)", "clientsecret"); + addSanitizer(SanitizerType::Body, "client_id=(?[^&]+)", "clientid"); + addSanitizer( + SanitizerType::Body, + "(?<=).*?(?:)(.*)(?:)", + "signedtid"); + addSanitizer( + SanitizerType::Body, + "(?<=).*?(?:)(.*)(?:)", + "signedoid"); + const std::string storageSasSignatureRegex = "\\?.*sig=(?[a-zA-Z0-9\\%\\/+=]+)"; + addSanitizer(SanitizerType::Uri, storageSasSignatureRegex, "sassig"); + addSanitizer(SanitizerType::Header, storageSasSignatureRegex, "sassig", "x-ms-copy-source"); + addSanitizer(SanitizerType::Header, storageSasSignatureRegex, "sassig", "x-ms-rename-source"); + addSanitizer(SanitizerType::Header, "(?.+)", "auth", "x-ms-copy-source-authorization"); + addSanitizer(SanitizerType::Header, "(?.+)", "auth", "x-ms-encryption-key"); + addSanitizer(SanitizerType::Header, "(?.+)", "auth", "x-ms-rename-source"); + addSanitizer(SanitizerType::Header, "(?.+)", "auth", "x-ms-file-rename-source"); + addSanitizer(SanitizerType::Header, "(?.+)", "auth", "x-ms-copy-source"); + addSanitizer(SanitizerType::Header, "(?.+)", "auth", "x-ms-copy-source-authorization"); + addSanitizer( + SanitizerType::Header, "(?.+)", "auth", "x-ms-file-rename-source-authorization"); + addSanitizer(SanitizerType::Header, "(?.+)", "auth", "x-ms-encryption-key-sha256"); + addSanitizer(SanitizerType::Header, "(?.+)", "cookie", "Cookie"); + addSanitizer(SanitizerType::Header, "(?.+)", "cookie", "Set-Cookie"); + const std::string storageUserDelegationKeyRegex + = "\\u003CValue\\u003E(?[a-zA-Z0-9\\/=+]+).*\\u003C\\/" + "UserDelegationKey\\u003E"; + addSanitizer(SanitizerType::Body, storageUserDelegationKeyRegex, "userdelegationkey"); + + Azure::Core::Url matcherRequest(m_proxy); + matcherRequest.AppendPath("Admin"); + matcherRequest.AppendPath("SetMatcher"); + std::string matcherBody; + { + auto jsonRoot = Json::_internal::json::object(); + jsonRoot["compareBodies"] = false; + jsonRoot["ignoreQueryOrdering"] = true; + const std::vector excludedHeaders = { + "Expect", + "Connection", + "Cookie", + }; + jsonRoot["excludedHeaders"] = std::accumulate( + excludedHeaders.begin(), + excludedHeaders.end(), + std::string(), + [](const std::string& lhs, const std::string& rhs) { + return lhs + (lhs.empty() ? "" : ",") + rhs; + }); + const std::vector ignoredHeaders = { + "x-ms-copy-source", + "x-ms-file-change-time", + "x-ms-file-creation-time", + "x-ms-file-last-write-time", + "x-ms-rename-source", + "x-ms-immutability-policy-until-date", + }; + const std::vector ignoreQueryParameters = { + "st", + "se", + "sig", + "sv", + }; + jsonRoot["ignoredHeaders"] = std::accumulate( + ignoredHeaders.begin(), + ignoredHeaders.end(), + std::string(), + [](const std::string& lhs, const std::string& rhs) { + return lhs + (lhs.empty() ? "" : ",") + rhs; + }); + jsonRoot["ignoredQueryParameters"] = std::accumulate( + ignoreQueryParameters.begin(), + ignoreQueryParameters.end(), + std::string(), + [](const std::string& lhs, const std::string& rhs) { + return lhs + (lhs.empty() ? "" : ",") + rhs; + }); + matcherBody = jsonRoot.dump(); + } + { + Azure::Core::IO::MemoryBodyStream payloadStream( + reinterpret_cast(matcherBody.data()), matcherBody.size()); + Azure::Core::Http::Request request( + Azure::Core::Http::HttpMethod::Post, matcherRequest, &payloadStream); + request.SetHeader("x-abstraction-identifier", "CustomDefaultMatcher"); + Azure::Core::Context ctx; + auto response = m_privatePipeline->Send(request, ctx); + } +}