diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp')
-rw-r--r-- | contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp new file mode 100644 index 0000000000..c81556085f --- /dev/null +++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp @@ -0,0 +1,133 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ + +#include <aws/s3/S3Endpoint.h> +#include <aws/core/utils/memory/stl/AWSStringStream.h> +#include <aws/core/utils/HashingUtils.h> + +using namespace Aws; +using namespace Aws::S3; + +namespace Aws +{ +namespace S3 +{ +namespace S3Endpoint +{ + static const int CN_NORTH_1_HASH = Aws::Utils::HashingUtils::HashString("cn-north-1"); + static const int CN_NORTHWEST_1_HASH = Aws::Utils::HashingUtils::HashString("cn-northwest-1"); + static const int US_ISO_EAST_1_HASH = Aws::Utils::HashingUtils::HashString("us-iso-east-1"); + static const int US_ISOB_EAST_1_HASH = Aws::Utils::HashingUtils::HashString("us-isob-east-1"); + + static const int FIPS_US_GOV_WEST_1_HASH = Aws::Utils::HashingUtils::HashString("fips-us-gov-west-1"); + static const int US_GOV_WEST_1_HASH = Aws::Utils::HashingUtils::HashString("us-gov-west-1"); + static const int US_GOV_EAST_1_HASH = Aws::Utils::HashingUtils::HashString("us-gov-east-1"); + static const int US_EAST_1_HASH = Aws::Utils::HashingUtils::HashString("us-east-1"); + static const int AWS_GLOBAL_HASH = Aws::Utils::HashingUtils::HashString("aws-global"); + + Aws::String ForAccessPointArn(const S3ARN& arn, const Aws::String& regionNameOverride, bool useDualStack) + { + const Aws::String& region = regionNameOverride.empty() ? arn.GetRegion() : regionNameOverride; + auto hash = Aws::Utils::HashingUtils::HashString(region.c_str()); + + Aws::StringStream ss; + ss << arn.GetResourceId() << "-" << arn.GetAccountId() << ".s3-accesspoint."; + if (useDualStack) + { + ss << "dualstack."; + } + ss << region << "." << "amazonaws.com"; + + if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH) + { + ss << ".cn"; + } + + return ss.str(); + } + + Aws::String ForOutpostsArn(const S3ARN& arn, const Aws::String& regionNameOverride) + { + const Aws::String& region = regionNameOverride.empty() ? arn.GetRegion() : regionNameOverride; + auto hash = Aws::Utils::HashingUtils::HashString(region.c_str()); + + Aws::StringStream ss; + ss << arn.GetSubResourceId() << "-" << arn.GetAccountId() << "." << arn.GetResourceId() << ".s3-outposts." << region << "." << "amazonaws.com"; + + if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH) + { + ss << ".cn"; + } + + return ss.str(); + } + + Aws::String ForRegion(const Aws::String& regionName, bool useDualStack, bool USEast1UseRegionalEndpoint) + { + auto hash = Aws::Utils::HashingUtils::HashString(regionName.c_str()); + + if(!useDualStack) + { + if(hash == FIPS_US_GOV_WEST_1_HASH) + { + return "s3-fips-us-gov-west-1.amazonaws.com"; + } + if(hash == US_GOV_WEST_1_HASH) + { + return "s3.us-gov-west-1.amazonaws.com"; + } + if(hash == US_GOV_EAST_1_HASH) + { + return "s3.us-gov-east-1.amazonaws.com"; + } + if (hash == AWS_GLOBAL_HASH) + { + return "s3.amazonaws.com"; + } + if(hash == US_EAST_1_HASH) + { + if (USEast1UseRegionalEndpoint) + { + return "s3.us-east-1.amazonaws.com"; + } + else + { + return "s3.amazonaws.com"; + } + } + } + Aws::StringStream ss; + ss << "s3" << "."; + + if(useDualStack) + { + ss << "dualstack."; + } + + ss << regionName; + + if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH) + { + ss << ".amazonaws.com.cn"; + } + else if (hash == US_ISO_EAST_1_HASH) + { + ss << ".c2s.ic.gov"; + } + else if (hash == US_ISOB_EAST_1_HASH) + { + ss << ".sc2s.sgov.gov"; + } + else + { + ss << ".amazonaws.com"; + } + + return ss.str(); + } + +} // namespace S3Endpoint +} // namespace S3 +} // namespace Aws |