From 31fa30498352db3ff77d7d0e5a8fca19ef462503 Mon Sep 17 00:00:00 2001 From: Robert Dailey Date: Wed, 22 Nov 2023 10:25:32 -0600 Subject: [PATCH] build: Upgrade Flurl.Http to 4.0.0-pre6 --- Directory.Packages.props | 2 +- .../ApiServicesAutofacModule.cs | 7 +--- .../Http/FlurlConfigurator.cs | 37 ----------------- .../Http/ServarrRequestBuilder.cs | 40 +++++++++++++++++-- 4 files changed, 39 insertions(+), 47 deletions(-) delete mode 100644 src/Recyclarr.ServarrApi/Http/FlurlConfigurator.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index 4dbbc0e0..036e961f 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -11,7 +11,7 @@ - + diff --git a/src/Recyclarr.ServarrApi/ApiServicesAutofacModule.cs b/src/Recyclarr.ServarrApi/ApiServicesAutofacModule.cs index f2c9b345..f2ab7d5f 100644 --- a/src/Recyclarr.ServarrApi/ApiServicesAutofacModule.cs +++ b/src/Recyclarr.ServarrApi/ApiServicesAutofacModule.cs @@ -14,12 +14,7 @@ public class ApiServicesAutofacModule : Module protected override void Load(ContainerBuilder builder) { base.Load(builder); - builder.RegisterType(); - builder.Register(c => - { - var config = c.Resolve(); - return new FlurlClientCache().ConfigureAll(x => config.Configure(x)); - }) + builder.RegisterType() .As() .SingleInstance(); diff --git a/src/Recyclarr.ServarrApi/Http/FlurlConfigurator.cs b/src/Recyclarr.ServarrApi/Http/FlurlConfigurator.cs deleted file mode 100644 index 6095df5d..00000000 --- a/src/Recyclarr.ServarrApi/Http/FlurlConfigurator.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Net.Security; -using Flurl.Http.Configuration; -using Recyclarr.Json; -using Recyclarr.Settings; -using Serilog; - -namespace Recyclarr.ServarrApi.Http; - -public class FlurlConfigurator(ILogger log, ISettingsProvider settingsProvider) -{ - [SuppressMessage("SonarCloud", "S4830:Server certificates should be verified during SSL/TLS connections")] - [SuppressMessage("Security", "CA5359:Do Not Disable Certificate Validation")] - public void Configure(IFlurlClientBuilder builder) - { - builder.WithSettings(settings => - { - settings.JsonSerializer = new DefaultJsonSerializer(GlobalJsonSerializerSettings.Services); - FlurlLogging.SetupLogging(settings, log); - }); - - builder.ConfigureInnerHandler(handler => - { - if (!settingsProvider.Settings.EnableSslCertificateValidation) - { - log.Warning( - "Security Risk: Certificate validation is being DISABLED because setting " + - "`enable_ssl_certificate_validation` is set to `false`"); - - handler.SslOptions = new SslClientAuthenticationOptions - { - RemoteCertificateValidationCallback = (_, _, _, _) => true - }; - } - }); - } -} diff --git a/src/Recyclarr.ServarrApi/Http/ServarrRequestBuilder.cs b/src/Recyclarr.ServarrApi/Http/ServarrRequestBuilder.cs index 72f92ca2..c9c79499 100644 --- a/src/Recyclarr.ServarrApi/Http/ServarrRequestBuilder.cs +++ b/src/Recyclarr.ServarrApi/Http/ServarrRequestBuilder.cs @@ -1,17 +1,51 @@ +using System.Diagnostics.CodeAnalysis; using Flurl; using Flurl.Http; using Flurl.Http.Configuration; using Recyclarr.Config.Models; +using Recyclarr.Json; +using Recyclarr.Settings; +using Serilog; namespace Recyclarr.ServarrApi.Http; -public class ServarrRequestBuilder(IFlurlClientCache clientCache) : IServarrRequestBuilder +public class ServarrRequestBuilder( + ILogger log, + IFlurlClientCache clientCache, + ISettingsProvider settingsProvider) + : IServarrRequestBuilder { public IFlurlRequest Request(IServiceConfiguration config, params object[] path) { - var client = clientCache.Get(config.InstanceName); - client.BaseUrl ??= config.BaseUrl.AppendPathSegments("api", "v3"); + var client = clientCache.GetOrAdd( + config.InstanceName, + config.BaseUrl.AppendPathSegments("api", "v3"), + Configure); + return client.Request(path) .WithHeader("X-Api-Key", config.ApiKey); } + + [SuppressMessage("SonarCloud", "S4830:Server certificates should be verified during SSL/TLS connections")] + [SuppressMessage("Security", "CA5359:Do Not Disable Certificate Validation")] + private void Configure(IFlurlClientBuilder builder) + { + builder.WithSettings(settings => + { + settings.JsonSerializer = new DefaultJsonSerializer(GlobalJsonSerializerSettings.Services); + FlurlLogging.SetupLogging(settings, log); + }); + + builder.ConfigureInnerHandler(handler => + { + if (!settingsProvider.Settings.EnableSslCertificateValidation) + { + log.Warning( + "Security Risk: Certificate validation is being DISABLED because setting " + + "`enable_ssl_certificate_validation` is set to `false`"); + + handler.ServerCertificateCustomValidationCallback = (_, _, _, _) => true; + } + }); + } }