File: System\ServiceModel\Security\Tokens\SupportingTokenParameters.cs
Web Access
Project: src\src\System.ServiceModel.Primitives\src\System.ServiceModel.Primitives.csproj (System.ServiceModel.Primitives)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
 
using System.Collections.ObjectModel;
using System.Globalization;
using System.Text;
 
namespace System.ServiceModel.Security.Tokens
{
    public class SupportingTokenParameters
    {
        private Collection<SecurityTokenParameters> _signedEndorsing = new Collection<SecurityTokenParameters>();
 
        private SupportingTokenParameters(SupportingTokenParameters other)
        {
            if (other == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(other));
            }
 
            foreach (SecurityTokenParameters p in other.Signed)
            {
                Signed.Add((SecurityTokenParameters)p.Clone());
            }
 
            foreach (SecurityTokenParameters p in other.SignedEncrypted)
            {
                SignedEncrypted.Add((SecurityTokenParameters)p.Clone());
            }
 
            foreach (SecurityTokenParameters p in other.Endorsing)
            {
                Endorsing.Add((SecurityTokenParameters)p.Clone());
            }
 
            foreach (SecurityTokenParameters p in other._signedEndorsing)
            {
                _signedEndorsing.Add((SecurityTokenParameters)p.Clone());
            }
        }
 
        public SupportingTokenParameters()
        {
            // empty
        }
 
        public Collection<SecurityTokenParameters> Endorsing { get; } = new Collection<SecurityTokenParameters>();
 
        public Collection<SecurityTokenParameters> SignedEndorsing
        {
            get
            {
                return _signedEndorsing;
            }
        }
 
        public Collection<SecurityTokenParameters> Signed { get; } = new Collection<SecurityTokenParameters>();
 
        public Collection<SecurityTokenParameters> SignedEncrypted { get; } = new Collection<SecurityTokenParameters>();
 
        public void SetKeyDerivation(bool requireDerivedKeys)
        {
            foreach (SecurityTokenParameters t in Endorsing)
            {
                if (t.HasAsymmetricKey)
                {
                    t.RequireDerivedKeys = false;
                }
                else
                {
                    t.RequireDerivedKeys = requireDerivedKeys;
                }
            }
            foreach (SecurityTokenParameters t in _signedEndorsing)
            {
                if (t.HasAsymmetricKey)
                {
                    t.RequireDerivedKeys = false;
                }
                else
                {
                    t.RequireDerivedKeys = requireDerivedKeys;
                }
            }
        }
 
        internal bool IsSetKeyDerivation(bool requireDerivedKeys)
        {
            foreach (SecurityTokenParameters t in Endorsing)
            {
                if (t.RequireDerivedKeys != requireDerivedKeys)
                {
                    return false;
                }
            }
 
            foreach (SecurityTokenParameters t in _signedEndorsing)
            {
                if (t.RequireDerivedKeys != requireDerivedKeys)
                {
                    return false;
                }
            }
 
            return true;
        }
 
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            int k;
 
            if (Endorsing.Count == 0)
            {
                sb.AppendLine("No endorsing tokens.");
            }
            else
            {
                for (k = 0; k < Endorsing.Count; k++)
                {
                    sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Endorsing[{0}]", k.ToString(CultureInfo.InvariantCulture)));
                    sb.AppendLine("  " + Endorsing[k].ToString().Trim().Replace("\n", "\n  "));
                }
            }
 
            if (Signed.Count == 0)
            {
                sb.AppendLine("No signed tokens.");
            }
            else
            {
                for (k = 0; k < Signed.Count; k++)
                {
                    sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Signed[{0}]", k.ToString(CultureInfo.InvariantCulture)));
                    sb.AppendLine("  " + Signed[k].ToString().Trim().Replace("\n", "\n  "));
                }
            }
 
            if (SignedEncrypted.Count == 0)
            {
                sb.AppendLine("No signed encrypted tokens.");
            }
            else
            {
                for (k = 0; k < SignedEncrypted.Count; k++)
                {
                    sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "SignedEncrypted[{0}]", k.ToString(CultureInfo.InvariantCulture)));
                    sb.AppendLine("  " + SignedEncrypted[k].ToString().Trim().Replace("\n", "\n  "));
                }
            }
 
            if (_signedEndorsing.Count == 0)
            {
                sb.AppendLine("No signed endorsing tokens.");
            }
            else
            {
                for (k = 0; k < _signedEndorsing.Count; k++)
                {
                    sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "SignedEndorsing[{0}]", k.ToString(CultureInfo.InvariantCulture)));
                    sb.AppendLine("  " + _signedEndorsing[k].ToString().Trim().Replace("\n", "\n  "));
                }
            }
 
            return sb.ToString().Trim();
        }
 
        public SupportingTokenParameters Clone()
        {
            SupportingTokenParameters parameters = CloneCore();
            if (parameters == null || parameters.GetType() != GetType())
            {
            }
 
            return parameters;
        }
 
        protected virtual SupportingTokenParameters CloneCore()
        {
            return new SupportingTokenParameters(this);
        }
 
        internal bool IsEmpty()
        {
            return Signed.Count == 0 && SignedEncrypted.Count == 0 && Endorsing.Count == 0 && _signedEndorsing.Count == 0;
        }
    }
}