environmentvariablehelpers.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright (c) .NET Foundation. All rights reserved.
  2. // Licensed under the MIT License. See License.txt in the project root for license information.
  3. #pragma once
  4. #include <map>
  5. #include "Environment.h"
  6. class ENVIRONMENT_VAR_HELPERS
  7. {
  8. public:
  9. static
  10. VOID
  11. CopyToMultiSz(
  12. ENVIRONMENT_VAR_ENTRY * pEntry,
  13. PVOID pvData
  14. )
  15. {
  16. STRU strTemp;
  17. MULTISZ *pMultiSz = static_cast<MULTISZ *>(pvData);
  18. DBG_ASSERT(pMultiSz);
  19. DBG_ASSERT(pEntry);
  20. strTemp.Copy(pEntry->QueryName());
  21. strTemp.Append(pEntry->QueryValue());
  22. pMultiSz->Append(strTemp.QueryStr());
  23. }
  24. static
  25. std::map<std::wstring, std::wstring, ignore_case_comparer>
  26. InitEnvironmentVariablesTable
  27. (
  28. _In_ const std::map<std::wstring, std::wstring, ignore_case_comparer>& pInEnvironmentVarTable,
  29. _In_ BOOL fWindowsAuthEnabled,
  30. _In_ BOOL fBasicAuthEnabled,
  31. _In_ BOOL fAnonymousAuthEnabled,
  32. _In_ BOOL fAddHostingStartup,
  33. _In_ PCWSTR pApplicationPhysicalPath,
  34. _In_ PCWSTR pHttpsPort
  35. )
  36. {
  37. std::map<std::wstring, std::wstring, ignore_case_comparer> environmentVariables = pInEnvironmentVarTable;
  38. environmentVariables.insert_or_assign(ASPNETCORE_IIS_PHYSICAL_PATH_ENV_STR, pApplicationPhysicalPath);
  39. if (pHttpsPort)
  40. {
  41. environmentVariables.try_emplace(ASPNETCORE_ANCM_HTTPS_PORT_ENV_STR, pHttpsPort);
  42. }
  43. std::wstring strIisAuthEnvValue;
  44. if (fWindowsAuthEnabled)
  45. {
  46. strIisAuthEnvValue.append(ASPNETCORE_IIS_AUTH_WINDOWS);
  47. }
  48. if (fBasicAuthEnabled)
  49. {
  50. strIisAuthEnvValue.append(ASPNETCORE_IIS_AUTH_BASIC);
  51. }
  52. if (fAnonymousAuthEnabled)
  53. {
  54. strIisAuthEnvValue.append(ASPNETCORE_IIS_AUTH_ANONYMOUS);
  55. }
  56. if (strIisAuthEnvValue.empty())
  57. {
  58. strIisAuthEnvValue.append(ASPNETCORE_IIS_AUTH_NONE);
  59. }
  60. environmentVariables.insert_or_assign(ASPNETCORE_IIS_AUTH_ENV_STR, strIisAuthEnvValue);
  61. if (fAddHostingStartup && environmentVariables.count(HOSTING_STARTUP_ASSEMBLIES_ENV_STR) == 0)
  62. {
  63. auto hostingStartupValues = Environment::GetEnvironmentVariableValue(HOSTING_STARTUP_ASSEMBLIES_ENV_STR).value_or(L"");
  64. if (hostingStartupValues.find(HOSTING_STARTUP_ASSEMBLIES_ENV_STR) == std::wstring::npos)
  65. {
  66. hostingStartupValues += std::wstring(L";") + HOSTING_STARTUP_ASSEMBLIES_VALUE;
  67. }
  68. environmentVariables.insert_or_assign(HOSTING_STARTUP_ASSEMBLIES_ENV_STR, hostingStartupValues);
  69. }
  70. for (auto& environmentVariable : environmentVariables)
  71. {
  72. environmentVariable.second = Environment::ExpandEnvironmentVariables(environmentVariable.second);
  73. }
  74. return environmentVariables;
  75. }
  76. static
  77. std::map<std::wstring, std::wstring, ignore_case_comparer>
  78. AddWebsocketEnabledToEnvironmentVariables
  79. (
  80. _Inout_ const std::map<std::wstring, std::wstring, ignore_case_comparer>& pInEnvironmentVarTable,
  81. _In_ BOOL fWebsocketsEnabled
  82. )
  83. {
  84. std::map<std::wstring, std::wstring, ignore_case_comparer> environmentVariables = pInEnvironmentVarTable;
  85. environmentVariables.insert_or_assign(ASPNETCORE_IIS_WEBSOCKETS_SUPPORTED_ENV_STR, fWebsocketsEnabled ? L"true" : L"false");
  86. return environmentVariables;
  87. }
  88. };