< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Security.Tokens.X509SecurityTokenParameters
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/Tokens/X509SecurityTokenParameters.cs
Line coverage
37%
Covered lines: 20
Uncovered lines: 34
Coverable lines: 54
Total lines: 152
Line coverage: 37%
Branch coverage
0%
Covered branches: 0
Total branches: 20
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%11100%
.ctor()100%110%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)100%11100%
CloneCore()100%11100%
CreateKeyIdentifierClause(...)0%20200%
InitializeSecurityTokenRequirement(...)100%11100%
ToString()100%110%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/Tokens/X509SecurityTokenParameters.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 System.Globalization;
 6using System.Text;
 7using CoreWCF.IdentityModel;
 8using CoreWCF.IdentityModel.Selectors;
 9using CoreWCF.IdentityModel.Tokens;
 10
 11namespace CoreWCF.Security.Tokens
 12{
 13    public class X509SecurityTokenParameters : SecurityTokenParameters
 14    {
 15        internal const X509KeyIdentifierClauseType defaultX509ReferenceStyle = X509KeyIdentifierClauseType.Any;
 16        private X509KeyIdentifierClauseType _x509ReferenceStyle;
 17
 18        protected X509SecurityTokenParameters(X509SecurityTokenParameters other)
 30819            : base(other)
 20        {
 30821            _x509ReferenceStyle = other._x509ReferenceStyle;
 30822        }
 23
 24        public X509SecurityTokenParameters()
 025            : this(defaultX509ReferenceStyle, defaultInclusionMode)
 26        {
 27            // empty
 028        }
 29
 30        public X509SecurityTokenParameters(X509KeyIdentifierClauseType x509ReferenceStyle)
 031            : this(x509ReferenceStyle, defaultInclusionMode)
 32        {
 33            // empty
 034        }
 35
 36        public X509SecurityTokenParameters(X509KeyIdentifierClauseType x509ReferenceStyle, SecurityTokenInclusionMode in
 037            : this(x509ReferenceStyle, inclusionMode, defaultRequireDerivedKeys)
 38        {
 039        }
 40
 41        internal X509SecurityTokenParameters(X509KeyIdentifierClauseType x509ReferenceStyle, SecurityTokenInclusionMode 
 42            bool requireDerivedKeys)
 3343            : base()
 44        {
 3345            X509ReferenceStyle = x509ReferenceStyle;
 3346            InclusionMode = inclusionMode;
 3347            RequireDerivedKeys = requireDerivedKeys;
 3348        }
 49
 1750        protected internal override bool HasAsymmetricKey { get { return true; } }
 51
 52        public X509KeyIdentifierClauseType X509ReferenceStyle
 53        {
 54            get
 55            {
 856                return _x509ReferenceStyle;
 57            }
 58            set
 59            {
 3360                X509SecurityTokenReferenceStyleHelper.Validate(value);
 3361                _x509ReferenceStyle = value;
 3362            }
 63        }
 64
 8165        protected internal override bool SupportsClientAuthentication { get { return true; } }
 066        protected internal override bool SupportsServerAuthentication { get { return true; } }
 8167        protected internal override bool SupportsClientWindowsIdentity { get { return true; } }
 68
 69        protected override SecurityTokenParameters CloneCore()
 70        {
 30871            return new X509SecurityTokenParameters(this);
 72        }
 73
 74        protected internal override SecurityKeyIdentifierClause CreateKeyIdentifierClause(SecurityToken token, SecurityT
 75        {
 076            SecurityKeyIdentifierClause result = null;
 77
 078            switch (_x509ReferenceStyle)
 79            {
 80                default:
 81                case X509KeyIdentifierClauseType.Any:
 082                    if (referenceStyle == SecurityTokenReferenceStyle.External)
 83                    {
 084                        if (token is X509SecurityToken x509Token)
 85                        {
 086                            if (X509SubjectKeyIdentifierClause.TryCreateFrom(x509Token.Certificate, out X509SubjectKeyId
 87                            {
 088                                result = x509KeyIdentifierClause;
 89                            }
 90                        }
 91                        else
 92                        {
 093                            if (token is X509WindowsSecurityToken windowsX509Token)
 94                            {
 095                                if (X509SubjectKeyIdentifierClause.TryCreateFrom(windowsX509Token.Certificate, out X509S
 96                                {
 097                                    result = x509KeyIdentifierClause;
 98                                }
 99                            }
 100                        }
 101
 0102                        if (result == null)
 103                        {
 0104                            result = token.CreateKeyIdentifierClause<X509IssuerSerialKeyIdentifierClause>();
 105                        }
 106
 0107                        if (result == null)
 108                        {
 0109                            result = token.CreateKeyIdentifierClause<X509ThumbprintKeyIdentifierClause>();
 110                        }
 111                    }
 112                    else
 113                    {
 0114                        result = token.CreateKeyIdentifierClause<LocalIdKeyIdentifierClause>();
 115                    }
 116
 0117                    break;
 118                case X509KeyIdentifierClauseType.Thumbprint:
 0119                    result = CreateKeyIdentifierClause<X509ThumbprintKeyIdentifierClause, LocalIdKeyIdentifierClause>(to
 0120                    break;
 121                case X509KeyIdentifierClauseType.SubjectKeyIdentifier:
 0122                    result = CreateKeyIdentifierClause<X509SubjectKeyIdentifierClause, LocalIdKeyIdentifierClause>(token
 0123                    break;
 124                case X509KeyIdentifierClauseType.IssuerSerial:
 0125                    result = CreateKeyIdentifierClause<X509IssuerSerialKeyIdentifierClause, LocalIdKeyIdentifierClause>(
 0126                    break;
 127                case X509KeyIdentifierClauseType.RawDataKeyIdentifier:
 0128                    result = CreateKeyIdentifierClause<X509RawDataKeyIdentifierClause, LocalIdKeyIdentifierClause>(token
 129                    break;
 130            }
 131
 0132            return result;
 133        }
 134
 135        protected internal override void InitializeSecurityTokenRequirement(SecurityTokenRequirement requirement)
 136        {
 11137            requirement.TokenType = SecurityTokenTypes.X509Certificate;
 11138            requirement.RequireCryptographicToken = true;
 11139            requirement.KeyType = SecurityKeyType.AsymmetricKey;
 11140        }
 141
 142        public override string ToString()
 143        {
 0144            StringBuilder sb = new StringBuilder();
 0145            sb.AppendLine(base.ToString());
 146
 0147            sb.Append(string.Format(CultureInfo.InvariantCulture, "X509ReferenceStyle: {0}", _x509ReferenceStyle.ToStrin
 148
 0149            return sb.ToString();
 150        }
 151    }
 152}