Files
git.stella-ops.org/src/__Libraries/StellaOps.Cryptography.CertificateStatus/CertificateStatusServiceCollectionExtensions.cs
2026-01-20 00:45:38 +02:00

73 lines
2.9 KiB
C#

// -----------------------------------------------------------------------------
// CertificateStatusServiceCollectionExtensions.cs
// Sprint: SPRINT_20260119_008 Certificate Status Provider
// Task: CSP-006 - DI Registration
// Description: DI registration for certificate status services.
// -----------------------------------------------------------------------------
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using StellaOps.Cryptography.CertificateStatus.Abstractions;
namespace StellaOps.Cryptography.CertificateStatus;
/// <summary>
/// Extension methods for registering certificate status services.
/// </summary>
public static class CertificateStatusServiceCollectionExtensions
{
/// <summary>
/// Adds certificate status provider services to the service collection.
/// </summary>
/// <param name="services">The service collection.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddCertificateStatusProvider(this IServiceCollection services)
{
// Ensure HttpClient factory and memory cache are available
services.AddHttpClient();
services.AddMemoryCache();
// Register components
services.TryAddSingleton<OcspClient>();
services.TryAddSingleton<CrlFetcher>();
services.TryAddSingleton<ICertificateStatusProvider, CertificateStatusProvider>();
return services;
}
/// <summary>
/// Adds certificate status provider with custom HTTP client configuration.
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="configureOcspClient">Action to configure the OCSP HTTP client.</param>
/// <param name="configureCrlClient">Action to configure the CRL HTTP client.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddCertificateStatusProvider(
this IServiceCollection services,
Action<IHttpClientBuilder>? configureOcspClient = null,
Action<IHttpClientBuilder>? configureCrlClient = null)
{
var ocspBuilder = services.AddHttpClient("OCSP", client =>
{
client.Timeout = TimeSpan.FromSeconds(10);
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/ocsp-response"));
});
configureOcspClient?.Invoke(ocspBuilder);
var crlBuilder = services.AddHttpClient("CRL", client =>
{
client.Timeout = TimeSpan.FromSeconds(30);
});
configureCrlClient?.Invoke(crlBuilder);
services.AddMemoryCache();
services.TryAddSingleton<OcspClient>();
services.TryAddSingleton<CrlFetcher>();
services.TryAddSingleton<ICertificateStatusProvider, CertificateStatusProvider>();
return services;
}
}