68 lines
1.9 KiB
C#
68 lines
1.9 KiB
C#
|
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<string, string> LoadEnvironment(string envFile)
|
|||
|
{
|
|||
|
Dictionary<string, string> 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<DictionaryEntry>()
|
|||
|
.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
|
|||
|
|
|||
|
Environment.SetEnvironmentVariable("PATH_TO_SAVE", variablesFromFile["PATH_TO_SAVE"]);
|
|||
|
|
|||
|
return result.Build();
|
|||
|
}
|
|||
|
}
|