/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include #include #include #include #include #include #include namespace Aws { namespace S3 { class AWS_S3_API S3ExpressSigner : public Aws::Client::AWSAuthV4Signer { public: S3ExpressSigner(std::shared_ptr S3ExpressIdentityProvider, const std::shared_ptr &credentialsProvider, const Aws::String &serviceName, const Aws::String ®ion, PayloadSigningPolicy signingPolicy = PayloadSigningPolicy::RequestDependent, bool urlEscapePath = true, Aws::Auth::AWSSigningAlgorithm signingAlgorithm = Aws::Auth::AWSSigningAlgorithm::SIGV4); virtual ~S3ExpressSigner() {}; const char *GetName() const override; bool SignRequest(Aws::Http::HttpRequest &request, const char *region, const char *serviceName, bool signBody ) const override; bool PresignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, long long expirationInSeconds ) const override; Aws::Auth::AWSCredentials GetCredentials(const std::shared_ptr &serviceSpecificParameters) const override; protected: bool ServiceRequireUnsignedPayload(const String &serviceName) const override; private: inline bool hasRequestId(const Aws::String &requestId) const { std::lock_guard lock(m_requestProcessing); return m_requestsProcessing.find(requestId) != m_requestsProcessing.end(); } inline void putRequestId(const Aws::String &requestId) const { std::lock_guard lock(m_requestProcessing); m_requestsProcessing.insert(requestId); } inline void deleteRequestId(const Aws::String &requestId) const { std::lock_guard lock(m_requestProcessing); m_requestsProcessing.erase(requestId); } std::shared_ptr m_S3ExpressIdentityProvider; std::shared_ptr m_credentialsProvider; mutable std::set m_requestsProcessing; mutable std::mutex m_requestProcessing; const Aws::String m_serviceName; const Aws::String m_region; const Aws::String m_endpoint; }; } }