using System.Net; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using StellaOps.Feedser.Source.Ru.Bdu.Configuration; using StellaOps.Feedser.Source.Common.Http; namespace StellaOps.Feedser.Source.Ru.Bdu; public static class RuBduServiceCollectionExtensions { public static IServiceCollection AddRuBduConnector(this IServiceCollection services, Action configure) { ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(configure); services.AddOptions() .Configure(configure) .PostConfigure(static options => options.Validate()); services.AddSourceHttpClient(RuBduOptions.HttpClientName, (sp, clientOptions) => { var options = sp.GetRequiredService>().Value; clientOptions.BaseAddress = options.BaseAddress; clientOptions.Timeout = options.RequestTimeout; clientOptions.UserAgent = options.UserAgent; clientOptions.AllowAutoRedirect = true; clientOptions.DefaultRequestHeaders["Accept-Language"] = options.AcceptLanguage; clientOptions.AllowedHosts.Clear(); clientOptions.AllowedHosts.Add(options.BaseAddress.Host); clientOptions.ConfigureHandler = handler => { handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; handler.AllowAutoRedirect = true; handler.UseCookies = true; handler.CookieContainer = new CookieContainer(); }; }); services.AddTransient(); return services; } }