3
0

AWSCoreConfiguration.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/IO/FileIO.h>
  9. #include <AzCore/IO/Path/Path.h>
  10. #include <AzCore/Settings/SettingsRegistryImpl.h>
  11. #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
  12. #include <AzFramework/StringFunc/StringFunc.h>
  13. #include <Configuration/AWSCoreConfiguration.h>
  14. namespace AWSCore
  15. {
  16. AWSCoreConfiguration::AWSCoreConfiguration()
  17. : m_sourceProjectFolder("")
  18. , m_profileName(AWSCoreDefaultProfileName)
  19. , m_resourceMappingConfigFileName("")
  20. , m_allowAWSMetadataCredentials(false)
  21. {
  22. }
  23. void AWSCoreConfiguration::ActivateConfig()
  24. {
  25. AWSCoreInternalRequestBus::Handler::BusConnect();
  26. }
  27. void AWSCoreConfiguration::DeactivateConfig()
  28. {
  29. AWSCoreInternalRequestBus::Handler::BusDisconnect();
  30. }
  31. AZStd::string AWSCoreConfiguration::GetProfileName() const
  32. {
  33. return m_profileName;
  34. }
  35. AZStd::string AWSCoreConfiguration::GetResourceMappingConfigFilePath() const
  36. {
  37. if (m_sourceProjectFolder.empty())
  38. {
  39. AZ_Warning(AWSCoreConfigurationName, false, ProjectSourceFolderNotFoundErrorMessage);
  40. return "";
  41. }
  42. if (m_resourceMappingConfigFileName.empty())
  43. {
  44. AZ_Warning(AWSCoreConfigurationName, false, ResourceMappingFileNameNotFoundErrorMessage);
  45. return "";
  46. }
  47. AZStd::string configFilePath = AZStd::string::format("%s/%s/%s",
  48. m_sourceProjectFolder.c_str(), AWSCoreResourceMappingConfigFolderName, m_resourceMappingConfigFileName.c_str());
  49. AzFramework::StringFunc::Path::Normalize(configFilePath);
  50. return configFilePath;
  51. }
  52. bool AWSCoreConfiguration::IsAllowedAWSMetadataCredentials() const
  53. {
  54. return m_allowAWSMetadataCredentials;
  55. }
  56. void AWSCoreConfiguration::InitConfig()
  57. {
  58. InitSourceProjectFolderPath();
  59. ParseSettingsRegistryValues();
  60. }
  61. void AWSCoreConfiguration::InitSourceProjectFolderPath()
  62. {
  63. auto sourceProjectFolder = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@");
  64. if (!sourceProjectFolder)
  65. {
  66. AZ_Error(AWSCoreConfigurationName, false, ProjectSourceFolderNotFoundErrorMessage);
  67. }
  68. else
  69. {
  70. m_sourceProjectFolder = sourceProjectFolder;
  71. }
  72. }
  73. void AWSCoreConfiguration::ParseSettingsRegistryValues()
  74. {
  75. AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get();
  76. if (!settingsRegistry)
  77. {
  78. AZ_Warning(AWSCoreConfigurationName, false, GlobalSettingsRegistryLoadFailureErrorMessage);
  79. return;
  80. }
  81. m_resourceMappingConfigFileName.clear();
  82. auto resourceMappingConfigFileNamePath = AZStd::string::format("%s%s",
  83. AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreResourceMappingConfigFileNameKey);
  84. if (!settingsRegistry->Get(m_resourceMappingConfigFileName, resourceMappingConfigFileNamePath))
  85. {
  86. AZ_Warning(AWSCoreConfigurationName, false, ResourceMappingFileNameNotFoundErrorMessage);
  87. }
  88. m_profileName.clear();
  89. auto profileNamePath = AZStd::string::format(
  90. "%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreProfileNameKey);
  91. if (!settingsRegistry->Get(m_profileName, profileNamePath))
  92. {
  93. AZ_Warning(AWSCoreConfigurationName, false, ProfileNameNotFoundErrorMessage);
  94. m_profileName = AWSCoreDefaultProfileName;
  95. }
  96. auto allowAWSMetadataPath = AZStd::string::format("%s%s",
  97. AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreAllowAWSMetadataCredentialsKey);
  98. if (!settingsRegistry->Get(m_allowAWSMetadataCredentials, allowAWSMetadataPath))
  99. {
  100. AZ_Warning(AWSCoreConfigurationName, false, AllowAWSMetadataCredentialsNotFoundMessage);
  101. m_allowAWSMetadataCredentials = false;
  102. }
  103. }
  104. void AWSCoreConfiguration::ResetSettingsRegistryData()
  105. {
  106. AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get();
  107. if (!settingsRegistry)
  108. {
  109. AZ_Warning(AWSCoreConfigurationName, false, GlobalSettingsRegistryLoadFailureErrorMessage);
  110. return;
  111. }
  112. auto profileNamePath = AZStd::string::format("%s%s",
  113. AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreProfileNameKey);
  114. settingsRegistry->Remove(profileNamePath);
  115. m_profileName = AWSCoreDefaultProfileName;
  116. auto resourceMappingConfigFileNamePath = AZStd::string::format("%s%s",
  117. AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreResourceMappingConfigFileNameKey);
  118. settingsRegistry->Remove(resourceMappingConfigFileNamePath);
  119. m_resourceMappingConfigFileName.clear();
  120. auto allowAWSMetadataPath =
  121. AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreAllowAWSMetadataCredentialsKey);
  122. settingsRegistry->Remove(allowAWSMetadataPath);
  123. m_allowAWSMetadataCredentials = false;
  124. // Reload the AWSCore setting registry file from disk.
  125. if (m_sourceProjectFolder.empty())
  126. {
  127. AZ_Warning(AWSCoreConfigurationName, false, SettingsRegistryFileLoadFailureErrorMessage);
  128. return;
  129. }
  130. auto settingsRegistryPath = AZ::IO::FixedMaxPath(AZStd::string_view{ m_sourceProjectFolder }) /
  131. AZ::SettingsRegistryInterface::RegistryFolder /
  132. AWSCoreConfiguration::AWSCoreConfigurationFileName;
  133. if (!settingsRegistry->MergeSettingsFile(settingsRegistryPath.c_str(), AZ::SettingsRegistryInterface::Format::JsonMergePatch, ""))
  134. {
  135. AZ_Warning(AWSCoreConfigurationName, false, SettingsRegistryFileLoadFailureErrorMessage);
  136. return;
  137. }
  138. }
  139. void AWSCoreConfiguration::ReloadConfiguration()
  140. {
  141. ResetSettingsRegistryData();
  142. ParseSettingsRegistryValues();
  143. }
  144. } // namespace AWSCore