< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.IdentityModel.X509CertificateValidatorEx
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/IdentityModel/X509CertificateValidatorEx.cs
Line coverage
42%
Covered lines: 11
Uncovered lines: 15
Coverable lines: 26
Total lines: 82
Line coverage: 42.3%
Branch coverage
10%
Covered branches: 1
Total branches: 10
Branch coverage: 10%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)16.66%6652.38%
Validate(...)0%440%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/IdentityModel/X509CertificateValidatorEx.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System;
 5using CoreWCF.IdentityModel.Selectors;
 6using System.Security.Cryptography.X509Certificates;
 7using CoreWCF.Security;
 8
 9namespace CoreWCF.IdentityModel
 10{
 11    /// <summary>
 12    /// This class wraps the four WCF validator types (Peer, Chain, PeerOrChain, and None).
 13    /// This class also resets the validation time each time a certificate is validated, to fix a .NET issue
 14    /// where certificates created after the validator is created will not chain.
 15    /// </summary>
 16    internal class X509CertificateValidatorEx : X509CertificateValidator
 17    {
 18        private X509CertificateValidationMode _certificateValidationMode;
 19        private X509ChainPolicy _chainPolicy;
 20        private X509CertificateValidator _validator;
 21
 222        public X509CertificateValidatorEx(
 223            X509CertificateValidationMode certificateValidationMode,
 224            X509RevocationMode revocationMode,
 225            StoreLocation trustedStoreLocation)
 26        {
 227            _certificateValidationMode = certificateValidationMode;
 28
 229            switch (_certificateValidationMode)
 30            {
 31                case X509CertificateValidationMode.None:
 32                    {
 033                        _validator = X509CertificateValidator.None;
 034                        break;
 35                    }
 36
 37                case X509CertificateValidationMode.PeerTrust:
 38                    {
 039                        _validator = X509CertificateValidator.PeerTrust;
 040                        break;
 41                    }
 42
 43                case X509CertificateValidationMode.ChainTrust:
 44                    {
 045                        bool useMachineContext = trustedStoreLocation == StoreLocation.LocalMachine;
 046                        _chainPolicy = new X509ChainPolicy();
 047                        _chainPolicy.RevocationMode = revocationMode;
 48
 049                        _validator = X509CertificateValidator.CreateChainTrustValidator(useMachineContext, _chainPolicy)
 050                        break;
 51                    }
 52
 53                case X509CertificateValidationMode.PeerOrChainTrust:
 54                    {
 255                        bool useMachineContext = trustedStoreLocation == StoreLocation.LocalMachine;
 256                        _chainPolicy = new X509ChainPolicy();
 257                        _chainPolicy.RevocationMode = revocationMode;
 58
 259                        _validator = X509CertificateValidator.CreatePeerOrChainTrustValidator(useMachineContext, _chainP
 260                        break;
 61                    }
 62
 63                case X509CertificateValidationMode.Custom:
 64                default:
 065                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR
 66            }
 67        }
 68
 69        public override void Validate(X509Certificate2 certificate)
 70        {
 071            if (_certificateValidationMode == X509CertificateValidationMode.ChainTrust ||
 072                 _certificateValidationMode == X509CertificateValidationMode.PeerOrChainTrust)
 73            {
 74                // This is needed due to a .NET issue where the validation time is not properly set,
 75                // causing certificates created after the creation of the validator to fail chain trust.
 076                _chainPolicy.VerificationTime = DateTime.Now;
 77            }
 78
 079            _validator.Validate(certificate);
 080        }
 81    }
 82}