part #2
This commit is contained in:
@@ -1,167 +1,22 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Microsoft.Extensions.Options;
|
||||
using StellaOps.Cryptography;
|
||||
using System;
|
||||
|
||||
namespace StellaOps.Cryptography.Kms;
|
||||
|
||||
/// <summary>
|
||||
/// Dependency injection helpers for the KMS client and crypto provider.
|
||||
/// </summary>
|
||||
public static class ServiceCollectionExtensions
|
||||
public static partial class ServiceCollectionExtensions
|
||||
{
|
||||
public static IServiceCollection AddFileKms(
|
||||
this IServiceCollection services,
|
||||
Action<FileKmsOptions> configure)
|
||||
private static void RemoveKmsServices(IServiceCollection services)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(services);
|
||||
ArgumentNullException.ThrowIfNull(configure);
|
||||
|
||||
services.RemoveAll<IKmsClient>();
|
||||
services.RemoveAll<IAwsKmsFacade>();
|
||||
services.RemoveAll<IGcpKmsFacade>();
|
||||
services.RemoveAll<IPkcs11Facade>();
|
||||
|
||||
services.Configure(configure);
|
||||
|
||||
services.TryAddSingleton<IKmsClient>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<FileKmsOptions>>().Value;
|
||||
return new FileKmsClient(options);
|
||||
});
|
||||
|
||||
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddAwsKms(
|
||||
this IServiceCollection services,
|
||||
Action<AwsKmsOptions> configure)
|
||||
private static void RegisterKmsProvider(IServiceCollection services)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(services);
|
||||
ArgumentNullException.ThrowIfNull(configure);
|
||||
|
||||
services.RemoveAll<IKmsClient>();
|
||||
services.RemoveAll<IAwsKmsFacade>();
|
||||
services.RemoveAll<IGcpKmsFacade>();
|
||||
services.RemoveAll<IPkcs11Facade>();
|
||||
|
||||
services.Configure(configure);
|
||||
|
||||
services.AddSingleton<IAwsKmsFacade>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<AwsKmsOptions>>().Value ?? new AwsKmsOptions();
|
||||
return options.FacadeFactory?.Invoke(sp) ?? new AwsKmsFacade(options);
|
||||
});
|
||||
|
||||
services.AddSingleton<IKmsClient>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<AwsKmsOptions>>().Value ?? new AwsKmsOptions();
|
||||
var facade = sp.GetRequiredService<IAwsKmsFacade>();
|
||||
return new AwsKmsClient(facade, options);
|
||||
});
|
||||
|
||||
services.TryAddSingleton(TimeProvider.System);
|
||||
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddGcpKms(
|
||||
this IServiceCollection services,
|
||||
Action<GcpKmsOptions> configure)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(services);
|
||||
ArgumentNullException.ThrowIfNull(configure);
|
||||
|
||||
services.RemoveAll<IKmsClient>();
|
||||
services.RemoveAll<IAwsKmsFacade>();
|
||||
services.RemoveAll<IGcpKmsFacade>();
|
||||
services.RemoveAll<IPkcs11Facade>();
|
||||
|
||||
services.Configure(configure);
|
||||
|
||||
services.AddSingleton<IGcpKmsFacade>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<GcpKmsOptions>>().Value ?? new GcpKmsOptions();
|
||||
return options.FacadeFactory?.Invoke(sp) ?? new GcpKmsFacade(options);
|
||||
});
|
||||
|
||||
services.AddSingleton<IKmsClient>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<GcpKmsOptions>>().Value ?? new GcpKmsOptions();
|
||||
var facade = sp.GetRequiredService<IGcpKmsFacade>();
|
||||
return new GcpKmsClient(facade, options);
|
||||
});
|
||||
|
||||
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddPkcs11Kms(
|
||||
this IServiceCollection services,
|
||||
Action<Pkcs11Options> configure)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(services);
|
||||
ArgumentNullException.ThrowIfNull(configure);
|
||||
|
||||
services.RemoveAll<IKmsClient>();
|
||||
services.RemoveAll<IAwsKmsFacade>();
|
||||
services.RemoveAll<IGcpKmsFacade>();
|
||||
services.RemoveAll<IPkcs11Facade>();
|
||||
|
||||
services.Configure(configure);
|
||||
|
||||
services.AddSingleton<IPkcs11Facade>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<Pkcs11Options>>().Value ?? new Pkcs11Options();
|
||||
return options.FacadeFactory?.Invoke(sp) ?? new Pkcs11InteropFacade(options);
|
||||
});
|
||||
|
||||
services.AddSingleton<IKmsClient>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<Pkcs11Options>>().Value ?? new Pkcs11Options();
|
||||
var facade = sp.GetRequiredService<IPkcs11Facade>();
|
||||
return new Pkcs11KmsClient(facade, options);
|
||||
});
|
||||
|
||||
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddFido2Kms(
|
||||
this IServiceCollection services,
|
||||
Action<Fido2Options> configure)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(services);
|
||||
ArgumentNullException.ThrowIfNull(configure);
|
||||
|
||||
services.RemoveAll<IKmsClient>();
|
||||
|
||||
services.Configure(configure);
|
||||
|
||||
services.TryAddSingleton<IFido2Authenticator>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<Fido2Options>>().Value ?? new Fido2Options();
|
||||
if (options.AuthenticatorFactory is null)
|
||||
{
|
||||
throw new InvalidOperationException("Fido2Options.AuthenticatorFactory must be provided or IFido2Authenticator registered separately.");
|
||||
}
|
||||
|
||||
return options.AuthenticatorFactory(sp);
|
||||
});
|
||||
|
||||
services.AddSingleton<IKmsClient>(sp =>
|
||||
{
|
||||
var options = sp.GetRequiredService<IOptions<Fido2Options>>().Value ?? new Fido2Options();
|
||||
var authenticator = sp.GetRequiredService<IFido2Authenticator>();
|
||||
return new Fido2KmsClient(authenticator, options);
|
||||
});
|
||||
|
||||
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
|
||||
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user