diff --git a/src/Jackett.Common/Utils/Clients/HttpWebClient.cs b/src/Jackett.Common/Utils/Clients/HttpWebClient.cs index c3bf12499..6013d9142 100644 --- a/src/Jackett.Common/Utils/Clients/HttpWebClient.cs +++ b/src/Jackett.Common/Utils/Clients/HttpWebClient.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Net; using System.Net.Http; +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using CloudflareSolverRe; @@ -23,11 +26,41 @@ namespace Jackett.Common.Utils.Clients { } + [DebuggerNonUserCode] // avoid "Exception User-Unhandled" Visual Studio messages + public static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + if (sender.GetType() != typeof(HttpWebRequest)) + return sslPolicyErrors == SslPolicyErrors.None; + + var request = (HttpWebRequest)sender; + var hash = certificate.GetCertHashString(); + + + trustedCertificates.TryGetValue(hash, out var hosts); + if (hosts != null) + { + if (hosts.Contains(request.Host)) + return true; + } + + if (sslPolicyErrors != SslPolicyErrors.None) + { + // Throw exception with certificate details, this will cause a "Exception User-Unhandled" when running it in the Visual Studio debugger. + // The certificate is only available inside this function, so we can't catch it at the calling method. + throw new Exception("certificate validation failed: " + certificate.ToString()); + } + + return sslPolicyErrors == SslPolicyErrors.None; + } + public override void Init() { ServicePointManager.DefaultConnectionLimit = 1000; base.Init(); + + // custom handler for our own internal certificates + ServicePointManager.ServerCertificateValidationCallback += ValidateCertificate; } protected override async Task Run(WebRequest webRequest) @@ -60,8 +93,6 @@ namespace Jackett.Common.Utils.Clients AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }) { - // custom certificate validation handler (netcore version) - clientHandlr.ServerCertificateCustomValidationCallback = ValidateCertificate; clearanceHandlr.InnerHandler = clientHandlr; using (var client = new HttpClient(clearanceHandlr)) { diff --git a/src/Jackett.Common/Utils/Clients/HttpWebClient2.cs b/src/Jackett.Common/Utils/Clients/HttpWebClient2.cs index 44867722e..94327e1b0 100644 --- a/src/Jackett.Common/Utils/Clients/HttpWebClient2.cs +++ b/src/Jackett.Common/Utils/Clients/HttpWebClient2.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Net; using System.Net.Http; +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using CloudflareSolverRe; @@ -21,7 +24,7 @@ namespace Jackett.Common.Utils.Clients private ClearanceHandler clearanceHandlr; private HttpClientHandler clientHandlr; private HttpClient client; - + public HttpWebClient2(IProcessService p, Logger l, IConfigurationService c, ServerConfig sc) : base(p: p, l: l, @@ -32,6 +35,29 @@ namespace Jackett.Common.Utils.Clients CreateClient(); } + [DebuggerNonUserCode] // avoid "Exception User-Unhandled" Visual Studio messages + public static bool ValidateCertificate(HttpRequestMessage request, X509Certificate2 certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + var hash = certificate.GetCertHashString(); + + + trustedCertificates.TryGetValue(hash, out var hosts); + if (hosts != null) + { + if (hosts.Contains(request.RequestUri.Host)) + return true; + } + + if (sslPolicyErrors != SslPolicyErrors.None) + { + // Throw exception with certificate details, this will cause a "Exception User-Unhandled" when running it in the Visual Studio debugger. + // The certificate is only available inside this function, so we can't catch it at the calling method. + throw new Exception("certificate validation failed: " + certificate.ToString()); + } + + return sslPolicyErrors == SslPolicyErrors.None; + } + public void CreateClient() { clearanceHandlr = new ClearanceHandler(BrowserUtil.ChromeUserAgent) diff --git a/src/Jackett.Common/Utils/Clients/WebClient.cs b/src/Jackett.Common/Utils/Clients/WebClient.cs index 507eef3a4..e38a5cc5c 100644 --- a/src/Jackett.Common/Utils/Clients/WebClient.cs +++ b/src/Jackett.Common/Utils/Clients/WebClient.cs @@ -1,16 +1,12 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; -using System.Net.Security; -using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using System.Web; -using AutoMapper; using com.LandonKey.SocksWebProxy; using com.LandonKey.SocksWebProxy.Proxy; using Jackett.Common.Models.Config; @@ -35,31 +31,6 @@ namespace Jackett.Common.Utils.Clients protected static string webProxyUrl; protected static IWebProxy webProxy; - - [DebuggerNonUserCode] // avoid "Exception User-Unhandled" Visual Studio messages - public static bool ValidateCertificate(HttpRequestMessage request, X509Certificate2 certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) - { - { - var hash = certificate.GetCertHashString(); - - - trustedCertificates.TryGetValue(hash, out var hosts); - if (hosts != null) - { - if (hosts.Contains(request.RequestUri.Host)) - return true; - } - - if (sslPolicyErrors != SslPolicyErrors.None) - { - // Throw exception with certificate details, this will cause a "Exception User-Unhandled" when running it in the Visual Studio debugger. - // The certificate is only available inside this function, so we can't catch it at the calling method. - throw new Exception("certificate validation failed: " + certificate.ToString()); - } - - return sslPolicyErrors == SslPolicyErrors.None; - } - } public static void InitProxy(ServerConfig serverConfig) { // dispose old SocksWebProxy diff --git a/src/Jackett.Server/Helper.cs b/src/Jackett.Server/Helper.cs index b697562f2..73ac1973c 100644 --- a/src/Jackett.Server/Helper.cs +++ b/src/Jackett.Server/Helper.cs @@ -73,6 +73,8 @@ namespace Jackett.Server // TODO: fix deprecation warning (remove #pragma to see the build warning) Mapper.Initialize(cfg => { + cfg.CreateMap(); + cfg.CreateMap(); cfg.CreateMap().AfterMap((r, t) =>