Files
git.stella-ops.org/src/Scanner/__Libraries/StellaOps.Scanner.Storage.Oci/ServiceCollectionExtensions.cs
2026-01-13 18:53:39 +02:00

66 lines
2.3 KiB
C#

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace StellaOps.Scanner.Storage.Oci;
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddOciImageInspector(
this IServiceCollection services,
Action<OciRegistryOptions> configure)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configure);
services.AddOptions<OciRegistryOptions>().Configure(configure);
RegisterInspectorServices(services);
return services;
}
public static IServiceCollection AddOciImageInspector(
this IServiceCollection services,
IConfiguration configuration)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configuration);
services.AddOptions<OciRegistryOptions>().Bind(configuration);
RegisterInspectorServices(services);
return services;
}
private static void RegisterInspectorServices(IServiceCollection services)
{
services.TryAddSingleton<TimeProvider>(TimeProvider.System);
services.AddHttpClient(OciImageInspector.HttpClientName)
.ConfigurePrimaryHttpMessageHandler(sp =>
{
var options = sp.GetRequiredService<IOptions<OciRegistryOptions>>().Value;
if (!options.AllowInsecure)
{
return new HttpClientHandler();
}
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback =
HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
});
services.TryAddSingleton<IOciImageInspector>(sp =>
{
var options = sp.GetRequiredService<IOptions<OciRegistryOptions>>().Value;
return new OciImageInspector(
sp.GetRequiredService<IHttpClientFactory>(),
options,
sp.GetRequiredService<ILogger<OciImageInspector>>(),
sp.GetRequiredService<TimeProvider>());
});
}
}