in src/aws-cpp-sdk-core/source/config/AWSConfigFileProfileConfigLoader.cpp [566:644]
bool AWSConfigFileProfileConfigLoader::PersistInternal(const Aws::Map<Aws::String, Profile>& profiles)
{
Aws::OFStream outputFile(m_fileName.c_str(), std::ios_base::out | std::ios_base::trunc);
if(outputFile)
{
Aws::UnorderedMap<Aws::String, std::reference_wrapper<const Profile::SsoSession>> ssoSessionsToDump;
for(const auto& profile : profiles)
{
Aws::String prefix = m_useProfilePrefix ? PROFILE_SECTION : "";
AWS_LOGSTREAM_DEBUG(CONFIG_FILE_LOADER, "Writing profile " << profile.first << " to disk.");
outputFile << LEFT_BRACKET << prefix << (m_useProfilePrefix ? " " : "") << profile.second.GetName() << RIGHT_BRACKET << std::endl;
const Aws::Auth::AWSCredentials& credentials = profile.second.GetCredentials();
if (!credentials.GetAWSAccessKeyId().empty()) {
outputFile << ACCESS_KEY_ID_KEY << EQ << credentials.GetAWSAccessKeyId() << std::endl;
}
if (!credentials.GetAWSSecretKey().empty()) {
outputFile << SECRET_KEY_KEY << EQ << credentials.GetAWSSecretKey() << std::endl;
}
if(!credentials.GetSessionToken().empty()) {
outputFile << SESSION_TOKEN_KEY << EQ << credentials.GetSessionToken() << std::endl;
}
// credentials.GetExpiration().Millis() <- is not present in a config.
for(const auto& profilePropertyPair : PROFILE_PROPERTY_FUNCS)
{
const auto& profilePropertyValue = profilePropertyPair.Getter(profile.second);
if(!profilePropertyValue.empty())
{
outputFile << profilePropertyPair.PropertyKey << EQ << profilePropertyValue << std::endl;
}
}
if(profile.second.IsSsoSessionSet())
{
const auto& ssoSession = profile.second.GetSsoSession();
const auto alreadyScheduledForDumpIt = ssoSessionsToDump.find(ssoSession.GetName());
if (alreadyScheduledForDumpIt != ssoSessionsToDump.end() &&
alreadyScheduledForDumpIt->second.get() != ssoSession)
{
AWS_LOGSTREAM_WARN(CONFIG_FILE_LOADER, "2 or more profiles reference 'sso-session' section "
"with the same name but different properties: " << ssoSession.GetName());
}
else
{
ssoSessionsToDump.insert({ssoSession.GetName(), std::cref(ssoSession)});
}
outputFile << SSO_SESSION_KEY << EQ << ssoSession.GetName() << std::endl;
}
outputFile << std::endl;
}
for(const auto& ssoSessionPair : ssoSessionsToDump)
{
AWS_LOGSTREAM_DEBUG(CONFIG_FILE_LOADER, "Writing sso-session " << ssoSessionPair.first << " to disk.");
const Profile::SsoSession& ssoSession = ssoSessionPair.second.get();
outputFile << LEFT_BRACKET << SSO_SESSION_SECTION << " " << ssoSession.GetName() << RIGHT_BRACKET << std::endl;
for(const auto& ssoSessionPropertyPair : SSO_SESSION_PROPERTY_FUNCS)
{
const auto& profilePropertyValue = ssoSessionPropertyPair.Getter(ssoSession);
if(!profilePropertyValue.empty())
{
outputFile << ssoSessionPropertyPair.PropertyKey << EQ << profilePropertyValue << std::endl;
}
}
outputFile << std::endl;
}
AWS_LOGSTREAM_INFO(CONFIG_FILE_LOADER, "Profiles written to config file " << m_fileName);
return true;
}
AWS_LOGSTREAM_WARN(CONFIG_FILE_LOADER, "Unable to open config file " << m_fileName << " for writing.");
return false;
}