< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Security.SecurityStandardsManager
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/SecurityStandardsManager.cs
Line coverage
74%
Covered lines: 46
Uncovered lines: 16
Coverable lines: 62
Total lines: 191
Line coverage: 74.1%
Branch coverage
58%
Covered branches: 21
Total branches: 36
Branch coverage: 58.3%
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%11100%
.ctor(...)75%121292.85%
TryCreateKeyIdentifierClauseFromTokenXml(...)100%110%
CreateKeyIdentifierClauseFromTokenXml(...)100%110%
CreateSendSecurityHeader(...)100%11100%
TryCreateReceiveSecurityHeader(...)100%11100%
DoesMessageContainSecurityHeader(...)100%11100%
TryGetSecurityContextIds(...)64.28%141473.91%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/SecurityStandardsManager.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.Collections.Generic;
 6using System.Runtime.CompilerServices;
 7using System.Xml;
 8using CoreWCF.Channels;
 9using CoreWCF.Description;
 10using CoreWCF.IdentityModel;
 11using CoreWCF.IdentityModel.Selectors;
 12using CoreWCF.Security.Tokens;
 13
 14namespace CoreWCF.Security
 15{
 16    internal class SecurityStandardsManager
 17    {
 18        private static SecurityStandardsManager s_instance;
 19        private WSSecurityTokenSerializer _wsSecurityTokenSerializer;
 20
 21        [MethodImpl(MethodImplOptions.NoInlining)]
 22        public SecurityStandardsManager()
 323            : this(WSSecurityTokenSerializer.DefaultInstance)
 24        {
 325        }
 26
 27        public SecurityStandardsManager(SecurityTokenSerializer tokenSerializer)
 328            : this(MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolic
 29        {
 330        }
 31
 13132        public SecurityStandardsManager(MessageSecurityVersion messageSecurityVersion, SecurityTokenSerializer tokenSeri
 33        {
 13134            MessageSecurityVersion = messageSecurityVersion ?? throw DiagnosticUtility.ExceptionUtility.ThrowHelperError
 13135            SecurityTokenSerializer = tokenSerializer ?? throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNul
 13136            if (messageSecurityVersion.SecureConversationVersion == SecureConversationVersion.WSSecureConversation13)
 37            {
 6738                SecureConversationDriver = new WSSecureConversationDec2005.DriverDec2005();
 39            }
 40            else
 41            {
 6442                SecureConversationDriver = new WSSecureConversationFeb2005.DriverFeb2005();
 43            }
 44
 13145            if (SecurityVersion == SecurityVersion.WSSecurity10 || SecurityVersion == SecurityVersion.WSSecurity11)
 46            {
 13147                IdManager = WSSecurityJan2004.IdManager.Instance;
 48            }
 49            else
 50            {
 051                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(message
 52            }
 53
 13154            WSUtilitySpecificationVersion = WSUtilitySpecificationVersion.Default;
 13155            if (messageSecurityVersion.MessageSecurityTokenVersion.TrustVersion == TrustVersion.WSTrust13)
 56            {
 6757                TrustDriver = new WSTrustDec2005.DriverDec2005(this);
 58            }
 59            else
 60            {
 6461                TrustDriver = new WSTrustFeb2005.DriverFeb2005(this);
 62            }
 6463        }
 64
 65        public static SecurityStandardsManager DefaultInstance
 66        {
 67            get
 68            {
 5969                if (s_instance == null)
 70                {
 371                    s_instance = new SecurityStandardsManager();
 72                }
 73
 5974                return s_instance;
 75            }
 76        }
 77
 78        public SecurityVersion SecurityVersion
 79        {
 71280            get { return MessageSecurityVersion?.SecurityVersion; }
 81        }
 82
 78783        public MessageSecurityVersion MessageSecurityVersion { get; }
 84
 85        public TrustVersion TrustVersion
 86        {
 087            get { return MessageSecurityVersion?.TrustVersion; }
 88        }
 89
 17790        internal SecurityTokenSerializer SecurityTokenSerializer { get; }
 91
 34592        internal WSUtilitySpecificationVersion WSUtilitySpecificationVersion { get; }
 93
 094        internal SignatureTargetIdManager IdManager { get; }
 95
 25596        internal SecureConversationDriver SecureConversationDriver { get; }
 97
 21098        internal TrustDriver TrustDriver { get; }
 99
 100        private WSSecurityTokenSerializer WSSecurityTokenSerializer
 101        {
 102            get
 103            {
 0104                if (_wsSecurityTokenSerializer == null)
 105                {
 0106                    if (!(SecurityTokenSerializer is WSSecurityTokenSerializer wsSecurityTokenSerializer))
 107                    {
 0108                        wsSecurityTokenSerializer = new WSSecurityTokenSerializer(SecurityVersion);
 109                    }
 110
 0111                    _wsSecurityTokenSerializer = wsSecurityTokenSerializer;
 112                }
 113
 0114                return _wsSecurityTokenSerializer;
 115            }
 116        }
 117
 118        internal bool TryCreateKeyIdentifierClauseFromTokenXml(XmlElement element, SecurityTokenReferenceStyle tokenRefe
 119        {
 0120            return WSSecurityTokenSerializer.TryCreateKeyIdentifierClauseFromTokenXml(element, tokenReferenceStyle, out 
 121        }
 122
 123        internal SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXml(XmlElement element, SecurityTokenRefe
 124        {
 0125            return WSSecurityTokenSerializer.CreateKeyIdentifierClauseFromTokenXml(element, tokenReferenceStyle);
 126        }
 127
 128        internal SendSecurityHeader CreateSendSecurityHeader(Message message,
 129            string actor, bool mustUnderstand, bool relay,
 130            SecurityAlgorithmSuite algorithmSuite, MessageDirection direction)
 131        {
 63132            return SecurityVersion.CreateSendSecurityHeader(message, actor, mustUnderstand, relay, this, algorithmSuite,
 133        }
 134
 135        internal ReceiveSecurityHeader TryCreateReceiveSecurityHeader(Message message,
 136            string actor,
 137            SecurityAlgorithmSuite algorithmSuite, MessageDirection direction)
 138        {
 94139            return SecurityVersion.TryCreateReceiveSecurityHeader(message, actor, this, algorithmSuite, direction);
 140        }
 141
 142        internal bool DoesMessageContainSecurityHeader(Message message)
 143        {
 23144            return SecurityVersion.DoesMessageContainSecurityHeader(message);
 145        }
 146
 147        internal bool TryGetSecurityContextIds(Message message, string[] actors, bool isStrictMode, ICollection<UniqueId
 148        {
 20149            if (results == null)
 150            {
 0151                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(results));
 152            }
 20153            SecureConversationDriver driver = SecureConversationDriver;
 20154            int securityHeaderIndex = SecurityVersion.FindIndexOfSecurityHeader(message, actors);
 20155            if (securityHeaderIndex < 0)
 156            {
 0157                return false;
 158            }
 20159            bool addedContextIds = false;
 20160            using (XmlDictionaryReader reader = message.Headers.GetReaderAtHeader(securityHeaderIndex))
 161            {
 20162                if (!reader.IsStartElement())
 163                {
 0164                    return false;
 165                }
 20166                if (reader.IsEmptyElement)
 167                {
 0168                    return false;
 169                }
 20170                reader.ReadStartElement();
 40171                while (reader.IsStartElement())
 172                {
 40173                    if (driver.IsAtSecurityContextToken(reader))
 174                    {
 20175                        results.Add(driver.GetSecurityContextTokenId(reader));
 20176                        addedContextIds = true;
 20177                        if (isStrictMode)
 178                        {
 20179                            break;
 180                        }
 181                    }
 182                    else
 183                    {
 20184                        reader.Skip();
 185                    }
 186                }
 0187            }
 20188            return addedContextIds;
 0189        }
 190    }
 191}