123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- /**
- * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
- * SPDX-License-Identifier: Apache-2.0.
- */
- #include <aws/core/client/AWSUrlPresigner.h>
- #include <aws/core/client/AWSClient.h>
- #include <aws/core/http/HttpClientFactory.h>
- namespace Aws
- {
- namespace Client
- {
- using HttpRequest = Http::HttpRequest;
- using HttpMethod = Http::HttpMethod;
- using URI = Http::URI;
- AWSUrlPresigner::AWSUrlPresigner(const AWSClient& client)
- : m_awsClient(client)
- {}
- Aws::Client::AWSAuthSigner* AWSUrlPresigner::GetSignerByName(const char* name) const
- {
- return m_awsClient.GetSignerByName(name);
- }
- std::shared_ptr<Aws::Http::HttpRequest>
- ConvertToRequestForPresigning(const Aws::AmazonWebServiceRequest& request,
- const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const Aws::Http::QueryStringParameterCollection& extraParams)
- {
- Aws::Http::URI uriCopy = uri;
- request.PutToPresignedUrl(uriCopy);
- std::shared_ptr<HttpRequest> httpRequest = CreateHttpRequest(uriCopy, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
- for (auto& param : extraParams)
- {
- httpRequest->AddQueryStringParameter(param.first.c_str(), param.second);
- }
- return httpRequest;
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const URI& uri,
- HttpMethod method,
- long long expirationInSeconds) const
- {
- const char* regionOverride = nullptr;
- const char* serviceNameOverride = nullptr;
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(uri, method, regionOverride, serviceNameOverride, signerName, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const URI& uri,
- HttpMethod method,
- const Aws::Http::HeaderValueCollection& customizedHeaders,
- long long expirationInSeconds) const
- {
- const char* regionOverride = nullptr;
- const char* serviceNameOverride = nullptr;
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(uri, method, regionOverride, serviceNameOverride, signerName, customizedHeaders, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const URI& uri,
- HttpMethod method,
- const char* regionOverride,
- long long expirationInSeconds) const
- {
- const char* serviceNameOverride = nullptr;
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(uri, method, regionOverride, serviceNameOverride, signerName, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const URI& uri,
- HttpMethod method,
- const char* regionOverride,
- const Aws::Http::HeaderValueCollection& customizedHeaders,
- long long expirationInSeconds) const
- {
- const char* serviceNameOverride = nullptr;
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(uri, method, regionOverride, serviceNameOverride, signerName, customizedHeaders, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const char* regionOverride,
- const char* serviceNameOverride,
- long long expirationInSeconds) const
- {
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(uri, method, regionOverride, serviceNameOverride, signerName, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const char* regionOverride,
- const char* serviceNameOverride,
- const Aws::Http::HeaderValueCollection& customizedHeaders,
- long long expirationInSeconds) const
- {
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(uri, method, regionOverride, serviceNameOverride, signerName, customizedHeaders, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const char* regionOverride,
- const char* serviceNameOverride,
- const char* signerName,
- long long expirationInSeconds) const
- {
- const Aws::Http::HeaderValueCollection& customizedHeaders = {};
- return GeneratePresignedUrl(uri, method, regionOverride, serviceNameOverride, signerName, customizedHeaders, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const char* region,
- const char* serviceName,
- const char* signerName,
- const Aws::Http::HeaderValueCollection& customizedHeaders,
- long long expirationInSeconds) const
- {
- /* a real method implementation */
- if (!signerName) {
- signerName = Aws::Auth::SIGV4_SIGNER;
- }
- std::shared_ptr<HttpRequest> request = CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
- for (const auto& it: customizedHeaders)
- {
- request->SetHeaderValue(it.first.c_str(), it.second);
- }
- auto signer = GetSignerByName(signerName);
- if (signer->PresignRequest(*request, region, serviceName, expirationInSeconds))
- {
- return request->GetURIString();
- }
- return {};
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::Endpoint::AWSEndpoint& endpoint,
- Aws::Http::HttpMethod method /* = Http::HttpMethod::HTTP_POST */,
- const Aws::Http::HeaderValueCollection& customizedHeaders /* = {} */,
- uint64_t expirationInSeconds /* = 0 */,
- const char* signerName /* = Aws::Auth::SIGV4_SIGNER */,
- const char* signerRegionOverride /* = nullptr */,
- const char* signerServiceNameOverride /* = nullptr */) const
- {
- const Aws::Http::URI& uri = endpoint.GetURI();
- if (endpoint.GetAttributes()) {
- signerName = endpoint.GetAttributes()->authScheme.GetName().c_str();
- if (endpoint.GetAttributes()->authScheme.GetSigningRegion()) {
- signerRegionOverride = endpoint.GetAttributes()->authScheme.GetSigningRegion()->c_str();
- }
- if (endpoint.GetAttributes()->authScheme.GetSigningRegionSet()) {
- signerRegionOverride = endpoint.GetAttributes()->authScheme.GetSigningRegionSet()->c_str();
- }
- if (endpoint.GetAttributes()->authScheme.GetSigningName()) {
- signerServiceNameOverride = endpoint.GetAttributes()->authScheme.GetSigningName()->c_str();
- }
- }
- return GeneratePresignedUrl(uri, method, signerRegionOverride, signerServiceNameOverride, signerName, customizedHeaders, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request,
- const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const char* regionOverride,
- const Aws::Http::QueryStringParameterCollection& extraParams,
- long long expirationInSeconds) const
- {
- const char* serviceNameOverride = nullptr;
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(request, uri, method, regionOverride, serviceNameOverride, signerName, extraParams, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request,
- const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const char* regionOverride,
- const char* serviceNameOverride,
- const char* signerName,
- const Aws::Http::QueryStringParameterCollection& extraParams,
- long long expirationInSeconds) const
- {
- /* a real method implementation */
- if (!signerName) {
- signerName = Aws::Auth::SIGV4_SIGNER;
- }
- std::shared_ptr<HttpRequest> httpRequest =
- ConvertToRequestForPresigning(request, uri, method, extraParams);
- auto signer = GetSignerByName(signerName);
- if (signer->PresignRequest(*httpRequest, regionOverride, serviceNameOverride, expirationInSeconds))
- {
- return httpRequest->GetURIString();
- }
- return {};
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request,
- const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const char* regionOverride,
- const char* serviceNameOverride,
- const Aws::Http::QueryStringParameterCollection& extraParams,
- long long expirationInSeconds) const
- {
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(request, uri, method, regionOverride, serviceNameOverride, signerName, extraParams, expirationInSeconds);
- }
- Aws::String AWSUrlPresigner::GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request,
- const Aws::Http::URI& uri,
- Aws::Http::HttpMethod method,
- const Aws::Http::QueryStringParameterCollection& extraParams,
- long long expirationInSeconds) const
- {
- const char* regionOverride = nullptr;
- const char* serviceNameOverride = nullptr;
- const char* signerName = Aws::Auth::SIGV4_SIGNER;
- return GeneratePresignedUrl(request, uri, method, regionOverride, serviceNameOverride, signerName, extraParams, expirationInSeconds);
- }
- } // namespace Client
- } // namespace Aws
|