using Microsoft.Extensions.Configuration; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; namespace Mirea.Api.Endpoint.Configuration.Core.Startup; public static class EnvironmentConfiguration { private static Dictionary LoadEnvironment(string envFile) { Dictionary environment = []; if (!File.Exists(envFile)) return environment; foreach (var line in File.ReadAllLines(envFile)) { if (string.IsNullOrEmpty(line)) continue; var commentIndex = line.IndexOf('#', StringComparison.Ordinal); string arg = line; if (commentIndex != -1) arg = arg.Remove(commentIndex, arg.Length - commentIndex); var parts = arg.Split( '=', StringSplitOptions.RemoveEmptyEntries); if (parts.Length > 2) parts = [parts[0], string.Join("=", parts[1..])]; if (parts.Length != 2) continue; environment.Add(parts[0].Trim(), parts[1].Trim()); } return environment; } public static IConfigurationRoot GetEnvironment() { var variablesFromFile = LoadEnvironment(".env"); #if DEBUG LoadEnvironment(".env.develop").ToList().ForEach(x => variablesFromFile.Add(x.Key, x.Value)); #endif var environmentVariables = Environment.GetEnvironmentVariables() .OfType() .ToDictionary( entry => entry.Key.ToString() ?? string.Empty, entry => entry.Value?.ToString() ?? string.Empty ); var result = new ConfigurationBuilder() .AddInMemoryCollection(environmentVariables!) .AddInMemoryCollection(variablesFromFile!); if (variablesFromFile.TryGetValue("PATH_TO_SAVE", out var pathToSave)) { Environment.SetEnvironmentVariable("PATH_TO_SAVE", pathToSave); if (!Directory.Exists(pathToSave)) Directory.CreateDirectory(pathToSave); } if (variablesFromFile.TryGetValue("ACTUAL_SUB_PATH", out var actualSubPath)) Environment.SetEnvironmentVariable("ACTUAL_SUB_PATH", actualSubPath); if (variablesFromFile.TryGetValue("SWAGGER_SUB_PATH", out var swaggerSubPath)) Environment.SetEnvironmentVariable("SWAGGER_SUB_PATH", swaggerSubPath); return result.Build(); } }