using Microsoft.Extensions.Configuration; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; namespace Mirea.Api.Endpoint.Configuration.AppConfig; public static class EnvironmentConfiguration { private static IDictionary LoadEnvironment(string envFile) { Dictionary environment = new(); 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"); 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 DEBUG result.AddInMemoryCollection(LoadEnvironment(".env.develop")!); #endif if (!variablesFromFile.TryGetValue("PATH_TO_SAVE", out var data)) return result.Build(); Environment.SetEnvironmentVariable("PATH_TO_SAVE", data); if (!Directory.Exists(data)) Directory.CreateDirectory(data); return result.Build(); } }