using System; using System.Net; using System.Net.Http; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using StellaOps.Excititor.Connectors.Abstractions; using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Authentication; using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Metadata; using StellaOps.Excititor.Core; using System.IO.Abstractions; namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.DependencyInjection; public static class RancherHubConnectorServiceCollectionExtensions { public static IServiceCollection AddRancherHubConnector(this IServiceCollection services, Action? configure = null) { ArgumentNullException.ThrowIfNull(services); services.TryAddSingleton(); services.TryAddSingleton(); services.AddOptions() .Configure(options => { configure?.Invoke(options); }); services.AddSingleton, RancherHubConnectorOptionsValidator>(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddHttpClient(RancherHubConnectorOptions.HttpClientName, client => { client.Timeout = TimeSpan.FromSeconds(30); client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/1.0"); client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { AutomaticDecompression = DecompressionMethods.All, }); return services; } }