Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp (136 lines of code) (raw):

/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include <AzCore/IO/FileIO.h> #include <AzCore/IO/Path/Path.h> #include <AzCore/Settings/SettingsRegistryImpl.h> #include <AzCore/Settings/SettingsRegistryMergeUtils.h> #include <AzFramework/StringFunc/StringFunc.h> #include <Configuration/AWSCoreConfiguration.h> namespace AWSCore { AWSCoreConfiguration::AWSCoreConfiguration() : m_sourceProjectFolder("") , m_profileName(AWSCoreDefaultProfileName) , m_resourceMappingConfigFileName("") , m_allowAWSMetadataCredentials(false) { } void AWSCoreConfiguration::ActivateConfig() { AWSCoreInternalRequestBus::Handler::BusConnect(); } void AWSCoreConfiguration::DeactivateConfig() { AWSCoreInternalRequestBus::Handler::BusDisconnect(); } AZStd::string AWSCoreConfiguration::GetProfileName() const { return m_profileName; } AZStd::string AWSCoreConfiguration::GetResourceMappingConfigFilePath() const { if (m_sourceProjectFolder.empty()) { AZ_Warning(AWSCoreConfigurationName, false, ProjectSourceFolderNotFoundErrorMessage); return ""; } if (m_resourceMappingConfigFileName.empty()) { AZ_Warning(AWSCoreConfigurationName, false, ResourceMappingFileNameNotFoundErrorMessage); return ""; } AZStd::string configFilePath = AZStd::string::format("%s/%s/%s", m_sourceProjectFolder.c_str(), AWSCoreResourceMappingConfigFolderName, m_resourceMappingConfigFileName.c_str()); AzFramework::StringFunc::Path::Normalize(configFilePath); return configFilePath; } bool AWSCoreConfiguration::IsAllowedAWSMetadataCredentials() const { return m_allowAWSMetadataCredentials; } void AWSCoreConfiguration::InitConfig() { InitSourceProjectFolderPath(); ParseSettingsRegistryValues(); } void AWSCoreConfiguration::InitSourceProjectFolderPath() { auto sourceProjectFolder = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); if (!sourceProjectFolder) { AZ_Error(AWSCoreConfigurationName, false, ProjectSourceFolderNotFoundErrorMessage); } else { m_sourceProjectFolder = sourceProjectFolder; } } void AWSCoreConfiguration::ParseSettingsRegistryValues() { AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get(); if (!settingsRegistry) { AZ_Warning(AWSCoreConfigurationName, false, GlobalSettingsRegistryLoadFailureErrorMessage); return; } m_resourceMappingConfigFileName.clear(); auto resourceMappingConfigFileNamePath = AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreResourceMappingConfigFileNameKey); if (!settingsRegistry->Get(m_resourceMappingConfigFileName, resourceMappingConfigFileNamePath)) { AZ_Warning(AWSCoreConfigurationName, false, ResourceMappingFileNameNotFoundErrorMessage); } m_profileName.clear(); auto profileNamePath = AZStd::string::format( "%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreProfileNameKey); if (!settingsRegistry->Get(m_profileName, profileNamePath)) { AZ_Warning(AWSCoreConfigurationName, false, ProfileNameNotFoundErrorMessage); m_profileName = AWSCoreDefaultProfileName; } auto allowAWSMetadataPath = AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreAllowAWSMetadataCredentialsKey); if (!settingsRegistry->Get(m_allowAWSMetadataCredentials, allowAWSMetadataPath)) { AZ_Warning(AWSCoreConfigurationName, false, AllowAWSMetadataCredentialsNotFoundMessage); m_allowAWSMetadataCredentials = false; } } void AWSCoreConfiguration::ResetSettingsRegistryData() { AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get(); if (!settingsRegistry) { AZ_Warning(AWSCoreConfigurationName, false, GlobalSettingsRegistryLoadFailureErrorMessage); return; } auto profileNamePath = AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreProfileNameKey); settingsRegistry->Remove(profileNamePath); m_profileName = AWSCoreDefaultProfileName; auto resourceMappingConfigFileNamePath = AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreResourceMappingConfigFileNameKey); settingsRegistry->Remove(resourceMappingConfigFileNamePath); m_resourceMappingConfigFileName.clear(); auto allowAWSMetadataPath = AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreAllowAWSMetadataCredentialsKey); settingsRegistry->Remove(allowAWSMetadataPath); m_allowAWSMetadataCredentials = false; // Reload the AWSCore setting registry file from disk. if (m_sourceProjectFolder.empty()) { AZ_Warning(AWSCoreConfigurationName, false, SettingsRegistryFileLoadFailureErrorMessage); return; } auto settingsRegistryPath = AZ::IO::FixedMaxPath(AZStd::string_view{ m_sourceProjectFolder }) / AZ::SettingsRegistryInterface::RegistryFolder / AWSCoreConfiguration::AWSCoreConfigurationFileName; if (!settingsRegistry->MergeSettingsFile(settingsRegistryPath.c_str(), AZ::SettingsRegistryInterface::Format::JsonMergePatch, "")) { AZ_Warning(AWSCoreConfigurationName, false, SettingsRegistryFileLoadFailureErrorMessage); return; } } void AWSCoreConfiguration::ReloadConfiguration() { ResetSettingsRegistryData(); ParseSettingsRegistryValues(); } } // namespace AWSCore