JD2022-TU1/main/tools/framework/JD.Vault/SecretsManagement.cs

54 lines
No EOL
1.9 KiB
C#

using System;
using System.Threading.Tasks;
using JD.SecretsManager;
using Microsoft.Extensions.Logging;
namespace JD.Vault
{
public static class SecretsManagement
{
private sealed class NoLogger : ILogger<OidcTokenProvider>, ILogger<EnvironmentVariableTokenProvider>, ILogger<VaultTokenSecretsManager>
{
public IDisposable BeginScope<TState>(TState state) => null;
public bool IsEnabled(LogLevel logLevel) => false;
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{ }
}
private readonly static object _secretsManagerLock = new object();
private static ISecretsManager _secretsManager;
public static ISecretsManager GetSecretsManager()
{
lock (_secretsManagerLock)
{
if (_secretsManager != null)
{
return _secretsManager;
}
IVaultConfiguration vaultConfiguration = new DefaultVaultConfiguration();
NoLogger logger = new NoLogger();
IVaultTokenProvider backupTokenProvider = new OidcTokenProvider(logger, vaultConfiguration);
IVaultTokenProvider tokenProvider = new EnvironmentVariableTokenProvider(logger, backupTokenProvider);
_secretsManager = new VaultTokenSecretsManager(
logger,
tokenProvider,
vaultConfiguration);
bool isInitialised = Task.Run(() => _secretsManager.InitialiseAsync()).Result;
if (!isInitialised)
{
throw new Exception("Failed to initialise the secrets manager. Please contact support.");
}
return _secretsManager;
}
}
}
}