4343#include < aws/core/Version.h>
4444#include < aws/core/platform/Environment.h>
4545#include < aws/core/platform/OSVersionInfo.h>
46+ #include < aws/core/auth/AWSCredentialsProviderChain.h>
47+ #include < typeinfo>
4648
4749#include < smithy/tracing/TracingUtils.h>
4850#include < smithy/client/features/ChecksumInterceptor.h>
@@ -582,6 +584,9 @@ HttpResponseOutcome AWSClient::AttemptOneRequest(const std::shared_ptr<Aws::Http
582584 }
583585 }
584586
587+ // Track credential provider usage for User-Agent features
588+ TrackCredentialProviderUsage (request);
589+
585590 auto signer = GetSignerByName (signerName);
586591 auto signedRequest = TracingUtils::MakeCallWithTiming<bool >([&]() -> bool {
587592 return signer->SignRequest (*httpRequest, signerRegionOverride, signerServiceNameOverride, true );
@@ -912,7 +917,7 @@ void AWSClient::BuildHttpRequest(const Aws::AmazonWebServiceRequest& request, co
912917 if (Aws::Client::CompressionAlgorithm::NONE != selectedCompressionAlgorithm) {
913918 Aws::Client::RequestCompression rc;
914919 auto compressOutcome = rc.compress (request.GetBody (), selectedCompressionAlgorithm);
915-
920+ // TODO: is this successful -- its not
916921 if (compressOutcome.IsSuccess ()) {
917922 Aws::String compressionAlgorithmId = Aws::Client::GetCompressionAlgorithmId (selectedCompressionAlgorithm);
918923 AppendHeaderValueToRequest (httpRequest, CONTENT_ENCODING_HEADER, compressionAlgorithmId);
@@ -1068,4 +1073,42 @@ void AWSClient::AppendRecursionDetectionHeader(std::shared_ptr<Aws::Http::HttpRe
10681073 xAmznTraceIdVal = xAmznTraceIdValEncodedStr.str ();
10691074
10701075 ioRequest->SetHeaderValue (Aws::Http::X_AMZN_TRACE_ID_HEADER, xAmznTraceIdVal);
1076+ }
1077+
1078+ void AWSClient::TrackCredentialProviderUsage (const Aws::AmazonWebServiceRequest& request) const
1079+ {
1080+ auto credentialsProvider = GetCredentialsProvider ();
1081+ if (!credentialsProvider)
1082+ {
1083+ return ;
1084+ }
1085+
1086+ // Check if using environment credentials
1087+ const auto & provider = *credentialsProvider;
1088+ const std::type_info& providerType = typeid (provider);
1089+
1090+ if (providerType == typeid (Aws::Auth::DefaultAWSCredentialsProviderChain))
1091+ {
1092+ // For provider chains, we need to check which provider was actually used
1093+ auto providerChain = std::dynamic_pointer_cast<Aws::Auth::DefaultAWSCredentialsProviderChain>(credentialsProvider);
1094+ if (providerChain)
1095+ {
1096+ // Check if environment variables are set (indicating env provider usage)
1097+ if (!Aws::Environment::GetEnv (" AWS_ACCESS_KEY_ID" ).empty ())
1098+ {
1099+ // Environment credentials are being used
1100+ request.AddUserAgentFeature (Aws::Client::UserAgentFeature::CREDENTIALS_ENV_VARS);
1101+ AWS_LOGSTREAM_DEBUG (AWS_CLIENT_LOG_TAG, " Added CREDENTIALS_ENV_VARS to User-Agent" );
1102+ }
1103+ // Add other providers
1104+ }
1105+ }
1106+ // direct provider usage
1107+ else if (providerType == typeid (Aws::Auth::EnvironmentAWSCredentialsProvider))
1108+ {
1109+ // Direct environment provider usage
1110+ request.AddUserAgentFeature (Aws::Client::UserAgentFeature::CREDENTIALS_ENV_VARS);
1111+ AWS_LOGSTREAM_DEBUG (AWS_CLIENT_LOG_TAG, " Added CREDENTIALS_ENV_VARS to User-Agent" );
1112+ }
1113+ // Add more provider types as needed
10711114}
0 commit comments