/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include #include #include #include namespace smithy { class AwsBearerTokenIdentityResolver : public IdentityResolverBase { public: static const char BEARER_TOKEN_PROVIDER_CHAIN_LOG_TAG[]; using IdentityT = AwsBearerTokenIdentity; virtual ~AwsBearerTokenIdentityResolver() = default; AwsBearerTokenIdentityResolver() = default; AwsBearerTokenIdentityResolver( const Aws::Vector< std::shared_ptr> &providerChain) : m_providerChainLegacy{providerChain} { } ResolveIdentityFutureOutcome getIdentity(const IdentityProperties &identityProperties, const AdditionalParameters &additionalParameters) override { AWS_UNREFERENCED_PARAM(identityProperties); AWS_UNREFERENCED_PARAM(additionalParameters); for (auto &bearerTokenProvider : m_providerChainLegacy) { if (!bearerTokenProvider) { AWS_LOGSTREAM_FATAL( BEARER_TOKEN_PROVIDER_CHAIN_LOG_TAG, "Unexpected nullptr in " "DefaultBearerTokenProviderChain::m_providerChain"); return Aws::Client::AWSError( Aws::Client::CoreErrors::INVALID_PARAMETER_VALUE, "", "Unexpected nullptr in " "BearerTokenProviderChain::m_providerChain", false); } auto bearerToken = bearerTokenProvider->GetAWSBearerToken(); if (!bearerToken.IsExpiredOrEmpty()) { auto outcomePtr = Aws::MakeUnique( BEARER_TOKEN_PROVIDER_CHAIN_LOG_TAG); outcomePtr->token() = bearerToken.GetToken(); outcomePtr->expiration() = bearerToken.GetExpiration(); return ResolveIdentityFutureOutcome(std::move(outcomePtr)); } } return Aws::Client::AWSError( Aws::Client::CoreErrors::NOT_INITIALIZED, "", "No bearer token provider in chain found", false); } void AddBearerTokenProvider( std::shared_ptr provider) { m_providerChainLegacy.emplace_back(std::move(provider)); } protected: Aws::Vector> m_providerChainLegacy; }; class DefaultAwsBearerTokenIdentityResolver : public AwsBearerTokenIdentityResolver { public: using IdentityT = AwsBearerTokenIdentity; virtual ~DefaultAwsBearerTokenIdentityResolver() = default; DefaultAwsBearerTokenIdentityResolver() : AwsBearerTokenIdentityResolver( {Aws::MakeShared( "SSOBearerTokenProvider")}){}; }; const char AwsBearerTokenIdentityResolver::BEARER_TOKEN_PROVIDER_CHAIN_LOG_TAG[] = "BearerTokenProvider"; } // namespace smithy