123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /**
- * 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 S3_EXTERNAL_1_HASH = Aws::Utils::HashingUtils::HashString("s3-external-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& endpointOverride)
- {
- Aws::StringStream ss;
- if (!endpointOverride.empty())
- {
- ss << arn.GetResourceId() << "-" << arn.GetAccountId() << "." << endpointOverride;
- return ss.str();
- }
- const Aws::String& region = regionNameOverride.empty() ? arn.GetRegion() : regionNameOverride;
- auto hash = Aws::Utils::HashingUtils::HashString(region.c_str());
- 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, bool useDualStack, const Aws::String& endpointOverride)
- {
- AWS_UNREFERENCED_PARAM(useDualStack);
- assert(!useDualStack);
- Aws::StringStream ss;
- if (!endpointOverride.empty())
- {
- ss << arn.GetSubResourceId() << "-" << arn.GetAccountId() << "." << arn.GetResourceId() << "." << endpointOverride;
- return ss.str();
- }
- const Aws::String& region = regionNameOverride.empty() ? arn.GetRegion() : regionNameOverride;
- auto hash = Aws::Utils::HashingUtils::HashString(region.c_str());
- ss << arn.GetSubResourceId() << "-" << arn.GetAccountId() << "." << arn.GetResourceId() << "." << ARNService::S3_OUTPOSTS << "." << region << "." << "amazonaws.com";
- if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH)
- {
- ss << ".cn";
- }
- return ss.str();
- }
- Aws::String ForObjectLambdaAccessPointArn(const S3ARN& arn, const Aws::String& regionNameOverride, bool useDualStack, const Aws::String& endpointOverride)
- {
- AWS_UNREFERENCED_PARAM(useDualStack);
- assert(!useDualStack);
- Aws::StringStream ss;
- if (!endpointOverride.empty())
- {
- ss << arn.GetResourceId() << "-" << arn.GetAccountId() << "." << endpointOverride;
- return ss.str();
- }
- Aws::String region = regionNameOverride.empty() ? arn.GetRegion() : regionNameOverride;
- Aws::String fipsSuffix = "";
- if (region.size() >= 5 && region.compare(0, 5, "fips-") == 0)
- {
- region = region.substr(5);
- fipsSuffix = "-fips";
- }
- else if (region.size() >= 5 && region.compare(region.size() - 5, 5, "-fips") == 0)
- {
- region = region.substr(0, region.size() - 5);
- fipsSuffix = "-fips";
- }
- ss << arn.GetResourceId() << "-" << arn.GetAccountId() << "." << ARNService::S3_OBJECT_LAMBDA << fipsSuffix << "." << region << "." << "amazonaws.com";
- auto hash = Aws::Utils::HashingUtils::HashString(region.c_str());
- 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, const Aws::String& serviceName)
- {
- auto hash = Aws::Utils::HashingUtils::HashString(regionName.c_str());
- if (!serviceName.empty())
- {
- assert(!useDualStack);
- Aws::StringStream ss;
- ss << serviceName;
- if (regionName.size() >= 5 && regionName.compare(0, 5, "fips-") == 0)
- {
- ss << "-fips." << regionName.substr(5);
- }
- else if (regionName.size() >= 5 && regionName.compare(regionName.size() - 5, 5, "-fips") == 0)
- {
- ss << "-fips." << regionName.substr(0, regionName.size() - 5);
- }
- else if (hash == AWS_GLOBAL_HASH || hash == S3_EXTERNAL_1_HASH)
- {
- ss << "." << Aws::Region::US_EAST_1;
- }
- else
- {
- ss << "." << regionName;
- }
- ss << ".amazonaws.com";
- if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH)
- {
- ss << ".cn";
- }
- return ss.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 == S3_EXTERNAL_1_HASH)
- {
- return "s3-external-1.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
|