// Decompiled with JetBrains decompiler // Type: Rei.Fs.WebRequestCertificateValidationManager // Assembly: Rei.Fs, Version=1.13.2.8796, Culture=neutral, PublicKeyToken=null // MVID: D8B08A8B-697C-4439-9CFF-1BE4EE46F7B0 // Assembly location: F:\Eigene Dateien\Dropbox\portable Collection\Progs\CarotDAV\Rei.Fs.dll using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; namespace Rei.Fs { public sealed class WebRequestCertificateValidationManager { private static Dictionary p_ReqToClient = new Dictionary(); static WebRequestCertificateValidationManager() { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(WebRequestCertificateValidationManager.InnerCertificateValidationCallback); IEnumerator registeredModules = AuthenticationManager.RegisteredModules; List authenticationModuleList = new List(); while (registeredModules.MoveNext()) authenticationModuleList.Add((IAuthenticationModule) registeredModules.Current); AuthenticationManager.Register((IAuthenticationModule) new WebRequestCertificateValidationManager.FookAuthClient()); List.Enumerator enumerator; try { enumerator = authenticationModuleList.GetEnumerator(); while (enumerator.MoveNext()) AuthenticationManager.Register(enumerator.Current); } finally { enumerator.Dispose(); } } private static bool InnerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) return true; int certErrorIgnores; lock (WebRequestCertificateValidationManager.p_ReqToClient) { WebRequest key = sender as WebRequest; if (!WebRequestCertificateValidationManager.p_ReqToClient.ContainsKey(key)) return false; ConnectionSettingBase connectionSetting = WebRequestCertificateValidationManager.p_ReqToClient[key].ConnectionSetting; certErrorIgnores = (int) connectionSetting.CertErrorIgnores; connectionSetting.LastCertError = sslPolicyErrors; } return (sslPolicyErrors & (SslPolicyErrors) ~certErrorIgnores) == SslPolicyErrors.None; } public static void Register(WebRequest req, ConnectionSettingBase setting) { lock (WebRequestCertificateValidationManager.p_ReqToClient) WebRequestCertificateValidationManager.p_ReqToClient.Add(req, new WebRequestCertificateValidationManager.RequestStore(setting)); } public static void UnRegister(WebRequest req) { lock (WebRequestCertificateValidationManager.p_ReqToClient) WebRequestCertificateValidationManager.p_ReqToClient.Remove(req); } public static string[] GetChallenges(WebRequest req) { lock (WebRequestCertificateValidationManager.p_ReqToClient) { if (!WebRequestCertificateValidationManager.p_ReqToClient.ContainsKey(req)) return new string[0]; return WebRequestCertificateValidationManager.p_ReqToClient[req].ChallengeList.ToArray(); } } public static ConnectionSettingBase GetConnectionSetting(WebRequest req) { lock (WebRequestCertificateValidationManager.p_ReqToClient) { if (!WebRequestCertificateValidationManager.p_ReqToClient.ContainsKey(req)) return (ConnectionSettingBase) null; return WebRequestCertificateValidationManager.p_ReqToClient[req].ConnectionSetting; } } private class FookAuthClient : IAuthenticationModule { public Authorization Authenticate(string challenge, WebRequest request, ICredentials credentials) { lock (WebRequestCertificateValidationManager.p_ReqToClient) { if (WebRequestCertificateValidationManager.p_ReqToClient.ContainsKey(request)) WebRequestCertificateValidationManager.p_ReqToClient[request].ChallengeList.Add(challenge); } return (Authorization) null; } public string AuthenticationType { get { return ":fook"; } } public bool CanPreAuthenticate { get { return false; } } public Authorization PreAuthenticate(WebRequest request, ICredentials credentials) { return (Authorization) null; } } private class RequestStore { public ConnectionSettingBase ConnectionSetting; public List ChallengeList; public SslPolicyErrors LastCertError; public RequestStore(ConnectionSettingBase c) { this.ChallengeList = new List(); this.ConnectionSetting = c; } } } }