< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Security.SecurityVersion
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/SecurityVersion.cs
Line coverage
62%
Covered lines: 45
Uncovered lines: 27
Coverable lines: 72
Total lines: 228
Line coverage: 62.5%
Branch coverage
25%
Covered branches: 3
Total branches: 12
Branch coverage: 25%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/SecurityVersion.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.Xml;
 6using CoreWCF.Channels;
 7using CoreWCF.Description;
 8using ISignatureValueSecurityElement = CoreWCF.IdentityModel.ISignatureValueSecurityElement;
 9
 10namespace CoreWCF.Security
 11{
 12    public abstract class SecurityVersion
 13    {
 914        internal SecurityVersion(XmlDictionaryString headerName, XmlDictionaryString headerNamespace, XmlDictionaryStrin
 15        {
 916            HeaderName = headerName;
 917            HeaderNamespace = headerNamespace;
 918            HeaderPrefix = headerPrefix;
 919        }
 20
 20021        internal XmlDictionaryString HeaderName { get; }
 22
 33723        internal XmlDictionaryString HeaderNamespace { get; }
 24
 6325        internal XmlDictionaryString HeaderPrefix { get; }
 26
 27        internal abstract XmlDictionaryString FailedAuthenticationFaultCode
 28        {
 29            get;
 30        }
 31
 32        internal abstract XmlDictionaryString InvalidSecurityFaultCode
 33        {
 34            get;
 35        }
 45336        public static SecurityVersion WSSecurity10 => SecurityVersion10.Instance;
 37
 38
 45039        public static SecurityVersion WSSecurity11 => SecurityVersion11.Instance;
 40
 3841        internal static SecurityVersion Default => WSSecurity11;
 42
 43        internal abstract ReceiveSecurityHeader CreateReceiveSecurityHeader(Message message,
 44            string actor, bool mustUnderstand, bool relay,
 45            SecurityStandardsManager standardsManager,
 46            SecurityAlgorithmSuite algorithmSuite,
 47            MessageDirection direction,
 48            int headerIndex);
 49
 50        internal abstract SendSecurityHeader CreateSendSecurityHeader(Message message,
 51            string actor, bool mustUnderstand, bool relay,
 52            SecurityStandardsManager standardsManager,
 53            SecurityAlgorithmSuite algorithmSuite,
 54            MessageDirection direction);
 55
 56        internal bool DoesMessageContainSecurityHeader(Message message)
 57        {
 2358            return message.Headers.FindHeader(HeaderName.Value, HeaderNamespace.Value) >= 0;
 59        }
 60
 61        internal int FindIndexOfSecurityHeader(Message message, string[] actors)
 62        {
 2063            return message.Headers.FindHeader(HeaderName.Value, HeaderNamespace.Value, actors);
 64        }
 65
 66        internal virtual bool IsReaderAtSignatureConfirmation(XmlDictionaryReader reader)
 67        {
 668            return false;
 69        }
 70
 71        // The security always look for Empty soap role.  If not found, we will also look for Ultimate actors (next incl
 72        // In the future, till we support intermediary scenario, we should refactor this api to do not take actor parame
 73        internal ReceiveSecurityHeader TryCreateReceiveSecurityHeader(Message message,
 74            string actor,
 75            SecurityStandardsManager standardsManager,
 76            SecurityAlgorithmSuite algorithmSuite, MessageDirection direction)
 77        {
 9478            int headerIndex = message.Headers.FindHeader(HeaderName.Value, HeaderNamespace.Value, actor);
 9479            if (headerIndex < 0 && string.IsNullOrEmpty(actor))
 80            {
 081                headerIndex = message.Headers.FindHeader(HeaderName.Value, HeaderNamespace.Value, message.Version.Envelo
 82            }
 83
 9484            if (headerIndex < 0)
 85            {
 086                return null;
 87            }
 9488            MessageHeaderInfo headerInfo = message.Headers[headerIndex];
 9489            return CreateReceiveSecurityHeader(message,
 9490                headerInfo.Actor, headerInfo.MustUnderstand, headerInfo.Relay,
 9491                standardsManager, algorithmSuite,
 9492                direction, headerIndex);
 93        }
 94
 95        internal virtual void WriteSignatureConfirmation(XmlDictionaryWriter writer, string id, byte[] signatureConfirma
 96        {
 097            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
 098                SR.Format(SR.SignatureConfirmationNotSupported)));
 99        }
 100
 101        internal void WriteStartHeader(XmlDictionaryWriter writer)
 102        {
 63103            writer.WriteStartElement(HeaderPrefix.Value, HeaderName, HeaderNamespace);
 63104        }
 105
 106        internal virtual ISignatureValueSecurityElement ReadSignatureConfirmation(XmlDictionaryReader reader)
 107        {
 0108            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.SignatureConfirma
 109        }
 110
 111        private class SecurityVersion10 : SecurityVersion
 112        {
 9113            protected SecurityVersion10() : base(XD.SecurityJan2004Dictionary.Security, XD.SecurityJan2004Dictionary.Nam
 114            {
 9115            }
 116
 457117            public static SecurityVersion10 Instance { get; } = new SecurityVersion10();
 118
 119            internal override SendSecurityHeader CreateSendSecurityHeader(Message message,
 120                string actor, bool mustUnderstand, bool relay,
 121                SecurityStandardsManager standardsManager,
 122                SecurityAlgorithmSuite algorithmSuite,
 123                MessageDirection direction)
 124            {
 5125                return new WSSecurityOneDotZeroSendSecurityHeader(message, actor, mustUnderstand, relay, standardsManage
 126            }
 127
 128            internal override ReceiveSecurityHeader CreateReceiveSecurityHeader(Message message,
 129                string actor, bool mustUnderstand, bool relay,
 130                SecurityStandardsManager standardsManager,
 131                SecurityAlgorithmSuite algorithmSuite,
 132                MessageDirection direction,
 133                int headerIndex)
 134            {
 6135                return new WSSecurityOneDotZeroReceiveSecurityHeader(
 6136                    message,
 6137                    actor, mustUnderstand, relay,
 6138                    standardsManager,
 6139                    algorithmSuite, headerIndex, direction);
 140            }
 141
 142            public override string ToString()
 143            {
 0144                return "WSSecurity10";
 145            }
 146
 47147            internal override XmlDictionaryString FailedAuthenticationFaultCode => XD.SecurityJan2004Dictionary.FailedAu
 148
 22149            internal override XmlDictionaryString InvalidSecurityFaultCode => XD.SecurityJan2004Dictionary.InvalidSecuri
 150        }
 151
 152        private sealed class SecurityVersion11 : SecurityVersion10
 153        {
 154            private SecurityVersion11()
 5155                : base()
 156            {
 5157            }
 158
 455159            public static new SecurityVersion11 Instance { get; } = new SecurityVersion11();
 160
 0161            internal bool SupportsSignatureConfirmation => true;
 162
 163            internal override ReceiveSecurityHeader CreateReceiveSecurityHeader(Message message,
 164                string actor, bool mustUnderstand, bool relay,
 165                SecurityStandardsManager standardsManager,
 166                SecurityAlgorithmSuite algorithmSuite,
 167                MessageDirection direction,
 168                int headerIndex)
 169            {
 88170                return new WSSecurityOneDotOneReceiveSecurityHeader(
 88171                    message,
 88172                    actor, mustUnderstand, relay,
 88173                    standardsManager,
 88174                    algorithmSuite, headerIndex, direction);
 175            }
 176
 177            internal override SendSecurityHeader CreateSendSecurityHeader(Message message,
 178                string actor, bool mustUnderstand, bool relay,
 179                SecurityStandardsManager standardsManager,
 180                SecurityAlgorithmSuite algorithmSuite, MessageDirection direction)
 181            {
 58182                return new WSSecurityOneDotOneSendSecurityHeader(message, actor, mustUnderstand, relay, standardsManager
 183            }
 184
 185            internal override bool IsReaderAtSignatureConfirmation(XmlDictionaryReader reader)
 186            {
 88187                return reader.IsStartElement(XD.SecurityXXX2005Dictionary.SignatureConfirmation, XD.SecurityXXX2005Dicti
 188            }
 189
 190            internal override ISignatureValueSecurityElement ReadSignatureConfirmation(XmlDictionaryReader reader)
 191            {
 0192                reader.MoveToStartElement(XD.SecurityXXX2005Dictionary.SignatureConfirmation, XD.SecurityXXX2005Dictiona
 0193                bool isEmptyElement = reader.IsEmptyElement;
 0194                string id = XmlHelper.GetRequiredNonEmptyAttribute(reader, XD.UtilityDictionary.IdAttribute, XD.UtilityD
 0195                byte[] signatureValue = XmlHelper.GetRequiredBase64Attribute(reader, XD.SecurityXXX2005Dictionary.ValueA
 0196                reader.ReadStartElement();
 0197                if (!isEmptyElement)
 198                {
 0199                    reader.ReadEndElement();
 200                }
 0201                return new SignatureConfirmationElement(id, signatureValue, this);
 202            }
 203
 204            internal override void WriteSignatureConfirmation(XmlDictionaryWriter writer, string id, byte[] signature)
 205            {
 0206                if (id == null)
 207                {
 0208                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(id));
 209                }
 0210                if (signature == null)
 211                {
 0212                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(signature));
 213                }
 0214                writer.WriteStartElement(XD.SecurityXXX2005Dictionary.Prefix.Value, XD.SecurityXXX2005Dictionary.Signatu
 0215                writer.WriteAttributeString(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.IdAttribute, XD.Util
 0216                writer.WriteStartAttribute(XD.SecurityXXX2005Dictionary.ValueAttribute, null);
 0217                writer.WriteBase64(signature, 0, signature.Length);
 0218                writer.WriteEndAttribute();
 0219                writer.WriteEndElement();
 0220            }
 221
 222            public override string ToString()
 223            {
 0224                return "WSSecurity11";
 225            }
 226        }
 227    }
 228}

Methods/Properties

.ctor(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString)
HeaderName()
HeaderNamespace()
HeaderPrefix()
WSSecurity10()
WSSecurity11()
Default()
DoesMessageContainSecurityHeader(CoreWCF.Channels.Message)
FindIndexOfSecurityHeader(CoreWCF.Channels.Message,System.String[])
IsReaderAtSignatureConfirmation(System.Xml.XmlDictionaryReader)
TryCreateReceiveSecurityHeader(CoreWCF.Channels.Message,System.String,CoreWCF.Security.SecurityStandardsManager,CoreWCF.Security.SecurityAlgorithmSuite,CoreWCF.Description.MessageDirection)
WriteSignatureConfirmation(System.Xml.XmlDictionaryWriter,System.String,System.Byte[])
WriteStartHeader(System.Xml.XmlDictionaryWriter)
ReadSignatureConfirmation(System.Xml.XmlDictionaryReader)
.ctor()
Instance()
CreateSendSecurityHeader(CoreWCF.Channels.Message,System.String,System.Boolean,System.Boolean,CoreWCF.Security.SecurityStandardsManager,CoreWCF.Security.SecurityAlgorithmSuite,CoreWCF.Description.MessageDirection)
CreateReceiveSecurityHeader(CoreWCF.Channels.Message,System.String,System.Boolean,System.Boolean,CoreWCF.Security.SecurityStandardsManager,CoreWCF.Security.SecurityAlgorithmSuite,CoreWCF.Description.MessageDirection,System.Int32)
ToString()
FailedAuthenticationFaultCode()
InvalidSecurityFaultCode()
.ctor()
Instance()
SupportsSignatureConfirmation()
CreateReceiveSecurityHeader(CoreWCF.Channels.Message,System.String,System.Boolean,System.Boolean,CoreWCF.Security.SecurityStandardsManager,CoreWCF.Security.SecurityAlgorithmSuite,CoreWCF.Description.MessageDirection,System.Int32)
CreateSendSecurityHeader(CoreWCF.Channels.Message,System.String,System.Boolean,System.Boolean,CoreWCF.Security.SecurityStandardsManager,CoreWCF.Security.SecurityAlgorithmSuite,CoreWCF.Description.MessageDirection)
IsReaderAtSignatureConfirmation(System.Xml.XmlDictionaryReader)
ReadSignatureConfirmation(System.Xml.XmlDictionaryReader)
WriteSignatureConfirmation(System.Xml.XmlDictionaryWriter,System.String,System.Byte[])
ToString()